}\n */\nconst getI18nBundle = async packageName => {\n\tif (customGetI18nBundle) {\n\t\treturn customGetI18nBundle(packageName);\n\t}\n\n\tawait fetchI18nBundle(packageName);\n\treturn getI18nBundleSync(packageName);\n};\n\nexport {\n\tregisterI18nLoader,\n\tgetI18nBundle,\n\tregisterCustomI18nBundleGetter,\n};\n","const ua = navigator.userAgent;\nconst touch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\nconst ie = /(msie|trident)/i.test(ua);\nconst chrome = !ie && /(Chrome|CriOS)/.test(ua);\nconst safari = !ie && !chrome && /(Version|PhantomJS)\\/(\\d+\\.\\d+).*Safari/.test(ua);\nconst webkit = !ie && /webkit/.test(ua);\nconst windows = navigator.platform.indexOf(\"Win\") !== -1;\nconst iOS = navigator.platform.match(/iPhone|iPad|iPod/) || (navigator.userAgent.match(/Mac/) && \"ontouchend\" in document);\nconst android = !windows && /Android/.test(ua);\nconst androidPhone = android && /(?=android)(?=.*mobile)/i.test(ua);\nconst ipad = /ipad/i.test(ua) || (/Macintosh/i.test(ua) && \"ontouchend\" in document);\n// With iOS 13 the string 'iPad' was removed from the user agent string through a browser setting, which is applied on all sites by default:\n// \"Request Desktop Website -> All websites\" (for more infos see: https://forums.developer.apple.com/thread/119186).\n// Therefore the OS is detected as MACINTOSH instead of iOS and the device is a tablet if the Device.support.touch is true.\n\nlet windowsVersion;\nlet webkitVersion;\nlet tablet;\n\nconst isWindows8OrAbove = () => {\n\tif (!windows) {\n\t\treturn false;\n\t}\n\n\tif (windowsVersion === undefined) {\n\t\tconst matches = ua.match(/Windows NT (\\d+).(\\d)/);\n\t\twindowsVersion = matches ? parseFloat(matches[1]) : 0;\n\t}\n\n\treturn windowsVersion >= 8;\n};\n\nconst isWebkit537OrAbove = () => {\n\tif (!webkit) {\n\t\treturn false;\n\t}\n\n\tif (webkitVersion === undefined) {\n\t\tconst matches = ua.match(/(webkit)[ /]([\\w.]+)/);\n\t\twebkitVersion = matches ? parseFloat(matches[1]) : 0;\n\t}\n\n\treturn webkitVersion >= 537.10;\n};\n\nconst detectTablet = () => {\n\tif (tablet !== undefined) {\n\t\treturn;\n\t}\n\n\tif (ipad) {\n\t\ttablet = true;\n\t\treturn;\n\t}\n\n\tif (touch) {\n\t\tif (isWindows8OrAbove()) {\n\t\t\ttablet = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (chrome && android) {\n\t\t\ttablet = !/Mobile Safari\\/[.0-9]+/.test(ua);\n\t\t\treturn;\n\t\t}\n\n\t\tlet densityFactor = window.devicePixelRatio ? window.devicePixelRatio : 1; // may be undefined in Windows Phone devices\n\t\tif (android && isWebkit537OrAbove()) {\n\t\t\tdensityFactor = 1;\n\t\t}\n\n\t\ttablet = (Math.min(window.screen.width / densityFactor, window.screen.height / densityFactor) >= 600);\n\t\treturn;\n\t}\n\n\ttablet = (ie && ua.indexOf(\"Touch\") !== -1) || (android && !androidPhone);\n};\n\nconst supportsTouch = () => touch;\nconst isIE = () => ie;\nconst isSafari = () => safari;\nconst isChrome = () => chrome;\n\nconst isTablet = () => {\n\tdetectTablet();\n\treturn (touch || isWindows8OrAbove()) && tablet;\n};\n\nconst isPhone = () => {\n\tdetectTablet();\n\treturn touch && !tablet;\n};\n\nconst isDesktop = () => {\n\treturn (!isTablet() && !isPhone()) || isWindows8OrAbove();\n};\n\nconst isCombi = () => {\n\treturn isTablet() && isDesktop();\n};\n\nconst isIOS = () => {\n\treturn iOS;\n};\n\nconst isAndroid = () => {\n\treturn android || androidPhone;\n};\n\nexport {\n\tsupportsTouch,\n\tisIE,\n\tisSafari,\n\tisChrome,\n\tisPhone,\n\tisTablet,\n\tisDesktop,\n\tisCombi,\n\tisIOS,\n\tisAndroid,\n};\n","import { getSlotName } from \"./SlotsHelper.js\";\n\nconst isDefaultSlotProvided = element => {\n\treturn Array.from(element.childNodes).filter(node => {\n\t\treturn node.nodeType !== Node.COMMENT_NODE\n\t\t&& getSlotName(node) === \"default\"\n\t\t&& (node.nodeType !== Node.TEXT_NODE || node.nodeValue.trim().length !== 0);\n\t}).length > 0;\n};\n\nexport default isDefaultSlotProvided;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.ButtonDesign.prototype\n * @public\n */\nconst ButtonTypes = {\n\t/**\n\t * default type (no special styling)\n\t * @public\n\t * @type {Default}\n\t */\n\tDefault: \"Default\",\n\n\t/**\n\t * accept type (green button)\n\t * @public\n\t * @type {Positive}\n\t */\n\tPositive: \"Positive\",\n\n\t/**\n\t * reject style (red button)\n\t * @public\n\t * @type {Negative}\n\t */\n\tNegative: \"Negative\",\n\n\t/**\n\t * transparent type\n\t * @public\n\t * @type {Transparent}\n\t */\n\tTransparent: \"Transparent\",\n\n\t/**\n\t * emphasized type\n\t * @public\n\t * @type {Emphasized}\n\t */\n\tEmphasized: \"Emphasized\",\n\n\t/**\n\t * attention type\n\t * @public\n\t * @type {Attention}\n\t */\n\tAttention: \"Attention\",\n};\n\n/**\n * @class\n * Different types of Button.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.ButtonDesign\n * @public\n * @enum {string}\n */\nclass ButtonDesign extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ButtonTypes[value];\n\t}\n}\n\nButtonDesign.generateTypeAccessors(ButtonTypes);\n\nexport default ButtonDesign;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html` `;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-button-icon\" name=\"${ifDefined(context.icon)}\" accessible-role=\"${ifDefined(context.iconRole)}\" part=\"icon\" ?show-tooltip=${context.showIconTooltip}>${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block2 = (context, tags, suffix) => html`${ifDefined(context.buttonTypeText)}`;\n\n\nexport default block0;","/**\n * Supported icon collection names and aliases.\n *\n * Users might specify a collection, using both the key and the value in the following key-value pairs,\n * e.g the following pairs are completely exchangeable:\n * \"SAP-icons-TNT/actor\" and \"tnt/actor\", \"BusinessSuiteInAppSymbols/3d\" and \"business-suite/3d\",\n * \"SAP-icons-v5/accept\" and \"horizon/accept\".\n *\n * Note: technically, in the code we maintain the collections under the \"value\" name - \"tnt\", \"business-suite\",\n * SAP-icons-v5\" and \"SAP-icons\"(which does not have an alias).\n */\nconst IconCollectionsAlias = {\n\t\"SAP-icons-TNT\": \"tnt\",\n\t\"BusinessSuiteInAppSymbols\": \"business-suite\",\n\t\"horizon\": \"SAP-icons-v5\",\n};\n\nexport default IconCollectionsAlias;\n","import { getTheme, isThemeFamily } from \"./Theme.js\";\n\nconst IconCollectionConfiguration = new Map();\n\n/**\n * Sets the default icon collection (v4 or v5) per theme,\n * which will be applied in case icon collection is not specified.\n *\n * Note: by default SAP-icons-v5 is used in SAP Horizon and SAP-icons-v4 for all the rest.\n * @param {String} theme\n * @param {String} collectionName\n */\nconst setDefaultIconCollection = (theme, collectionName) => {\n\tif (collectionName === \"horizon\") {\n\t\tcollectionName = \"SAP-icons-v5\";\n\t}\n\n\tIconCollectionConfiguration.set(theme, collectionName);\n};\n\n/**\n * Returns the default icon collection (v4 or v5) for given theme,\n * that is configured.\n *\n * @param {String} theme\n * @returns {String}\n */\nconst getDefaultIconCollection = theme => {\n\treturn IconCollectionConfiguration.get(theme);\n};\n\n/**\n * Returns the effective icon collection that will be applied for icon web components\n * whenever namespace is not specified.\n * @returns {String}\n */\nconst getEffectiveDefaultIconCollection = () => {\n\tconst currentTheme = getTheme();\n\tconst currentThemeConfiguration = IconCollectionConfiguration.get(currentTheme);\n\n\tif (currentThemeConfiguration) {\n\t\treturn currentThemeConfiguration;\n\t}\n\n\treturn isThemeFamily(\"sap_horizon\") ? \"SAP-icons-v5\" : \"SAP-icons\";\n};\n\nexport {\n\tsetDefaultIconCollection,\n\tgetDefaultIconCollection,\n\tgetEffectiveDefaultIconCollection,\n};\n","import getSharedResource from \"../getSharedResource.js\";\nimport IconCollectionsAlias from \"../assets-meta/IconCollectionsAlias.js\";\nimport { getEffectiveDefaultIconCollection } from \"../config/Icons.js\";\n\nconst loaders = new Map();\nconst registry = getSharedResource(\"SVGIcons.registry\", new Map());\nconst iconCollectionPromises = getSharedResource(\"SVGIcons.promises\", new Map());\n\nconst ICON_NOT_FOUND = \"ICON_NOT_FOUND\";\n\n/**\n * @deprecated\n */\nconst registerIconBundle = async (collectionName, bundleData) => {\n\tthrow new Error(\"This method has been removed. Use `registerIconLoader` instead.\");\n};\n\nconst registerIconLoader = async (collectionName, loader) => {\n\tloaders.set(collectionName, loader);\n};\n\nconst _loadIconCollectionOnce = async collectionName => {\n\tif (!iconCollectionPromises.has(collectionName)) {\n\t\tif (!loaders.has(collectionName)) {\n\t\t\tthrow new Error(`No loader registered for the ${collectionName} icons collection. Probably you forgot to import the \"AllIcons.js\" module for the respective package.`);\n\t\t}\n\t\tconst loadIcons = loaders.get(collectionName);\n\t\ticonCollectionPromises.set(collectionName, loadIcons(collectionName));\n\t}\n\n\treturn iconCollectionPromises.get(collectionName);\n};\n\nconst _fillRegistry = bundleData => {\n\tObject.keys(bundleData.data).forEach(iconName => {\n\t\tconst iconData = bundleData.data[iconName];\n\n\t\tregisterIcon(iconName, {\n\t\t\tpathData: iconData.path,\n\t\t\tltr: iconData.ltr,\n\t\t\taccData: iconData.acc,\n\t\t\tcollection: bundleData.collection,\n\t\t\tpackageName: bundleData.packageName,\n\t\t });\n\t});\n};\n\n// set\nconst registerIcon = (name, { pathData, ltr, accData, collection, packageName } = {}) => { // eslint-disable-line\n\tif (!collection) {\n\t\tcollection = getEffectiveDefaultIconCollection();\n\t}\n\n\tconst key = `${collection}/${name}`;\n\tregistry.set(key, {\n\t\tpathData,\n\t\tltr,\n\t\taccData,\n\t\tpackageName,\n\t});\n};\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 || getEffectiveDefaultIconCollection();\n\n\t// Normalize collection name.\n\t// - resolve `SAP-icons-TNT` to `tnt`.\n\t// - resolve `BusinessSuiteInAppSymbols` to `business-suite`.\n\t// - resolve `horizon` to `SAP-icons-v5`,\n\t// Note: aliases can be made as a feature, if more collections need it or more aliases are needed.\n\tcollection = _normalizeCollection(collection);\n\tname = name.replace(\"icon-\", \"\");\n\n\tconst registryKey = `${collection}/${name}`;\n\treturn { name, collection, registryKey };\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\tlet iconData = ICON_NOT_FOUND;\n\ttry {\n\t\ticonData = await _loadIconCollectionOnce(collection);\n\t} catch (e) {\n\t\tconsole.error(e.message); /* eslint-disable-line */\n\t}\n\n\tif (iconData === ICON_NOT_FOUND) {\n\t\treturn iconData;\n\t}\n\n\tif (!registry.has(registryKey)) {\n\t\t// not filled by another await. many getters will await on the same loader, but fill only once\n\t\t_fillRegistry(iconData);\n\t}\n\treturn registry.get(registryKey);\n};\n\n// test page usage only\nconst _getRegisteredNames = async () => {\n\t// fetch one icon of each collection to trigger the bundle load\n\tawait getIconData(\"edit\");\n\tawait getIconData(\"tnt/arrow\");\n\tawait getIconData(\"business-suite/3d\");\n\treturn Array.from(registry.keys());\n};\n\nconst _normalizeCollection = collectionName => {\n\tif (IconCollectionsAlias[collectionName]) {\n\t\treturn IconCollectionsAlias[collectionName];\n\t}\n\n\treturn collectionName;\n};\n\nexport {\n\tregisterIconBundle,\n\tregisterIconLoader,\n\tgetIconData,\n\tgetIconDataSync,\n\tregisterIcon,\n\t_getRegisteredNames,\n};\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\nconst block1 = (context, tags, suffix) => svg`${ifDefined(context.effectiveAccessibleName)}`;\n\nconst blockSVG1 = (context, tags, suffix) => svg`${ context.hasIconTooltip ? block1(context, tags, suffix) : undefined }`;\n\nexport default block0;","export default {packageName:\"@ui5/webcomponents-theming\",fileName:\"themes/sap_fiori_3/parameters-bundle.css\",content:\":root{--sapThemeMetaData-Base-baseLib:{\\\"Path\\\":\\\"Base.baseLib.sap_fiori_3.css_variables\\\",\\\"PathPattern\\\":\\\"/%frameworkId%/%libId%/%themeId%/%fileId%.css\\\",\\\"Extends\\\":[\\\"sap_base_fiori\\\",\\\"baseTheme\\\"],\\\"Tags\\\":[\\\"Fiori_3\\\",\\\"LightColorScheme\\\"],\\\"FallbackThemeId\\\":\\\"sap_belize\\\",\\\"Engine\\\":{\\\"Name\\\":\\\"theming-engine\\\",\\\"Version\\\":\\\"1.69.2\\\"},\\\"Version\\\":{ \\\"Build\\\":\\\"11.1.38.20220405122918\\\",\\\"Source\\\":\\\"11.1.38\\\"}};--sapBrandColor:#0a6ed1;--sapHighlightColor:#0854a0;--sapBaseColor:#fff;--sapShellColor:#354a5f;--sapBackgroundColor:#f7f7f7;--sapFontFamily:\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontLightFamily:\\\"72-Light\\\",\\\"72-Lightfull\\\",\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontBoldFamily:\\\"72-Bold\\\",\\\"72-Boldfull\\\",\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontSemiboldFamily:\\\"72-Semibold\\\",\\\"72-Semiboldfull\\\",\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontSemiboldDuplexFamily:\\\"72-SemiboldDuplex\\\",\\\"72-SemiboldDuplexfull\\\",\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontBlackFamily:\\\"72Black\\\",\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontHeaderFamily:\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapFontSize:.875rem;--sapFontSmallSize:.75rem;--sapFontLargeSize:1rem;--sapFontHeader1Size:2.25rem;--sapFontHeader2Size:1.5rem;--sapFontHeader3Size:1.25rem;--sapFontHeader4Size:1.125rem;--sapFontHeader5Size:1rem;--sapFontHeader6Size:.875rem;--sapTextColor:#32363a;--sapLinkColor:#0a6ed1;--sapLink_Hover_Color:#0854a0;--sapLink_Active_Color:#0a6ed1;--sapLink_Visited_Color:#0a6ed1;--sapLink_InvertedColor:#d3e8fd;--sapLink_SubtleColor:#074888;--sapCompanyLogo:none;--sapBackgroundImage:none;--sapBackgroundImageOpacity:1.0;--sapBackgroundImageRepeat:false;--sapSelectedColor:#0854a0;--sapActiveColor:#0854a0;--sapHighlightTextColor:#fff;--sapTitleColor:#32363a;--sapNegativeColor:#b00;--sapCriticalColor:#df6e0c;--sapPositiveColor:#107e3e;--sapInformativeColor:#0a6ed1;--sapNeutralColor:#6a6d70;--sapNegativeElementColor:#b00;--sapCriticalElementColor:#df6e0c;--sapPositiveElementColor:#107e3e;--sapInformativeElementColor:#0a6ed1;--sapNeutralElementColor:#6a6d70;--sapNegativeTextColor:#b00;--sapPositiveTextColor:#107e3e;--sapCriticalTextColor:#df6e0c;--sapInformativeTextColor:#0a6ed1;--sapNeutralTextColor:#6a6d70;--sapNeutralBorderColor:#6a6d70;--sapErrorColor:#b00;--sapErrorBorderColor:#b00;--sapWarningColor:#df6e0c;--sapWarningBorderColor:#df6e0c;--sapSuccessColor:#107e3e;--sapSuccessBorderColor:#107e3e;--sapInformationColor:#0a6ed1;--sapInformationBorderColor:#0a6ed1;--sapErrorBackground:#ffebeb;--sapWarningBackground:#fef7f1;--sapSuccessBackground:#f1fdf6;--sapInformationBackground:#f5faff;--sapNeutralBackground:#f4f4f4;--sapIndicationColor_1:#800;--sapIndicationColor_1_Background:#800;--sapIndicationColor_1_BorderColor:#800;--sapIndicationColor_1_Hover_Background:#6f0000;--sapIndicationColor_1_Active_Background:#500;--sapIndicationColor_1_TextColor:#fff;--sapIndicationColor_2:#b00;--sapIndicationColor_2_Background:#b00;--sapIndicationColor_2_BorderColor:#b00;--sapIndicationColor_2_Hover_Background:#a20000;--sapIndicationColor_2_Active_Background:#800;--sapIndicationColor_2_TextColor:#fff;--sapIndicationColor_3:#df6e0c;--sapIndicationColor_3_Background:#df6e0c;--sapIndicationColor_3_BorderColor:#df6e0c;--sapIndicationColor_3_Hover_Background:#d0670b;--sapIndicationColor_3_Active_Background:#c2600a;--sapIndicationColor_3_TextColor:#fff;--sapIndicationColor_4:#107e3e;--sapIndicationColor_4_Background:#107e3e;--sapIndicationColor_4_BorderColor:#107e3e;--sapIndicationColor_4_Hover_Background:#0d6733;--sapIndicationColor_4_Active_Background:#0a5128;--sapIndicationColor_4_TextColor:#fff;--sapIndicationColor_5:#0a6ed1;--sapIndicationColor_5_Background:#0a6ed1;--sapIndicationColor_5_BorderColor:#0a6ed1;--sapIndicationColor_5_Hover_Background:#0961b9;--sapIndicationColor_5_Active_Background:#0854a0;--sapIndicationColor_5_TextColor:#fff;--sapIndicationColor_6:#0f828f;--sapIndicationColor_6_Background:#0f828f;--sapIndicationColor_6_BorderColor:#0f828f;--sapIndicationColor_6_Hover_Background:#0d6d78;--sapIndicationColor_6_Active_Background:#0a5861;--sapIndicationColor_6_TextColor:#fff;--sapIndicationColor_7:#925ace;--sapIndicationColor_7_Background:#925ace;--sapIndicationColor_7_BorderColor:#925ace;--sapIndicationColor_7_Hover_Background:#8546c8;--sapIndicationColor_7_Active_Background:#7838bd;--sapIndicationColor_7_TextColor:#fff;--sapIndicationColor_8:#c0399f;--sapIndicationColor_8_Background:#c0399f;--sapIndicationColor_8_BorderColor:#c0399f;--sapIndicationColor_8_Hover_Background:#ac338f;--sapIndicationColor_8_Active_Background:#992d7e;--sapIndicationColor_8_TextColor:#fff;--sapElement_LineHeight:2.75rem;--sapElement_Height:2.25rem;--sapElement_BorderWidth:.0625rem;--sapElement_BorderCornerRadius:.25rem;--sapElement_Compact_LineHeight:2rem;--sapElement_Compact_Height:1.625rem;--sapElement_Condensed_LineHeight:1.5rem;--sapElement_Condensed_Height:1.375rem;--sapContent_LineHeight:1.4;--sapContent_IconHeight:1rem;--sapContent_IconColor:#0854a0;--sapContent_ContrastIconColor:#fff;--sapContent_NonInteractiveIconColor:#6a6d70;--sapContent_MarkerIconColor:#286eb4;--sapContent_MarkerTextColor:#0e7581;--sapContent_MeasureIndicatorColor:#89919a;--sapContent_Selected_MeasureIndicatorColor:#89919a;--sapContent_ImagePlaceholderBackground:#ccc;--sapContent_ImagePlaceholderForegroundColor:#fff;--sapContent_RatedColor:#d08014;--sapContent_UnratedColor:#89919a;--sapContent_BusyColor:#0854a0;--sapContent_FocusColor:#000;--sapContent_FocusStyle:dotted;--sapContent_FocusWidth:.0625rem;--sapContent_ContrastFocusColor:#fff;--sapContent_ShadowColor:#000;--sapContent_ContrastShadowColor:#fff;--sapContent_Shadow0:0 0 0 0.0625rem rgba(0,0,0,0.1),0 0.125rem 0.5rem 0 rgba(0,0,0,0.1);--sapContent_Shadow1:0 0 0 0.0625rem rgba(0,0,0,0.42),0 0.125rem 0.5rem 0 rgba(0,0,0,0.3);--sapContent_Shadow2:0 0 0 0.0625rem rgba(0,0,0,0.42),0 0.625rem 1.875rem 0 rgba(0,0,0,0.3);--sapContent_Shadow3:0 0 0 0.0625rem rgba(0,0,0,0.42),0 1.25rem 5rem 0 rgba(0,0,0,0.3);--sapContent_TextShadow:0 0 0.125rem #fff;--sapContent_ContrastTextShadow:0 0 0.0625rem rgba(0,0,0,0.7);--sapContent_HeaderShadow:0 0.125rem 0.125rem 0 rgba(0,0,0,0.05),inset 0 -0.0625rem 0 0 #d9d9d9;--sapContent_Interaction_Shadow:none;--sapContent_Selected_Shadow:none;--sapContent_Negative_Shadow:none;--sapContent_Critical_Shadow:none;--sapContent_Positive_Shadow:none;--sapContent_Informative_Shadow:none;--sapContent_Neutral_Shadow:none;--sapContent_SearchHighlightColor:#d4f7db;--sapContent_HelpColor:#3f8600;--sapContent_LabelColor:#6a6d70;--sapContent_MonospaceFontFamily:\\\"72Mono\\\",\\\"72Monofull\\\",lucida console,monospace;--sapContent_MonospaceBoldFontFamily:\\\"72Mono-Bold\\\",\\\"72Mono-Boldfull\\\",lucida console,monospace;--sapContent_IconFontFamily:\\\"SAP-icons\\\";--sapContent_DisabledTextColor:rgba(50,54,58,0.6);--sapContent_DisabledOpacity:0.4;--sapContent_ContrastTextThreshold:0.65;--sapContent_ContrastTextColor:#fff;--sapContent_ForegroundColor:#efefef;--sapContent_ForegroundBorderColor:#89919a;--sapContent_ForegroundTextColor:#32363a;--sapContent_BadgeBackground:#d04343;--sapContent_BadgeTextColor:#fff;--sapContent_Placeholderloading_Background:#ccc;--sapContent_Placeholderloading_Gradient:linear-gradient(90deg,#ccc 0%,#ccc 20%,#999 50%,#ccc 80%,#ccc);--sapContent_DragAndDropActiveColor:#0854a0;--sapContent_Selected_Background:#0854a0;--sapContent_Selected_TextColor:#fff;--sapContent_Selected_Hover_Background:#095caf;--sapContent_Selected_ForegroundColor:#0854a0;--sapContent_ForcedColorAdjust:none;--sapContent_Illustrative_Color1:#0a6ed1;--sapContent_Illustrative_Color2:#72b5f8;--sapContent_Illustrative_Color3:#ffba10;--sapContent_Illustrative_Color4:#4a5055;--sapContent_Illustrative_Color5:#9da4aa;--sapContent_Illustrative_Color6:#c6cace;--sapContent_Illustrative_Color7:#e7e9ea;--sapContent_Illustrative_Color8:#fff;--sapContent_Illustrative_Color9:#64edd2;--sapContent_Illustrative_Color10:#e7e9ea;--sapContent_Illustrative_Color11:#f31ded;--sapContent_Illustrative_Color12:#5dc122;--sapContent_Illustrative_Color13:#4ba1f6;--sapContent_Illustrative_Color14:#298ff4;--sapContent_Illustrative_Color15:#e6a400;--sapContent_Illustrative_Color16:#085aaa;--sapContent_Illustrative_Color17:#00a5a8;--sapContent_Illustrative_Color18:#d9ddde;--sapContent_Illustrative_Color19:#ccd0d2;--sapContent_Illustrative_Color20:#bec4c6;--sapShell_Background:#edeff0;--sapShell_BackgroundImage:linear-gradient(180deg,#dfe3e4,#f3f4f5);--sapShell_BackgroundGradient:linear-gradient(180deg,#dfe3e4,#f3f4f5);--sapShell_BackgroundImageOpacity:1.0;--sapShell_BackgroundImageRepeat:false;--sapShell_BorderColor:#354a5f;--sapShell_TextColor:#fff;--sapShell_InteractiveBackground:#354a5f;--sapShell_InteractiveTextColor:#d1e8ff;--sapShell_InteractiveBorderColor:#7996b4;--sapShell_GroupTitleTextColor:#32363a;--sapShell_GroupTitleTextShadow:0 0 0.125rem #fff;--sapShell_Hover_Background:#283848;--sapShell_Active_Background:#23303e;--sapShell_Active_TextColor:#fff;--sapShell_Selected_Background:#23303e;--sapShell_Selected_TextColor:#fff;--sapShell_Selected_Hover_Background:#23303e;--sapShell_Favicon:none;--sapShell_Navigation_Background:#354a5f;--sapShell_Navigation_SelectedColor:#d1e8ff;--sapShell_Navigation_Selected_TextColor:#d1e8ff;--sapShell_Navigation_TextColor:#fff;--sapShell_Navigation_Hover_Background:#283848;--sapShell_Navigation_Active_Background:#23303e;--sapShell_Navigation_Active_TextColor:#fff;--sapShell_Shadow:0 0.125rem 0.125rem 0 rgba(0,0,0,0.08),inset 0 -0.0625rem 0 0 rgba(0,0,0,0.18);--sapShell_NegativeColor:#f88;--sapShell_CriticalColor:#f8b67d;--sapShell_PositiveColor:#abe2c2;--sapShell_InformativeColor:#b1d6fb;--sapShell_NeutralColor:#d4d6d7;--sapAvatar_1_Background:#d08014;--sapAvatar_1_BorderColor:#d08014;--sapAvatar_1_TextColor:#fff;--sapAvatar_2_Background:#d04343;--sapAvatar_2_BorderColor:#d04343;--sapAvatar_2_TextColor:#fff;--sapAvatar_3_Background:#db1f77;--sapAvatar_3_BorderColor:#db1f77;--sapAvatar_3_TextColor:#fff;--sapAvatar_4_Background:#c0399f;--sapAvatar_4_BorderColor:#c0399f;--sapAvatar_4_TextColor:#fff;--sapAvatar_5_Background:#6367de;--sapAvatar_5_BorderColor:#6367de;--sapAvatar_5_TextColor:#fff;--sapAvatar_6_Background:#286eb4;--sapAvatar_6_BorderColor:#286eb4;--sapAvatar_6_TextColor:#fff;--sapAvatar_7_Background:#0f828f;--sapAvatar_7_BorderColor:#0f828f;--sapAvatar_7_TextColor:#fff;--sapAvatar_8_Background:#7ca10c;--sapAvatar_8_BorderColor:#7ca10c;--sapAvatar_8_TextColor:#fff;--sapAvatar_9_Background:#925ace;--sapAvatar_9_BorderColor:#925ace;--sapAvatar_9_TextColor:#fff;--sapAvatar_10_Background:#647987;--sapAvatar_10_BorderColor:#647987;--sapAvatar_10_TextColor:#fff;--sapButton_BorderWidth:.0625rem;--sapButton_BorderCornerRadius:.25rem;--sapButton_Background:#fff;--sapButton_BorderColor:#0854a0;--sapButton_TextColor:#0854a0;--sapButton_Hover_Background:#ebf5fe;--sapButton_Hover_BorderColor:#0854a0;--sapButton_Hover_TextColor:#0854a0;--sapButton_IconColor:#0854a0;--sapButton_Active_Background:#0854a0;--sapButton_Active_BorderColor:#0854a0;--sapButton_Active_TextColor:#fff;--sapButton_Emphasized_Background:#0a6ed1;--sapButton_Emphasized_BorderColor:#0a6ed1;--sapButton_Emphasized_TextColor:#fff;--sapButton_Emphasized_Hover_Background:#085caf;--sapButton_Emphasized_Hover_BorderColor:#085caf;--sapButton_Emphasized_Hover_TextColor:#fff;--sapButton_Emphasized_Active_Background:#0854a0;--sapButton_Emphasized_Active_BorderColor:#0854a0;--sapButton_Emphasized_Active_TextColor:#fff;--sapButton_Emphasized_TextShadow:transparent;--sapButton_Emphasized_FontWeight:bold;--sapButton_Reject_Background:#fff;--sapButton_Reject_BorderColor:#b00;--sapButton_Reject_Hover_Background:#ffebeb;--sapButton_Reject_Hover_BorderColor:#b00;--sapButton_Reject_Hover_TextColor:#b00;--sapButton_Reject_Active_Background:#a20000;--sapButton_Reject_Active_BorderColor:#a20000;--sapButton_Reject_Active_TextColor:#fff;--sapButton_Reject_TextColor:#b00;--sapButton_Reject_Selected_Background:#a20000;--sapButton_Reject_Selected_BorderColor:#a20000;--sapButton_Reject_Selected_TextColor:#fff;--sapButton_Reject_Selected_Hover_Background:#b00;--sapButton_Reject_Selected_Hover_BorderColor:#b00;--sapButton_Accept_Background:#fff;--sapButton_Accept_BorderColor:#107e3e;--sapButton_Accept_Hover_Background:#f1fdf6;--sapButton_Accept_Hover_BorderColor:#107e3e;--sapButton_Accept_Hover_TextColor:#107e3e;--sapButton_Accept_Active_Background:#0d6733;--sapButton_Accept_Active_BorderColor:#0d6733;--sapButton_Accept_Active_TextColor:#fff;--sapButton_Accept_TextColor:#107e3e;--sapButton_Accept_Selected_Background:#0d6733;--sapButton_Accept_Selected_BorderColor:#0d6733;--sapButton_Accept_Selected_TextColor:#fff;--sapButton_Accept_Selected_Hover_Background:#107e3e;--sapButton_Accept_Selected_Hover_BorderColor:#107e3e;--sapButton_Lite_Background:transparent;--sapButton_Lite_BorderColor:transparent;--sapButton_Lite_TextColor:#0854a0;--sapButton_Lite_Hover_Background:#ebf5fe;--sapButton_Lite_Hover_BorderColor:#0854a0;--sapButton_Lite_Hover_TextColor:#0854a0;--sapButton_Lite_Active_Background:#0854a0;--sapButton_Lite_Active_BorderColor:#0854a0;--sapButton_Selected_Background:#0854a0;--sapButton_Selected_BorderColor:#0854a0;--sapButton_Selected_TextColor:#fff;--sapButton_Selected_Hover_Background:#095caf;--sapButton_Selected_Hover_BorderColor:#095caf;--sapButton_Attention_Background:#fff;--sapButton_Attention_BorderColor:#df6e0c;--sapButton_Attention_TextColor:#32363a;--sapButton_Attention_Hover_Background:#fef7f1;--sapButton_Attention_Hover_BorderColor:#df6e0c;--sapButton_Attention_Hover_TextColor:#32363a;--sapButton_Attention_Active_Background:#f3801c;--sapButton_Attention_Active_BorderColor:#f3801c;--sapButton_Attention_Active_TextColor:#fff;--sapButton_Attention_Selected_Background:#f3801c;--sapButton_Attention_Selected_BorderColor:#f3801c;--sapButton_Attention_Selected_TextColor:#fff;--sapButton_Attention_Selected_Hover_Background:#f48e34;--sapButton_Attention_Selected_Hover_BorderColor:#f48e34;--sapButton_Negative_Background:#b00;--sapButton_Negative_BorderColor:#b00;--sapButton_Negative_TextColor:#fff;--sapButton_Negative_Hover_Background:#970000;--sapButton_Negative_Hover_BorderColor:#970000;--sapButton_Negative_Hover_TextColor:#fff;--sapButton_Negative_Active_Background:#800;--sapButton_Negative_Active_BorderColor:#800;--sapButton_Negative_Active_TextColor:#fff;--sapButton_Critical_Background:#df6e0c;--sapButton_Critical_BorderColor:#df6e0c;--sapButton_Critical_TextColor:#fff;--sapButton_Critical_Hover_Background:#f3801c;--sapButton_Critical_Hover_BorderColor:#f3801c;--sapButton_Critical_Hover_TextColor:#fff;--sapButton_Critical_Active_Background:#f5933e;--sapButton_Critical_Active_BorderColor:#f5933e;--sapButton_Critical_Active_TextColor:#fff;--sapButton_Success_Background:#107e3e;--sapButton_Success_BorderColor:#107e3e;--sapButton_Success_TextColor:#fff;--sapButton_Success_Hover_Background:#0c5e2e;--sapButton_Success_Hover_BorderColor:#0c5e2e;--sapButton_Success_Hover_TextColor:#fff;--sapButton_Success_Active_Background:#0a5128;--sapButton_Success_Active_BorderColor:#0a5128;--sapButton_Success_Active_TextColor:#fff;--sapButton_Information_Background:#0a6ed1;--sapButton_Information_BorderColor:#0a6ed1;--sapButton_Information_TextColor:#fff;--sapButton_Information_Hover_Background:#0961b9;--sapButton_Information_Hover_BorderColor:#0961b9;--sapButton_Information_Hover_TextColor:#fff;--sapButton_Information_Active_Background:#0854a0;--sapButton_Information_Active_BorderColor:#0854a0;--sapButton_Information_Active_TextColor:#fff;--sapButton_Neutral_Background:#6a6d70;--sapButton_Neutral_BorderColor:#6a6d70;--sapButton_Neutral_TextColor:#fff;--sapButton_Neutral_Hover_Background:#595b5e;--sapButton_Neutral_Hover_BorderColor:#595b5e;--sapButton_Neutral_Hover_TextColor:#fff;--sapButton_Neutral_Active_Background:#515456;--sapButton_Neutral_Active_BorderColor:#515456;--sapButton_Neutral_Active_TextColor:#fff;--sapButton_Track_Background:#ededed;--sapButton_Track_BorderColor:#89919a;--sapButton_Track_TextColor:#32363a;--sapButton_Track_Hover_Background:#ededed;--sapButton_Track_Hover_BorderColor:#0854a0;--sapButton_Track_Selected_Background:#ebf5fe;--sapButton_Track_Selected_BorderColor:#0854a0;--sapButton_Track_Selected_TextColor:#32363a;--sapButton_Track_Selected_Hover_Background:#ebf5fe;--sapButton_Track_Selected_Hover_BorderColor:#095caf;--sapButton_Handle_Background:#fff;--sapButton_Handle_BorderColor:#89919a;--sapButton_Handle_TextColor:#32363a;--sapButton_Handle_Hover_Background:#ebf5fe;--sapButton_Handle_Hover_BorderColor:#0854a0;--sapButton_Handle_Selected_Background:#0854a0;--sapButton_Handle_Selected_BorderColor:#0854a0;--sapButton_Handle_Selected_TextColor:#fff;--sapButton_Handle_Selected_Hover_Background:#095caf;--sapButton_Handle_Selected_Hover_BorderColor:#095caf;--sapButton_Track_Negative_Background:#ffebeb;--sapButton_Track_Negative_BorderColor:#b00;--sapButton_Track_Negative_TextColor:#b00;--sapButton_Track_Negative_Hover_Background:#ffebeb;--sapButton_Track_Negative_Hover_BorderColor:#b00;--sapButton_Handle_Negative_Background:#fff;--sapButton_Handle_Negative_BorderColor:#b00;--sapButton_Handle_Negative_TextColor:#b00;--sapButton_Handle_Negative_Hover_Background:#ffebeb;--sapButton_Handle_Negative_Hover_BorderColor:#b00;--sapButton_Track_Positive_Background:#f1fdf6;--sapButton_Track_Positive_BorderColor:#107e3e;--sapButton_Track_Positive_TextColor:#107e3e;--sapButton_Track_Positive_Hover_Background:#f1fdf6;--sapButton_Track_Positive_Hover_BorderColor:#107e3e;--sapButton_Handle_Positive_Background:#fff;--sapButton_Handle_Positive_BorderColor:#107e3e;--sapButton_Handle_Positive_TextColor:#107e3e;--sapButton_Handle_Positive_Hover_Background:#f1fdf6;--sapButton_Handle_Positive_Hover_BorderColor:#107e3e;--sapButton_TokenBackground:#fafafa;--sapButton_TokenBorderColor:#c2c2c2;--sapField_Background:#fff;--sapField_BackgroundStyle:none;--sapField_TextColor:#32363a;--sapField_PlaceholderTextColor:#74777a;--sapField_BorderColor:#89919a;--sapField_HelpBackground:#fff;--sapField_BorderWidth:.0625rem;--sapField_BorderStyle:solid;--sapField_BorderCornerRadius:.125rem;--sapField_Hover_Background:#fff;--sapField_Hover_BackgroundStyle:none;--sapField_Hover_BorderColor:#0854a0;--sapField_Hover_HelpBackground:#ebf5fe;--sapField_Active_BorderColor:#0854a0;--sapField_Focus_Background:#fff;--sapField_Focus_BorderColor:#89919a;--sapField_Focus_HelpBackground:#fff;--sapField_ReadOnly_Background:hsla(0,0%,94.9%,0.5);--sapField_ReadOnly_BackgroundStyle:none;--sapField_ReadOnly_BorderColor:#89919a;--sapField_ReadOnly_BorderStyle:solid;--sapField_ReadOnly_HelpBackground:hsla(0,0%,94.9%,0.5);--sapField_RequiredColor:#ce3b3b;--sapField_InvalidColor:#b00;--sapField_InvalidBackground:#fff;--sapField_InvalidBackgroundStyle:none;--sapField_InvalidBorderWidth:.125rem;--sapField_InvalidBorderStyle:solid;--sapField_WarningColor:#df6e0c;--sapField_WarningBackground:#fff;--sapField_WarningBackgroundStyle:none;--sapField_WarningBorderWidth:.125rem;--sapField_WarningBorderStyle:solid;--sapField_SuccessColor:#107e3e;--sapField_SuccessBackground:#fff;--sapField_SuccessBackgroundStyle:none;--sapField_SuccessBorderWidth:.0625rem;--sapField_SuccessBorderStyle:solid;--sapField_InformationColor:#0a6ed1;--sapField_InformationBackground:#fff;--sapField_InformationBackgroundStyle:none;--sapField_InformationBorderWidth:.125rem;--sapField_InformationBorderStyle:solid;--sapGroup_TitleBackground:transparent;--sapGroup_TitleBorderColor:#d9d9d9;--sapGroup_TitleTextColor:#32363a;--sapGroup_Title_FontSize:1.125rem;--sapGroup_ContentBackground:#fff;--sapGroup_ContentBorderColor:#d9d9d9;--sapGroup_BorderWidth:.0625rem;--sapGroup_BorderCornerRadius:0;--sapGroup_FooterBackground:transparent;--sapPopover_BorderCornerRadius:.25rem;--sapToolbar_Background:transparent;--sapToolbar_SeparatorColor:#d9d9d9;--sapList_HeaderBackground:#f2f2f2;--sapList_HeaderBorderColor:#e5e5e5;--sapList_HeaderTextColor:#32363a;--sapList_BorderColor:#e5e5e5;--sapList_TextColor:#32363a;--sapList_Active_TextColor:#fff;--sapList_BorderWidth:.0625rem;--sapList_Active_Background:#0854a0;--sapList_SelectionBackgroundColor:#e5f0fa;--sapList_SelectionBorderColor:#0854a0;--sapList_Hover_SelectionBackground:#d8e9f8;--sapList_Background:#fff;--sapList_Hover_Background:#f5f5f5;--sapList_AlternatingBackground:#f2f2f2;--sapList_GroupHeaderBackground:#fff;--sapList_GroupHeaderBorderColor:#d9d9d9;--sapList_GroupHeaderTextColor:#32363a;--sapList_FooterBackground:#fafafa;--sapList_FooterTextColor:#32363a;--sapList_TableGroupHeaderBackground:#efefef;--sapList_TableGroupHeaderBorderColor:#d9d9d9;--sapList_TableGroupHeaderTextColor:#32363a;--sapList_TableFooterBorder:#d9d9d9;--sapList_TableFixedBorderColor:#8c8c8c;--sapMessage_ErrorBorderColor:#b00;--sapMessage_WarningBorderColor:#df6e0c;--sapMessage_SuccessBorderColor:#107e3e;--sapMessage_InformationBorderColor:#0a6ed1;--sapProgress_Background:#fff;--sapProgress_BorderColor:#89919a;--sapProgress_TextColor:#32363a;--sapProgress_FontSize:.75rem;--sapProgress_NegativeBackground:#fff;--sapProgress_NegativeBorderColor:#89919a;--sapProgress_NegativeTextColor:#32363a;--sapProgress_CriticalBackground:#fff;--sapProgress_CriticalBorderColor:#89919a;--sapProgress_CriticalTextColor:#32363a;--sapProgress_PositiveBackground:#fff;--sapProgress_PositiveBorderColor:#89919a;--sapProgress_PositiveTextColor:#32363a;--sapProgress_InformationBackground:#fff;--sapProgress_InformationBorderColor:#89919a;--sapProgress_InformationTextColor:#32363a;--sapProgress_Value_Background:#6a6d70;--sapProgress_Value_BorderColor:#89919a;--sapProgress_Value_TextColor:#32363a;--sapProgress_Value_NegativeBackground:#b00;--sapProgress_Value_NegativeBorderColor:#fff;--sapProgress_Value_NegativeTextColor:#32363a;--sapProgress_Value_CriticalBackground:#df6e0c;--sapProgress_Value_CriticalBorderColor:#fff;--sapProgress_Value_CriticalTextColor:#32363a;--sapProgress_Value_PositiveBackground:#107e3e;--sapProgress_Value_PositiveBorderColor:#fff;--sapProgress_Value_PositiveTextColor:#32363a;--sapProgress_Value_InformationBackground:#0a6ed1;--sapProgress_Value_InformationBorderColor:#fff;--sapProgress_Value_InformationTextColor:#32363a;--sapScrollBar_FaceColor:#949494;--sapScrollBar_TrackColor:#fff;--sapScrollBar_BorderColor:#949494;--sapScrollBar_SymbolColor:#0854a0;--sapScrollBar_Dimension:.75rem;--sapScrollBar_Hover_FaceColor:#8c8c8c;--sapSlider_Background:#89919a;--sapSlider_BorderColor:#89919a;--sapSlider_Selected_Background:#0854a0;--sapSlider_Selected_BorderColor:#0854a0;--sapSlider_HandleBackground:#fff;--sapSlider_HandleBorderColor:#89919a;--sapSlider_RangeHandleBackground:transparent;--sapSlider_Hover_HandleBackground:#ebf5fe;--sapSlider_Hover_HandleBorderColor:#0854a0;--sapSlider_Hover_RangeHandleBackground:transparent;--sapSlider_Active_HandleBackground:#0854a0;--sapSlider_Active_HandleBorderColor:#0854a0;--sapSlider_Active_RangeHandleBackground:transparent;--sapPageHeader_Background:#fff;--sapPageHeader_BorderColor:#d9d9d9;--sapPageHeader_TextColor:#32363a;--sapPageFooter_Background:#fff;--sapPageFooter_BorderColor:#d9d9d9;--sapPageFooter_TextColor:#32363a;--sapInfobar_Background:#0f828f;--sapInfobar_Hover_Background:#0e7581;--sapInfobar_Active_Background:#0a545c;--sapInfobar_NonInteractive_Background:#e6e6e6;--sapInfobar_TextColor:#fff;--sapObjectHeader_Background:#fff;--sapObjectHeader_BorderColor:#d9d9d9;--sapObjectHeader_Hover_Background:#f5f5f5;--sapObjectHeader_Title_TextColor:#32363a;--sapObjectHeader_Title_FontSize:1.25rem;--sapObjectHeader_Title_SnappedFontSize:1.25rem;--sapObjectHeader_Title_FontFamily:\\\"72\\\",\\\"72full\\\",Arial,Helvetica,sans-serif;--sapObjectHeader_Subtitle_TextColor:#6a6d70;--sapBlockLayer_Background:#000;--sapTile_Background:#fff;--sapTile_Hover_Background:#f5f5f5;--sapTile_Active_Background:#f5f5f5;--sapTile_BorderColor:transparent;--sapTile_BorderCornerRadius:.25rem;--sapTile_TitleTextColor:#32363a;--sapTile_TextColor:#6a6d70;--sapTile_IconColor:#5a7da0;--sapTile_SeparatorColor:#ccc;--sapTile_Interactive_BorderColor:#b3b3b3;--sapTile_OverlayBackground:rgba(0,0,0,0.8);--sapTile_OverlayForegroundColor:#fff;--sapAccentColor1:#d08014;--sapAccentColor2:#d04343;--sapAccentColor3:#db1f77;--sapAccentColor4:#c0399f;--sapAccentColor5:#6367de;--sapAccentColor6:#286eb4;--sapAccentColor7:#0f828f;--sapAccentColor8:#7ca10c;--sapAccentColor9:#925ace;--sapAccentColor10:#647987;--sapAccentBackgroundColor1:#fff3b8;--sapAccentBackgroundColor2:#ffd0e7;--sapAccentBackgroundColor3:#fff0fa;--sapAccentBackgroundColor4:#ffdcf3;--sapAccentBackgroundColor5:#ded3ff;--sapAccentBackgroundColor6:#d1efff;--sapAccentBackgroundColor7:#c2fcee;--sapAccentBackgroundColor8:#ebf5cb;--sapAccentBackgroundColor9:#dafdf5;--sapAccentBackgroundColor10:#eaecee;--sapLegend_WorkingBackground:#fafafa;--sapLegend_NonWorkingBackground:#dedede;--sapLegend_CurrentDateTime:#c0399f;--sapLegendColor1:#d58215;--sapLegendColor2:#dc5b5b;--sapLegendColor3:#db1f77;--sapLegendColor4:#9b3b3b;--sapLegendColor5:#cf5db3;--sapLegendColor6:#286eb4;--sapLegendColor7:#1193a2;--sapLegendColor8:#8b9668;--sapLegendColor9:#647987;--sapLegendColor10:#892971;--sapLegendColor11:#725a3a;--sapLegendColor12:#bb2f2f;--sapLegendColor13:#bc1b66;--sapLegendColor14:#8b714f;--sapLegendColor15:#606190;--sapLegendColor16:#597da1;--sapLegendColor17:#49797e;--sapLegendColor18:#687a33;--sapLegendColor19:#295989;--sapLegendColor20:#5154bd;--sapLegendBackgroundColor1:#fdf3e7;--sapLegendBackgroundColor2:#faeaea;--sapLegendBackgroundColor3:#fce9f2;--sapLegendBackgroundColor4:#f8ecec;--sapLegendBackgroundColor5:#f9ebf5;--sapLegendBackgroundColor6:#ebf3fa;--sapLegendBackgroundColor7:#e8fbfd;--sapLegendBackgroundColor8:#f3f4ef;--sapLegendBackgroundColor9:#f1f3f4;--sapLegendBackgroundColor10:#f9ebf6;--sapLegendBackgroundColor11:#f6f2ed;--sapLegendBackgroundColor12:#faeaea;--sapLegendBackgroundColor13:#fce9f2;--sapLegendBackgroundColor14:#f5f2ee;--sapLegendBackgroundColor15:#f0f0f5;--sapLegendBackgroundColor16:#eff2f6;--sapLegendBackgroundColor17:#eff5f6;--sapLegendBackgroundColor18:#f5f7ed;--sapLegendBackgroundColor19:#ebf2f9;--sapLegendBackgroundColor20:#ecedf8;--sapChart_OrderedColor_1:#5899da;--sapChart_OrderedColor_2:#e8743b;--sapChart_OrderedColor_3:#19a979;--sapChart_OrderedColor_4:#ed4a7b;--sapChart_OrderedColor_5:#945ecf;--sapChart_OrderedColor_6:#13a4b4;--sapChart_OrderedColor_7:#525df4;--sapChart_OrderedColor_8:#bf399e;--sapChart_OrderedColor_9:#6c8893;--sapChart_OrderedColor_10:#ee6868;--sapChart_OrderedColor_11:#2f6497;--sapChart_Bad:#dc0d0e;--sapChart_Critical:#de890d;--sapChart_Good:#3fa45b;--sapChart_Neutral:#848f94;--sapChart_Sequence_1:#5899da;--sapChart_Sequence_2:#e8743b;--sapChart_Sequence_3:#19a979;--sapChart_Sequence_4:#ed4a7b;--sapChart_Sequence_5:#945ecf;--sapChart_Sequence_6:#13a4b4;--sapChart_Sequence_7:#525df4;--sapChart_Sequence_8:#bf399e;--sapChart_Sequence_9:#6c8893;--sapChart_Sequence_10:#ee6868;--sapChart_Sequence_11:#2f6497;--sapChart_Sequence_Neutral:#848f94;}\"}","export default {packageName:\"@ui5/webcomponents\",fileName:\"themes/sap_fiori_3/parameters-bundle.css\",content:\":root{--_ui5_calendar_height:24.5rem;--_ui5_calendar_width:20.5rem;--_ui5_calendar_padding:1rem;--_ui5_calendar_left_right_padding:0.5rem;--_ui5_calendar_top_bottom_padding:1rem;--_ui5_calendar_header_height:3rem;--_ui5_calendar_header_arrow_button_width:2.5rem;--_ui5_calendar_header_padding:0.25rem 0;--_ui5_checkbox_root_side_padding:.6875rem;--_ui5_checkbox_icon_size:1rem;--_ui5_checkbox_partially_icon_size:.75rem;--_ui5_custom_list_item_rb_min_width:2.75rem;--_ui5_day_picker_item_width:2.25rem;--_ui5_day_picker_item_height:2.875rem;--_ui5_day_picker_empty_height:3rem;--_ui5_day_picker_item_justify_content:space-between;--_ui5_color-palette-item-height:1.75rem;--_ui5_color-palette-item-hover-height:2.375rem;--_ui5_color-palette-item-margin:calc(var(--_ui5_color-palette-item-hover-height)/2 - var(--_ui5_color-palette-item-height)/2);--_ui5_color-palette-row-width:12rem;--_ui5_color-palette-swatch-container-padding:0.3125rem 0.6875rem;--_ui5_datetime_picker_width:40.0625rem;--_ui5_datetime_picker_height:25rem;--_ui5_datetime_timeview_phonemode_width:19.5rem;--_ui5_datetime_timeview_padding:1rem;--_ui5_dialog_content_min_height:2.75rem;--_ui5_dialog_footer_height:2.75rem;--_ui5_input_inner_padding:0 0.625rem;--_ui5_input_inner_padding_with_icon:0 0.25rem 0 0.625rem;--_ui5_input_value_state_icon_padding:var(--_ui5-input-icon-padding);--_ui5_list_no_data_height:3rem;--_ui5_list_item_cb_margin_right:0;--_ui5_list_item_title_size:var(--sapFontLargeSize);--_ui5_list_no_data_font_size:var(--sapFontLargeSize);--_ui5_list_item_img_size:3rem;--_ui5_list_item_img_top_margin:0.5rem;--_ui5_list_item_img_bottom_margin:0.5rem;--_ui5_list_item_img_hn_margin:0.75rem;--_ui5_list_item_dropdown_base_height:2.5rem;--_ui5_list_item_base_height:2.75rem;--_ui5_list_item_icon_size:1.125rem;--_ui5_list_item_icon_padding-inline-end:0.5rem;--_ui5_group_header_list_item_height:2.75rem;--_ui5_list_busy_row_height:3rem;--_ui5_month_picker_item_height:3rem;--_ui5_popup_default_header_height:2.75rem;--_ui5-notification-overflow-popover-padding:0.25rem 0.5rem;--_ui5_year_picker_item_height:3rem;--_ui5_tokenizer_padding:0.25rem;--_ui5_token_height:1.625rem;--_ui5_token_icon_padding:0.25rem 0.5rem;--_ui5_token_wrapper_right_padding:0.3125rem;--_ui5_tl_bubble_padding:1rem;--_ui5_tl_indicator_before_bottom:-1.625rem;--_ui5_tl_padding:1rem 1rem 1rem .5rem;--_ui5_tl_li_margin_bottom:1.625rem;--_ui5_switch_height:var(--_ui5_switch_height);--_ui5_switch_width:var(--_ui5_switch_width);--_ui5_switch_with_label_width:var(--_ui5_switch_with_label_width);--_ui5_switch_root_outline_top:var(--_ui5_switch_root_outline_top);--_ui5_switch_root_outline_bottom:var(--_ui5_switch_root_outline_bottom);--_ui5_switch_track_width:var(--_ui5_switch_track_width);--_ui5_switch_track_height:var(--_ui5_switch_track_height);--_ui5_switch_track_with_label_width:var(--_ui5_switch_track_with_label_width);--_ui5_switch_track_with_label_height:var(--_ui5_switch_track_with_label_height);--_ui5_switch_min_width:var(--_ui5_switch_min_width);--_ui5_switch_handle_height:var(--_ui5_switch_handle_height);--_ui5_switch_handle_with_label_width:var(--_ui5_switch_handle_with_label_width);--_ui5_switch_handle_width:var(--_ui5_switch_handle_width);--_ui5_switch_handle_with_label_height:var(--_ui5_switch_handle_with_label_height);--_ui5_switch_text_active_left:var(--_ui5_switch_text_active_left);--_ui5_switch_text_font_size:var(--_ui5_switch_text_font_size);--_ui5_switch_text_width:var(--_ui5_switch_text_width);--_ui5_switch_focus_width_size_horizon_exp:calc(100% + 4px);--_ui5_switch_focus_height_size_horizon_exp:calc(100% + 4px);--_ui5_switch_transform:var(--_ui5_switch_transform);--_ui5_switch_transform_with_label:var(--_ui5_switch_transform_with_label);--_ui5_switch_rtl_transform:var(--_ui5_switch_rtl_transform);--_ui5_switch_rtl_transform_with_label:var(--_ui5_switch_rtl_transform_with_label);--_ui5_tc_item_text:3rem;--_ui5_tc_item_height:4.75rem;--_ui5_tc_item_text_only_height:2.75rem;--_ui5_tc_item_text_only_with_additional_text_height:3.75rem;--_ui5_tc_item_icon_circle_size:2.75rem;--_ui5_tc_item_icon_size:1.25rem;--_ui5_tc_item_add_text_margin_top:0.375rem;--_ui5_textarea_padding:0.5rem 0.625rem;--_ui5_textarea_margin:.25rem 0;--_ui5_panel_header_height:2.75rem;--_ui5_radio_button_height:2.75rem;--_ui5_radio_button_label_side_padding:.875rem;--_ui5_radio_button_focus_dist:.5rem;--_ui5_radio_button_inner_size:2.75rem;--_ui5_radio_button_svg_size:1.375rem;--_ui5_radio_button_label_width:calc(100% - 2.75rem);--_ui5_radio_button_outer_ring_padding_with_label:0 0.6875rem;--_ui5-responsive_popover_header_height:2.75rem;--ui5_side_navigation_item_height:2.75rem;--_ui5_load_more_text_height:2.75rem;--_ui5_load_more_text_font_size:var(--sapFontMediumSize);--_ui5_load_more_desc_padding:0.375rem 2rem 0.875rem 2rem;--ui5_table_header_row_height:2.75rem;--ui5_table_row_height:2.75rem;--ui5_table_focus_outline_offset:-0.125rem;--ui5_table_group_row_height:2rem;--_ui5-tree-indent-step:1.5rem;--_ui5-tree-toggle-box-width:2.75rem;--_ui5-tree-toggle-box-height:2.25rem;--_ui5-tree-toggle-icon-size:1.0625rem;--_ui5_timeline_tli_indicator_before_bottom:-1.625rem;--_ui5_timeline_tli_indicator_before_right:-1.625rem;--_ui5_timeline_tli_indicator_before_without_icon_bottom:-1.875rem;--_ui5_timeline_tli_indicator_before_without_icon_right:-1.9375rem;--_ui5_split_button_middle_separator_height:2.25rem}.sapUiSizeCompact,.ui5-content-density-compact,:root,[data-ui5-compact-size]{--_ui5_datetime_timeview_width:17rem;--_ui5_list_item_selection_btn_margin_top:calc(var(--_ui5_checkbox_wrapper_padding)*-1);--_ui5_list_item_content_vertical_offset:calc(var(--_ui5_list_item_base_height)/2 - var(--_ui5_list_item_title_size)/2);--_ui5_list_buttons_left_space:0.125rem;--_ui5_token_icon_size:.75rem;--_ui5_token_wrapper_left_padding:0;--_ui5_tc_item_text_line_height:1.325rem;--_ui5_split_button_middle_separator_top:0}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_button_base_height:1.625rem;--_ui5_button_base_padding:0.4375rem;--_ui5_button_base_min_width:2rem;--_ui5_button_icon_font_size:1rem;--_ui5_calendar_height:18rem;--_ui5_calendar_width:17.75rem;--_ui5_calendar_left_right_padding:0.25rem;--_ui5_calendar_top_bottom_padding:0.5rem;--_ui5_calendar_header_height:2rem;--_ui5_calendar_header_arrow_button_width:2rem;--_ui5_calendar_header_padding:0;--_ui5_checkbox_root_side_padding:var(--_ui5_checkbox_wrapped_focus_padding);--_ui5_checkbox_wrapped_content_margin_top:var(--_ui5_checkbox_compact_wrapped_label_margin_top);--_ui5_checkbox_wrapped_focus_left_top_bottom_position:var(--_ui5_checkbox_compact_focus_position);--_ui5_checkbox_width_height:var(--_ui5_checkbox_compact_width_height);--_ui5_checkbox_wrapper_padding:var(--_ui5_checkbox_compact_wrapper_padding);--_ui5_checkbox_focus_position:var(--_ui5_checkbox_compact_focus_position);--_ui5_checkbox_inner_width_height:var(--_ui5_checkbox_compact_inner_size);--_ui5_checkbox_icon_size:.75rem;--_ui5_checkbox_partially_icon_size:.5rem;--_ui5_color-palette-item-height:1.25rem;--_ui5_color-palette-item-focus-height:1rem;--_ui5_color-palette-item-container-sides-padding:0.1875rem;--_ui5_color-palette-item-container-rows-padding:0.8125rem;--_ui5_color-palette-item-hover-height:1.625rem;--_ui5_color-palette-item-margin:calc(var(--_ui5_color-palette-item-hover-height)/2 - var(--_ui5_color-palette-item-height)/2);--_ui5_color-palette-row-width:8.125rem;--_ui5_color-palette-swatch-container-padding:0.1875rem 0.8125rem;--_ui5_color-palette-item-hover-margin:0;--_ui5_color-palette-row-height:7.5rem;--_ui5_color-palette-button-height:2rem;--_ui5_color_picker_slider_container_margin_top:-4px;--_ui5_custom_list_item_rb_min_width:2rem;--_ui5_daypicker_weeknumbers_container_padding_top:2rem;--_ui5_day_picker_item_width:2rem;--_ui5_day_picker_item_height:2rem;--_ui5_day_picker_empty_height:2.125rem;--_ui5_day_picker_item_justify_content:flex-end;--_ui5_datetime_picker_height:17rem;--_ui5_datetime_picker_width:34.0625rem;--_ui5_datetime_timeview_phonemode_width:18.5rem;--_ui5_datetime_timeview_padding:0.5rem;--_ui5_dialog_content_min_height:2.5rem;--_ui5_dialog_footer_height:2.5rem;--_ui5_input_height:var(--_ui5_input_compact_height);--_ui5_input_inner_padding:0 0.5rem;--_ui5_input_icon_min_width:var(--_ui5_input_compact_min_width);--_ui5_input_icon_padding:.25rem .4375rem;--_ui5_input_error_warning_icon_padding:.1875rem .375rem .1875rem .4375rem;--_ui5_input_information_icon_padding:.1875rem .375rem .1875rem .4375rem;--_ui5_input_custom_icon_padding:.25rem .5rem;--_ui5_input_error_warning_custom_icon_padding:.1875rem .5rem;--_ui5_input_information_custom_icon_padding:.1875rem .5rem;--_ui5_input_value_state_icon_padding:.1875rem .5rem;--_ui5_menu_item_padding:0 0.75rem 0 0.5rem;--_ui5-notification-overflow-popover-padding:0.25rem 0.5rem;--_ui5_popup_default_header_height:2.5rem;--_ui5_textarea_padding:.1875rem .5rem;--_ui5_textarea_margin:.1875rem 0;--_ui5_list_no_data_height:2rem;--_ui5_list_item_cb_margin_right:.5rem;--_ui5_list_item_title_size:var(--sapFontSize);--_ui5_list_item_img_top_margin:0.55rem;--_ui5_list_no_data_font_size:var(--sapFontSize);--_ui5_list_item_dropdown_base_height:2rem;--_ui5_list_item_base_height:2rem;--_ui5_list_item_icon_size:1rem;--_ui5_list_busy_row_height:2rem;--_ui5_month_picker_item_height:2rem;--_ui5_year_picker_item_height:2rem;--_ui5_panel_header_height:2.5rem;--_ui5_token_height:1.25rem;--_ui5_token_top_margin:0.125rem;--_ui5_token_bottom_margin:0.125rem;--_ui5_token_right_margin:0.25rem;--_ui5_token_left_padding:0.25rem;--_ui5_token_readonly_padding:0.25rem;--_ui5_token_focus_offset:-0.125rem;--_ui5_token_icon_padding:0.125rem 0.25rem;--_ui5_token_wrapper_right_padding:0.25rem;--_ui5_token_outline_offset:-0.125rem;--_ui5_tl_bubble_padding:.5rem;--_ui5_tl_indicator_before_bottom:-.5rem;--_ui5_tl_padding:.5rem;--_ui5_tl_li_margin_bottom:.5rem;--_ui5_wheelslider_item_width:64px;--_ui5_wheelslider_item_height:32px;--_ui5_wheelslider_height:224px;--_ui5_wheelslider_selection_frame_margin_top:calc(var(--_ui5_wheelslider_item_height)*2);--_ui5_wheelslider_arrows_visibility:visible;--_ui5_wheelslider_mobile_selection_frame_margin_top:128px;--_ui5_switch_height:var(--_ui5_switch_compact_height);--_ui5_switch_width:var(--_ui5_switch_compact_width);--_ui5_switch_with_label_width:var(--_ui5_switch_compact_with_label_width);--_ui5_switch_root_outline_top:var(--_ui5_switch_root_compact_outline_top);--_ui5_switch_root_outline_bottom:var(--_ui5_switch_root_compact_outline_bottom);--_ui5_switch_track_width:var(--_ui5_switch_track_compact_width);--_ui5_switch_track_height:var(--_ui5_switch_track_compact_height);--_ui5_switch_track_with_label_width:var(--_ui5_switch_track_with_label_compact_width);--_ui5_switch_track_with_label_height:var(--_ui5_switch_track_with_label_compact_height);--_ui5_switch_min_width:var(--_ui5_switch_compact_min_width);--_ui5_switch_handle_height:var(--_ui5_switch_handle_compact_height);--_ui5_switch_handle_with_label_width:var(--_ui5_switch_handle_with_label_compact_width);--_ui5_switch_handle_width:var(--_ui5_switch_handle_compact_width);--_ui5_switch_handle_with_label_height:var(--_ui5_switch_handle_with_label_compact_height);--_ui5_switch_text_active_left:var(--_ui5_switch_text_compact_active_left);--_ui5_switch_text_font_size:var(--_ui5_switch_text_compact_font_size);--_ui5_switch_text_width:var(--_ui5_switch_text_compact_width);--_ui5_switch_transform:var(--_ui5_switch_compact_transform);--_ui5_switch_transform_with_label:var(--_ui5_switch_compact_transform_with_label);--_ui5_switch_rtl_transform:var(--_ui5_switch_compact_rtl_transform);--_ui5_switch_rtl_transform_with_label:var(--_ui5_switch_compact_rtl_transform_with_label);--_ui5_tc_item_text:2rem;--_ui5_tc_item_add_text_margin_top:0.3125rem;--_ui5_tc_header_height:var(--_ui5_tc_header_height_compact);--_ui5_tc_item_height:4rem;--_ui5_tc_item_icon_circle_size:2rem;--_ui5_tc_item_icon_size:1rem;--_ui5_radio_button_min_width:var(--_ui5_radio_button_min_width_compact);--_ui5_radio_button_height:2rem;--_ui5_radio_button_label_side_padding:.5rem;--_ui5_radio_button_focus_dist:.375rem;--_ui5_radio_button_inner_size:2rem;--_ui5_radio_button_svg_size:1rem;--_ui5_radio_button_label_width:calc(100% - 2rem + 1px);--_ui5_radio_button_outer_ring_padding_with_label:0 0.5rem;--_ui5-responsive_popover_header_height:2.5rem;--ui5_side_navigation_item_height:2rem;--_ui5_slider_handle_height:1.25rem;--_ui5_slider_handle_width:1.25rem;--_ui5_slider_handle_top:-.5rem;--_ui5_slider_tooltip_height:1rem;--_ui5_slider_tooltip_padding:0.25rem;--_ui5_slider_progress_outline_offset:-0.625rem;--_ui5_slider_outer_height:1.3125rem;--_ui5_split_button_middle_separator_height:1.625rem;--_ui5_step_input_min_width:6rem;--_ui5_load_more_text_height:2.625rem;--_ui5_load_more_text_font_size:var(--sapFontSize);--_ui5_load_more_desc_padding:0 2rem 0.875rem 2rem;--ui5_table_header_row_height:2rem;--ui5_table_row_height:2rem;--_ui5-tree-indent-step:0.5rem;--_ui5-tree-toggle-box-width:2rem;--_ui5-tree-toggle-box-height:1.5rem;--_ui5-tree-toggle-icon-size:0.8125rem;--_ui5_timeline_tli_indicator_before_bottom:-0.5rem;--_ui5_timeline_tli_indicator_before_right:-0.5rem;--_ui5_timeline_tli_indicator_before_without_icon_bottom:-0.75rem;--_ui5_timeline_tli_indicator_before_without_icon_right:-0.8125rem;--_ui5_vsd_header_container:2.5rem;--_ui5_vsd_sub_header_container_height:2rem;--_ui5_vsd_header_height:4rem;--_ui5_vsd_expand_content_height:25.4375rem}:root,[dir=ltr]{--_ui5_rotation_90deg:rotate(90deg);--_ui5_rotation_minus_90deg:rotate(-90deg);--_ui5_icon_transform_scale:none;--_ui5_panel_toggle_btn_rotation:var(--_ui5_rotation_90deg);--_ui5_li_notification_group_toggle_btn_rotation:var(--_ui5_rotation_90deg);--_ui5_timeline_scroll_container_offset:0.5rem;--_ui5_popover_upward_arrow_margin:0.1875rem 0 0 0.1875rem;--_ui5_popover_right_arrow_margin:0.1875rem 0 0 -0.375rem;--_ui5_popover_downward_arrow_margin:-0.375rem 0 0 0.125rem;--_ui5_popover_left_arrow_margin:0.125rem 0 0 0.25rem;--_ui5_dialog_resize_cursor:se-resize;--_ui5_shellbar_overflow_container_float:none;--_ui5_progress_indicator_bar_border_radius:0.5rem 0 0 0.5rem;--_ui5_progress_indicator_remaining_bar_border_radius:0 0.5rem 0.5rem 0;--_ui5_menu_submenu_margin_offset:-0.25rem 0;--_ui5-menu_item_icon_float:right}[dir=rtl]{--_ui5_icon_transform_scale:scale(-1,1);--_ui5_panel_toggle_btn_rotation:var(--_ui5_rotation_minus_90deg);--_ui5_li_notification_group_toggle_btn_rotation:var(--_ui5_rotation_minus_90deg);--_ui5_timeline_scroll_container_offset:-0.5rem;--_ui5_popover_upward_arrow_margin:.1875rem .125rem 0 0;--_ui5_popover_right_arrow_margin:.1875rem .25rem 0 0;--_ui5_popover_downward_arrow_margin:-0.4375rem .125rem 0 0;--_ui5_popover_left_arrow_margin:.1875rem -.375rem 0 0;--_ui5_dialog_resize_cursor:sw-resize;--_ui5_shellbar_overflow_container_float:left;--_ui5_progress_indicator_bar_border_radius:0 0.5rem 0.5rem 0;--_ui5_progress_indicator_remaining_bar_border_radius:0.5rem 0 0 0.5rem;--_ui5_menu_submenu_margin_offset:0 0.25rem;--_ui5-menu_item_icon_float:left}:root{--ui5-avatar-initials-color:var(--sapContent_ImagePlaceholderForegroundColor);--ui5-avatar-border-radius:.25rem;--ui5-avatar-initials-border:none;--ui5-avatar-accent1:var(--sapAccentColor1);--ui5-avatar-accent2:var(--sapAccentColor2);--ui5-avatar-accent3:var(--sapAccentColor3);--ui5-avatar-accent4:var(--sapAccentColor4);--ui5-avatar-accent5:var(--sapAccentColor5);--ui5-avatar-accent6:var(--sapAccentColor6);--ui5-avatar-accent7:var(--sapAccentColor7);--ui5-avatar-accent8:var(--sapAccentColor8);--ui5-avatar-accent9:var(--sapAccentColor9);--ui5-avatar-accent10:var(--sapAccentColor10);--ui5-avatar-placeholder:var(--sapContent_ImagePlaceholderBackground);--ui5-avatar-accent1-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent2-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent3-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent4-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent5-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent6-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent7-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent8-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent9-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent10-color:var(--ui5-avatar-initials-color);--ui5-avatar-placeholder-color:var(--ui5-avatar-initials-color);--ui5-avatar-accent1-border-color:var(--sapField_BorderColor);--ui5-avatar-accent2-border-color:var(--sapField_BorderColor);--ui5-avatar-accent3-border-color:var(--sapField_BorderColor);--ui5-avatar-accent4-border-color:var(--sapField_BorderColor);--ui5-avatar-accent5-border-color:var(--sapField_BorderColor);--ui5-avatar-accent6-border-color:var(--sapField_BorderColor);--ui5-avatar-accent7-border-color:var(--sapField_BorderColor);--ui5-avatar-accent8-border-color:var(--sapField_BorderColor);--ui5-avatar-accent9-border-color:var(--sapField_BorderColor);--ui5-avatar-accent10-border-color:var(--sapField_BorderColor);--ui5-avatar-placeholder-border-color:var(--sapField_BorderColor);--_ui5_avatar_outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_avatar_focus_offset:1px;--_ui5_avatar_focus_width:1px;--_ui5_avatar_focus_color:var(--sapContent_FocusColor);--_ui5_avatar_fontsize_XS:0.75rem;--_ui5_avatar_fontsize_M:1.625rem;--_ui5_avatar_fontsize_L:2rem;--_ui5_avatar_fontsize_XL:2.75rem;--_ui5_avatar_icon_XS:1rem;--_ui5_avatar_icon_S:1.5rem;--_ui5_avatar_icon_M:2rem;--_ui5_avatar_icon_L:2.5rem;--_ui5_avatar_icon_XL:3rem;--_ui5_avatar_fontsize_XS:1rem;--_ui5_avatar_fontsize_S:1.125rem;--_ui5_avatar_fontsize_M:1.5rem;--_ui5_avatar_fontsize_L:2.25rem;--_ui5_avatar_fontsize_XL:3rem}[ui5-avatar-group]{--_ui5_button_focused_border:none}:root{--_ui5-badge-cursor:default;--ui5-badge-color-scheme-1-background:var(--sapLegendBackgroundColor1);--ui5-badge-color-scheme-1-border:var(--sapAccentColor1);--ui5-badge-color-scheme-1-color:var(--sapTextColor);--ui5-badge-color-scheme-2-background:var(--sapLegendBackgroundColor2);--ui5-badge-color-scheme-2-border:var(--sapAccentColor2);--ui5-badge-color-scheme-2-color:var(--sapTextColor);--ui5-badge-color-scheme-3-background:var(--sapLegendBackgroundColor3);--ui5-badge-color-scheme-3-border:var(--sapAccentColor3);--ui5-badge-color-scheme-3-color:var(--sapTextColor);--ui5-badge-color-scheme-4-background:var(--sapLegendBackgroundColor5);--ui5-badge-color-scheme-4-border:var(--sapAccentColor4);--ui5-badge-color-scheme-4-color:var(--sapTextColor);--ui5-badge-color-scheme-5-background:var(--sapLegendBackgroundColor20);--ui5-badge-color-scheme-5-border:var(--sapAccentColor5);--ui5-badge-color-scheme-5-color:var(--sapTextColor);--ui5-badge-color-scheme-6-background:var(--sapLegendBackgroundColor6);--ui5-badge-color-scheme-6-border:var(--sapAccentColor6);--ui5-badge-color-scheme-6-color:var(--sapTextColor);--ui5-badge-color-scheme-7-background:var(--sapLegendBackgroundColor7);--ui5-badge-color-scheme-7-border:var(--sapAccentColor7);--ui5-badge-color-scheme-7-color:var(--sapTextColor);--ui5-badge-color-scheme-8-background:var(--sapLegendBackgroundColor18);--ui5-badge-color-scheme-8-border:var(--sapLegendColor18);--ui5-badge-color-scheme-8-color:var(--sapTextColor);--ui5-badge-color-scheme-9-background:var(--sapLegendBackgroundColor10);--ui5-badge-color-scheme-9-border:var(--sapAccentColor10);--ui5-badge-color-scheme-9-color:var(--sapTextColor);--ui5-badge-color-scheme-10-background:var(--sapLegendBackgroundColor9);--ui5-badge-color-scheme-10-border:var(--sapAccentColor9);--ui5-badge-color-scheme-10-color:var(--sapTextColor);--browser_scrollbar_border_radius:var(--sapElement_BorderCornerRadius);--browser_scrollbar_border:none;--_ui5_busy_indicator_color:var(--sapContent_IconColor);--_ui5_busy_indicator_focus_outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_busy_indicator_focus_border_radius:0px;--_ui5_button_focused_border:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_button_focused_border_radius:0.25rem;--_ui5_button_focused_inner_border_radius:0;--_ui5_button_base_min_width:2.5rem;--_ui5_button_base_min_compact_width:2rem;--_ui5_button_base_height:2.5rem;--_ui5_button_compact_height:1.625rem;--_ui5_button_border_radius:var(--sapButton_BorderCornerRadius);--_ui5_button_base_padding:0.6875rem;--_ui5_button_compact_padding:0.4375rem;--_ui5_button_base_icon_margin:0.563rem;--_ui5_button_icon_font_size:1.375rem;--_ui5_button_outline:1px dotted var(--sapContent_FocusColor);--_ui5_button_emphasized_outline:1px dotted var(--sapContent_FocusColor);--_ui5_button_outline_offset:-0.1875rem;--_ui5_button_emphasized_font_weight:normal;--_ui5_button_text_shadow:var(--sapContent_TextShadow);--_ui5_button_focus_offset:1px;--_ui5_button_focus_width:1px;--_ui5_button_focus_color:var(--sapContent_FocusColor);--_ui5_button_focus_outline_focus_color:var(--sapContent_ContrastFocusColor);--_ui5_button_pressed_focused_border_color:var(--sapContent_ContrastFocusColor);--_ui5_button_positive_border_focus_hover_color:var(--sapContent_FocusColor);--_ui5_button_positive_focus_border_color:var(--sapButton_Accept_BorderColor);--_ui5_button_negative_focus_border_color:var(--sapButton_Reject_BorderColor);--_ui5_button_attention_focus_border_color:var(--sapButton_Negative_BorderColor);--_ui5_button_emphasized_focused_border_color:var(--sapButton_Emphasized_BorderColor);--_ui5_button_fontFamily:\\\"72override\\\",var(--sapFontFamily);--_ui5_button_emphasized_focused_border_before:none;--_ui5_button_emphasized_focused_border_radius:0;--_ui5_button_transparent_hover:transparent;--_ui5_button_base_min_width:2.25rem;--_ui5_button_base_height:2.25rem;--_ui5_button_base_padding:0.5625rem;--_ui5_button_base_icon_only_padding:0.5625rem;--_ui5_button_base_icon_margin:0.375rem;--_ui5_button_icon_font_size:1rem;--_ui5_button_emphasized_font_weight:bold;--_ui5_button_text_shadow:none;--_ui5_button_emphasized_focused_border:0.0625rem dotted var(--sapContent_ContrastFocusColor);--_ui5_button_emphasized_focused_border_before:0.0625rem solid var(--sapContent_FocusColor);--_ui5_button_emphasized_outline:1px solid var(--sapContent_FocusColor);--_ui5_card_box_shadow:var(--sapContent_Shadow0);--_ui5_card_hover_box_shadow:var(--_ui5_card_box_shadow);--_ui5_card_border:1px solid var(--sapTile_BorderColor);--_ui5_card_border-radius:var(--sapElement_BorderCornerRadius);--_ui5_card_header_padding:1rem;--_ui5_card_header_hover_bg:var(--sapList_Hover_Background);--_ui5_card_header_active_bg:var(--_ui5_card_header_hover_bg);--_ui5_card_header_border:1px solid var(--_ui5_card_header_border_color);--_ui5_card_header_border_color:var(--sapTile_SeparatorColor);--_ui5_card_header_focus_border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_card_header_focus_radius:0px;--_ui5_card_header_focus_bottom_radius:0px;--_ui5_card_header_focus_offset:1px;--_ui5_card_header_title_font_family:\\\"72override\\\",var(--sapFontFamily);--_ui5_card_header_title_font_size:var(--sapFontHeader5Size);--_ui5_card_header_title_font_weight:normal;--_ui5_card_header_subtitle_margin_top:.25rem;--ui5_carousel_background_color:var(--sapBackgroundColor);--ui5_carousel_button_size:2.5rem;--ui5_carousel_inactive_dot_size:0.25rem;--ui5_carousel_inactive_dot_margin:0 0.375rem;--ui5_carousel_inactive_dot_border:none;--ui5_carousel_inactive_dot_background:var(--sapContent_NonInteractiveIconColor);--ui5_carousel_active_dot_border:var(--ui5_carousel_inactive_dot_border);--ui5_carousel_active_dot_background:var(--sapSelectedColor);--_ui5_checkbox_wrapper_padding:.8125rem;--_ui5_checkbox_width_height:3rem;--_ui5_checkbox_box_shadow:none;--_ui5_checkbox_transition:unset;--_ui5_checkbox_focus_border:none;--_ui5_checkbox_disabled_opacity:.5;--_ui5_checkbox_border_radius:0;--_ui5_checkbox_hover_background:var(--sapField_Hover_Background);--_ui5_checkbox_active_background:var(--sapField_Hover_Background);--_ui5_checkbox_checkmark_warning_color:var(--sapField_TextColor);--_ui5_checkbox_inner_warning_color:var(--sapField_WarningColor);--_ui5_checkbox_inner_information_color:currentColor;--_ui5_checkbox_checkmark_color:var(--sapSelectedColor);--_ui5_checkbox_focus_position:.6875rem;--_ui5_checkbox_focus_outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_checkbox_focus_border_radius:0;--_ui5_checkbox_outer_hover_background:transparent;--_ui5_checkbox_inner_width_height:1.375rem;--_ui5_checkbox_inner_border:solid .125rem var(--sapField_BorderColor);--_ui5_checkbox_inner_hover_border_color:var(--sapField_HoverBorderColor);--_ui5_checkbox_inner_hover_checked_border_color:var(--sapField_HoverBorderColor);--_ui5_checkbox_inner_selected_border_color:var(--sapField_BorderColor);--_ui5_checkbox_inner_disabled_border_color:var(--sapField_BorderColor);--_ui5_checkbox_inner_active_border_color:var(--sapField_BorderColor);--_ui5_checkbox_inner_border_radius:0;--_ui5_checkbox_inner_error_border:0.125rem solid var(--sapField_InvalidColor);--_ui5_checkbox_inner_warning_border:0.125rem solid var(--sapField_WarningColor);--_ui5_checkbox_inner_information_border:0.125rem solid var(--sapField_InformationColor);--_ui5_checkbox_inner_information_box_shadow:none;--_ui5_checkbox_inner_warning_box_shadow:none;--_ui5_checkbox_inner_error_box_shadow:none;--_ui5_checkbox_inner_success_box_shadow:none;--_ui5_checkbox_inner_default_box_shadow:none;--_ui5_checkbox_inner_warning_background_hover:var(--sapField_WarningBackground);--_ui5_checkbox_inner_error_background_hover:var(--sapField_InvalidBackground);--_ui5_checkbox_inner_success_background_hover:var(--sapField_SuccessBackground);--_ui5_checkbox_inner_information_background_hover:var(--sapField_InformationBackground);--_ui5_checkbox_inner_success_border:var(--sapField_BorderWidth) solid var(--sapField_SuccessColor);--_ui5_checkbox_inner_readonly_border:0.125rem solid var(--sapField_ReadOnly_BorderColor);--_ui5_checkbox_inner_background:var(--sapField_Background);--_ui5_checkbox_wrapped_focus_padding:.375rem;--_ui5_checkbox_wrapped_content_margin_top:.125rem;--_ui5_checkbox_wrapped_focus_left_top_bottom_position:.5625rem;--_ui5_checkbox_compact_wrapper_padding:.5rem;--_ui5_checkbox_compact_width_height:2rem;--_ui5_checkbox_compact_inner_size:1rem;--_ui5_checkbox_compact_focus_position:.375rem;--_ui5_checkbox_compact_wrapped_label_margin_top:-1px;--_ui5_checkbox_label_color:var(--sapContent_LabelColor);--_ui5_checkbox_label_offset:var(--_ui5_checkbox_wrapper_padding);--_ui5_checkbox_disabled_label_color:var(--sapContent_LabelColor);--_ui5_checkbox_default_focus_border:none;--_ui5_checkbox_focus_outline_display:block;--_ui5_checkbox_right_focus_distance:0;--_ui5_checkbox_wrapper_padding:.6875rem;--_ui5_checkbox_width_height:2.75rem;--_ui5_checkbox_inner_border:.0625rem solid var(--sapField_BorderColor);--_ui5_checkbox_focus_position:0.5625rem;--_ui5_checkbox_inner_border_radius:.125rem;--_ui5_checkbox_wrapped_content_margin_top:0;--_ui5_checkbox_wrapped_focus_padding:.5rem;--_ui5_checkbox_inner_readonly_border:1px solid var(--sapField_ReadOnly_BorderColor);--_ui5_checkbox_compact_wrapped_label_margin_top:-0.125rem;--_ui5_color-palette-item-container-sides-padding:0.3125rem;--_ui5_color-palette-item-container-rows-padding:0.6875rem;--_ui5_color-palette-item-focus-height:1.5rem;--_ui5_color-palette-item-container-padding:var(--_ui5_color-palette-item-container-sides-padding) var(--_ui5_color-palette-item-container-rows-padding);--_ui5_color-palette-item-hover-margin:0;--_ui5_color-palette-row-height:9.5rem;--_ui5_color-palette-button-height:3rem;--_ui5_color-palette-item-before-focus-color:0.0625rem solid #fff;--_ui5_color-palette-item-before-focus-offset:0.0625rem;--_ui5_color-palette-item-before-focus-hover-offset:0.0625rem;--_ui5_color-palette-item-after-focus-color:0.0625rem dotted #000;--_ui5_color-palette-item-after-focus-offset:0.0625rem;--_ui5_color-palette-item-after-focus-hover-offset:0.0625rem;--_ui5_color-palette-item-before-focus-border-radius:0;--_ui5_color-palette-item-outer-border-radius:0.25rem;--_ui5_color-palette-item-inner-border-radius:0.1875rem;--_ui5_color-palette-item-hover-outer-border-radius:0.25rem;--_ui5_color-palette-item-hover-inner-border-radius:0.1875rem;--_ui5_color_picker_slider_handle_box_shadow:0.0625rem solid var(--sapField_BorderColor);--_ui5_color_picker_slider_handle_border:0.125rem solid var(--sapField_BorderColor);--_ui5_color_picker_slider_handle_outline_hover:0.125rem solid var(--sapButton_Hover_BorderColor);--_ui5_color_picker_slider_handle_outline_focus:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_color_picker_slider_handle_margin_top:0.125rem;--_ui5_color_picker_slider_handle_focus_margin_top:0.125rem;--_ui5_color_picker_circle_outer_border:0.0625rem solid var(--sapContent_ContrastShadowColor);--_ui5_color_picker_circle_inner_border:0.0625rem solid var(--sapField_BorderColor);--_ui5_color_picker_circle_inner_circle_size:0.5625rem;--_ui5_color_picker_slider_container_margin_top:-10px;--_ui5_color_picker_slider_handle_inline_focus:none;--_ui5_datepicker_icon_border:none;--_ui5-datepicker_border_radius:0;--_ui5-datepicker-hover-background:var(--sapField_Hover_Background);--_ui5-datepicker_icon_border_radius:0;--_ui5_daypicker_item_box_shadow:inset 0 0 0 0.0625rem var(--sapContent_Selected_ForegroundColor);--_ui5_daypicker_item_margin:2px;--_ui5_daypicker_item_border:none;--_ui5_daypicker_item_selected_border_color:var(--sapList_Background);--_ui5_daypicker_daynames_container_height:2rem;--_ui5_daypicker_weeknumbers_container_padding_top:2rem;--_ui5_daypicker_item_othermonth_background_color:var(--sapList_Background);--_ui5_daypicker_item_othermonth_color:var(--sapContent_LabelColor);--_ui5_daypicker_item_othermonth_hover_color:var(--sapContent_LabelColor);--_ui5_daypicker_item_border_radius:0;--_ui5_daypicker_item_now_inner_border_radius:0;--_ui5_daypicker_dayname_color:var(--sapTextColor);--_ui5_daypicker_weekname_color:var(--sapTextColor);--_ui5_daypicker_item_outline_width:1px;--_ui5_daypicker_item_outline_offset:1px;--_ui5_daypicker_item_now_selected_outline_offset:2px;--_ui5_daypicker_item_now_focus_after_width:calc(100% - 0.25rem);--_ui5_daypicker_item_now_focus_after_height:calc(100% - 0.25rem);--_ui5_daypicker_item_now_selected_focus_after_width:calc(100% - 0.375rem);--_ui5_daypicker_item_now_selected_focus_after_height:calc(100% - 0.375rem);--_ui5_daypicker_item_selected_background:transparent;--_ui5_daypicker_item_selected_box_shadow:var(--_ui5_daypicker_item_box_shadow),var(--_ui5_daypicker_item_box_shadow);--_ui5_daypicker_item_selected_daytext_hover_background:transparent;--_ui5_daypicker_item_outline_focus_after:none;--_ui5_daypicker_item_border_radius_focus_after:none;--_ui5_daypicker_item_border_focus_after:var(--_ui5_daypicker_item_outline_width) dotted var(--sapContent_FocusColor);--_ui5_daypicker_item_width_focus_after:calc(100% - 0.25rem);--_ui5_daypicker_item_height_focus_after:calc(100% - 0.25rem);--_ui5_daypicker_item_now_border:0.125rem solid var(--sapLegend_CurrentDateTime);--_ui5_daypicker_item_now_outline:none;--_ui5_daypicker_item_now_outline_offset:none;--_ui5_daypicker_item_now_outline_offset_focus_after:var(--_ui5_daypicker_item_now_outline_offset);--_ui5_daypicker_item_selected_between_border:5%;--_ui5_daypicker_item_selected_between_background:transparent;--_ui5_daypicker_item_selected_between_text_background:var(--sapList_SelectionBackgroundColor);--_ui5_daypicker_item_selected_between_text_font:inherit;--_ui5_daypicker_item_selected_between_hover_background:inherit;--_ui5_daypicker_item_now_box_shadow:inset 0 0 0 0.0625rem var(--_ui5_daypicker_item_selected_border_color);--_ui5_daypicker_item_selected_text_outline:none;--_ui5_daypicker_item_selected_background:var(--sapContent_Selected_Background);--_ui5_daypicker_dayname_color:var(--sapContent_LabelColor);--_ui5_daypicker_weekname_color:var(--sapContent_LabelColor);--_ui5_daypicker_item_border_radius_focus_after:0.0625rem;--_ui5_daypicker_item_selected_border:none;--_ui5_daypicker_item_not_selected_focus_border:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_daypicker_item_selected_focus_color:var(--sapContent_ContrastFocusColor);--_ui5_daypicker_item_selected_focus_width:0.0625rem;--_ui5_daypicker_item_no_selected_inset:0.125rem;--_ui5_daypicker_item_now_border_focus_after:0.0625rem dotted var(--sapList_SelectionBorderColor);--_ui5_daypicker_item_now_border_radius_focus_after:0.0625rem;--_ui5_day_picker_item_selected_now_border:0.1875rem solid var(--sapList_Background);--_ui5_day_picker_item_selected_now_border_foucs:0.0625rem dotted var(--sapContent_ContrastFocusColor);--_ui5_day_picker_item_selected_now_border_radios_foucs:0.0625rem;--_ui5-dp-item_withsecondtype_border:0.1875rem;--_ui5_daypicker_item_border_radius:0.25rem;--_ui5_daypicker_item_selected_text_border:none;--_ui5_daypicker_item_selected_between_text_border_radios:0.25rem;--_ui5_daypicker_item_select_between_border:1px solid var(--sapContent_Selected_ForegroundColor);--_ui5_file_uploader_hover_border:1px solid var(--sapField_Hover_BorderColor);--_ui5_file_uploader_value_state_error_hover_background_color:var(--sapField_Hover_Background);--_ui5_dialog_resize_handle_color:var(--sapButton_Lite_TextColor);--_ui5_dialog_resize_handle_right:-0.25rem;--_ui5_dialog_resize_handle_bottom:-0.0625rem;--_ui5_dialog_header_focus_bottom_offset:3px;--_ui5_dialog_header_focus_top_offset:2px;--_ui5_dialog_header_focus_left_offset:2px;--_ui5_dialog_header_focus_right_offset:2px;--_ui5_dialog_header_border_radius:0px;--ui5-group-header-listitem-background-color:var(--sapList_GroupHeaderBackground);--_ui5_input_width:13.125rem;--_ui5_input_height:2.25rem;--_ui5_input_compact_height:1.625rem;--_ui5_input_hover_border:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_Hover_BorderColor);--_ui5_input_hover_box_shadow:none;--_ui5_input_value_state_error_hover_background:var(--sapField_Hover_Background);--_ui5_input_background_color:var(--sapField_Background);--_ui5_input_border_radius:var(--sapField_BorderCornerRadius);--_ui5_input_focus_border_radius:0;--_ui5-input-border:2px solid transparent;--_ui5_input_placeholder_style:italic;--_ui5_input_placeholder_color:var(--sapField_PlaceholderTextColor);--_ui5_input_bottom_border_height:0;--_ui5_input_bottom_border_color:transparent;--_ui5_input_focused_border_color:var(--sapField_Hover_BorderColor);--_ui5_input_state_border_width:0.125rem;--_ui5_input_information_border_width:0.125rem;--_ui5_input_error_font_weight:normal;--_ui5_input_focus_border_width:1px;--_ui5_input_error_warning_border_style:solid;--_ui5_input_error_warning_font_style:inherit;--_ui5_input_error_warning_text_indent:0;--_ui5_input_disabled_color:var(--sapContent_DisabledTextColor);--_ui5_input_disabled_font_weight:normal;--_ui5_input_disabled_border_color:var(--sapField_BorderColor);--_ui5-input_disabled_background:var(--sapField_Background);--_ui5_input_readonly_border_color:var(--sapField_ReadOnly_BorderColor);--_ui5_input_readonly_background:var(--sapField_ReadOnly_Background);--_ui5_input_custom_icon_padding:.5625rem .625rem;--_ui5_input_error_warning_custom_icon_padding:.5rem .625rem;--_ui5_input_information_custom_icon_padding:.5rem .625rem;--_ui5_input_error_warning_icon_padding:.5rem .5rem .5rem .5625rem;--_ui5_input_information_icon_padding:.5rem .5rem .5rem .5625rem;--_ui5_input_disabled_opacity:0.4;--_ui5_input_icon_min_width:2.25rem;--_ui5_input_compact_min_width:2rem;--_ui5_input_transition:none;--_ui5-input-value-state-icon-display:none;--_ui5_input_focused_value_state_error_background:var(--sapField_InvalidBackground);--_ui5_input_focused_value_state_warning_background:var(--sapField_WarningBackground);--_ui5_input_focused_value_state_success_background:var(--sapField_SuccessBackground);--_ui5_input_focused_value_state_information_background:var(--sapField_InformationBackground);--_ui5_input_value_state_error_border_color:var(--sapField_InvalidColor);--_ui5_input_focused_value_state_error_border_color:var(--sapField_InvalidColor);--_ui5_input_focused_value_state_error_focus_outline_color:var(--sapContent_FocusColor);--_ui5_input_focused_value_state_warning_focus_outline_color:var(--sapContent_FocusColor);--_ui5_input_focused_value_state_success_focus_outline_color:var(--sapContent_FocusColor);--_ui5_input_value_state_warning_border_color:var(--sapField_WarningColor);--_ui5_input_focused_value_state_warning_border_color:var(--sapField_WarningColor);--_ui5_input_value_state_success_border_color:var(--sapField_SuccessColor);--_ui5_input_focused_value_state_success_border_color:var(--sapField_SuccessColor);--_ui5_input_value_state_success_border_width:1px;--_ui5_input_value_state_information_border_color:var(--sapField_InformationColor);--_ui5_input_focused_value_state_information_border_color:var(--sapField_InformationColor);--_ui5-input-value-state-information-border-width:1px;--_ui5-input-background-image:none;--_ui5_input_focus_offset:1px;--ui5_input_focus_pseudo_element_content:\\\"\\\";--_ui5_input_value_state_error_warning_placeholder_font_weight:normal;--_ui5_input_focus_outline_color:var(--sapContent_FocusColor);--_ui5-input_error_placeholder_color:var(--sapField_PlaceholderTextColor);--_ui5-input-border:1px solid var(--sapField_BorderColor);--_ui5_input_icon_padding:.5625rem;--_ui5_input_icon_color:var(--sapContent_IconColor);--_ui5_input_icon_pressed_color:var(--sapButton_Active_TextColor);--_ui5_input_icon_pressed_bg:var(--sapButton_Selected_Background);--_ui5_input_icon_hover_bg:var(--sapButton_Lite_Hover_Background);--_ui5_input_icon_border_radius:0;--_ui5_input_icon_box_shadow:none;--_ui5_input_icon_border:1px solid transparent;--_ui5_input_error_icon_box_shadow:var(--_ui5_input_icon_box_shadow);--_ui5_input_warning_icon_box_shadow:var(--_ui5_input_icon_box_shadow);--_ui5_input_information_icon_box_shadow:var(--_ui5_input_icon_box_shadow);--_ui5_input_success_icon_box_shadow:var(--_ui5_input_icon_box_shadow);--_ui5_input_icon_error_pressed_color:var(--sapButton_Active_TextColor);--_ui5_input_icon_warning_pressed_color:var(--sapButton_Active_TextColor);--_ui5_input_icon_information_pressed_color:var(--sapButton_Active_TextColor);--_ui5_input_icon_success_pressed_color:var(--sapButton_Active_TextColor);--_ui5_link_focused_hover_text_decoration:underline;--_ui5_link_focused_hover_text_color:var(--sapLinkColor);--_ui5_link_active_text_decoration:underline;--_ui5_link_border:0.0625rem dotted transparent;--_ui5_link_border_focus:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_link_focus_border-radius:0;--_ui5_link_focus_background_color:transparent;--_ui5_link_focus_color:inherit;--_ui5_link_focus_text_decoration:underline;--_ui5_link_subtle_text_decoration:none;--_ui5_link_text_decoration:none;--_ui5_link_hover_text_decoration:underline;--ui5_list_footer_text_color:var(--sapPageFooter_TextColor);--ui5_list_footer_text_color:var(--sapTextColor);--ui5-listitem-background-color:var(--sapList_Background);--ui5-listitem-border-bottom:1px solid var(--sapList_BorderColor);--ui5-listitem-selected-border-bottom:1px solid var(--sapList_SelectionBorderColor);--ui5-listitem-focused-selected-border-bottom:1px solid var(--sapList_SelectionBorderColor);--ui5-listitem-active-border-color:var(--sapContent_ContrastFocusColor);--_ui5_listitembase_focus_width:1px;--_ui5-listitembase_disabled_opacity:0.5;--_ui5_product_switch_item_border:none;--_ui5_menu_popover_border_radius:var(--sapElement_BorderCornerRadius);--_ui5_menu_item_padding:0 1rem 0 0.75rem;--_ui5_monthpicker_item_border_radius:0;--_ui5_monthpicker_item_border:none;--_ui5_monthpicker_item_margin:1px;--_ui5_monthpicker_item_focus_after_width:calc(100% - 0.375rem);--_ui5_monthpicker_item_focus_after_height:calc(100% - 0.375rem);--_ui5_monthpicker_item_focus_after_border:1px dotted var(--sapContent_FocusColor);--_ui5_monthpicker_item_focus_after_offset:2px;--_ui5_monthpicker_item_focus_after_border_radius:0;--_ui5_monthpicker_item_selected_text_color:var(--sapContent_ContrastTextColor);--_ui5_monthpicker_item_selected_background_color:var(--sapSelectedColor);--_ui5_monthpicker_item_selected_hover_color:var(--sapContent_Selected_Background);--_ui5_monthpicker_item_selected_box_shadow:none;--_ui5_monthpicker_item_focus_after_outline:none;--_ui5_monthpicker_item_selected_font_wieght:inherit;--_ui5_monthpicker_item_border_radius:0.25rem;--_ui5_message_strip_icon_width:2.5rem;--_ui5_message_strip_button_border_width:0;--_ui5_message_strip_button_border_style:none;--_ui5_message_strip_button_border_color:transparent;--_ui5_message_strip_button_border_radius:0;--_ui5_message_strip_padding:0.4375rem 2.5rem 0.4375rem 2.5rem;--_ui5_message_strip_padding_block_no_icon:0.4375rem 0.4375rem;--_ui5_message_strip_padding_inline_no_icon:1rem 2.5rem;--_ui5_message_strip_button_height:1.625rem;--_ui5_message_strip_border_width:1px;--_ui5_message_strip_close_button_border:none;--_ui5_message_strip_icon_top:0.4375rem;--_ui5_message_strip_focus_width:1px;--_ui5_message_strip_focus_offset:-2px;--_ui5_message_strip_close_button_top:0.125rem;--_ui5_message_strip_close_button_right:0.125rem;--_ui5_panel_focus_border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_panel_button_root_width:3rem;--_ui5_panel_border_radius:0px;--_ui5_panel_border_radius_expanded:0;--_ui5_panel_default_header_border:none;--_ui5_panel_border_bottom:0.0625rem solid var(--sapGroup_TitleBorderColor);--_ui5_panel_outline_offset:-3px;--_ui5_panel_icon_color:var(--sapContent_IconColor);--_ui5_panel_header_padding_right:0.5rem;--_ui5_panel_header_button_wrapper_padding:.25rem}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_panel_header_button_wrapper_padding:.5625rem .375rem}:root{--_ui5_panel_button_root_width:2.75rem;--_ui5_popup_content_padding_s:1rem;--_ui5_popup_content_padding_m_l:2rem;--_ui5_popup_content_padding_xl:3rem;--_ui5_popup_header_footer_padding_s:1rem;--_ui5_popup_header_footer_padding_m_l:2rem;--_ui5_popup_header_footer_padding_xl:3rem;--_ui5_popup_viewport_margin:10px;--_ui5_popup_header_font_weight:400;--_ui5_popup_header_font_family:var(--sapFontFamily);--_ui5_popup_header_prop_header_text_alignment:flex-start;--_ui5_popup_border_radius:var(--sapElement_BorderCornerRadius);--_ui5_progress_indicator_background_none:var(--sapField_Background);--_ui5_progress_indicator_background_error:var(--sapField_Background);--_ui5_progress_indicator_background_warning:var(--sapField_Background);--_ui5_progress_indicator_background_success:var(--sapField_Background);--_ui5_progress_indicator_background_information:var(--sapField_Background);--_ui5_progress_indicator_value_state_none:var(--sapNeutralElementColor);--_ui5_progress_indicator_value_state_error:var(--sapNegativeElementColor);--_ui5_progress_indicator_value_state_warning:var(--sapCriticalElementColor);--_ui5_progress_indicator_value_state_success:var(--sapPositiveElementColor);--_ui5_progress_indicator_value_state_information:var(--sapInformativeElementColor);--_ui5_progress_indicator_border_color_error:var(--sapField_BorderColor);--_ui5_progress_indicator_border_color_warning:var(--sapField_BorderColor);--_ui5_progress_indicator_border_color_success:var(--sapField_BorderColor);--_ui5_progress_indicator_border_color_information:var(--sapField_BorderColor);--_ui5_progress_indicator_color:var(--sapTextColor);--_ui5_progress_indicator_bar_color:var(--sapContent_ContrastTextColor);--_ui5_progress_indicator_border:0.0625rem solid var(--sapField_BorderColor);--_ui5_progress_indicator_bar_border_max:none;--_ui5_progress_indicator_icon_visibility:none;--_ui5_progress_indicator_side_points_visibility:none;--_ui5_progress_indicator_host_height:1rem;--_ui5_progress_indicator_host_min_height:1rem;--_ui5_progress_indicator_root_border_radius:0.5rem;--_ui5_progress_indicator_root_height:100%;--_ui5_progress_indicator_root_overflow:hidden;--_ui5_progress_indicator_bar_height:100%;--_ui5_progress_indicator_bar_border_radius:0.5rem 0 0 0.5rem;--_ui5_progress_indicator_remaining_bar_overflow:hidden;--_ui5_progress_indicator_icon_size:var(--sapFontSmallSize);--_ui5_progress_indicator_value_margin:0 0.375rem;--_ui5_radio_button_min_width:2.75rem;--_ui5_radio_button_min_width_compact:2rem;--_ui5_radio_button_hover_fill:var(--sapField_Hover_Background);--_ui5_radio_button_hover_fill_error:var(--sapField_Hover_Background);--_ui5_radio_button_hover_fill_warning:var(--sapField_Hover_Background);--_ui5_radio_button_hover_fill_success:var(--sapField_Hover_Background);--_ui5_radio_button_hover_fill_information:var(--sapField_Hover_Background);--_ui5_radio_button_border_width:1px;--_ui5_radio_button_checked_fill:var(--sapSelectedColor);--_ui5_radio_button_checked_error_fill:var(--sapField_InvalidColor);--_ui5_radio_button_checked_warning_fill:var(--sapField_TextColor);--_ui5_radio_button_checked_success_fill:var(--sapField_SuccessColor);--_ui5_radio_button_checked_information_fill:var(--sapField_InformationColor);--_ui5_radio_button_warning_error_border_dash:0;--_ui5_radio_button_outer_ring_color:var(--sapField_BorderColor);--_ui5_radio_button_outer_ring_width:var(--sapField_BorderWidth);--_ui5_radio_button_outer_ring_bg:var(--sapField_Background);--_ui5_radio_button_outer_ring_hover_color:var(--sapField_Hover_BorderColor);--_ui5_radio_button_outer_ring_active_color:var(--sapField_Hover_BorderColor);--_ui5_radio_button_outer_ring_checked_hover_color:var(--sapField_Hover_BorderColor);--_ui5_radio_button_outer_ring_padding:0 0.625rem;--_ui5_radio_button_border_radius:0;--_ui5_radio_button_border:none;--_ui5_radio_button_focus_border:none;--_ui5_radio_button_focus_outline:block;--_ui5_radio_button_hover_shadow:none;--_ui5_radio_button_transition:none;--_ui5_radio_button_hover_background:inherit;--_ui5_radio_button_color:var(--sapField_BorderColor);--_ui5_radio_button_label_offset:1px;--_ui5_radio_button_label_color:var(--sapContent_LabelColor);--_ui5_radio_button_items_align:unset;--_ui5_radio_button_inner_width:initial;--_ui5_radio_button_border_readonly_focus_style:var(--sapContent_FocusStyle);--_ui5_radio_button_inner_ring_radius:22%;--_ui5_radio_button_outer_ring_hover_shadow:none;--_ui5_radio_button_outer_ring_hover_shadow_error:none;--_ui5_radio_button_outer_ring_hover_shadow_warning:none;--_ui5_radio_button_outer_ring_hover_shadow_success:none;--_ui5_radio_button_outer_ring_hover_shadow_information:none;--_ui5_radio_button_read_only_border_type:none;--_ui5_radio_button_inner_ring_color:var(--sapSelectedColor);--_ui5_radio_button_information_border_width:var(--sapField_InformationBorderWidth);--_ui5_radio_button_read_only_border_width:var(--sapField_BorderWidth);--_ui5_rating_indicator_border_radius:0px;--_ui5_rating_indicator_outline_offset:0px;--_ui5_rating_indicator_item_height:1em;--_ui5_rating_indicator_item_width:1em;--_ui5_rating_indicator_readonly_item_height:1em;--_ui5_rating_indicator_readonly_item_width:1em;--_ui5_rating_indicator_readonly_item_spacing:0px;--_ui5_rating_indicator_component_spacing:0.5rem 0px}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_rating_indicator_item_height:0.67em;--_ui5_rating_indicator_item_width:0.67em;--_ui5_rating_indicator_readonly_item_height:0.67em;--_ui5_rating_indicator_readonly_item_width:0.67em;--_ui5_rating_indicator_component_spacing:0.8125rem 0px}:root{--_ui5_segmented_btn_inner_border:0.0625rem solid var(--sapButton_BorderColor);--_ui5_segmented_btn_inner_border_odd_child:0;--_ui5_segmented_btn_inner_pressed_border_odd_child:0;--_ui5_segmented_btn_border_radius:0.375rem;--_ui5_segmented_btn_inner_border_radius:0;--_ui5_segmented_btn_outer_border_radius:0.375rem;--_ui5_segmented_btn_background_color:transparent;--_ui5_select_disabled_background:var(--sapField_Background);--_ui5_select_disabled_border_color:var(--sapField_BorderColor);--_ui5_select_state_error_warning_border_style:solid;--_ui5_select_state_error_warning_border_width:0.125rem;--_ui5_select_hover_icon_left_border:1px solid transparent;--_ui5_select_focus_width:1px;--_ui5_select_label_olor:var(--sapField_TextColor);--_ui5_split_button_focused_border:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_split_button_focused_border_radius:0.125rem;--_ui5_split_button_hover_border_radius:0;--_ui5_split_button_attention_separator_color:var(--sapButton_Attention_BorderColor);--_ui5_split_button_middle_separator_width:0;--_ui5_split_button_middle_separator_left:0;--_ui5_split_button_middle_separator_hover_display:block;--_ui5_split_button_text_button_width:2.25rem;--_ui5_split_button_text_button_right_border_width:0;--_ui5_split_button_transparent_hover_background:var(--sapButton_Lite_Background);--_ui5_split_button_transparent_hover_color:var(--sapButton_Lite_TextColor);--_ui5_split_button_transparent_disabled_background:transparent;--_ui5_split_button_inner_focused_border_radius_outer:0.25rem;--_ui5_split_button_inner_focused_border_radius_inner:0;--_ui5_switch_height:2.75rem;--_ui5_switch_width:3.25rem;--_ui5_switch_compact_height:2rem;--_ui5_switch_compact_width:2.5rem;--_ui5_switch_min_width:3.875rem;--_ui5_switch_compact_min_width:3.5rem;--_ui5_switch_with_label_width:100%;--_ui5_switch_compact_with_label_width:100%;--_ui5_switch_focus_outline:var(--_ui5_switch_foucs_border_size) dotted var(--sapContent_FocusColor);--_ui5_switch_root_outline_top:0.25rem;--_ui5_switch_root_outline_bottom:0.25rem;--_ui5_switch_root_outline_left:0;--_ui5_switch_root_outline_right:0;--_ui5_switch_root_compact_outline_top:0;--_ui5_switch_root_compact_outline_bottom:0;--_ui5_switch_foucs_border_size:1px;--_ui5-switch-root-border-radius:0;--_ui5-switch-root-box-shadow:none;--_ui5_switch_root_after_outline:none;--_ui5-switch-focus:\\\"\\\";--_ui5_switch_disabled_opacity:.4;--_ui5_switch_transform:translateX(100%) translateX(-1.875rem);--_ui5_switch_compact_transform:translateX(100%) translateX(-1.5rem);--_ui5_switch_transform_with_label:translateX(100%) translateX(-1.875rem);--_ui5_switch_compact_transform_with_label:translateX(100%) translateX(-1.5rem);--_ui5_switch_rtl_transform:translateX(-100%) translateX(1.875rem);--_ui5_switch_compact_rtl_transform:translateX(1.5rem) translateX(-100%);--_ui5_switch_rtl_transform_with_label:translateX(-100%) translateX(1.875rem);--_ui5_switch_compact_rtl_transform_with_label:translateX(1.5rem) translateX(-100%);--_ui5_switch_track_with_label_width:100%;--_ui5_switch_track_with_label_compact_width:100%;--_ui5_switch_track_with_label_height:1.375rem;--_ui5_switch_track_with_label_compact_height:1.375rem;--_ui5_switch_track_width:100%;--_ui5_switch_track_compact_width:100%;--_ui5_switch_track_height:1.375rem;--_ui5_switch_track_compact_height:1.375rem;--_ui5_switch_track_border_radius:0.75rem;--_ui5-switch-track-border:1px solid;--_ui5_switch_track_active_background_color:var(--sapButton_Track_Selected_Background);--_ui5_switch_track_inactive_background_color:var(--sapButton_Track_Background);--_ui5_switch_track_hover_active_background_color:var(--sapButton_Track_Selected_Background);--_ui5_switch_track_hover_inactive_background_color:var(--sapButton_Track_Background);--_ui5_switch_track_active_border_color:var(--sapContent_ForegroundBorderColor);--_ui5_switch_track_inactive_border_color:var(--sapContent_ForegroundBorderColor);--_ui5_switch_track_hover_active_border_color:var(--sapButton_Hover_BorderColor);--_ui5_switch_track_hover_inactive_border_color:var(--sapButton_Hover_BorderColor);--_ui5_switch_track_semantic_accept_background_color:var(--sapSuccessBackground);--_ui5_switch_track_semantic_reject_background_color:var(--sapErrorBackground);--_ui5_switch_track_semantic_hover_accept_background_color:var(--sapSuccessBackground);--_ui5_switch_track_semantic_hover_reject_background_color:var(--sapErrorBackground);--_ui5_switch_track_semantic_accept_border_color:var(--sapSuccessBorderColor);--_ui5_switch_track_semantic_reject_border_color:var(--sapErrorBorderColor);--_ui5_switch_track_semantic_hover_accept_border_color:var(--sapSuccessBorderColor);--_ui5_switch_track_semantic_hover_reject_border_color:var(--sapErrorBorderColor);--_ui5_switch_track_transition:none;--_ui5_switch_track_icon_display:none;--_ui5_switch_handle_width:2rem;--_ui5_switch_handle_compact_width:1.625rem;--_ui5_switch_handle_height:2rem;--_ui5_switch_handle_compact_height:1.625rem;--_ui5_switch_handle_with_label_width:2rem;--_ui5_switch_handle_with_label_compact_width:1.625rem;--_ui5_switch_handle_with_label_height:2rem;--_ui5_switch_handle_with_label_compact_height:1.625rem;--_ui5_switch_handle_border:var(--_ui5_switch_handle_border_width) solid var(--sapButton_Handle_BorderColor);--_ui5_switch_handle_border_width:0.0625rem;--_ui5_switch_handle_border_radius:1rem;--_ui5_switch_handle_active_background_color:var(--sapButton_Selected_Background);--_ui5_switch_handle_inactive_background_color:var(--sapButton_TokenBackground);--_ui5_switch_handle_hover_active_background_color:var(--sapButton_Selected_Hover_Background);--_ui5_switch_handle_hover_inactive_background_color:var(--sapButton_Handle_Hover_Background);--_ui5_switch_handle_active_border_color:var(--sapButton_Selected_BorderColor);--_ui5_switch_handle_inactive_border_color:var(--sapContent_ForegroundBorderColor);--_ui5_switch_handle_hover_active_border_color:var(--sapButton_Selected_BorderColor);--_ui5_switch_handle_hover_inactive_border_color:var(--sapButton_Hover_BorderColor);--_ui5_switch_handle_semantic_accept_background_color:var(--sapButton_Background);--_ui5_switch_handle_semantic_reject_background_color:var(--sapButton_Background);--_ui5_switch_handle_semantic_hover_accept_background_color:var(--sapSuccessBackground);--_ui5_switch_handle_semantic_hover_reject_background_color:var(--sapErrorBackground);--_ui5_switch_handle_semantic_accept_border_color:var(--sapSuccessBorderColor);--_ui5_switch_handle_semantic_reject_border_color:var(--sapErrorBorderColor);--_ui5_switch_handle_semantic_hover_accept_border_color:var(--sapSuccessBorderColor);--_ui5_switch_handle_semantic_hover_reject_border_color:var(--sapErrorBorderColor);--_ui5_switch_handle_on_hover_box_shadow:none;--_ui5_switch_handle_off_hover_box_shadow:none;--_ui5_switch_handle_semantic_on_hover_box_shadow:var(--sapContent_Informative_Shadow);--_ui5_switch_handle_semantic_off_hover_box_shadow:var(--sapContent_Negative_Shadow);--_ui5-switch-handle-icon-display:none;--_ui5_switch_handle_left:-0.0625rem;--_ui5-switch-slider-texts-display:inline;--_ui5_switch_text_font_family:\\\"72override\\\",var(--sapFontFamily);--_ui5_switch_text_font_size:var(--sapFontSmallSize);--_ui5_switch_text_compact_font_size:var(--sapFontSmallSize);--_ui5_switch_text_with_label_font_family:\\\"72override\\\",var(--sapFontFamily);--_ui5_switch_text_with_label_font_size:var(--sapFontSmallSize);--_ui5_switch_text_with_label_width:none;--_ui5_switch_text_width:none;--_ui5_switch_text_compact_width:none;--_ui5_switch_text_inactive_left:auto;--_ui5_switch_text_inactive_right:0.125rem;--_ui5_switch_text_active_left:calc(-100% + 2rem);--_ui5_switch_text_compact_active_left:calc(-100% + 1.625rem);--_ui5_switch_text_active_right:auto;--_ui5_switch_text_active_color:var(--sapButton_Track_Selected_TextColor);--_ui5_switch_text_inactive_color:var(--sapTextColor);--_ui5_switch_text_semantic_accept_color:var(--sapPositiveElementColor);--_ui5_switch_text_semantic_reject_color:var(--sapNegativeElementColor);--_ui5_switch_text_overflow:none;--_ui5_switch_text_z_index:inherit;--_ui5_switch_text_hidden:hidden;--_ui5_switch_text_min_width:1.625rem;--_ui5_switch_icon_width:0.75rem;--_ui5_switch_icon_height:0.75rem;--_ui5_tc_header_height_text_only:var(--_ui5_tc_item_text_only_height);--_ui5_tc_header_height_text_with_additional_text:var(--_ui5_tc_item_text_only_with_additional_text_height);--_ui5_tc_header_box_shadow:var(--sapContent_HeaderShadow);--_ui5_tc_header_border_bottom:0.125rem solid var(--sapObjectHeader_Background);--_ui5_tc_headeritem_padding:0 1rem;--_ui5_tc_headerItem_color:var(--sapContent_LabelColor);--_ui5_tc_headerItem_additional_text_color:var(--sapContent_LabelColor);--_ui5_tc_headerItem_text_hover_color:var(--_ui5_tc_headerItem_color);--_ui5_tc_headerItem_text_selected_color:var(--sapSelectedColor);--_ui5_tc_headerItem_text_selected_hover_color:var(--sapSelectedColor);--_ui5_tc_headeritem_text_font_weight:normal;--_ui5_tc_headerItem_additional_text_font_weight:normal;--_ui5_tc_headerItem_neutral_color:var(--sapNeutralColor);--_ui5_tc_headerItem_positive_color:var(--sapPositiveColor);--_ui5_tc_headerItem_negative_color:var(--sapNegativeColor);--_ui5_tc_headerItem_critical_color:var(--sapCriticalColor);--_ui5_tc_headerItem_neutral_border_color:var(--_ui5_tc_headerItem_neutral_color);--_ui5_tc_headerItem_positive_border_color:var(--_ui5_tc_headerItem_positive_color);--_ui5_tc_headerItem_negative_border_color:var(--_ui5_tc_headerItem_negative_color);--_ui5_tc_headerItem_critical_border_color:var(--_ui5_tc_headerItem_critical_color);--_ui5_tc_headerItem_neutral_selected_border_color:var(--_ui5_tc_headerItem_neutral_color);--_ui5_tc_headerItem_positive_selected_border_color:var(--_ui5_tc_headerItem_positive_color);--_ui5_tc_headerItem_negative_selected_border_color:var(--_ui5_tc_headerItem_negative_color);--_ui5_tc_headerItem_critical_selected_border_color:var(--_ui5_tc_headerItem_critical_color);--_ui5_tc_headerItem_transition:none;--_ui5_tc_headerItem_hover_border_visibility:hidden;--_ui5_tc_headerItem_focus_offset:0px;--_ui5_tc_headerItemContent_border_radius:0.125rem 0.125rem 0 0;--_ui5_tc_headerItemContent_border_bottom:0.125rem solid var(--sapSelectedColor);--_ui5_tc_headerItemContent_border_bg:transparent;--_ui5_tc_headerItem_neutral_border_bg:transparent;--_ui5_tc_headerItem_positive_border_bg:transparent;--_ui5_tc_headerItem_negative_border_bg:transparent;--_ui5_tc_headerItem_critical_border_bg:transparent;--_ui5_tc_headerItem_hover_border_bg:transparent;--_ui5_tc_headerItem_hover_selected_hover_border_bg:transparent;--_ui5_tc_headerItemContent_border_height:0;--_ui5_tc_headerItemContent_offset:1rem;--_ui5_tc_headerItemContent_focus_offset:1rem;--_ui5_tc_headerItem_focus_border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);--_ui5_tc_headerItem_text_focus_border_offset_left:0px;--_ui5_tc_headerItem_text_focus_border_offset_right:0px;--_ui5_tc_headerItem_text_focus_border_offset_top:0px;--_ui5_tc_headerItem_text_focus_border_offset_bottom:0px;--_ui5_tc_headerItem_mixed_mode_focus_border_offset_left:0.75rem;--_ui5_tc_headerItem_mixed_mode_focus_border_offset_right:0.625rem;--_ui5_tc_headerItem_mixed_mode_focus_border_offset_top:0.75rem;--_ui5_tc_headerItem_mixed_mode_focus_border_offset_bottom:0.75rem;--_ui5_tc_headerItemContent_padding:0;--_ui5_tc_headerItemContent_focus_border:none;--_ui5_tc_headerItemContent_default_focus_border:none;--_ui5_tc_headerItemContent_focus_border_radius:0;--_ui5_tc_headerItemSemanticIcon_display:none;--_ui5_tc_headerItemSemanticIcon_size:0.75rem;--_ui5_tc_headerItem_focus_border_radius:0px;--_ui5_tc_mixedMode_itemText_color:var(--sapContent_LabelColor);--_ui5_tc_mixedMode_itemText_font_family:var(--sapFontFamily);--_ui5_tc_mixedMode_itemText_font_size:var(--sapFontSmallSize);--_ui5_tc_mixedMode_itemText_font_weight:normal;--_ui5_tc_overflowItem_neutral_color:var(--sapNeutralColor);--_ui5_tc_overflowItem_positive_color:var(--sapPositiveColor);--_ui5_tc_overflowItem_negative_color:var(--sapNegativeColor);--_ui5_tc_overflowItem_critical_color:var(--sapCriticalColor);--_ui5_tc_overflowItem_focus_offset:0.125rem;--_ui5_tc_overflowItem_extraIndent:0rem;--_ui5_tc_headerItemIcon_border:1px solid var(--sapHighlightColor);--_ui5_tc_headerItemIcon_color:var(--sapHighlightColor);--_ui5_tc_headerItemIcon_selected_background:var(--sapHighlightColor);--_ui5_tc_headerItemIcon_selected_color:var(--sapGroup_ContentBackground);--_ui5_tc_headerItemIcon_positive_selected_background:var(--sapPositiveColor);--_ui5_tc_headerItemIcon_negative_selected_background:var(--sapNegativeColor);--_ui5_tc_headerItemIcon_critical_selected_background:var(--sapCriticalColor);--_ui5_tc_headerItemIcon_neutral_selected_background:var(--sapNeutralColor);--_ui5_tc_headerItemIcon_semantic_selected_color:var(--sapGroup_ContentBackground);--_ui5_tc_headerItemIcon_background_color:transparent;--_ui5_tc_content_border_bottom:0.125rem solid var(--sapObjectHeader_BorderColor);--_ui5_tc_headerItem_focus_border_offset:-2px;--_ui5_tc_headerItemIcon_focus_border_radius:0}.sapUiSizeCompact,.ui5-content-density-compact,:root,[data-ui5-compact-size]{--_ui5_tc_header_height:var(--_ui5_tc_item_height)}:root{--_ui5_tc_header_border_bottom:0.0625rem solid var(--sapObjectHeader_Background);--_ui5_tc_headerItemContent_border_bottom:0.1875rem solid var(--sapSelectedColor);--_ui5_tc_overflowItem_default_color:var(--sapNeutralTextColor);--_ui5_tc_overflowItem_current_color:CurrentColor;--_ui5_tc_content_border_bottom:0.0625rem solid var(--sapObjectHeader_BorderColor);--_ui5_tc_headerItem_text_hover_color:#1a1c1f;--_ui5_textarea_focus_after_width:1px;--_ui5_textarea_warning_border_style:solid;--_ui5_textarea_state_border_width:0.125rem;--_ui5_textarea_information_border_width:0.125rem;--_ui5_textarea_focus_box_shadow:none;--_ui5_textarea_value_state_warning_focus_box_shadow:none;--_ui5_textarea_value_state_error_focus_box_shadow:none;--_ui5_textarea_value_state_success_focus_box_shadow:none;--_ui5_textarea_hover_box_shadow:none;--_ui5_textarea_inner_border_width:var(--sapField_BorderWidth);--_ui5_textarea_success_border_width:1px;--_ui5_textarea_focus_outline:var(--_ui5_textarea_focus_after_width) dotted var(--sapContent_FocusColor);--_ui5_textarea_focus_outline_offset:-3px;--_ui5_textarea_value_state_focus_outline:var(--_ui5_input_focus_border_width) dotted var(--sapContent_FocusColor);--_ui5_textarea_value_state_focus_outline_offset:-4px;--_ui5_textarea_after_element_display:none;--_ui5_textarea_placeholder_font_style:italic;--_ui5_input_warning_font_weight:normal;--_ui5_textarea_value_state_error_warning_placeholder_font_weight:normal;--_ui5_textarea_error_placeholder_font_style:italic;--_ui5_textarea_error_placeholder_color:var(--sapField_PlaceholderTextColor);--_ui5_textarea_disabled_background_color:var(--sapField_ReadOnly_Background);--_ui5_textarea_error_hover_background_color:var(--sapField_Hover_Background);--_ui5_textarea_error_focused_background_color:var(--sapField_Focus_Background);--_ui5-time_picker_border_radius:0;--_ui5_time_picker_border:0.0625rem solid transparent;--_ui5_toast_vertical_offset:3rem;--_ui5_toast_horizontal_offset:2rem;--_ui5_toast_background:var(--sapList_Background);--_ui5_toast_shadow:var(--sapContent_Shadow2);--_ui5_wheelslider_item_text_size:var(--sapFontSize);--_ui5_wheelslider_selected_item_hover_background_color:var(--sapList_BorderColor);--_ui5_wheelslider_label_text_size:var(--sapFontSmallSize);--_ui5_wheelslider_selection_frame_margin_top:calc(var(--_ui5_wheelslider_item_height)*2);--_ui5_wheelslider_mobile_selection_frame_margin_top:calc(var(--_ui5_wheelslider_item_height)*4);--_ui5_wheelslider_label_text_color:var(--sapContent_LabelColor);--_ui5_wheelslider_height:240px;--_ui5_wheelslider_mobile_height:432px;--_ui5_wheelslider_item_width:48px;--_ui5_wheelslider_item_height:46px;--_ui5_wheelslider_arrows_visibility:hidden;--_ui_wheelslider_item_expanded_hover_color:var(--sapList_Hover_Background);--_ui5_wheelslider_item_background_color:var(--sapLegend_WorkingBackground);--_ui5_wheelslider_item_text_color:var(--sapTextColor);--_ui_wheelslider_item_hover_color:var(--sapButton_Emphasized_Hover_BorderColor);--_ui5_wheelslider_item_border_color:var(--sapList_Background);--_ui5_wheelslider_item_hovered_border_color:var(--sapList_Background);--_ui5_wheelslider_collapsed_item_text_color:var(--_ui5_wheelslider_item_border_color);--_ui5_wheelslider_selected_item_background_color:var(--sapContent_Selected_Background);--_ui5_wheelslider_selected_item_hover_background_color:var(--sapButton_Emphasized_Hover_BorderColor);--_ui5_wheelslider_active_item_background_color:var(--sapContent_Selected_Background);--_ui5_wheelslider_active_item_text_color:var(--sapContent_Selected_TextColor);--_ui5_wheelslider_selection_frame_color:var(--sapList_SelectionBorderColor);--_ui_wheelslider_item_border_radius:var(--_ui5_button_border_radius);--_ui5_toggle_button_pressed_focussed:var(--sapButton_Selected_BorderColor);--_ui5_toggle_button_pressed_focussed_hovered:var(--sapButton_Selected_BorderColor);--_ui5_toggle_button_selected_positive_text_color:var(--sapButton_Selected_TextColor);--_ui5_toggle_button_selected_negative_text_color:var(--sapButton_Selected_TextColor);--_ui5_toggle_button_selected_attention_text_color:var(--sapButton_Selected_TextColor);--_ui5_toggle_button_emphasized_pressed_focussed_hovered:var(--sapContent_FocusColor);--_ui5_yearpicker_item_selected_focus:var(--sapContent_Selected_Background);--_ui5_yearpicker_item_selected_hover_color:var(--sapContent_Selected_Background);--_ui5_yearpicker_item_border:none;--_ui5_yearpicker_item_border_radius:0;--_ui5_yearpicker_item_margin:1px;--_ui5_yearpicker_item_focus_after_width:calc(100% - 0.375rem);--_ui5_yearpicker_item_focus_after_height:calc(100% - 0.375rem);--_ui5_yearpicker_item_focus_after_border:1px dotted var(--sapContent_FocusColor);--_ui5_yearpicker_item_focus_after_offset:2px;--_ui5_yearpicker_item_focus_after_border_radius:0;--_ui5_yearpicker_item_selected_background_color:var(--sapSelectedColor);--_ui5_yearpicker_item_selected_text_color:var(--sapContent_ContrastTextColor);--_ui5_yearpicker_item_selected_box_shadow:none;--_ui5_yearpicker_item_focus_after_outline:none;--_ui5_yearpicker_item_border_radius:0.25rem;--_ui5_calendar_header_arrow_button_border:none;--_ui5_calendar_header_arrow_button_border_radius:0.25rem;--_ui5_calendar_header_middle_button_width:6.25rem;--_ui5_calendar_header_middle_button_flex:1 1 auto;--_ui5_calendar_header_middle_button_focus_border_radius:0.25rem;--_ui5_calendar_header_middle_button_focus_border:none;--_ui5_calendar_header_middle_button_focus_after_display:block;--_ui5_calendar_header_middle_button_focus_after_width:calc(100% - 0.25rem);--_ui5_calendar_header_middle_button_focus_after_height:calc(100% - 0.25rem);--_ui5_calendar_header_middle_button_focus_after_top_offset:1px;--_ui5_calendar_header_middle_button_focus_after_left_offset:1px;--_ui5_calendar_header_button_background_color:none;--_ui5_calendar_header_arrow_button_box_shadow:none;--_ui5_calendar_header_middle_button_focus_background:transparent;--_ui5_calendar_header_middle_button_focus_outline:none;--_ui5_calendar_header_middle_button_focus_active_outline:none;--_ui5_calendar_header_middle_button_focus_active_background:var(--sapButton_Active_Background);--_ui5_calendar_header_middle_button_focus_after_border:1px dotted var(--sapContent_FocusColor);--_ui5_calendar_header_middle_button_focus_after_width:calc(100% - 0.375rem);--_ui5_calendar_header_middle_button_focus_after_height:calc(100% - 0.375rem);--_ui5_calendar_header_middle_button_focus_after_top_offset:0.125rem;--_ui5_calendar_header_middle_button_focus_after_left_offset:0.125rem;--ui5_table_bottom_border:1px solid var(--sapList_BorderColor);--ui5_table_header_row_outline_width:1px;--ui5_table_multiselect_column_width:2.75rem;--ui5_table_header_row_border_bottom_color:var(--sapList_BorderColor);--ui5_table_header_row_border_width:1px;--ui5_table_header_row_font_weight:normal;--ui5_table_row_outline_width:1px;--ui5_table_group_row_font-weight:normal;--ui5_table_border_width:0 0 1px 0;--_ui5_load_more_padding:0;--_ui5_load_more_border:1px top solid transparent;--_ui5_load_more_border_radius:none;--_ui5_load_more_outline_width:1px;--_ui5_token_background:var(--sapButton_TokenBackground);--_ui5_token_readonly_background:var(--sapButton_TokenBackground);--_ui5_token_readonly_color:var(--sapContent_LabelColor);--_ui5_token_border_radius:var(--sapButton_BorderCornerRadius);--_ui5_token_outline_offset:-0.125rem;--_ui5_token_text_color:var(--sapButton_TextColor);--_ui5_token_hover_background:var(--sapButton_Hover_Background);--_ui5_token_hover_border_color:var(--sapButton_Hover_BorderColor);--_ui5_token_top_margin:0.25rem;--_ui5_token_bottom_margin:0.25rem;--_ui5_token_right_margin:0.3125rem;--_ui5_token_padding:0.25rem 0;--_ui5_token_left_padding:0.3125rem;--_ui5_token_readonly_padding:0.375rem;--_ui5_token_selected_focus_outline:var(--_ui5_token_focus_outline_width) dotted var(--sapContent_ContrastFocusColor);--_ui5_token_focus_outline:var(--_ui5_token_focus_outline_width) dotted var(--sapContent_FocusColor);--_ui5_token_selected_hover_background:var(--sapButton_Selected_Hover_Background);--_ui5_token_selected_hover_border_color:var(--sapButton_Selected_Hover_BorderColor);--_ui5_token_focused_selected_border:1px solid var(--sapButton_Selected_BorderColor);--ui5_token_focus_pseudo_element_content:none;--_ui5_token_focus_offset:-0.25rem;--_ui5_token_focus_outline_width:0.0625rem;--_ui5_token_text_color:var(--sapTextColor);--_ui5_tokenizer_padding:0.3125rem;--_ui5_value_state_message_border:none;--_ui5_value_state_header_border:none;--_ui5_input_value_state_icon_display:none;--_ui5_value_state_message_padding:0.5rem;--_ui5_value_state_header_padding:.5625rem 1rem;--_ui5_value_state_message_popover_box_shadow:none;--_ui5_value_state_message_icon_width:.875rem;--_ui5_value_state_message_icon_height:.875rem;--_ui5_input_value_state_icon_offset:.5rem;--_ui5_value_state_header_offset:-0.125rem;--_ui5-multi_combobox_token_margin_top:3px;--_ui5-multi_combobox_token_margin_top:1px;--_ui5_slider_progress_container_background:var(--sapField_BorderColor);--_ui5_slider_progress_container_dot_display:none;--_ui5_slider_progress_container_dot_background:var(--sapField_BorderColor);--_ui5_slider_progress_border:none;--_ui5_slider_padding:1.406rem 1.0625rem;--_ui5_slider_inner_height:0.25rem;--_ui5_slider_outer_height:1.6875rem;--_ui5_slider_progress_border_radius:0.25rem;--_ui5_slider_progress_background:var(--sapActiveColor);--_ui5_slider_handle_icon_display:none;--_ui5_slider_handle_height:1.625rem;--_ui5_slider_handle_width:1.625rem;--_ui5_slider_handle_border:solid 0.125rem var(--sapField_BorderColor);--_ui5_slider_handle_border_radius:1rem;--_ui5_slider_handle_box_shadow:none;--_ui5_slider_handle_box_shadow_focus:none;--_ui5_range_slider_handle_background:#fff;--_ui5_slider_handle_top:-0.825rem;--_ui5_slider_tickmark_bg:var(--sapField_BorderColor);--_ui5_slider_tickmark_in_range_bg:var(--sapButton_Active_Background);--_ui5_slider_handle_margin_left:calc(var(--_ui5_slider_handle_width)/2*-1);--_ui5_slider_handle_hover_border:0.125rem solid var(--sapButton_Hover_BorderColor);--_ui5_slider_handle_outline:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_slider_handle_focus_border:var(--_ui5_slider_handle_hover_border);--_ui5_slider_handle_active_border:var(--_ui5_slider_handle_hover_border);--_ui5_slider_handle_focused_top:var(--_ui5_slider_handle_top);--_ui5_slider_handle_focused_margin_left:var(--_ui5_slider_handle_margin_left);--_ui5_slider_handle_outline_offset:0.075rem;--_ui5_slider_icon_left:0.5rem;--_ui5_slider_icon_top:0.125rem;--_ui5_range_slider_handle_hover_background:rgba(var(--sapButton_Background),0.25);--_ui5_range_slider_handle_hover_icon_display:none;--_ui5_slider_progress_outline:0.0625rem dotted var(--sapContent_FocusColor);--_ui5_slider_progress_outline_offset:-0.8125rem;--_ui5_slider_tickmark_top:-0.375rem;--_ui5_slider_disabled_opacity:0.4;--_ui5_slider_tooltip_fontsize:var(--sapFontSmallSize);--_ui5_slider_tooltip_color:var(--sapContent_LabelColor);--_ui5_slider_tooltip_background:var(--sapField_Background);--_ui5_slider_tooltip_border_radius:var(--sapElement_BorderCornerRadius);--_ui5_slider_tooltip_border_color:var(--sapField_BorderColor);--_ui5_slider_tooltip_border:0.0625rem solid var(--_ui5_slider_tooltip_border_color);--_ui5_slider_tooltip_box_shadow:none;--_ui5_slider_tooltip_padding:0.4125rem;--_ui5_slider_tooltip_height:1rem;--_ui5_slider_tooltip_min_width:2rem;--_ui5_slider_tooltip_bottom:2rem;--_ui5_slider_label_fontsize:var(--sapFontSmallSize);--_ui5_slider_label_color:var(--sapContent_LabelColor);--_ui5_range_slider_progress_focus_display:none;--_ui5_range_slider_progress_focus_top:-1.063rem;--_ui5_range_slider_progress_focus_left:-1.438rem;--_ui5_range_slider_progress_focus_padding:0 1.375rem 0 1.438rem;--_ui5_range_slider_progress_focus_height:2rem;--_ui5_range_slider_legacy_progress_focus_display:block;--_ui5_slider_handle_focus_width:0;--_ui5_slider_start_end_point_size:.375rem;--_ui5_slider_start_end_point_left:-0.875rem;--_ui5_slider_start_end_point_top:-.1875rem;--_ui5_slider_handle_hover_box_shadow:none;--_ui5_slider_handle_background_focus:var(--_ui5_slider_handle_background);--_ui5_slider_handle_active_box_shadow:none;--_ui5_slider_handle_focused_tooltip_distance:var(--_ui5_slider_tooltip_bottom);--_ui5_slider_handle_box_sizing:content-box;--_ui5_slider_tooltip_border_box:content-box;--_ui5_range_slider_handle_active_background:var(--_ui5_range_slider_handle_background);--_ui5_range_slider_active_handle_icon_display:none;--_ui5_range_slider_progress_focus_width:100%;--_ui5_slider_tickmark_height:1rem;--_ui5_slider_tickmark_top:-.3125rem;--_ui5_slider_progress_box_sizing:content-box;--_ui5_slider_tickmark_in_range_bg:var(--sapField_BorderColor);--_ui5_range_slider_focus_outline_width:100%;--_ui5_slider_progress_outline_offset_left:0;--_ui5_range_slider_focus_outline_radius:0;--_ui5_slider_progress_container_top:0;--_ui5_slider_progress_height:100%;--_ui5_slider_active_progress_border:none;--_ui5_slider_active_progress_left:0;--_ui5_slider_active_progress_top:0;--_ui5_slider_no_tickmarks_progress_container_top:var(--_ui5_slider_progress_container_top);--_ui5_slider_no_tickmarks_progress_height:var(--_ui5_slider_progress_height);--_ui5_slider_no_tickmarks_active_progress_border:var(--_ui5_slider_active_progress_border);--_ui5_slider_no_tickmarks_active_progress_left:var(--_ui5_slider_active_progress_left);--_ui5_slider_no_tickmarks_active_progress_top:var(--_ui5_slider_active_progress_top);--_ui5_slider_handle_focus_visibility:none;--_ui5_slider_handle_icon_size:1rem}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_slider_handle_focused_top:-0.625rem;--_ui5_slider_handle_focused_margin_left:-0.75rem;--_ui5_slider_handle_icon_size:.875rem;--_ui5_slider_padding:1rem 1.0625rem}:root{--_ui5_slider_inner_min_width:4rem;--_ui5_slider_handle_background_focus:var(--sapButton_Background);--_ui5_range_slider_handle_background_focus:transparent;--_ui5_slider_handle_top:-.875rem;--_ui5_range_slider_handle_background:transparent;--_ui5_range_slider_handle_active_background:transparent;--_ui5_slider_handle_background:var(--sapButton_Background);--_ui5_slider_handle_hover_background:var(--sapButton_Hover_Background);--_ui5_range_slider_root_hover_handle_bg:transparent;--_ui5_range_slider_root_hover_handle_icon_display:none;--_ui5_range_slider_root_active_handle_icon_display:none;--_ui5_slider_handle_width:1.875rem;--_ui5_slider_handle_height:1.875rem;--_ui5_slider_handle_box_sizing:border-box;--_ui5_slider_tickmark_top:-.34375rem;--_ui5_step_input_input_error_background_color:var(--sapField_InvalidBackground);--_ui5-step_input_button_state_hover_background_color:var(--sapField_Background);--_ui5_step_input_border_style:1px solid var(--sapField_BorderColor);--_ui5_step_input_border_style_hover:1px solid var(--sapField_Hover_BorderColor);--_ui5_step_input_button_background_color:var(--sapField_Background);--_ui5_step_input_input_border:1px solid transparent;--_ui5_step_input_input_margin_top:-0.0625rem;--_ui5_step_input_button_display:inline-block;--_ui5_step_input_button_left:0;--_ui5_step_input_button_right:0;--_ui5_step_input_input_border_focused_after:var(--_ui5_input_focus_border_width) dotted var(--sapContent_FocusColor);--_ui5_step_input_input_border_top_bottom_focused_after:0.0625rem;--_ui5_step_input_input_border_radius_focused_after:0;--_ui5_step_input_input_information_border_color_focused_after:var(--sapField_BorderColor);--_ui5_step_input_input_warning_border_color_focused_after:var(--sapField_BorderColor);--_ui5_step_input_input_success_border_color_focused_after:var(--sapField_BorderColor);--_ui5_step_input_input_error_border_color_focused_after:var(--sapField_BorderColor);--_ui5_step_input_disabled_button_background:var(--sapField_ReadOnly_Background);--_ui5_step_input_border_color_hover:var(--sapField_Hover_Background);--_ui5_step_input_border_hover:1px solid var(--sapField_Hover_BorderColor);--_ui5_input_input_background_color:var(--sapField_InvalidBackground);--_ui5_step_input_min_width:7.25rem}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Icon.css\",content:\":host{-webkit-tap-highlight-color:rgba(0,0,0,0)}:host([hidden]){display:none}:host([invalid]){display:none}:host(:not([hidden]).ui5_hovered){opacity:.7}:host{display:inline-block;width:1rem;height:1rem;color:var(--sapContent_NonInteractiveIconColor);fill:currentColor;outline:none}:host([interactive][focused]) .ui5-icon-root{outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--ui5-icon-focus-border-radius)}.ui5-icon-root{display:flex;outline:none;vertical-align:top}.ui5-icon-root:not([dir=ltr]){transform:var(--_ui5_icon_transform_scale);transform-origin:center}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { getIconData, getIconDataSync } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { isSpace, isEnter } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport IconTemplate from \"./generated/templates/IconTemplate.lit.js\";\n\n// Styles\nimport iconCss from \"./generated/themes/Icon.css.js\";\n\nconst ICON_NOT_FOUND = \"ICON_NOT_FOUND\";\nconst PRESENTATION_ROLE = \"presentation\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-icon\",\n\tlanguageAware: true,\n\tthemeAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.Icon.prototype */ {\n\t\t/**\n\t\t * Defines if the icon is interactive (focusable and pressable)\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the unique identifier (icon name) of the component.\n\t\t *
\n\t\t *\n\t\t * To browse all available icons, see the\n\t\t * SAP Icons,\n\t\t * SAP Fiori Tools and\n\t\t * SAP Business Suite collections.\n\t\t *
\n\t\t *\n\t\t * Example:\n\t\t *
\n\t\t * name='add'
, name='delete'
, name='employee'
.\n\t\t *
\n\t\t *\n\t\t * Note: To use the SAP Fiori Tools icons,\n\t\t * you need to set the tnt
prefix in front of the icon's name.\n\t\t *
\n\t\t *\n\t\t * Example:\n\t\t *
\n\t\t * name='tnt/antenna'
, name='tnt/actor'
, name='tnt/api'
.\n\t\t *
\n\t\t *\n\t\t * Note: To use the SAP Business Suite icons,\n\t\t * you need to set the business-suite
prefix in front of the icon's name.\n\t\t *
\n\t\t *\n\t\t * Example:\n\t\t *
\n\t\t * name='business-suite/3d'
, name='business-suite/1x2-grid-layout'
, name='business-suite/4x4-grid-layout'
.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t*/\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text alternative of the component.\n\t\t * If not provided a default text alternative will be set, if present.\n\t\t *
\n\t\t * Note: Every icon should have a text alternative in order to\n\t\t * calculate its accessible name.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component should have a tooltip.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tshowTooltip: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessibility role of the component.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.1.0\n\t\t */\n\t\taccessibleRole: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the ARIA hidden state of the component.\n\t\t * Note: If the role is presentation the default value of aria-hidden will be true.\n\t\t * @private\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tpathData: {\n\t\t\ttype: String,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\taccData: {\n\t\t\ttype: Object,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t* @private\n\t\t*/\n\t\tinvalid: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\teffectiveAccessibleName: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: undefined,\n\t\t\tnoAttribute: true,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Icon.prototype */ {\n\t\t/**\n\t\t * Fired on mouseup, space and enter if icon is interactive\n\t\t * @private\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\tclick: {},\n\t},\n};\n\n/**\n * @class\n * \n *\n * The ui5-icon
component represents an SVG icon.\n * There are two main scenarios how the ui5-icon
component is used:\n * as a purely decorative element,
\n * or as an interactive element that can be focused and clicked.\n *\n * Usage
\n *\n * 1. Get familiar with the icons collections.\n *
\n * Before displaying an icon, you need to explore the icons collections to find and import the desired icon.\n *
\n * Currently there are 3 icons collection, available as 3 npm packages:\n *
\n *\n * \n * - \n * @ui5/webcomponents-icons represents the \"SAP-icons\" collection and includes the following\n * icons.\n *
\n * - \n * @ui5/webcomponents-icons-tnt represents the \"tnt\" collection and includes the following\n * icons.\n *
\n * - \n * @ui5/webcomponents-icons-icons-business-suite represents the \"business-suite\" collection and includes the following\n * icons.\n *
\n *
\n *\n * 2. After exploring the icons collections, add one or more of the packages as dependencies to your project.\n *
\n * npm i @ui5/webcomponents-icons
\n * npm i @ui5/webcomponents-icons-tnt
\n * npm i @ui5/webcomponents-icons-business-suite
\n *
\n *\n * 3. Then, import the desired icon.\n *
\n * import \"@ui5/{package_name}/dist/{icon_name}.js\";
\n *
\n *\n * For Example:\n *
\n *\n * For the standard \"SAP-icons\" icon collection, import an icon from the @ui5/webcomponents-icons
package:\n *
\n * import \"@ui5/webcomponents-icons/dist/employee.js\";
\n *
\n *\n * For the \"tnt\" (SAP Fiori Tools) icon collection, import an icon from the @ui5/webcomponents-icons-tnt
package:\n *
\n * import \"@ui5/webcomponents-icons-tnt/dist/antenna.js\";
\n *
\n *\n * For the \"business-suite\" (SAP Business Suite) icon collection, import an icon from the @ui5/webcomponents-icons-business-suite
package:\n *
\n * import \"@ui5/webcomponents-icons-business-suite/dist/ab-testing.js\";
\n *
\n *\n * 4. Display the icon using the ui5-icon
web component.
\n * Set the icon collection (\"SAP-icons\", \"tnt\" or \"business-suite\" - \"SAP-icons\" is the default icon collection and can be skipped)
\n * and the icon name to the name
property.\n *
\n *\n * <ui5-icon name=\"employee\"></ui5-icon>
\n * <ui5-icon name=\"tnt/antenna\"></ui5-icon>
\n * <ui5-icon name=\"business-suite/ab-testing\"></ui5-icon>
\n *\n * Keyboard Handling
\n *\n * \n * - [SPACE, ENTER, RETURN] - Fires the
click
event if the interactive
property is set to true. \n * - [SHIFT] - If [SPACE] or [ENTER],[RETURN] is pressed, pressing [SHIFT] releases the ui5-icon without triggering the click event.
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Icon.js\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Icon\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-icon\n * @implements sap.ui.webcomponents.main.IIcon\n * @public\n */\nclass Icon 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 IconTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn iconCss;\n\t}\n\n\t_onFocusInHandler(event) {\n\t\tif (this.interactive) {\n\t\t\tthis.focused = true;\n\t\t}\n\t}\n\n\t_onFocusOutHandler(event) {\n\t\tthis.focused = false;\n\t}\n\n\t_onkeydown(event) {\n\t\tif (!this.interactive) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.fireEvent(\"click\");\n\t\t}\n\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault(); // prevent scrolling\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (this.interactive && isSpace(event)) {\n\t\t\tthis.fireEvent(\"click\");\n\t\t}\n\t}\n\n\t_onClickHandler(event) {\n\t\t// prevent the native event and fire custom event to ensure the noConfict \"ui5-click\" is fired\n\t\tevent.stopPropagation();\n\t\tthis.fireEvent(\"click\");\n\t}\n\n\t/**\n\t* Enforce \"ltr\" direction, based on the icons collection metadata.\n\t*/\n\tget _dir() {\n\t\treturn this.ltr ? \"ltr\" : undefined;\n\t}\n\n\tget effectiveAriaHidden() {\n\t\tif (this.ariaHidden === \"\") {\n\t\t\tif (this.isDecorative) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.ariaHidden;\n\t}\n\n\tget tabIndex() {\n\t\treturn this.interactive ? \"0\" : undefined;\n\t}\n\n\tget isDecorative() {\n\t\treturn this.effectiveAccessibleRole === PRESENTATION_ROLE;\n\t}\n\n\tget effectiveAccessibleRole() {\n\t\tif (this.accessibleRole) {\n\t\t\treturn this.accessibleRole;\n\t\t}\n\n\t\tif (this.interactive) {\n\t\t\treturn \"button\";\n\t\t}\n\n\t\treturn this.effectiveAccessibleName ? \"img\" : PRESENTATION_ROLE;\n\t}\n\n\tasync onBeforeRendering() {\n\t\tconst name = this.name;\n\t\tif (!name) {\n\t\t\t/* eslint-disable-next-line */\n\t\t\treturn console.warn(\"Icon name property is required\", this);\n\t\t}\n\t\tlet iconData = getIconDataSync(name);\n\t\tif (!iconData) {\n\t\t\ticonData = await getIconData(name);\n\t\t}\n\n\t\tif (iconData === ICON_NOT_FOUND) {\n\t\t\tthis.invalid = true;\n\t\t\t/* eslint-disable-next-line */\n\t\t\treturn console.warn(`Required icon is not registered. You can either import the icon as a module in order to use it e.g. \"@ui5/webcomponents-icons/dist/${name.replace(\"sap-icon://\", \"\")}.js\", or setup a JSON build step and import \"@ui5/webcomponents-icons/dist/AllIcons.js\".`);\n\t\t}\n\n\t\tif (!iconData) {\n\t\t\tthis.invalid = true;\n\t\t\t/* eslint-disable-next-line */\n\t\t\treturn console.warn(`Required icon is not registered. Invalid icon name: ${this.name}`);\n\t\t}\n\n\t\t// in case a new valid name is set, show the icon\n\t\tthis.invalid = false;\n\t\tthis.pathData = iconData.pathData;\n\t\tthis.accData = iconData.accData;\n\t\tthis.ltr = iconData.ltr;\n\t\tthis.packageName = iconData.packageName;\n\n\t\tthis._onclick = this.interactive ? this._onClickHandler.bind(this) : undefined;\n\t\tthis._onfocusout = this.interactive ? this._onFocusOutHandler.bind(this) : undefined;\n\t\tthis._onfocusin = this.interactive ? this._onFocusInHandler.bind(this) : undefined;\n\n\t\tif (this.accessibleName) {\n\t\t\tthis.effectiveAccessibleName = this.accessibleName;\n\t\t} else if (this.accData) {\n\t\t\tconst i18nBundle = await getI18nBundle(this.packageName);\n\t\t\tthis.effectiveAccessibleName = i18nBundle.getText(this.accData) || undefined;\n\t\t}\n\t}\n\n\tget hasIconTooltip() {\n\t\treturn this.showTooltip && this.effectiveAccessibleName;\n\t}\n}\n\nIcon.define();\n\nexport default Icon;\n","const ARIA_LABEL_CARD_CONTENT = {key: \"ARIA_LABEL_CARD_CONTENT\", defaultText: \"Card Content\"};const ARIA_ROLEDESCRIPTION_CARD = {key: \"ARIA_ROLEDESCRIPTION_CARD\", defaultText: \"Card\"};const ARIA_ROLEDESCRIPTION_CARD_HEADER = {key: \"ARIA_ROLEDESCRIPTION_CARD_HEADER\", defaultText: \"Card Header\"};const ARIA_ROLEDESCRIPTION_INTERACTIVE_CARD_HEADER = {key: \"ARIA_ROLEDESCRIPTION_INTERACTIVE_CARD_HEADER\", defaultText: \"Interactive Card Header\"};const AVATAR_TOOLTIP = {key: \"AVATAR_TOOLTIP\", defaultText: \"Avatar\"};const AVATAR_GROUP_DISPLAYED_HIDDEN_LABEL = {key: \"AVATAR_GROUP_DISPLAYED_HIDDEN_LABEL\", defaultText: \"{0} displayed, {1} hidden.\"};const AVATAR_GROUP_SHOW_COMPLETE_LIST_LABEL = {key: \"AVATAR_GROUP_SHOW_COMPLETE_LIST_LABEL\", defaultText: \"Activate for complete list.\"};const AVATAR_GROUP_ARIA_LABEL_INDIVIDUAL = {key: \"AVATAR_GROUP_ARIA_LABEL_INDIVIDUAL\", defaultText: \"Individual avatars.\"};const AVATAR_GROUP_ARIA_LABEL_GROUP = {key: \"AVATAR_GROUP_ARIA_LABEL_GROUP\", defaultText: \"Conjoined avatars.\"};const AVATAR_GROUP_MOVE = {key: \"AVATAR_GROUP_MOVE\", defaultText: \"Press ARROW keys to move.\"};const BADGE_DESCRIPTION = {key: \"BADGE_DESCRIPTION\", defaultText: \"Badge\"};const BREADCRUMB_ITEM_POS = {key: \"BREADCRUMB_ITEM_POS\", defaultText: \"{0} of {1}\"};const BREADCRUMBS_ARIA_LABEL = {key: \"BREADCRUMBS_ARIA_LABEL\", defaultText: \"Breadcrumb Trail\"};const BREADCRUMBS_OVERFLOW_ARIA_LABEL = {key: \"BREADCRUMBS_OVERFLOW_ARIA_LABEL\", defaultText: \"More\"};const BREADCRUMBS_CANCEL_BUTTON = {key: \"BREADCRUMBS_CANCEL_BUTTON\", defaultText: \"Cancel\"};const BUSY_INDICATOR_TITLE = {key: \"BUSY_INDICATOR_TITLE\", defaultText: \"Please wait\"};const BUTTON_ARIA_TYPE_ACCEPT = {key: \"BUTTON_ARIA_TYPE_ACCEPT\", defaultText: \"Positive Action\"};const BUTTON_ARIA_TYPE_REJECT = {key: \"BUTTON_ARIA_TYPE_REJECT\", defaultText: \"Negative Action\"};const BUTTON_ARIA_TYPE_EMPHASIZED = {key: \"BUTTON_ARIA_TYPE_EMPHASIZED\", defaultText: \"Emphasized\"};const CAROUSEL_OF_TEXT = {key: \"CAROUSEL_OF_TEXT\", defaultText: \"of\"};const CAROUSEL_DOT_TEXT = {key: \"CAROUSEL_DOT_TEXT\", defaultText: \"Item {0} of {1} displayed\"};const CAROUSEL_PREVIOUS_ARROW_TEXT = {key: \"CAROUSEL_PREVIOUS_ARROW_TEXT\", defaultText: \"Previous Page\"};const CAROUSEL_NEXT_ARROW_TEXT = {key: \"CAROUSEL_NEXT_ARROW_TEXT\", defaultText: \"Next Page\"};const COLORPALETTE_CONTAINER_LABEL = {key: \"COLORPALETTE_CONTAINER_LABEL\", defaultText: \"Color Palette - Predefined Colors\"};const COLORPALETTE_POPOVER_TITLE = {key: \"COLORPALETTE_POPOVER_TITLE\", defaultText: \"Color Palette\"};const COLORPALETTE_COLOR_LABEL = {key: \"COLORPALETTE_COLOR_LABEL\", defaultText: \"Color\"};const COLOR_PALETTE_DIALOG_CANCEL_BUTTON = {key: \"COLOR_PALETTE_DIALOG_CANCEL_BUTTON\", defaultText: \"Cancel\"};const COLOR_PALETTE_DIALOG_OK_BUTTON = {key: \"COLOR_PALETTE_DIALOG_OK_BUTTON\", defaultText: \"OK\"};const COLOR_PALETTE_DIALOG_TITLE = {key: \"COLOR_PALETTE_DIALOG_TITLE\", defaultText: \"Change Color\"};const COLOR_PALETTE_MORE_COLORS_TEXT = {key: \"COLOR_PALETTE_MORE_COLORS_TEXT\", defaultText: \"More Colors...\"};const COLORPICKER_ALPHA_SLIDER = {key: \"COLORPICKER_ALPHA_SLIDER\", defaultText: \"Alpha control\"};const COLORPICKER_HUE_SLIDER = {key: \"COLORPICKER_HUE_SLIDER\", defaultText: \"Hue control\"};const COLORPICKER_HEX = {key: \"COLORPICKER_HEX\", defaultText: \"Hexadecimal\"};const COLORPICKER_RED = {key: \"COLORPICKER_RED\", defaultText: \"Red\"};const COLORPICKER_GREEN = {key: \"COLORPICKER_GREEN\", defaultText: \"Green\"};const COLORPICKER_BLUE = {key: \"COLORPICKER_BLUE\", defaultText: \"Blue\"};const COLORPICKER_ALPHA = {key: \"COLORPICKER_ALPHA\", defaultText: \"Alpha\"};const DATEPICKER_OPEN_ICON_TITLE = {key: \"DATEPICKER_OPEN_ICON_TITLE\", defaultText: \"Open Picker\"};const DATEPICKER_DATE_DESCRIPTION = {key: \"DATEPICKER_DATE_DESCRIPTION\", defaultText: \"Date Input\"};const DATETIME_DESCRIPTION = {key: \"DATETIME_DESCRIPTION\", defaultText: \"Date Time Input\"};const DATERANGE_DESCRIPTION = {key: \"DATERANGE_DESCRIPTION\", defaultText: \"Date Range Input\"};const DELETE = {key: \"DELETE\", defaultText: \"Delete\"};const FILEUPLOAD_BROWSE = {key: \"FILEUPLOAD_BROWSE\", defaultText: \"Browse...\"};const FILEUPLOADER_TITLE = {key: \"FILEUPLOADER_TITLE\", defaultText: \"Upload File\"};const GROUP_HEADER_TEXT = {key: \"GROUP_HEADER_TEXT\", defaultText: \"Group Header\"};const SELECT_ROLE_DESCRIPTION = {key: \"SELECT_ROLE_DESCRIPTION\", defaultText: \"Select Combo Box\"};const SELECT_OPTIONS = {key: \"SELECT_OPTIONS\", defaultText: \"Select Options\"};const INPUT_SUGGESTIONS = {key: \"INPUT_SUGGESTIONS\", defaultText: \"Suggestions Available\"};const INPUT_SUGGESTIONS_TITLE = {key: \"INPUT_SUGGESTIONS_TITLE\", defaultText: \"Select\"};const INPUT_SUGGESTIONS_ONE_HIT = {key: \"INPUT_SUGGESTIONS_ONE_HIT\", defaultText: \"1 result available\"};const INPUT_SUGGESTIONS_MORE_HITS = {key: \"INPUT_SUGGESTIONS_MORE_HITS\", defaultText: \"{0} results are available\"};const INPUT_SUGGESTIONS_NO_HIT = {key: \"INPUT_SUGGESTIONS_NO_HIT\", defaultText: \"No results\"};const LINK_SUBTLE = {key: \"LINK_SUBTLE\", defaultText: \"Subtle\"};const LINK_EMPHASIZED = {key: \"LINK_EMPHASIZED\", defaultText: \"Emphasized\"};const LIST_ITEM_POSITION = {key: \"LIST_ITEM_POSITION\", defaultText: \"List item {0} of {1}\"};const LIST_ITEM_SELECTED = {key: \"LIST_ITEM_SELECTED\", defaultText: \"Selected\"};const LIST_ITEM_NOT_SELECTED = {key: \"LIST_ITEM_NOT_SELECTED\", defaultText: \"Not Selected\"};const LIST_ITEM_GROUP_HEADER = {key: \"LIST_ITEM_GROUP_HEADER\", defaultText: \"Group Header\"};const ARIA_LABEL_LIST_ITEM_CHECKBOX = {key: \"ARIA_LABEL_LIST_ITEM_CHECKBOX\", defaultText: \"Multiple Selection Mode\"};const ARIA_LABEL_LIST_ITEM_RADIO_BUTTON = {key: \"ARIA_LABEL_LIST_ITEM_RADIO_BUTTON\", defaultText: \"Item Selection.\"};const ARIA_LABEL_LIST_SELECTABLE = {key: \"ARIA_LABEL_LIST_SELECTABLE\", defaultText: \"Contains Selectable Items\"};const ARIA_LABEL_LIST_MULTISELECTABLE = {key: \"ARIA_LABEL_LIST_MULTISELECTABLE\", defaultText: \"Contains Multi-Selectable Items\"};const ARIA_LABEL_LIST_DELETABLE = {key: \"ARIA_LABEL_LIST_DELETABLE\", defaultText: \"Contains Deletable Items\"};const MESSAGE_STRIP_CLOSE_BUTTON = {key: \"MESSAGE_STRIP_CLOSE_BUTTON\", defaultText: \"Information Bar Close\"};const MESSAGE_STRIP_CLOSABLE = {key: \"MESSAGE_STRIP_CLOSABLE\", defaultText: \"Closable\"};const MESSAGE_STRIP_ERROR = {key: \"MESSAGE_STRIP_ERROR\", defaultText: \"Error Information Bar\"};const MESSAGE_STRIP_WARNING = {key: \"MESSAGE_STRIP_WARNING\", defaultText: \"Warning Information Bar\"};const MESSAGE_STRIP_SUCCESS = {key: \"MESSAGE_STRIP_SUCCESS\", defaultText: \"Success Information Bar\"};const MESSAGE_STRIP_INFORMATION = {key: \"MESSAGE_STRIP_INFORMATION\", defaultText: \"Information Bar\"};const MULTICOMBOBOX_DIALOG_OK_BUTTON = {key: \"MULTICOMBOBOX_DIALOG_OK_BUTTON\", defaultText: \"OK\"};const VALUE_STATE_ERROR_ALREADY_SELECTED = {key: \"VALUE_STATE_ERROR_ALREADY_SELECTED\", defaultText: \"This value is already selected.\"};const MULTIINPUT_ROLEDESCRIPTION_TEXT = {key: \"MULTIINPUT_ROLEDESCRIPTION_TEXT\", defaultText: \"Multi Value Input\"};const MULTIINPUT_SHOW_MORE_TOKENS = {key: \"MULTIINPUT_SHOW_MORE_TOKENS\", defaultText: \"{0} More\"};const PANEL_ICON = {key: \"PANEL_ICON\", defaultText: \"Expand/Collapse\"};const RANGE_SLIDER_ARIA_DESCRIPTION = {key: \"RANGE_SLIDER_ARIA_DESCRIPTION\", defaultText: \"Range\"};const RANGE_SLIDER_START_HANDLE_DESCRIPTION = {key: \"RANGE_SLIDER_START_HANDLE_DESCRIPTION\", defaultText: \"Left handle\"};const RANGE_SLIDER_END_HANDLE_DESCRIPTION = {key: \"RANGE_SLIDER_END_HANDLE_DESCRIPTION\", defaultText: \"Right handle\"};const RATING_INDICATOR_TOOLTIP_TEXT = {key: \"RATING_INDICATOR_TOOLTIP_TEXT\", defaultText: \"Rating\"};const RATING_INDICATOR_TEXT = {key: \"RATING_INDICATOR_TEXT\", defaultText: \"Rating Indicator\"};const RESPONSIVE_POPOVER_CLOSE_DIALOG_BUTTON = {key: \"RESPONSIVE_POPOVER_CLOSE_DIALOG_BUTTON\", defaultText: \"Decline\"};const SEGMENTEDBUTTON_ARIA_DESCRIPTION = {key: \"SEGMENTEDBUTTON_ARIA_DESCRIPTION\", defaultText: \"Segmented button group\"};const SEGMENTEDBUTTON_ARIA_DESCRIBEDBY = {key: \"SEGMENTEDBUTTON_ARIA_DESCRIBEDBY\", defaultText: \"Press SPACE or ENTER to select an item\"};const SEGMENTEDBUTTONITEM_ARIA_DESCRIPTION = {key: \"SEGMENTEDBUTTONITEM_ARIA_DESCRIPTION\", defaultText: \"Segmented button\"};const SLIDER_ARIA_DESCRIPTION = {key: \"SLIDER_ARIA_DESCRIPTION\", defaultText: \"Slider handle\"};const LOAD_MORE_TEXT = {key: \"LOAD_MORE_TEXT\", defaultText: \"More\"};const TABLE_HEADER_ROW_TEXT = {key: \"TABLE_HEADER_ROW_TEXT\", defaultText: \"Header Row\"};const TABLE_ROW_POSITION = {key: \"TABLE_ROW_POSITION\", defaultText: \"{0} of {1}\"};const TABLE_GROUP_ROW_ARIA_LABEL = {key: \"TABLE_GROUP_ROW_ARIA_LABEL\", defaultText: \"Group Header Row\"};const ARIA_LABEL_ROW_SELECTION = {key: \"ARIA_LABEL_ROW_SELECTION\", defaultText: \"Item Selection\"};const ARIA_LABEL_SELECT_ALL_CHECKBOX = {key: \"ARIA_LABEL_SELECT_ALL_CHECKBOX\", defaultText: \"Select All Rows\"};const TABCONTAINER_NEXT_ICON_ACC_NAME = {key: \"TABCONTAINER_NEXT_ICON_ACC_NAME\", defaultText: \"Next\"};const TABCONTAINER_PREVIOUS_ICON_ACC_NAME = {key: \"TABCONTAINER_PREVIOUS_ICON_ACC_NAME\", defaultText: \"Previous\"};const TABCONTAINER_OVERFLOW_MENU_TITLE = {key: \"TABCONTAINER_OVERFLOW_MENU_TITLE\", defaultText: \"Overflow Menu\"};const TABCONTAINER_END_OVERFLOW = {key: \"TABCONTAINER_END_OVERFLOW\", defaultText: \"More\"};const TABCONTAINER_POPOVER_CANCEL_BUTTON = {key: \"TABCONTAINER_POPOVER_CANCEL_BUTTON\", defaultText: \"Cancel\"};const TEXTAREA_CHARACTERS_LEFT = {key: \"TEXTAREA_CHARACTERS_LEFT\", defaultText: \"{0} characters remaining\"};const TEXTAREA_CHARACTERS_EXCEEDED = {key: \"TEXTAREA_CHARACTERS_EXCEEDED\", defaultText: \"{0} characters over limit\"};const TIMEPICKER_HOURS_LABEL = {key: \"TIMEPICKER_HOURS_LABEL\", defaultText: \"Hours\"};const TIMEPICKER_MINUTES_LABEL = {key: \"TIMEPICKER_MINUTES_LABEL\", defaultText: \"Minutes\"};const TIMEPICKER_SECONDS_LABEL = {key: \"TIMEPICKER_SECONDS_LABEL\", defaultText: \"Seconds\"};const TIMEPICKER_PERIODS_LABEL = {key: \"TIMEPICKER_PERIODS_LABEL\", defaultText: \"AM/PM\"};const TIMEPICKER_SUBMIT_BUTTON = {key: \"TIMEPICKER_SUBMIT_BUTTON\", defaultText: \"OK\"};const TIMEPICKER_CANCEL_BUTTON = {key: \"TIMEPICKER_CANCEL_BUTTON\", defaultText: \"Cancel\"};const TIMEPICKER_INPUT_DESCRIPTION = {key: \"TIMEPICKER_INPUT_DESCRIPTION\", defaultText: \"Time Input\"};const DURATION_INPUT_DESCRIPTION = {key: \"DURATION_INPUT_DESCRIPTION\", defaultText: \"Duration Input\"};const DATETIME_PICKER_DATE_BUTTON = {key: \"DATETIME_PICKER_DATE_BUTTON\", defaultText: \"Date\"};const DATETIME_PICKER_TIME_BUTTON = {key: \"DATETIME_PICKER_TIME_BUTTON\", defaultText: \"Time\"};const TOKEN_ARIA_DELETABLE = {key: \"TOKEN_ARIA_DELETABLE\", defaultText: \"Deletable\"};const TOKENIZER_ARIA_CONTAIN_TOKEN = {key: \"TOKENIZER_ARIA_CONTAIN_TOKEN\", defaultText: \"No Tokens\"};const TOKENIZER_ARIA_CONTAIN_ONE_TOKEN = {key: \"TOKENIZER_ARIA_CONTAIN_ONE_TOKEN\", defaultText: \"Contains 1 token\"};const TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS = {key: \"TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS\", defaultText: \"Contains {0} tokens\"};const TOKENIZER_ARIA_LABEL = {key: \"TOKENIZER_ARIA_LABEL\", defaultText: \"Tokenizer\"};const TOKENIZER_POPOVER_REMOVE = {key: \"TOKENIZER_POPOVER_REMOVE\", defaultText: \"Remove\"};const TREE_ITEM_ARIA_LABEL = {key: \"TREE_ITEM_ARIA_LABEL\", defaultText: \"Tree Item\"};const TREE_ITEM_EXPAND_NODE = {key: \"TREE_ITEM_EXPAND_NODE\", defaultText: \"Expand Node\"};const TREE_ITEM_COLLAPSE_NODE = {key: \"TREE_ITEM_COLLAPSE_NODE\", defaultText: \"Collapse Node\"};const VALUE_STATE_TYPE_ERROR = {key: \"VALUE_STATE_TYPE_ERROR\", defaultText: \"Value State Error\"};const VALUE_STATE_TYPE_WARNING = {key: \"VALUE_STATE_TYPE_WARNING\", defaultText: \"Value State Warning\"};const VALUE_STATE_TYPE_SUCCESS = {key: \"VALUE_STATE_TYPE_SUCCESS\", defaultText: \"Value State Success\"};const VALUE_STATE_TYPE_INFORMATION = {key: \"VALUE_STATE_TYPE_INFORMATION\", defaultText: \"Value State Information\"};const VALUE_STATE_ERROR = {key: \"VALUE_STATE_ERROR\", defaultText: \"Invalid entry\"};const VALUE_STATE_WARNING = {key: \"VALUE_STATE_WARNING\", defaultText: \"Warning issued\"};const VALUE_STATE_INFORMATION = {key: \"VALUE_STATE_INFORMATION\", defaultText: \"Informative entry\"};const VALUE_STATE_SUCCESS = {key: \"VALUE_STATE_SUCCESS\", defaultText: \"Entry successfully validated\"};const CALENDAR_HEADER_NEXT_BUTTON = {key: \"CALENDAR_HEADER_NEXT_BUTTON\", defaultText: \"Next\"};const CALENDAR_HEADER_PREVIOUS_BUTTON = {key: \"CALENDAR_HEADER_PREVIOUS_BUTTON\", defaultText: \"Previous\"};const DAY_PICKER_WEEK_NUMBER_TEXT = {key: \"DAY_PICKER_WEEK_NUMBER_TEXT\", defaultText: \"Week Number\"};const DAY_PICKER_NON_WORKING_DAY = {key: \"DAY_PICKER_NON_WORKING_DAY\", defaultText: \"Non-Working Day\"};const DAY_PICKER_TODAY = {key: \"DAY_PICKER_TODAY\", defaultText: \"Today\"};const STEPINPUT_DEC_ICON_TITLE = {key: \"STEPINPUT_DEC_ICON_TITLE\", defaultText: \"Decrease\"};const STEPINPUT_INC_ICON_TITLE = {key: \"STEPINPUT_INC_ICON_TITLE\", defaultText: \"Increase\"};const SPLIT_BUTTON_DESCRIPTION = {key: \"SPLIT_BUTTON_DESCRIPTION\", defaultText: \"Split Button\"};const SPLIT_BUTTON_KEYBOARD_HINT = {key: \"SPLIT_BUTTON_KEYBOARD_HINT\", defaultText: \"Press Space or Enter to trigger default action and Alt + Arrow Down or F4 to trigger arrow action\"};const MENU_BACK_BUTTON_ARIA_LABEL = {key: \"MENU_BACK_BUTTON_ARIA_LABEL\", defaultText: \"Back\"};const MENU_CLOSE_BUTTON_ARIA_LABEL = {key: \"MENU_CLOSE_BUTTON_ARIA_LABEL\", defaultText: \"Decline\"};\nexport {ARIA_LABEL_CARD_CONTENT,ARIA_ROLEDESCRIPTION_CARD,ARIA_ROLEDESCRIPTION_CARD_HEADER,ARIA_ROLEDESCRIPTION_INTERACTIVE_CARD_HEADER,AVATAR_TOOLTIP,AVATAR_GROUP_DISPLAYED_HIDDEN_LABEL,AVATAR_GROUP_SHOW_COMPLETE_LIST_LABEL,AVATAR_GROUP_ARIA_LABEL_INDIVIDUAL,AVATAR_GROUP_ARIA_LABEL_GROUP,AVATAR_GROUP_MOVE,BADGE_DESCRIPTION,BREADCRUMB_ITEM_POS,BREADCRUMBS_ARIA_LABEL,BREADCRUMBS_OVERFLOW_ARIA_LABEL,BREADCRUMBS_CANCEL_BUTTON,BUSY_INDICATOR_TITLE,BUTTON_ARIA_TYPE_ACCEPT,BUTTON_ARIA_TYPE_REJECT,BUTTON_ARIA_TYPE_EMPHASIZED,CAROUSEL_OF_TEXT,CAROUSEL_DOT_TEXT,CAROUSEL_PREVIOUS_ARROW_TEXT,CAROUSEL_NEXT_ARROW_TEXT,COLORPALETTE_CONTAINER_LABEL,COLORPALETTE_POPOVER_TITLE,COLORPALETTE_COLOR_LABEL,COLOR_PALETTE_DIALOG_CANCEL_BUTTON,COLOR_PALETTE_DIALOG_OK_BUTTON,COLOR_PALETTE_DIALOG_TITLE,COLOR_PALETTE_MORE_COLORS_TEXT,COLORPICKER_ALPHA_SLIDER,COLORPICKER_HUE_SLIDER,COLORPICKER_HEX,COLORPICKER_RED,COLORPICKER_GREEN,COLORPICKER_BLUE,COLORPICKER_ALPHA,DATEPICKER_OPEN_ICON_TITLE,DATEPICKER_DATE_DESCRIPTION,DATETIME_DESCRIPTION,DATERANGE_DESCRIPTION,DELETE,FILEUPLOAD_BROWSE,FILEUPLOADER_TITLE,GROUP_HEADER_TEXT,SELECT_ROLE_DESCRIPTION,SELECT_OPTIONS,INPUT_SUGGESTIONS,INPUT_SUGGESTIONS_TITLE,INPUT_SUGGESTIONS_ONE_HIT,INPUT_SUGGESTIONS_MORE_HITS,INPUT_SUGGESTIONS_NO_HIT,LINK_SUBTLE,LINK_EMPHASIZED,LIST_ITEM_POSITION,LIST_ITEM_SELECTED,LIST_ITEM_NOT_SELECTED,LIST_ITEM_GROUP_HEADER,ARIA_LABEL_LIST_ITEM_CHECKBOX,ARIA_LABEL_LIST_ITEM_RADIO_BUTTON,ARIA_LABEL_LIST_SELECTABLE,ARIA_LABEL_LIST_MULTISELECTABLE,ARIA_LABEL_LIST_DELETABLE,MESSAGE_STRIP_CLOSE_BUTTON,MESSAGE_STRIP_CLOSABLE,MESSAGE_STRIP_ERROR,MESSAGE_STRIP_WARNING,MESSAGE_STRIP_SUCCESS,MESSAGE_STRIP_INFORMATION,MULTICOMBOBOX_DIALOG_OK_BUTTON,VALUE_STATE_ERROR_ALREADY_SELECTED,MULTIINPUT_ROLEDESCRIPTION_TEXT,MULTIINPUT_SHOW_MORE_TOKENS,PANEL_ICON,RANGE_SLIDER_ARIA_DESCRIPTION,RANGE_SLIDER_START_HANDLE_DESCRIPTION,RANGE_SLIDER_END_HANDLE_DESCRIPTION,RATING_INDICATOR_TOOLTIP_TEXT,RATING_INDICATOR_TEXT,RESPONSIVE_POPOVER_CLOSE_DIALOG_BUTTON,SEGMENTEDBUTTON_ARIA_DESCRIPTION,SEGMENTEDBUTTON_ARIA_DESCRIBEDBY,SEGMENTEDBUTTONITEM_ARIA_DESCRIPTION,SLIDER_ARIA_DESCRIPTION,LOAD_MORE_TEXT,TABLE_HEADER_ROW_TEXT,TABLE_ROW_POSITION,TABLE_GROUP_ROW_ARIA_LABEL,ARIA_LABEL_ROW_SELECTION,ARIA_LABEL_SELECT_ALL_CHECKBOX,TABCONTAINER_NEXT_ICON_ACC_NAME,TABCONTAINER_PREVIOUS_ICON_ACC_NAME,TABCONTAINER_OVERFLOW_MENU_TITLE,TABCONTAINER_END_OVERFLOW,TABCONTAINER_POPOVER_CANCEL_BUTTON,TEXTAREA_CHARACTERS_LEFT,TEXTAREA_CHARACTERS_EXCEEDED,TIMEPICKER_HOURS_LABEL,TIMEPICKER_MINUTES_LABEL,TIMEPICKER_SECONDS_LABEL,TIMEPICKER_PERIODS_LABEL,TIMEPICKER_SUBMIT_BUTTON,TIMEPICKER_CANCEL_BUTTON,TIMEPICKER_INPUT_DESCRIPTION,DURATION_INPUT_DESCRIPTION,DATETIME_PICKER_DATE_BUTTON,DATETIME_PICKER_TIME_BUTTON,TOKEN_ARIA_DELETABLE,TOKENIZER_ARIA_CONTAIN_TOKEN,TOKENIZER_ARIA_CONTAIN_ONE_TOKEN,TOKENIZER_ARIA_CONTAIN_SEVERAL_TOKENS,TOKENIZER_ARIA_LABEL,TOKENIZER_POPOVER_REMOVE,TREE_ITEM_ARIA_LABEL,TREE_ITEM_EXPAND_NODE,TREE_ITEM_COLLAPSE_NODE,VALUE_STATE_TYPE_ERROR,VALUE_STATE_TYPE_WARNING,VALUE_STATE_TYPE_SUCCESS,VALUE_STATE_TYPE_INFORMATION,VALUE_STATE_ERROR,VALUE_STATE_WARNING,VALUE_STATE_INFORMATION,VALUE_STATE_SUCCESS,CALENDAR_HEADER_NEXT_BUTTON,CALENDAR_HEADER_PREVIOUS_BUTTON,DAY_PICKER_WEEK_NUMBER_TEXT,DAY_PICKER_NON_WORKING_DAY,DAY_PICKER_TODAY,STEPINPUT_DEC_ICON_TITLE,STEPINPUT_INC_ICON_TITLE,SPLIT_BUTTON_DESCRIPTION,SPLIT_BUTTON_KEYBOARD_HINT,MENU_BACK_BUTTON_ARIA_LABEL,MENU_CLOSE_BUTTON_ARIA_LABEL};","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Button.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}:host(:not([hidden])){display:inline-block}:host{min-width:var(--_ui5_button_base_min_width);height:var(--_ui5_button_base_height);line-height:normal;font-family:var(--_ui5_button_fontFamily);font-size:var(--sapFontSize);text-shadow:var(--_ui5_button_text_shadow);border-radius:var(--_ui5_button_border_radius);cursor:pointer;background-color:var(--sapButton_Background);border:var(--sapButton_BorderWidth) solid var(--sapButton_BorderColor);color:var(--sapButton_TextColor);box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ui5-button-root{min-width:inherit;cursor:inherit;height:100%;width:100%;box-sizing:border-box;display:flex;justify-content:center;align-items:center;outline:none;padding:0 var(--_ui5_button_base_padding);position:relative;background:transparent;border:none;color:inherit;text-shadow:inherit;font:inherit;white-space:inherit;overflow:inherit;text-overflow:inherit;letter-spacing:inherit;word-spacing:inherit;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none}:host(:not([active]):not([non-interactive]):not([_is-touch]):hover),:host(:not([hidden]).ui5_hovered){background:var(--sapButton_Hover_Background);box-shadow:var(--sapContent_Interaction_Shadow);border:1px solid var(--sapButton_Hover_BorderColor);color:var(--sapButton_Hover_TextColor)}.ui5-button-icon{color:inherit;flex-shrink:0}:host([icon-end]) .ui5-button-root{flex-direction:row-reverse}:host([icon-end]) .ui5-button-icon{margin-inline-start:var(--_ui5_button_base_icon_margin)}:host([icon-only]) .ui5-button-root{min-width:auto;padding:0}:host([icon-only]) .ui5-button-text{display:none}.ui5-button-text{outline:none;position:relative;white-space:inherit;overflow:inherit;text-overflow:inherit}:host([has-icon]:not([icon-end])) .ui5-button-text{margin-inline-start:var(--_ui5_button_base_icon_margin)}:host([has-icon][icon-end]) .ui5-button-text{margin-inline-start:0}:host([disabled]){opacity:var(--sapContent_DisabledOpacity);pointer-events:none}:host([focused]) .ui5-button-root:after{content:\\\"\\\";position:absolute;box-sizing:border-box;left:.0625rem;top:.0625rem;right:.0625rem;bottom:.0625rem;border:var(--_ui5_button_focused_border);pointer-events:none;border-radius:var(--_ui5_button_focused_border_radius)}:host([design=Emphasized][focused]) .ui5-button-root:after{border-color:var(--_ui5_button_emphasized_focused_border_color)}:host([design=Emphasized][focused]) .ui5-button-root:before{content:\\\"\\\";position:absolute;box-sizing:border-box;left:.0625rem;top:.0625rem;right:.0625rem;bottom:.0625rem;border:var(--_ui5_button_emphasized_focused_border_before);pointer-events:none;border-radius:var(--_ui5_button_focused_border_radius)}.ui5-button-root::-moz-focus-inner{border:0}bdi{display:block;white-space:inherit;overflow:inherit;text-overflow:inherit}:host([ui5-button][active]:not([disabled]):not([non-interactive])){background-image:none;background-color:var(--sapButton_Active_Background);border-color:var(--sapButton_Active_BorderColor);color:var(--sapButton_Active_TextColor)}:host([design=Positive]){background-color:var(--sapButton_Accept_Background);border-color:var(--sapButton_Accept_BorderColor);color:var(--sapButton_Accept_TextColor)}:host([design=Positive]:not([active]):not([non-interactive]):not([_is-touch]).ui5_hovered),:host([design=Positive]:not([active]):not([non-interactive]):not([_is-touch]):hover){background-color:var(--sapButton_Accept_Hover_Background);border-color:var(--sapButton_Accept_Hover_BorderColor);box-shadow:var(--sapContent_Positive_Shadow);color:var(--sapButton_Accept_Hover_TextColor)}:host([ui5-button][design=Positive][active]:not([non-interactive])){background-color:var(--sapButton_Accept_Active_Background);border-color:var(--sapButton_Accept_Active_BorderColor);color:var(--sapButton_Accept_Active_TextColor)}:host([design=Negative]){background-color:var(--sapButton_Reject_Background);border-color:var(--sapButton_Reject_BorderColor);color:var(--sapButton_Reject_TextColor)}:host([design=Negative]:not([active]):not([non-interactive]):not([_is-touch]).ui5_hovered),:host([design=Negative]:not([active]):not([non-interactive]):not([_is-touch]):hover){background-color:var(--sapButton_Reject_Hover_Background);border-color:var(--sapButton_Reject_Hover_BorderColor);box-shadow:var(--sapContent_Negative_Shadow);color:var(--sapButton_Reject_Hover_TextColor)}:host([ui5-button][design=Negative][active]:not([non-interactive])){background-color:var(--sapButton_Reject_Active_Background);border-color:var(--sapButton_Reject_Active_BorderColor);color:var(--sapButton_Reject_Active_TextColor)}:host([design=Attention]){background-color:var(--sapButton_Attention_Background);border-color:var(--sapButton_Attention_BorderColor);color:var(--sapButton_Attention_TextColor)}:host([design=Attention]:not([active]):not([non-interactive]):not([_is-touch]).ui5_hovered),:host([design=Attention]:not([active]):not([non-interactive]):not([_is-touch]):hover){background-color:var(--sapButton_Attention_Hover_Background);border-color:var(--sapButton_Attention_Hover_BorderColor);color:var(--sapButton_Attention_Hover_TextColor);box-shadow:var(--sapContent_Critical_Shadow)}:host([ui5-button][design=Attention][active]:not([non-interactive])){background-color:var(--sapButton_Attention_Active_Background);border-color:var(--sapButton_Attention_Active_BorderColor);color:var(--sapButton_Attention_Active_TextColor)}:host([design=Emphasized]){background-color:var(--sapButton_Emphasized_Background);border-color:var(--sapButton_Emphasized_BorderColor);border-width:var(--_ui5_button_emphasized_border_width);color:var(--sapButton_Emphasized_TextColor);font-weight:var(--_ui5_button_emphasized_font_weight)}:host([design=Emphasized]:not([active]):not([non-interactive]):not([_is-touch]).ui5_hovered),:host([design=Emphasized]:not([active]):not([non-interactive]):not([_is-touch]):hover){background-color:var(--sapButton_Emphasized_Hover_Background);border-color:var(--sapButton_Emphasized_Hover_BorderColor);border-width:var(--_ui5_button_emphasized_border_width);color:var(--sapButton_Emphasized_Hover_TextColor);box-shadow:none}:host([ui5-button][design=Empasized][active]:not([non-interactive])){background-color:var(--sapButton_Emphasized_Active_Background);border-color:var(--sapButton_Emphasized_Active_BorderColor);color:var(--sapButton_Emphasized_Active_TextColor)}:host([design=Emphasized][focused]) .ui5-button-root:after{border-color:var(--sapContent_ContrastFocusColor);outline:none}:host([design=Transparent]){background-color:var(--sapButton_Lite_Background);color:var(--sapButton_Lite_TextColor);border-color:var(--sapButton_Lite_BorderColor)}:host([design=Transparent]:not([active]):not([non-interactive]):not([_is-touch]).ui5_hovered),:host([design=Transparent]:not([active]):not([non-interactive]):not([_is-touch]):hover){background-color:var(--sapButton_Lite_Hover_Background);border-color:var(--sapButton_Lite_Hover_BorderColor);box-shadow:var(--sapContent_Interaction_Shadow);color:var(--sapButton_Lite_Hover_TextColor)}:host([ui5-button][design=Transparent][active]:not([non-interactive])){background-color:var(--sapButton_Lite_Active_Background);border-color:var(--sapButton_Lite_Active_BorderColor);color:var(--sapButton_Active_TextColor)}:host([pressed][focused]) .ui5-button-root:after,:host([ui5-segmented-button-item][active][focused]) .ui5-button-root:after{border-color:var(--_ui5_button_pressed_focused_border_color);outline:none}:host([ui5-segmented-button-item][focused]:not(:last-child)) .ui5-button-root:after{border-top-right-radius:var(--_ui5_button_focused_inner_border_radius);border-bottom-right-radius:var(--_ui5_button_focused_inner_border_radius)}:host([ui5-segmented-button-item][focused]:not(:first-child)) .ui5-button-root:after{border-top-left-radius:var(--_ui5_button_focused_inner_border_radius);border-bottom-left-radius:var(--_ui5_button_focused_inner_border_radius)}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { isSpace, isEnter } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tisPhone,\n\tisTablet,\n\tisCombi,\n\tisDesktop,\n\tisSafari,\n} from \"@ui5/webcomponents-base/dist/Device.js\";\nimport isDefaultSlotProvided from \"@ui5/webcomponents-base/dist/util/isDefaultSlotProvided.js\";\nimport ButtonDesign from \"./types/ButtonDesign.js\";\nimport ButtonTemplate from \"./generated/templates/ButtonTemplate.lit.js\";\nimport Icon from \"./Icon.js\";\n\nimport { BUTTON_ARIA_TYPE_ACCEPT, BUTTON_ARIA_TYPE_REJECT, BUTTON_ARIA_TYPE_EMPHASIZED } from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport buttonCss from \"./generated/themes/Button.css.js\";\n\nlet isGlobalHandlerAttached = false;\nlet activeButton = null;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-button\",\n\tlanguageAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.Button.prototype */ {\n\n\t\t/**\n\t\t * Defines the component design.\n\t\t *\n\t\t *
\n\t\t * The available values are:\n\t\t *\n\t\t * \n\t\t * Default
\n\t\t * Emphasized
\n\t\t * Positive
\n\t\t * Negative
\n\t\t * Transparent
\n\t\t * Attention
\n\t\t *
\n\t\t *\n\t\t * @type {ButtonDesign}\n\t\t * @defaultvalue \"Default\"\n\t\t * @public\n\t\t */\n\t\tdesign: {\n\t\t\ttype: ButtonDesign,\n\t\t\tdefaultValue: ButtonDesign.Default,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is disabled.\n\t\t * A disabled component can't be pressed or\n\t\t * focused, and it is not in the tab chain.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the icon, displayed as graphical element within the component.\n\t\t * The SAP-icons font provides numerous options.\n\t\t *
\n\t\t * Example:\n\t\t *\n\t\t * See all the available icons within the Icon Explorer.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the icon should be displayed after the component text.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\ticonEnd: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * When set to true
, the component will\n\t\t * automatically submit the nearest HTML form element on press
.\n\t\t *
\n\t\t * Note: For the submits
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tsubmits: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the tooltip of the component.\n\t\t *
\n\t\t * Note: We recommend setting tooltip to icon-only components.\n\t\t * @type {string}\n\t\t * @defaultvalue: \"\"\n\t\t * @public\n\t\t * @since 1.2.0\n\t\t */\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Used to switch the active state (pressed or not) of the component.\n\t\t * @private\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines if a content has been added to the default slot\n\t\t * @private\n\t\t */\n\t\ticonOnly: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the elements is on focus\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the elements has a slotted icon\n\t\t * @private\n\t\t */\n\t\thasIcon: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible ARIA name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue: \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Receives id(or many ids) of the elements that label the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.1.0\n\t\t */\n\t\t accessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t/**\n\t\t * An object of strings that defines several additional accessibility attribute values\n\t\t * for customization depending on the use case.\n\t\t *\n\t\t * It supports the following fields:\n\t\t *\n\t\t * \n\t\t * \t\texpanded
: Indicates whether the button, or another grouping element it controls, is currently expanded or collapsed. Accepts the following string values:\n\t\t *\t\t\t\n\t\t *\t\t\t\ttrue
\n\t\t *\t\t\t\tfalse
\n\t\t *\t\t\t
\n\t\t * \t\t \n\t\t * \t\thasPopup
: Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by the button. Accepts the following string values:\n\t\t * \t\t\t\n\t\t *\t\t\t\tDialog
\n\t\t *\t\t\t\tGrid
\n\t\t *\t\t\t\tListBox
\n\t\t *\t\t\t\tMenu
\n\t\t *\t\t\t\tTree
\n\t\t * \t\t\t
\n\t\t * \t\t \n\t\t * \t\tcontrols
: Identifies the element (or elements) whose contents or presence are controlled by the button element. Accepts a string value. \n\t\t *
\n\t\t * @type {object}\n\t\t * @public\n\t\t * @since 1.2.0\n\t\t */\n\t\taccessibilityAttributes: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the element if focusable\n\t\t * @private\n\t\t */\n\t\tnonInteractive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_iconSettings: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t/**\n\t\t * Defines the tabIndex of the component.\n\t\t * @private\n\t\t */\n\t\t_tabIndex: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"0\",\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * @since 1.0.0-rc.13\n\t\t * @private\n\t\t */\n\t\t_isTouch: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Button.prototype */ {\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *
\n\t\t * Note: Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Button.prototype */ {\n\n\t\t/**\n\t\t * Fired when the component is activated either with a\n\t\t * mouse/tap or by using the Enter or Space key.\n\t\t *
\n\t\t * Note: The event will not be fired if the disabled
\n\t\t * property is set to true
.\n\t\t *\n\t\t * @event\n\t\t * @public\n\t\t * @native\n\t\t */\n\t\tclick: {},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-button
component represents a simple push button.\n * It enables users to trigger actions by clicking or tapping the ui5-button
, or by pressing\n * certain keyboard keys, such as Enter.\n *\n *\n * Usage
\n *\n * For the ui5-button
UI, you can define text, icon, or both. You can also specify\n * whether the text or the icon is displayed first.\n *
\n * You can choose from a set of predefined types that offer different\n * styling to correspond to the triggered action.\n *
\n * You can set the ui5-button
as enabled or disabled. An enabled\n * ui5-button
can be pressed by clicking or tapping it. The button changes\n * its style to provide visual feedback to the user that it is pressed or hovered over with\n * the mouse cursor. A disabled ui5-button
appears inactive and cannot be pressed.\n *\n * CSS Shadow Parts
\n *\n * CSS Shadow Parts allow developers to style elements inside the Shadow DOM.\n *
\n * The ui5-button
exposes the following CSS Shadow Parts:\n * \n * - button - Used to style the native button element
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Button\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Button\n * @extends UI5Element\n * @tagname ui5-button\n * @implements sap.ui.webcomponents.main.IButton\n * @public\n */\nclass Button extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn buttonCss;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn ButtonTemplate;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [Icon];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._deactivate = () => {\n\t\t\tif (activeButton) {\n\t\t\t\tactiveButton.active = false;\n\t\t\t}\n\t\t};\n\n\t\tif (!isGlobalHandlerAttached) {\n\t\t\tdocument.addEventListener(\"mouseup\", this._deactivate);\n\n\t\t\tisGlobalHandlerAttached = true;\n\t\t}\n\n\t\tconst handleTouchStartEvent = event => {\n\t\t\tevent.isMarked = \"button\";\n\t\t\tif (this.nonInteractive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.active = true;\n\t\t};\n\n\t\tthis._ontouchstart = {\n\t\t\thandleEvent: handleTouchStartEvent,\n\t\t\tpassive: true,\n\t\t};\n\t}\n\n\tonEnterDOM() {\n\t\tthis._isTouch = (isPhone() || isTablet()) && !isCombi();\n\t}\n\n\tonBeforeRendering() {\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (this.submits && !FormSupport) {\n\t\t\tconsole.warn(`In order for the \"submits\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\n\t\tthis.iconOnly = this.isIconOnly;\n\t\tthis.hasIcon = !!this.icon;\n\t}\n\n\t_onclick(event) {\n\t\tif (this.nonInteractive) {\n\t\t\treturn;\n\t\t}\n\t\tevent.isMarked = \"button\";\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (FormSupport && this.submits) {\n\t\t\tFormSupport.triggerFormSubmit(this);\n\t\t}\n\n\t\tif (isSafari()) {\n\t\t\tthis.getDomRef().focus();\n\t\t}\n\t}\n\n\t_onmousedown(event) {\n\t\tif (this.nonInteractive || this._isTouch) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.isMarked = \"button\";\n\t\tthis.active = true;\n\t\tactiveButton = this; // eslint-disable-line\n\t}\n\n\t_ontouchend(event) {\n\t\tthis.active = false;\n\n\t\tif (activeButton) {\n\t\t\tactiveButton.active = false;\n\t\t}\n\t}\n\n\t_onmouseup(event) {\n\t\tevent.isMarked = \"button\";\n\t}\n\n\t_onkeydown(event) {\n\t\tevent.isMarked = \"button\";\n\n\t\tif (isSpace(event) || isEnter(event)) {\n\t\t\tthis.active = true;\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event) || isEnter(event)) {\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\t_onfocusout(_event) {\n\t\tif (this.nonInteractive) {\n\t\t\treturn;\n\t\t}\n\t\tthis.active = false;\n\t\tif (isDesktop()) {\n\t\t\tthis.focused = false;\n\t\t}\n\t}\n\n\t_onfocusin(event) {\n\t\tif (this.nonInteractive) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.isMarked = \"button\";\n\t\tif (isDesktop()) {\n\t\t\tthis.focused = true;\n\t\t}\n\t}\n\n\tget hasButtonType() {\n\t\treturn this.design !== ButtonDesign.Default && this.design !== ButtonDesign.Transparent;\n\t}\n\n\tget iconRole() {\n\t\tif (!this.icon) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn this.isIconOnly ? \"img\" : \"presentation\";\n\t}\n\n\tget isIconOnly() {\n\t\treturn !isDefaultSlotProvided(this);\n\t}\n\n\tstatic typeTextMappings() {\n\t\treturn {\n\t\t\t\"Positive\": BUTTON_ARIA_TYPE_ACCEPT,\n\t\t\t\"Negative\": BUTTON_ARIA_TYPE_REJECT,\n\t\t\t\"Emphasized\": BUTTON_ARIA_TYPE_EMPHASIZED,\n\t\t};\n\t}\n\n\tget buttonTypeText() {\n\t\treturn Button.i18nBundle.getText(Button.typeTextMappings()[this.design]);\n\t}\n\n\tget tabIndexValue() {\n\t\tconst tabindex = this.getAttribute(\"tabindex\");\n\n\t\tif (tabindex) {\n\t\t\treturn tabindex;\n\t\t}\n\n\t\treturn this.nonInteractive ? \"-1\" : this._tabIndex;\n\t}\n\n\tget showIconTooltip() {\n\t\treturn this.iconOnly && !this.tooltip;\n\t}\n\n\tget ariaLabelText() {\n\t\treturn getEffectiveAriaLabelText(this);\n\t}\n\n\tstatic async onDefine() {\n\t\tButton.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n}\n\nButton.define();\n\nexport default Button;\n","import DataType from \"./DataType.js\";\n\n/**\n * Enumeration for different mode behaviors of the InvisibleMessage
.\n * @private\n */\nconst InvisibleMessageModes = {\n\n\t/**\n * Indicates that updates to the region should be presented at the next graceful opportunity,\n * such as at the end of reading the current sentence, or when the user pauses typing.\n */\n\tPolite: \"Polite\",\n\n\t/**\n * Indicates that updates to the region have the highest priority and should be presented to the user immediately.\n */\n\tAssertive: \"Assertive\",\n\n};\n\nclass InvisibleMessageMode extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!InvisibleMessageModes[value];\n\t}\n}\n\nInvisibleMessageMode.generateTypeAccessors(InvisibleMessageModes);\n\nexport default InvisibleMessageModes;\n","import InvisibleMessageMode from \"../types/InvisibleMessageMode.js\";\nimport getSingletonElementInstance from \"./getSingletonElementInstance.js\";\nimport { attachBoot } from \"../Boot.js\";\n\nlet politeSpan;\nlet assertiveSpan;\n\nconst setOutOfViewportStyles = el => {\n\tel.style.position = \"absolute\";\n\tel.style.clip = \"rect(1px,1px,1px,1px)\";\n\tel.style.userSelect = \"none\";\n\tel.style.left = \"-1000px\";\n\tel.style.top = \"-1000px\";\n\tel.style.pointerEvents = \"none\";\n};\n\nattachBoot(() => {\n\tif (politeSpan && assertiveSpan) {\n\t\treturn;\n\t}\n\n\tpoliteSpan = document.createElement(\"span\");\n\tassertiveSpan = document.createElement(\"span\");\n\n\tpoliteSpan.classList.add(\"ui5-invisiblemessage-polite\");\n\tassertiveSpan.classList.add(\"ui5-invisiblemessage-assertive\");\n\n\tpoliteSpan.setAttribute(\"aria-live\", \"polite\");\n\tassertiveSpan.setAttribute(\"aria-live\", \"assertive\");\n\n\tpoliteSpan.setAttribute(\"role\", \"alert\");\n\tassertiveSpan.setAttribute(\"role\", \"alert\");\n\n\tsetOutOfViewportStyles(politeSpan);\n\tsetOutOfViewportStyles(assertiveSpan);\n\n\tgetSingletonElementInstance(\"ui5-static-area\").appendChild(politeSpan);\n\tgetSingletonElementInstance(\"ui5-static-area\").appendChild(assertiveSpan);\n});\n\n/**\n * Inserts the string into the respective span, depending on the mode provided.\n *\n * @param {string} message String to be announced by the screen reader.\n * @param {sap.ui.core.InvisibleMessageMode} mode The mode to be inserted in the aria-live attribute.\n * @public\n */\nconst announce = (message, mode) => {\n\t// If no type is presented, fallback to polite announcement.\n\tconst span = mode === InvisibleMessageMode.Assertive ? assertiveSpan : politeSpan;\n\n\t// Set textContent to empty string in order to trigger screen reader's announcement.\n\tspan.textContent = \"\";\n\tspan.textContent = message;\n\n\tif (mode !== InvisibleMessageMode.Assertive && mode !== InvisibleMessageMode.Polite) {\n\t\tconsole.warn(`You have entered an invalid mode. Valid values are: \"Polite\" and \"Assertive\". The framework will automatically set the mode to \"Polite\".`); // eslint-disable-line\n\t}\n\n\t// clear the span in order to avoid reading it out while in JAWS reading node\n\tsetTimeout(() => {\n\t\t// ensure that we clear the text node only if no announce is made in the meantime\n\t\tif (span.textContent === message) {\n\t\t\tspan.textContent = \"\";\n\t\t}\n\t}, 3000);\n};\n\nexport default announce;\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\tstatic attributeToProperty(attributeValue) {\n\t\treturn parseInt(attributeValue);\n\t}\n}\n\nexport default Integer;\n","import DataType from \"./DataType.js\";\n\n/**\n * Different states.\n */\nconst ValueStates = {\n\tNone: \"None\",\n\tSuccess: \"Success\",\n\tWarning: \"Warning\",\n\tError: \"Error\",\n\tInformation: \"Information\",\n};\n\nclass ValueState extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ValueStates[value];\n\t}\n}\n\nValueState.generateTypeAccessors(ValueStates);\n\nexport default ValueState;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-down\";\nconst pathData = \"M360.5 172q9-9 22-9 12 0 22 9 9 10 9 22 0 13-9 22l-124 124q-9 9-22 9-11 0-22-9l-124-124q-9-9-9-22 0-12 9-22 11-9 22-9 13 0 22 9l102 103z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-down\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-down\";\nconst pathData = \"M420.5 187q6-6 11-6 6 0 12 6 5 5 5 11t-5 11l-165 165q-10 9-23 9t-22-9l-166-165q-5-5-5-11.5t5-11.5 11.5-5 11.5 5l160 160q3 3 5 3 3 0 6-3z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-down\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/slim-arrow-down.js\";\nimport {pathData as pathDataV4} from \"./v4/slim-arrow-down.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"slim-arrow-down\";\nexport { pathData, ltr, accData };","const ICON_ACTION_SETTINGS = {key: \"ICON_ACTION_SETTINGS\", defaultText: \"Settings\"};const ICON_ACTIVATE = {key: \"ICON_ACTIVATE\", defaultText: \"Activate\"};const ICON_ADD = {key: \"ICON_ADD\", defaultText: \"Add\"};const ICON_ADD_CONTACT = {key: \"ICON_ADD_CONTACT\", defaultText: \"Add Contact\"};const ICON_ADD_FILTER = {key: \"ICON_ADD_FILTER\", defaultText: \"Add Filter\"};const ICON_ADD_PHOTO = {key: \"ICON_ADD_PHOTO\", defaultText: \"Add Photo\"};const ICON_BACK_TO_TOP = {key: \"ICON_BACK_TO_TOP\", defaultText: \"Back to Top\"};const ICON_COLLAPSE = {key: \"ICON_COLLAPSE\", defaultText: \"Collapse\"};const ICON_COLLAPSE_GROUP = {key: \"ICON_COLLAPSE_GROUP\", defaultText: \"Collapse Group\"};const ICON_CROP = {key: \"ICON_CROP\", defaultText: \"Crop\"};const ICON_DECLINE = {key: \"ICON_DECLINE\", defaultText: \"Decline\"};const ICON_DELETE = {key: \"ICON_DELETE\", defaultText: \"Delete\"};const ICON_DISPLAY = {key: \"ICON_DISPLAY\", defaultText: \"Display\"};const ICON_DOWN = {key: \"ICON_DOWN\", defaultText: \"Down\"};const ICON_DOWNLOAD = {key: \"ICON_DOWNLOAD\", defaultText: \"Download\"};const ICON_DRILL_DOWN = {key: \"ICON_DRILL_DOWN\", defaultText: \"Drill Down\"};const ICON_DRILL_UP = {key: \"ICON_DRILL_UP\", defaultText: \"Drill Up\"};const ICON_ERROR = {key: \"ICON_ERROR\", defaultText: \"Error\"};const ICON_EXIT_FULL_SCREEN = {key: \"ICON_EXIT_FULL_SCREEN\", defaultText: \"Exit Full Screen\"};const ICON_EXPAND = {key: \"ICON_EXPAND\", defaultText: \"Expand\"};const ICON_EXPAND_GROUP = {key: \"ICON_EXPAND_GROUP\", defaultText: \"Expand Group\"};const ICON_FILTER = {key: \"ICON_FILTER\", defaultText: \"Filter\"};const ICON_FLAG = {key: \"ICON_FLAG\", defaultText: \"Flag\"};const ICON_FORWARD = {key: \"ICON_FORWARD\", defaultText: \"Forward\"};const ICON_FULL_SCREEN = {key: \"ICON_FULL_SCREEN\", defaultText: \"Enter Full Screen\"};const ICON_GENERATE_SHORTCUT = {key: \"ICON_GENERATE_SHORTCUT\", defaultText: \"Create Shortcut\"};const ICON_GROUP_2 = {key: \"ICON_GROUP_2\", defaultText: \"Group\"};const ICON_HIDE = {key: \"ICON_HIDE\", defaultText: \"Hide\"};const ICON_IPAD = {key: \"ICON_IPAD\", defaultText: \"Tablet\"};const ICON_IPHONE = {key: \"ICON_IPHONE\", defaultText: \"Phone\"};const ICON_LAPTOP = {key: \"ICON_LAPTOP\", defaultText: \"Laptop\"};const ICON_MESSAGE_ERROR = {key: \"ICON_MESSAGE_ERROR\", defaultText: \"Error\"};const ICON_MESSAGE_INFORMATION = {key: \"ICON_MESSAGE_INFORMATION\", defaultText: \"Information\"};const ICON_MESSAGE_SUCCESS = {key: \"ICON_MESSAGE_SUCCESS\", defaultText: \"Successful\"};const ICON_MESSAGE_WARNING = {key: \"ICON_MESSAGE_WARNING\", defaultText: \"Warning\"};const ICON_MOVE = {key: \"ICON_MOVE\", defaultText: \"Move\"};const ICON_MULTI_SELECT = {key: \"ICON_MULTI_SELECT\", defaultText: \"Multi Select\"};const ICON_NAV_BACK = {key: \"ICON_NAV_BACK\", defaultText: \"Navigate Back\"};const ICON_OVERFLOW = {key: \"ICON_OVERFLOW\", defaultText: \"More\"};const ICON_REDO = {key: \"ICON_REDO\", defaultText: \"Redo\"};const ICON_REFRESH = {key: \"ICON_REFRESH\", defaultText: \"Refresh\"};const ICON_RESIZE = {key: \"ICON_RESIZE\", defaultText: \"Resize\"};const ICON_RESIZE_HORIZONTAL = {key: \"ICON_RESIZE_HORIZONTAL\", defaultText: \"Resize Horizontally\"};const ICON_RESIZE_VERTICAL = {key: \"ICON_RESIZE_VERTICAL\", defaultText: \"Resize Vertically\"};const ICON_RESPONSE = {key: \"ICON_RESPONSE\", defaultText: \"Reply\"};const ICON_SAVE = {key: \"ICON_SAVE\", defaultText: \"Save\"};const ICON_SEARCH = {key: \"ICON_SEARCH\", defaultText: \"Search\"};const ICON_SETTINGS = {key: \"ICON_SETTINGS\", defaultText: \"Settings\"};const ICON_SHOW = {key: \"ICON_SHOW\", defaultText: \"Show\"};const ICON_SORT = {key: \"ICON_SORT\", defaultText: \"Sort\"};const ICON_SORT_ASCENDING = {key: \"ICON_SORT_ASCENDING\", defaultText: \"Sort Ascending\"};const ICON_SORT_DESCENDING = {key: \"ICON_SORT_DESCENDING\", defaultText: \"Sort Descending\"};const ICON_SYNCHRONIZE = {key: \"ICON_SYNCHRONIZE\", defaultText: \"Synchronize\"};const ICON_UNDO = {key: \"ICON_UNDO\", defaultText: \"Undo\"};const ICON_UP = {key: \"ICON_UP\", defaultText: \"Up\"};const ICON_UPLOAD = {key: \"ICON_UPLOAD\", defaultText: \"Upload\"};const ICON_ZOOM_IN = {key: \"ICON_ZOOM_IN\", defaultText: \"Zoom In\"};const ICON_ZOOM_OUT = {key: \"ICON_ZOOM_OUT\", defaultText: \"Zoom Out\"};\nexport {ICON_ACTION_SETTINGS,ICON_ACTIVATE,ICON_ADD,ICON_ADD_CONTACT,ICON_ADD_FILTER,ICON_ADD_PHOTO,ICON_BACK_TO_TOP,ICON_COLLAPSE,ICON_COLLAPSE_GROUP,ICON_CROP,ICON_DECLINE,ICON_DELETE,ICON_DISPLAY,ICON_DOWN,ICON_DOWNLOAD,ICON_DRILL_DOWN,ICON_DRILL_UP,ICON_ERROR,ICON_EXIT_FULL_SCREEN,ICON_EXPAND,ICON_EXPAND_GROUP,ICON_FILTER,ICON_FLAG,ICON_FORWARD,ICON_FULL_SCREEN,ICON_GENERATE_SHORTCUT,ICON_GROUP_2,ICON_HIDE,ICON_IPAD,ICON_IPHONE,ICON_LAPTOP,ICON_MESSAGE_ERROR,ICON_MESSAGE_INFORMATION,ICON_MESSAGE_SUCCESS,ICON_MESSAGE_WARNING,ICON_MOVE,ICON_MULTI_SELECT,ICON_NAV_BACK,ICON_OVERFLOW,ICON_REDO,ICON_REFRESH,ICON_RESIZE,ICON_RESIZE_HORIZONTAL,ICON_RESIZE_VERTICAL,ICON_RESPONSE,ICON_SAVE,ICON_SEARCH,ICON_SETTINGS,ICON_SHOW,ICON_SORT,ICON_SORT_ASCENDING,ICON_SORT_DESCENDING,ICON_SYNCHRONIZE,ICON_UNDO,ICON_UP,ICON_UPLOAD,ICON_ZOOM_IN,ICON_ZOOM_OUT};","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\nimport { ICON_ERROR } from \"../generated/i18n/i18n-defaults.js\";\n\nconst name = \"error\";\nconst pathData = \"M375 183q9-11 9-23 0-13-9-23-10-9-23-9-12 0-23 9l-73 74-73-74q-10-9-23-9-12 0-23 9-9 10-9 23 0 12 9 23l74 73-74 73q-9 10-9 23 0 12 9 23 11 9 23 9 13 0 23-9l73-74 73 74q11 9 23 9 13 0 23-9 9-11 9-23 0-13-9-23l-74-73zM256 512q-53 0-99.5-20T75 437t-55-81.5T0 256t20-99.5T75 75t81.5-55T256 0t99.5 20T437 75t55 81.5 20 99.5-20 99.5-55 81.5-81.5 55-99.5 20z\";\nconst ltr = false;\nconst accData = ICON_ERROR;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, accData, collection, packageName });\n\nexport default \"error\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\nimport { ICON_ERROR } from \"../generated/i18n/i18n-defaults.js\";\n\nconst name = \"error\";\nconst pathData = \"M512 256q0 53-20.5 100t-55 81.5-81 54.5-99.5 20-100-20.5-81.5-55T20 355 0 256q0-54 20-100.5t55-81T156.5 20 256 0t99.5 20T437 75t55 81.5 20 99.5zM399 364q3-3 3-6t-3-6l-86-86q-3-3-3-6t3-6l81-81q3-3 3-6t-3-6l-37-37q-2-2-6-2t-6 2l-83 82q-1 3-6 3-3 0-6-3l-84-83q-1-2-6-2-4 0-6 2l-37 37q-3 3-3 6t3 6l83 82q3 3 3 6t-3 6l-83 82q-2 2-2.5 4.5l-.5 2.5q0 3 3 5l36 37q4 2 6 2 4 0 6-2l85-84q2-2 6-2t6 2l88 88q4 2 6 2t6-2z\";\nconst ltr = false;\nconst accData = ICON_ERROR;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, accData, collection, packageName });\n\nexport default \"error\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/error.js\";\nimport {pathData as pathDataV4} from \"./v4/error.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"error\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"alert\";\nconst pathData = \"M200 34q9-17 24-25.5T256 0t32 8.5T312 34l192 353q8 13 8 30 0 25-18 44.5T448 481H64q-28 0-46-19.5T0 417q0-17 8-30zm88 119q0-13-9-22.5t-23-9.5-23 9.5-9 22.5v128q0 14 9 23.5t23 9.5 23-9.5 9-23.5V153zm6 238q0-16-11-27t-27-11-27 11-11 27q0 17 11 28t27 11 27-11 11-28z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"alert\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"alert\";\nconst pathData = \"M501 374q5 10 7.5 19.5T512 412v5q0 31-23 47.5T439 481H74q-13 0-26-4.5T24.5 464t-17-20T1 417v-5q0-10 3.5-18.5T13 374L198 38q24-38 61-38t59 38zM257 127q-13 0-23.5 8T223 161q1 7 3 23 2 14 3.5 37t3.5 61q0 11 7.5 16t15.5 5q22 0 24-21l2-36 9-85q0-18-10.5-26t-23.5-8zm0 299q20 0 31.5-12t11.5-32q0-19-11.5-31T257 339t-31.5 12-11.5 31q0 20 11.5 32t31.5 12z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"alert\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/alert.js\";\nimport {pathData as pathDataV4} from \"./v4/alert.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"alert\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"sys-enter-2\";\nconst pathData = \"M256 0q53 0 99.5 20T437 75t55 81.5 20 99.5-20 99.5-55 81.5-81.5 55-99.5 20-99.5-20T75 437t-55-81.5T0 256t20-99.5T75 75t81.5-55T256 0zM128 256q-14 0-23 9t-9 23q0 12 9 23l64 64q11 9 23 9 13 0 23-9l192-192q9-11 9-23 0-13-9.5-22.5T384 128q-12 0-23 9L192 307l-41-42q-10-9-23-9z\";\nconst ltr = true;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"sys-enter-2\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"sys-enter-2\";\nconst pathData = \"M512 256q0 54-20 100.5t-54.5 81T356 492t-100 20q-54 0-100.5-20t-81-55T20 355.5 0 256t20.5-100 55-81.5T157 20t99-20q53 0 100 20t81.5 54.5T492 156t20 100zm-118-87q2-4 2-7t-3-6l-36-36q-3-4-8-4t-8 5L237 294h-4l-70-52q-4-3-7-3t-4.5 2-2.5 3l-29 41q-3 3-3 6 0 5 5 8l113 95q2 2 7 2t8-4z\";\nconst ltr = true;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"sys-enter-2\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/sys-enter-2.js\";\nimport {pathData as pathDataV4} from \"./v4/sys-enter-2.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"sys-enter-2\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"information\";\nconst pathData = \"M256 0q53 0 99.5 20T437 75t55 81.5 20 99.5-20 99.5-55 81.5-81.5 55-99.5 20-99.5-20T75 437t-55-81.5T0 256t20-99.5T75 75t81.5-55T256 0zm38 140q0-16-11-27.5T256 101t-27 11.5-11 27.5 11 27 27 11 27-11 11-27zm-6 110q0-14-9-23t-23-9-23 9-9 23v128q0 13 9 22.5t23 9.5 23-9.5 9-22.5V250z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"information\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"information\";\nconst pathData = \"M0 256q0-53 20.5-100t55-81.5T157 20t99-20q54 0 100.5 20t81 55 54.5 81.5 20 99.5q0 54-20 100.5t-54.5 81T356 492t-100 20q-54 0-100.5-20t-81-55T20 355.5 0 256zm226-89q14 11 30 11 17 0 29.5-11.5T298 138q0-19-13-31-12-12-29-12-19 0-30.5 12.5T214 138q0 17 12 29zm-34 201v33h128v-33h-32V215q0-6-7-6h-88v31h32v128h-33z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"information\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/information.js\";\nimport {pathData as pathDataV4} from \"./v4/information.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"information\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\nimport { ICON_DECLINE } from \"../generated/i18n/i18n-defaults.js\";\n\nconst name = \"decline\";\nconst pathData = \"M292 256l117 117q7 7 7 18t-7 18-19 7q-11 0-18-7L256 293 140 409q-7 7-18 7-12 0-19-7t-7-18 7-18l117-117-117-116q-7-7-7-18t7-18q8-8 19-8 10 0 18 8l116 116 116-116q8-8 18-8 11 0 19 8 7 7 7 18t-7 18z\";\nconst ltr = false;\nconst accData = ICON_DECLINE;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, accData, collection, packageName });\n\nexport default \"decline\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\nimport { ICON_DECLINE } from \"../generated/i18n/i18n-defaults.js\";\n\nconst name = \"decline\";\nconst pathData = \"M86 109l22-23q5-5 12-5 6 0 11 5l124 125L380 86q5-5 11-5 7 0 12 5l22 23q6 5 6 11t-6 12L301 256l124 125q6 5 6 11 0 5-6 11l-22 23q-8 5-12 5-3 0-11-5L255 301 131 426q-5 5-11 5-4 0-12-5l-22-23q-6-6-6-11 0-6 6-11l124-125L86 132q-6-6-6-12t6-11z\";\nconst ltr = false;\nconst accData = ICON_DECLINE;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, accData, collection, packageName });\n\nexport default \"decline\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/decline.js\";\nimport {pathData as pathDataV4} from \"./v4/decline.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"decline\";\nexport { pathData, ltr, accData };","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\n\n/**\n* @public\n*/\nconst metadata = {\n\ttag: \"ui5-option\",\n\tmanagedSlots: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.Option.prototype */ {\n\n\t\t/**\n\t\t * Defines the selected state of the component.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is in disabled state.\n\t\t *
\n\t\t * Note: A disabled component is hidden.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.12\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the tooltip of the component.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @private\n\t\t * @since 1.1.0\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the icon
source URI.\n\t\t *
\n\t\t * Note:\n\t\t * SAP-icons font provides numerous built-in icons. To find all the available icons, see the\n\t\t * Icon Explorer.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: null,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value of the ui5-select
inside an HTML Form element when this component is selected.\n\t\t * For more information on HTML Form support, see the name
property of ui5-select
.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the additional text displayed at the end of the option element.\n\t\t * @type {string}\n\t\t * @public\n\t\t * @since 1.3.0\n\t\t */\n\t\t additionalText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the focused state of the component.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @since 1.0.0-rc.13\n\t\t * @private\n\t\t */\n\t\t_focused: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.Option.prototype */ {\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *
\n\t\t * Note: Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Option.prototype */ {},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-option
component defines the content of an option in the ui5-select
.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Option\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-option\n * @implements sap.ui.webcomponents.main.ISelectOption\n * @public\n */\nclass Option extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tget stableDomRef() {\n\t\treturn this.getAttribute(\"stable-dom-ref\") || `${this._id}-stable-dom-ref`;\n\t}\n}\n\nOption.define();\n\nexport default Option;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * Different types of wrapping.\n * @lends sap.ui.webcomponents.main.types.WrappingType.prototype\n * @public\n */\nconst WrappingTypes = {\n\t/**\n\t * The text will be truncated with an ellipsis.\n\t * @public\n\t * @type {None}\n\t */\n\tNone: \"None\",\n\n\t/**\n\t * The text will wrap. The words will not be broken based on hyphenation.\n\t * @public\n\t * @type {Normal}\n\t */\n\tNormal: \"Normal\",\n};\n\n/**\n * @class\n * Defines how the text of a component will be displayed when there is not enough space.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.WrappingType\n * @public\n * @enum {string}\n */\nclass WrappingType extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!WrappingTypes[value];\n\t}\n}\n\nWrappingType.generateTypeAccessors(WrappingTypes);\n\nexport default WrappingType;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Label.css\",content:\":host(:not([hidden])){display:inline-flex}:host{max-width:100%;color:var(--sapContent_LabelColor);font-family:\\\"72override\\\",var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;cursor:text}.ui5-label-root{width:100%;cursor:inherit}:host([wrapping-type=Normal]) .ui5-label-root{white-space:normal}:host(:not([wrapping-type=Normal])) .ui5-label-root{display:inline-block;white-space:nowrap}bdi{content:\\\"\\\";padding-right:.075rem}:host(:not([wrapping-type=Normal])) .ui5-label-text-wrapper{text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;max-width:100%}:host(:not([wrapping-type=Normal])[required][show-colon]) .ui5-label-text-wrapper,:host(:not([wrapping-type=Normal])[required][show-colon]) .ui5-label-text-wrapper.ui5-label-text-wrapper-safari{max-width:calc(100% - .8rem)}:host(:not([wrapping-type=Normal])[required]) .ui5-label-text-wrapper{max-width:calc(100% - .475rem)}:host(:not([wrapping-type=Normal])[required]) .ui5-label-text-wrapper.ui5-label-text-wrapper-safari{max-width:calc(100% - .425rem)}:host(:not([wrapping-type=Normal])[show-colon]) .ui5-label-text-wrapper{max-width:calc(100% - .125rem)}:host([show-colon]) .ui5-label-required-colon{margin-left:-.05rem}:host([show-colon]) .ui5-label-required-colon:before{content:\\\":\\\"}:host([required]) .ui5-label-required-colon:after{content:\\\"*\\\";color:var(--sapField_RequiredColor);font-size:1.25rem;font-weight:700;position:relative;font-style:normal;vertical-align:middle;line-height:0}:host([required][show-colon]) .ui5-label-required-colon:after{margin-inline-start:.125rem}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport findNodeOwner from \"@ui5/webcomponents-base/dist/util/findNodeOwner.js\";\nimport { isSafari } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport WrappingType from \"./types/WrappingType.js\";\n\n// Template\nimport LabelTemplate from \"./generated/templates/LabelTemplate.lit.js\";\n\n// Styles\nimport labelCss from \"./generated/themes/Label.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-label\",\n\tproperties: /** @lends sap.ui.webcomponents.main.Label.prototype */ {\n\n\t\t/**\n\t\t * Defines whether an asterisk character is added to the component text.\n\t\t *
\n\t\t * Note: Usually indicates that user input is required.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines how the text of a component will be displayed when there is not enough space.\n\t\t * Available options are:\n\t\t * \n\t\t * None
- The text will be truncated with an ellipsis. \n\t\t * Normal
- The text will wrap. The words will not be broken based on hyphenation. \n\t\t *
\n\t\t *\n\t\t * @type {WrappingType}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\t wrappingType: {\n\t\t\ttype: WrappingType,\n\t\t\tdefaultValue: WrappingType.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether colon is added to the component text.\n\t\t *
\n\t\t * Note: Usually used in forms.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\n\t\tshowColon: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the labeled input by providing its ID.\n\t\t *
\n\t\t * Note: Can be used with both ui5-input
and native input.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\t\"for\": {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.Label.prototype */ {\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *
Note: Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-label
is a component used to represent a label,\n * providing valuable information to the user.\n * Usually it is placed next to a value holder, such as a text field.\n * It informs the user about what data is displayed or expected in the value holder.\n *
\n * The ui5-label
appearance can be influenced by properties,\n * such as required
and wrappingType
.\n * The appearance of the Label can be configured in a limited way by using the design property.\n * For a broader choice of designs, you can use custom styles.\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Label\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Label\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-label\n * @public\n */\nclass Label 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 LabelTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn labelCss;\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\ttextWrapper: {\n\t\t\t\t\"ui5-label-text-wrapper\": true,\n\t\t\t\t\"ui5-label-text-wrapper-safari\": isSafari(),\n\t\t\t},\n\t\t};\n\t}\n\n\t_onclick() {\n\t\tif (!this.for) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ownerNode = findNodeOwner(this);\n\t\tconst elementToFocus = ownerNode.querySelector(`#${this.for}`);\n\t\tif (elementToFocus) {\n\t\t\telementToFocus.focus();\n\t\t}\n\t}\n}\n\nLabel.define();\n\nexport default Label;\n","const getActiveElement = () => {\n\tlet element = document.activeElement;\n\n\twhile (element && element.shadowRoot && element.shadowRoot.activeElement) {\n\t\telement = element.shadowRoot.activeElement;\n\t}\n\n\treturn element;\n};\n\nexport default getActiveElement;\n","import getSharedResource from \"../getSharedResource.js\";\nimport { getFeature } from \"../FeaturesRegistry.js\";\nimport getActiveElement from \"./getActiveElement.js\";\n\nconst PopupUtilsData = getSharedResource(\"PopupUtilsData\", {});\nPopupUtilsData.currentZIndex = PopupUtilsData.currentZIndex || 100;\n\nconst getFocusedElement = () => {\n\tconst element = getActiveElement();\n\treturn (element && typeof element.focus === \"function\") ? element : null;\n};\n\nconst isFocusedElementWithinNode = node => {\n\tconst fe = getFocusedElement();\n\n\tif (fe) {\n\t\treturn isNodeContainedWithin(node, fe);\n\t}\n\n\treturn false;\n};\n\nconst isNodeContainedWithin = (parent, child) => {\n\tlet currentNode = parent;\n\n\tif (currentNode.shadowRoot) {\n\t\tcurrentNode = Array.from(currentNode.shadowRoot.children).find(n => n.localName !== \"style\");\n\t}\n\n\tif (currentNode === child) {\n\t\treturn true;\n\t}\n\n\tconst childNodes = currentNode.localName === \"slot\" ? currentNode.assignedNodes() : currentNode.children;\n\n\tif (childNodes) {\n\t\treturn Array.from(childNodes).some(n => isNodeContainedWithin(n, child));\n\t}\n};\n\nconst isPointInRect = (x, y, rect) => {\n\treturn x >= rect.left && x <= rect.right\n\t\t&& y >= rect.top && y <= rect.bottom;\n};\n\nconst isClickInRect = (event, rect) => {\n\tlet x;\n\tlet y;\n\n\tif (event.touches) {\n\t\tconst touch = event.touches[0];\n\t\tx = touch.clientX;\n\t\ty = touch.clientY;\n\t} else {\n\t\tx = event.clientX;\n\t\ty = event.clientY;\n\t}\n\n\treturn isPointInRect(x, y, rect);\n};\n\nconst getClosedPopupParent = el => {\n\tconst parent = el.parentElement || (el.getRootNode && el.getRootNode().host);\n\n\tif (parent && ((parent.showAt && parent.isUI5Element) || (parent.open && parent.isUI5Element) || parent === document.documentElement)) {\n\t\treturn parent;\n\t}\n\n\treturn getClosedPopupParent(parent);\n};\n\nconst getNextZIndex = () => {\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\tif (OpenUI5Support && OpenUI5Support.isLoaded()) { // use OpenUI5 for getting z-index values, if loaded\n\t\treturn OpenUI5Support.getNextZIndex();\n\t}\n\n\tPopupUtilsData.currentZIndex += 2;\n\treturn PopupUtilsData.currentZIndex;\n};\n\nconst getCurrentZIndex = () => {\n\treturn PopupUtilsData.currentZIndex;\n};\n\nexport {\n\tgetFocusedElement,\n\tisClickInRect,\n\tgetClosedPopupParent,\n\tgetNextZIndex,\n\tgetCurrentZIndex,\n\tisFocusedElementWithinNode,\n};\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context._isPhone ? block1(context, tags, suffix) : block7(context, tags, suffix) }`;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-dialog\", tags, suffix)} accessible-name=${ifDefined(context.accessibleName)} accessible-name-ref=${ifDefined(context.accessibleNameRef)} stretch _disable-initial-focus @ui5-before-open=\"${ifDefined(context._beforeDialogOpen)}\" @ui5-after-open=\"${ifDefined(context._propagateDialogEvent)}\" @ui5-before-close=\"${ifDefined(context._propagateDialogEvent)}\" @ui5-after-close=\"${ifDefined(context._afterDialogClose)}\" exportparts=\"content, header, footer\">${ !context._hideHeader ? block2(context, tags, suffix) : undefined }${scopeTag(\"ui5-dialog\", tags, suffix)}>` : html`${ !context._hideHeader ? block2(context, tags, suffix) : undefined }`;\nconst block2 = (context, tags, suffix) => html`${ context.header.length ? block3(context, tags, suffix) : block4(context, tags, suffix) }`;\nconst block3 = (context, tags, suffix) => html``;\nconst block4 = (context, tags, suffix) => html``;\nconst block5 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-title\", tags, suffix)} level=\"H2\" class=\"ui5-popup-header-text ui5-responsive-popover-header-text\">${ifDefined(context.headerText)}${scopeTag(\"ui5-title\", tags, suffix)}>` : html``;\nconst block6 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-button\", tags, suffix)} icon=\"decline\" design=\"Transparent\" aria-label=\"${ifDefined(context._closeDialogAriaLabel)}\" @click=\"${context.close}\">${scopeTag(\"ui5-button\", tags, suffix)}>` : html``;\nconst block7 = (context, tags, suffix) => html`${ context._displayHeader ? block8(context, tags, suffix) : undefined }
${ context._displayFooter ? block11(context, tags, suffix) : undefined }`;\nconst block8 = (context, tags, suffix) => html``;\nconst block9 = (context, tags, suffix) => html``;\nconst block10 = (context, tags, suffix) => html``;\nconst block11 = (context, tags, suffix) => html`${ context.footer.length ? block12(context, tags, suffix) : undefined }`;\nconst block12 = (context, tags, suffix) => html``;\n\n\nexport default block0;","/**\n * Returns a value clamped between an upper bound 'max' and lower bound 'min'.\n * @param {number} val value\n * @param {number} min lower bound\n * @param {number} max upper bound\n * @returns {number}\n */\nconst clamp = (val, min, max) => {\n\treturn Math.min(Math.max(val, min), max);\n};\n\nexport default clamp;\n","const isNodeHidden = node => {\n\tif (node.nodeName === \"SLOT\") {\n\t\treturn false;\n\t}\n\n\treturn (node.offsetWidth <= 0 && node.offsetHeight <= 0) || (node.style && node.style.visibility === \"hidden\");\n};\n\nexport default isNodeHidden;\n","const rClickable = /^(?:a|area)$/i;\nconst rFocusable = /^(?:input|select|textarea|button)$/i;\n\nconst isNodeClickable = node => {\n\tif (node.disabled) {\n\t\treturn false;\n\t}\n\n\tconst tabIndex = node.getAttribute(\"tabindex\");\n\tif (tabIndex !== null && tabIndex !== undefined) {\n\t\treturn parseInt(tabIndex) >= 0;\n\t}\n\n\treturn rFocusable.test(node.nodeName)\n\t\t|| (rClickable.test(node.nodeName)\n\t\t&& node.href);\n};\n\nexport default isNodeClickable;\n","import isNodeHidden from \"./isNodeHidden.js\";\nimport isNodeClickable from \"./isNodeClickable.js\";\n\nconst isFocusTrap = el => {\n\treturn el.hasAttribute(\"data-ui5-focus-trap\");\n};\n\nconst getFirstFocusableElement = async (container, startFromContainer) => {\n\tif (!container || isNodeHidden(container)) {\n\t\treturn null;\n\t}\n\n\treturn findFocusableElement(container, true, startFromContainer);\n};\n\nconst getLastFocusableElement = async (container, startFromContainer) => {\n\tif (!container || isNodeHidden(container)) {\n\t\treturn null;\n\t}\n\n\treturn findFocusableElement(container, false, startFromContainer);\n};\n\nconst isElemFocusable = el => {\n\treturn el.hasAttribute(\"data-ui5-focus-redirect\") || !isNodeHidden(el);\n};\n\nconst findFocusableElement = async (container, forward, startFromContainer) => {\n\tlet child;\n\n\tif (container.shadowRoot) {\n\t\tchild = forward ? container.shadowRoot.firstChild : container.shadowRoot.lastChild;\n\t} else if (container.assignedNodes && container.assignedNodes()) {\n\t\tconst assignedElements = container.assignedNodes();\n\t\tchild = forward ? assignedElements[0] : assignedElements[assignedElements.length - 1];\n\t} else if (startFromContainer) {\n\t\tchild = container;\n\t} else {\n\t\tchild = forward ? container.firstElementChild : container.lastElementChild;\n\t}\n\n\tlet focusableDescendant;\n\n\t/* eslint-disable no-await-in-loop */\n\n\twhile (child) {\n\t\tconst originalChild = child;\n\n\t\tif (child.isUI5Element) {\n\t\t\tchild = await child.getFocusDomRefAsync();\n\t\t}\n\n\t\tif (!child) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (child.nodeType === 1 && isElemFocusable(child) && !isFocusTrap(child)) {\n\t\t\tif (isNodeClickable(child)) {\n\t\t\t\treturn (child && typeof child.focus === \"function\") ? child : null;\n\t\t\t}\n\n\t\t\tfocusableDescendant = await findFocusableElement(child, forward);\n\t\t\tif (focusableDescendant) {\n\t\t\t\treturn (focusableDescendant && typeof focusableDescendant.focus === \"function\") ? focusableDescendant : null;\n\t\t\t}\n\t\t}\n\n\t\tchild = forward ? originalChild.nextSibling : originalChild.previousSibling;\n\t}\n\n\t/* eslint-enable no-await-in-loop */\n\n\treturn null;\n};\n\nexport {\n\tgetFirstFocusableElement,\n\tgetLastFocusableElement,\n};\n","let resizeObserver;\nconst observedElements = new Map();\n\nconst getResizeObserver = () => {\n\tif (!resizeObserver) {\n\t\tresizeObserver = new window.ResizeObserver(entries => {\n\t\t\tentries.forEach(entry => {\n\t\t\t\tconst callbacks = observedElements.get(entry.target);\n\t\t\t\tcallbacks.forEach(callback => callback());\n\t\t\t});\n\t\t});\n\t}\n\treturn resizeObserver;\n};\n\nlet observe = (element, callback) => {\n\tconst callbacks = observedElements.get(element) || [];\n\n\t// if no callbacks have been added for this element - start observing it\n\tif (!callbacks.length) {\n\t\tgetResizeObserver().observe(element);\n\t}\n\n\t// save the callbacks in an array\n\tobservedElements.set(element, [...callbacks, callback]);\n};\n\nlet unobserve = (element, callback) => {\n\tconst callbacks = observedElements.get(element) || [];\n\tif (callbacks.length === 0) {\n\t\treturn;\n\t}\n\n\tconst filteredCallbacks = callbacks.filter(fn => fn !== callback);\n\tif (filteredCallbacks.length === 0) {\n\t\tgetResizeObserver().unobserve(element);\n\t\tobservedElements.delete(element);\n\t} else {\n\t\tobservedElements.set(element, filteredCallbacks);\n\t}\n};\n\n/**\n * Allows to register/deregister resize observers for a DOM element\n *\n * @public\n * @class\n */\nclass ResizeHandler {\n\t/**\n\t * @static\n\t * @public\n\t * @param {*} element UI5 Web Component or DOM Element to be observed\n\t * @param {*} callback Callback to be executed\n\t */\n\tstatic register(element, callback) {\n\t\tif (element.isUI5Element) {\n\t\t\telement = element.getDomRef();\n\t\t}\n\n\t\tif (element instanceof HTMLElement) {\n\t\t\tobserve(element, callback);\n\t\t} else {\n\t\t\tconsole.warn(\"Cannot register ResizeHandler for element\", element); // eslint-disable-line\n\t\t}\n\t}\n\n\t/**\n\t * @static\n\t * @public\n\t * @param {*} element UI5 Web Component or DOM Element to be unobserved\n\t * @param {*} callback Callback to be removed\n\t */\n\tstatic deregister(element, callback) {\n\t\tif (element.isUI5Element) {\n\t\t\telement = element.getDomRef();\n\t\t}\n\n\t\tif (element instanceof HTMLElement) {\n\t\t\tunobserve(element, callback);\n\t\t} else {\n\t\t\tconsole.warn(\"Cannot deregister ResizeHandler for element\", element); // eslint-disable-line\n\t\t}\n\t}\n}\n\n/**\n * Set a function to be executed whenever a DOM node needs to be observed for size change.\n * @public\n * @param fn\n */\nconst setResizeHandlerObserveFn = fn => {\n\tobserve = fn;\n};\n\n/**\n * Set a function to be executed whenever a DOM node needs to no longer be observed for size changes\n * @public\n * @param fn\n */\nconst setResizeHandlerUnobserveFn = fn => {\n\tunobserve = fn;\n};\n\nexport default ResizeHandler;\nexport { setResizeHandlerObserveFn, setResizeHandlerUnobserveFn };\n","const querySets = {};\n\n/**\n * Initializes a screen width media query range set.\n *\n * This initialization step makes the range set ready to be used for one of the other functions in namespace MediaRange
.\n *\n * A range set can be defined as shown in the following example:\n * \n * MediaRange.initRangeSet(\"MyRangeSet\", [200, 400], [\"Small\", \"Medium\", \"Large\"]);\n *
\n * This example defines the following named ranges:\n * \n * \"Small\"
: For screens smaller than 200 pixels. \n * \"Medium\"
: For screens greater than or equal to 200 pixels and smaller than 400 pixels. \n * \"Large\"
: For screens greater than or equal to 400 pixels. \n *
\n *\n * @param {string} name The name of the range set to be initialized.\n * The name must be a valid id and consist only of letters and numeric digits.\n *\n * @param {int[]} [borders] The range borders\n *\n * @param {string[]} [names] The names of the ranges. The names must be a valid id and consist only of letters and digits.\n *\n * @name MediaRange.initRangeSet\n * @function\n * @public\n */\nconst _initRangeSet = (name, borders, names) => {\n\tquerySets[name] = {\n\t\tborders,\n\t\tnames,\n\t};\n};\n\n/**\n * Returns information about the current active range of the range set with the given name.\n *\n * If the optional parameter width
is given, the active range will be determined for that width,\n * otherwise it is determined for the current window size.\n *\n * @param {string} name The name of the range set. The range set must be initialized beforehand ({@link MediaRange.initRangeSet})\n * @param {int} [width] An optional width, based on which the range should be determined;\n * If width
is not provided, the window size will be used.\n * @returns {string} The name of the current active interval of the range set.\n *\n * @name MediaRange.getCurrentRange\n * @function\n * @public\n */\nconst _getCurrentRange = (name, width = window.innerWidth) => {\n\tconst querySet = querySets[name];\n\tlet i = 0;\n\n\tif (!querySet) {\n\t\treturn null;\n\t}\n\n\tfor (; i < querySet.borders.length; i++) {\n\t\tif (width < querySet.borders[i]) {\n\t\t\treturn querySet.names[i];\n\t\t}\n\t}\n\n\treturn querySet.names[i];\n};\n\n/**\n * Enumeration containing the names and settings of predefined screen width media query range sets.\n *\n * @namespace\n * @name MediaRange.RANGESETS\n * @public\n */\nconst RANGESETS = {\n\t/**\n\t * A 4-step range set (S-M-L-XL).\n\t *\n\t * The ranges of this set are:\n\t * \n\t * \"S\"
: For screens smaller than 600 pixels. \n\t * \"M\"
: For screens greater than or equal to 600 pixels and smaller than 1024 pixels. \n\t * \"L\"
: For screens greater than or equal to 1024 pixels and smaller than 1440 pixels. \n\t * \"XL\"
: For screens greater than or equal to 1440 pixels. \n\t *
\n\t *\n\t * @name MediaRange.RANGESETS.RANGE_4STEPS\n\t * @public\n\t */\n\tRANGE_4STEPS: \"4Step\",\n};\n\n/**\n * API for screen width changes.\n *\n * @namespace\n * @name MediaRange\n */\n\nconst MediaRange = {\n\tRANGESETS,\n\tinitRangeSet: _initRangeSet,\n\tgetCurrentRange: _getCurrentRange,\n};\n\nMediaRange.initRangeSet(MediaRange.RANGESETS.RANGE_4STEPS, [600, 1024, 1440], [\"S\", \"M\", \"L\", \"XL\"]);\n\nexport default MediaRange;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html` `;\n\n\nexport default block0;","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { isEscape } from \"@ui5/webcomponents-base/dist/Keys.js\";\n\nlet openedRegistry = [];\n\nconst addOpenedPopup = (instance, parentPopovers = []) => {\n\tif (!openedRegistry.includes(instance)) {\n\t\topenedRegistry.push({\n\t\t\tinstance,\n\t\t\tparentPopovers,\n\t\t});\n\t}\n\n\tif (openedRegistry.length === 1) {\n\t\tattachGlobalListener();\n\t}\n};\n\nconst removeOpenedPopup = instance => {\n\topenedRegistry = openedRegistry.filter(el => {\n\t\treturn el.instance !== instance;\n\t});\n\n\tif (!openedRegistry.length) {\n\t\tdetachGlobalListener();\n\t}\n};\n\nconst getOpenedPopups = () => {\n\treturn [...openedRegistry];\n};\n\nconst _keydownListener = event => {\n\tif (!openedRegistry.length) {\n\t\treturn;\n\t}\n\n\tif (isEscape(event)) {\n\t\topenedRegistry[openedRegistry.length - 1].instance.close(true);\n\t}\n};\n\nconst attachGlobalListener = () => {\n\tdocument.addEventListener(\"keydown\", _keydownListener);\n};\n\nconst detachGlobalListener = () => {\n\tdocument.removeEventListener(\"keydown\", _keydownListener);\n};\n\nexport { addOpenedPopup, removeOpenedPopup, getOpenedPopups };\n","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Popup.css\",content:\":host{min-width:1px;display:none;position:fixed}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/PopupStaticAreaStyles.css\",content:\".ui5-block-layer{display:none;position:fixed;background-color:var(--sapBlockLayer_Background);opacity:.6;top:-500px;left:-500px;right:-500px;bottom:-500px;outline:none;pointer-events:all;z-index:-1}.ui5-block-layer:not([hidden]){display:inline-block}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/PopupGlobal.css\",content:\".ui5-popup-scroll-blocker{overflow:hidden}\"}","import { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport { isChrome } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport { getFirstFocusableElement, getLastFocusableElement } from \"@ui5/webcomponents-base/dist/util/FocusableElements.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport { hasStyle, createStyle } from \"@ui5/webcomponents-base/dist/ManagedStyles.js\";\nimport { isTabPrevious } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport { getNextZIndex, getFocusedElement, isFocusedElementWithinNode } from \"@ui5/webcomponents-base/dist/util/PopupUtils.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport MediaRange from \"@ui5/webcomponents-base/dist/MediaRange.js\";\nimport PopupTemplate from \"./generated/templates/PopupTemplate.lit.js\";\nimport PopupBlockLayer from \"./generated/templates/PopupBlockLayerTemplate.lit.js\";\nimport { addOpenedPopup, removeOpenedPopup } from \"./popup-utils/OpenedPopupsRegistry.js\";\n\n// Styles\nimport styles from \"./generated/themes/Popup.css.js\";\nimport staticAreaStyles from \"./generated/themes/PopupStaticAreaStyles.css.js\";\nimport globalStyles from \"./generated/themes/PopupGlobal.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Popup.prototype */ {\n\n\t\t/**\n\t\t * Defines the content of the Popup.\n\t\t * @type {HTMLElement[]}\n\t\t * @slot content\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: HTMLElement,\n\t\t\tpropertyName: \"content\",\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.Popup.prototype */ {\n\t\t/**\n\t\t * Defines the ID of the HTML Element, which will get the initial focus.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tinitialFocus: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the focus should be returned to the previously focused element,\n\t\t * when the popup closes.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t*/\n\t\tpreventFocusRestore: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the element is open\n\t\t * @public\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @since 1.2.0\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the element is already open\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t */\n\t\topened: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Defines the IDs of the elements that label the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.1.0\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t/**\n\t\t * Defines the current media query size.\n\t\t *\n\t\t * @type {string}\n\t\t * @private\n\t\t */\n\t\tmediaRange: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_disableInitialFocus: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_blockLayerHidden: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Popup.prototype */ {\n\n\t\t/**\n\t\t * Fired before the component is opened. This event can be cancelled, which will prevent the popup from opening. This event does not bubble.\n\t\t *\n\t\t * @public\n\t\t * @event sap.ui.webcomponents.main.Popup#before-open\n\t\t * @allowPreventDefault\n\t\t */\n\t\t\"before-open\": {},\n\n\t\t/**\n\t\t * Fired after the component is opened. This event does not bubble.\n\t\t *\n\t\t * @public\n\t\t * @event sap.ui.webcomponents.main.Popup#after-open\n\t\t */\n\t\t\"after-open\": {},\n\n\t\t/**\n\t\t * Fired before the component is closed. This event can be cancelled, which will prevent the popup from closing. This event does not bubble.\n\t\t *\n\t\t * @public\n\t\t * @event sap.ui.webcomponents.main.Popup#before-close\n\t\t * @allowPreventDefault\n\t\t * @param {boolean} escPressed Indicates that ESC
key has triggered the event.\n\t\t */\n\t\t\"before-close\": {\n\t\t\tdetail: {\n\t\t\t\tescPressed: { type: Boolean },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired after the component is closed. This event does not bubble.\n\t\t *\n\t\t * @public\n\t\t * @event sap.ui.webcomponents.main.Popup#after-close\n\t\t */\n\t\t\"after-close\": {},\n\n\t\t/**\n\t\t * Fired whenever the popup content area is scrolled\n\t\t *\n\t\t * @private\n\t\t * @event sap.ui.webcomponents.main.Popup#scroll\n\t\t */\n\t\t\"scroll\": {},\n\t},\n};\n\nconst createBlockingStyle = () => {\n\tif (!hasStyle(\"data-ui5-popup-scroll-blocker\")) {\n\t\tcreateStyle(globalStyles, \"data-ui5-popup-scroll-blocker\");\n\t}\n};\n\ncreateBlockingStyle();\n\nconst pageScrollingBlockers = new Set();\n\n/**\n * @class\n * \n * Base class for all popup Web Components.\n *\n * If you need to create your own popup-like custom UI5 Web Components, it is highly recommended that you extend\n * at least Popup in order to have consistency with other popups in terms of modal behavior and z-index management.\n *\n * 1. The Popup class handles modality:\n * - The \"isModal\" getter can be overridden by derivatives to provide their own conditions when they are modal or not\n * - Derivatives may call the \"blockPageScrolling\" and \"unblockPageScrolling\" static methods to temporarily remove scrollbars on the html element\n * - Derivatives may call the \"open\" and \"close\" methods which handle focus, manage the popup registry and for modal popups, manage the blocking layer\n *\n * 2. Provides blocking layer (relevant for modal popups only):\n * - It is in the static area\n * - Controlled by the \"open\" and \"close\" methods\n *\n * 3. The Popup class \"traps\" focus:\n * - Derivatives may call the \"applyInitialFocus\" method (usually when opening, to transfer focus inside the popup)\n *\n * 4. The Popup class automatically assigns \"z-index\"\n * - Each time a popup is opened, it gets a higher than the previously opened popup z-index\n *\n * 5. The template of this component exposes two inline partials you can override in derivatives:\n * - beforeContent (upper part of the box, useful for header/title/close button)\n * - afterContent (lower part, useful for footer/action buttons)\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Popup\n * @extends sap.ui.webcomponents.base.UI5Element\n * @public\n */\nclass Popup extends UI5Element {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._resizeHandler = this._resize.bind(this);\n\t}\n\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 styles() {\n\t\treturn styles;\n\t}\n\n\tstatic get template() {\n\t\treturn PopupTemplate;\n\t}\n\n\tstatic get staticAreaTemplate() {\n\t\treturn PopupBlockLayer;\n\t}\n\n\tstatic get staticAreaStyles() {\n\t\treturn staticAreaStyles;\n\t}\n\n\tonEnterDOM() {\n\t\tif (!this.isOpen()) {\n\t\t\tthis._blockLayerHidden = true;\n\t\t}\n\n\t\tResizeHandler.register(this, this._resizeHandler);\n\t}\n\n\tonExitDOM() {\n\t\tif (this.isOpen()) {\n\t\t\tPopup.unblockPageScrolling(this);\n\t\t\tthis._removeOpenedPopup();\n\t\t}\n\n\t\tResizeHandler.deregister(this, this._resizeHandler);\n\t}\n\n\tget _displayProp() {\n\t\treturn \"block\";\n\t}\n\n\t_resize() {\n\t\tthis.mediaRange = MediaRange.getCurrentRange(MediaRange.RANGESETS.RANGE_4STEPS, this.getDomRef().offsetWidth);\n\t}\n\n\t/**\n\t * Prevents the user from interacting with the content under the block layer\n\t */\n\t_preventBlockLayerFocus(event) {\n\t\tevent.preventDefault();\n\t}\n\n\t/**\n\t * Temporarily removes scrollbars from the html element\n\t * @protected\n\t */\n\tstatic blockPageScrolling(popup) {\n\t\tpageScrollingBlockers.add(popup);\n\n\t\tif (pageScrollingBlockers.size !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.documentElement.classList.add(\"ui5-popup-scroll-blocker\");\n\t}\n\n\t/**\n\t * Restores scrollbars on the html element, if needed\n\t * @protected\n\t */\n\tstatic unblockPageScrolling(popup) {\n\t\tpageScrollingBlockers.delete(popup);\n\n\t\tif (pageScrollingBlockers.size !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.documentElement.classList.remove(\"ui5-popup-scroll-blocker\");\n\t}\n\n\t_scroll(e) {\n\t\tthis.fireEvent(\"scroll\", {\n\t\t\tscrollTop: e.target.scrollTop,\n\t\t\ttargetRef: e.target,\n\t\t});\n\t}\n\n\t_onkeydown(e) {\n\t\tif (e.target === this._root && isTabPrevious(e)) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\t_onfocusout(e) {\n\t\t// relatedTarget is the element, which will get focus. If no such element exists, focus the root.\n\t\t// This happens after the mouse is released in order to not interrupt text selection.\n\t\tif (!e.relatedTarget) {\n\t\t\tthis._shouldFocusRoot = true;\n\t\t}\n\t}\n\n\t_onmousedown(e) {\n\t\tthis._root.removeAttribute(\"tabindex\");\n\n\t\tif (this.shadowRoot.contains(e.target)) {\n\t\t\tthis._shouldFocusRoot = true;\n\t\t} else {\n\t\t\tthis._shouldFocusRoot = false;\n\t\t}\n\t}\n\n\t_onmouseup() {\n\t\tthis._root.tabIndex = -1;\n\t\tif (this._shouldFocusRoot) {\n\t\t\tif (isChrome()) {\n\t\t\t\tthis._root.focus();\n\t\t\t}\n\t\t\tthis._shouldFocusRoot = false;\n\t\t}\n\t}\n\n\t/**\n\t * Focus trapping\n\t * @private\n\t */\n\tasync forwardToFirst() {\n\t\tconst firstFocusable = await getFirstFocusableElement(this);\n\n\t\tif (firstFocusable) {\n\t\t\tfirstFocusable.focus();\n\t\t} else {\n\t\t\tthis._root.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Focus trapping\n\t * @private\n\t */\n\tasync forwardToLast() {\n\t\tconst lastFocusable = await getLastFocusableElement(this);\n\n\t\tif (lastFocusable) {\n\t\t\tlastFocusable.focus();\n\t\t} else {\n\t\t\tthis._root.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Use this method to focus the element denoted by \"initialFocus\", if provided, or the first focusable element otherwise.\n\t * @protected\n\t */\n\tasync applyInitialFocus() {\n\t\tawait this.applyFocus();\n\t}\n\n\t/**\n\t * Focuses the element denoted by initialFocus
, if provided,\n\t * or the first focusable element otherwise.\n\t * @public\n\t * @async\n\t * @returns {Promise} Promise that resolves when the focus is applied\n\t */\n\tasync applyFocus() {\n\t\tawait this._waitForDomRef();\n\n\t\tconst element = this.getRootNode().getElementById(this.initialFocus)\n\t\t\t|| document.getElementById(this.initialFocus)\n\t\t\t|| await getFirstFocusableElement(this)\n\t\t\t|| this._root; // in case of no focusable content focus the root\n\n\t\tif (element) {\n\t\t\tif (element === this._root) {\n\t\t\t\telement.tabIndex = -1;\n\t\t\t}\n\t\t\telement.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Tells if the component is opened\n\t * @public\n\t * @returns {boolean}\n\t */\n\tisOpen() {\n\t\treturn this.opened;\n\t}\n\n\tisFocusWithin() {\n\t\treturn isFocusedElementWithinNode(this.shadowRoot.querySelector(\".ui5-popup-root\"));\n\t}\n\n\t/**\n\t * Shows the block layer (for modal popups only) and sets the correct z-index for the purpose of popup stacking\n\t * @protected\n\t */\n\tasync _open(preventInitialFocus) {\n\t\tconst prevented = !this.fireEvent(\"before-open\", {}, true, false);\n\t\tif (prevented) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isModal && !this.shouldHideBackdrop) {\n\t\t\t// create static area item ref for block layer\n\t\t\tthis.getStaticAreaItemDomRef();\n\t\t\tthis._blockLayerHidden = false;\n\t\t\tPopup.blockPageScrolling(this);\n\t\t}\n\n\t\tthis._zIndex = getNextZIndex();\n\t\tthis.style.zIndex = this._zIndex;\n\t\tthis._focusedElementBeforeOpen = getFocusedElement();\n\n\t\tthis._show();\n\n\t\tif (!this._disableInitialFocus && !preventInitialFocus) {\n\t\t\tthis.applyInitialFocus();\n\t\t}\n\n\t\tthis._addOpenedPopup();\n\n\t\tthis.opened = true;\n\t\tthis.open = true;\n\n\t\tawait renderFinished();\n\t\tthis.fireEvent(\"after-open\", {}, false, false);\n\t}\n\n\t/**\n\t * Adds the popup to the \"opened popups registry\"\n\t * @protected\n\t */\n\t_addOpenedPopup() {\n\t\taddOpenedPopup(this);\n\t}\n\n\t/**\n\t * Hides the block layer (for modal popups only)\n\t * @public\n\t */\n\tclose(escPressed = false, preventRegistryUpdate = false, preventFocusRestore = false) {\n\t\tif (!this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst prevented = !this.fireEvent(\"before-close\", { escPressed }, true, false);\n\t\tif (prevented) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isModal) {\n\t\t\tthis._blockLayerHidden = true;\n\t\t\tPopup.unblockPageScrolling(this);\n\t\t}\n\n\t\tthis.hide();\n\t\tthis.opened = false;\n\t\tthis.open = false;\n\n\t\tif (!preventRegistryUpdate) {\n\t\t\tthis._removeOpenedPopup();\n\t\t}\n\n\t\tif (!this.preventFocusRestore && !preventFocusRestore) {\n\t\t\tthis.resetFocus();\n\t\t}\n\n\t\tthis.fireEvent(\"after-close\", {}, false, false);\n\t}\n\n\t/**\n\t * Removes the popup from the \"opened popups registry\"\n\t * @protected\n\t */\n\t_removeOpenedPopup() {\n\t\tremoveOpenedPopup(this);\n\t}\n\n\t/**\n\t * Returns the focus to the previously focused element\n\t * @protected\n\t */\n\tresetFocus() {\n\t\tif (!this._focusedElementBeforeOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._focusedElementBeforeOpen.focus();\n\t\tthis._focusedElementBeforeOpen = null;\n\t}\n\n\t/**\n\t * Sets \"block\" display to the popup. The property can be overriden by derivatives of Popup.\n\t * @protected\n\t */\n\t_show() {\n\t\tthis.style.display = this._displayProp;\n\t}\n\n\t/**\n\t * Sets \"none\" display to the popup\n\t * @protected\n\t */\n\thide() {\n\t\tthis.style.display = \"none\";\n\t}\n\n\t/**\n\t * Implement this getter with relevant logic regarding the modality of the popup (e.g. based on a public property)\n\t *\n\t * @protected\n\t * @abstract\n\t * @returns {boolean}\n\t */\n\tget isModal() {} // eslint-disable-line\n\n\t/**\n\t * Implement this getter with relevant logic in order to hide the block layer (f.e. based on a public property)\n\t *\n\t * @protected\n\t * @abstract\n\t * @returns {boolean}\n\t */\n\tget shouldHideBackdrop() {} // eslint-disable-line\n\n\t/**\n\t * Return the ID of an element in the shadow DOM that is going to label this popup\n\t *\n\t * @protected\n\t * @abstract\n\t * @returns {string}\n\t */\n\tget _ariaLabelledBy() {} // eslint-disable-line\n\n\t/**\n\t * Return the value for aria-modal for this popup\n\t *\n\t * @protected\n\t * @abstract\n\t * @returns {string}\n\t */\n\tget _ariaModal() {} // eslint-disable-line\n\n\t/**\n\t * Ensures ariaLabel is never null or empty string\n\t * @returns {string|undefined}\n\t * @protected\n\t */\n\tget _ariaLabel() {\n\t\treturn getEffectiveAriaLabelText(this);\n\t}\n\n\tget _root() {\n\t\treturn this.shadowRoot.querySelector(\".ui5-popup-root\");\n\t}\n\n\tget contentDOM() {\n\t\treturn this.shadowRoot.querySelector(\".ui5-popup-content\");\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\troot: {},\n\t\t\tcontent: {},\n\t\t\tblockLayer: {\n\t\t\t\t\"zIndex\": (this._zIndex - 1),\n\t\t\t},\n\t\t};\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\t\"ui5-popup-root\": true,\n\t\t\t},\n\t\t\tcontent: {\n\t\t\t\t\"ui5-popup-content\": true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nexport default Popup;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.PopoverPlacementType.prototype\n * @public\n */\nconst PopoverPlacementTypes = {\n\t/**\n\t * Popover will be placed at the left side of the reference element.\n\t * @public\n\t * @type {Left}\n\t */\n\tLeft: \"Left\",\n\n\t/**\n\t * Popover will be placed at the right side of the reference element.\n\t * @public\n\t * @type {Right}\n\t */\n\tRight: \"Right\",\n\n\t/**\n\t * Popover will be placed at the top of the reference element.\n\t * @public\n\t * @type {Top}\n\t */\n\tTop: \"Top\",\n\n\t/**\n\t * Popover will be placed at the bottom of the reference element.\n\t * @public\n\t * @type {Bottom}\n\t */\n\tBottom: \"Bottom\",\n};\n\n/**\n * @class\n * Types for the placement of Popover control.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.PopoverPlacementType\n * @public\n * @enum {string}\n */\nclass PopoverPlacementType extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!PopoverPlacementTypes[value];\n\t}\n}\n\nPopoverPlacementType.generateTypeAccessors(PopoverPlacementTypes);\n\nexport default PopoverPlacementType;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.PopoverVerticalAlign.prototype\n * @public\n */\nconst PopoverVerticalAligns = {\n\t/**\n\t *\n\t * @public\n\t * @type {Center}\n\t */\n\tCenter: \"Center\",\n\n\t/**\n\t * Popover will be placed at the top of the reference control.\n\t * @public\n\t * @type {Top}\n\t */\n\tTop: \"Top\",\n\n\t/**\n\t * Popover will be placed at the bottom of the reference control.\n\t * @public\n\t * @type {Bottom}\n\t */\n\tBottom: \"Bottom\",\n\n\t/**\n\t * Popover will be streched\n\t * @public\n\t * @type {Stretch}\n\t */\n\tStretch: \"Stretch\",\n};\n\n/**\n * @class\n * Types for the placement of message Popover control.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.PopoverVerticalAlign\n * @public\n * @enum {string}\n */\nclass PopoverVerticalAlign extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!PopoverVerticalAligns[value];\n\t}\n}\n\nPopoverVerticalAlign.generateTypeAccessors(PopoverVerticalAligns);\n\nexport default PopoverVerticalAlign;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.PopoverHorizontalAlign.prototype\n * @public\n */\nconst PopoverHorizontalAligns = {\n\t/**\n\t * Popover is centered\n\t * @public\n\t * @type {Center}\n\t */\n\tCenter: \"Center\",\n\n\t/**\n\t * Popover opens on the left side of the target\n\t * @public\n\t * @type {Left}\n\t */\n\tLeft: \"Left\",\n\n\t/**\n\t * Popover opens on the right side of the target\n\t * @public\n\t * @type {Right}\n\t */\n\tRight: \"Right\",\n\n\t/**\n\t * Popover is stretched\n\t * @public\n\t * @type {Stretch}\n\t */\n\tStretch: \"Stretch\",\n};\n\n/**\n * @class\n * Defines the horizontal alignment of ui5-popover
\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.PopoverHorizontalAlign\n * @public\n * @enum {string}\n */\nclass PopoverHorizontalAlign extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!PopoverHorizontalAligns[value];\n\t}\n}\n\nPopoverHorizontalAlign.generateTypeAccessors(PopoverHorizontalAligns);\n\nexport default PopoverHorizontalAlign;\n","import { isClickInRect } from \"@ui5/webcomponents-base/dist/util/PopupUtils.js\";\nimport { getOpenedPopups, addOpenedPopup, removeOpenedPopup } from \"./OpenedPopupsRegistry.js\";\n\nlet updateInterval = null;\nconst intervalTimeout = 300;\nconst openedRegistry = [];\n\nconst repositionPopovers = event => {\n\topenedRegistry.forEach(popover => {\n\t\tpopover.instance.reposition();\n\t});\n};\n\nconst attachGlobalScrollHandler = () => {\n\tdocument.body.addEventListener(\"scroll\", repositionPopovers, true);\n};\n\nconst detachGlobalScrollHandler = () => {\n\tdocument.body.removeEventListener(\"scroll\", repositionPopovers, true);\n};\n\nconst runUpdateInterval = () => {\n\tupdateInterval = setInterval(() => {\n\t\trepositionPopovers();\n\t}, intervalTimeout);\n};\n\nconst stopUpdateInterval = () => {\n\tclearInterval(updateInterval);\n};\n\nconst attachGlobalClickHandler = () => {\n\tdocument.addEventListener(\"mousedown\", clickHandler);\n};\n\nconst detachGlobalClickHandler = () => {\n\tdocument.removeEventListener(\"mousedown\", clickHandler);\n};\n\nconst clickHandler = event => {\n\tconst openedPopups = getOpenedPopups();\n\tconst isTopPopupPopover = openedPopups[openedPopups.length - 1].instance.showAt;\n\n\tif (openedPopups.length === 0 || !isTopPopupPopover) {\n\t\treturn;\n\t}\n\n\t// loop all open popovers\n\tfor (let i = (openedPopups.length - 1); i !== -1; i--) {\n\t\tconst popup = openedPopups[i].instance;\n\n\t\t// if popup is modal, opener is clicked, popup is dialog skip closing\n\t\tif (popup.isModal || popup.isOpenerClicked(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isClickInRect(event, popup.getBoundingClientRect())) {\n\t\t\tbreak;\n\t\t}\n\n\t\tpopup.close();\n\t}\n};\n\nconst attachScrollHandler = popover => {\n\tpopover && popover.shadowRoot.addEventListener(\"scroll\", repositionPopovers, true);\n};\n\nconst detachScrollHandler = popover => {\n\tpopover && popover.shadowRoot.removeEventListener(\"scroll\", repositionPopovers);\n};\n\nconst addOpenedPopover = instance => {\n\tconst parentPopovers = getParentPopoversIfNested(instance);\n\n\taddOpenedPopup(instance, parentPopovers);\n\topenedRegistry.push({\n\t\tinstance,\n\t\tparentPopovers,\n\t});\n\n\tattachScrollHandler(instance);\n\n\tif (openedRegistry.length === 1) {\n\t\tattachGlobalScrollHandler();\n\t\tattachGlobalClickHandler();\n\t\trunUpdateInterval();\n\t}\n};\n\nconst removeOpenedPopover = instance => {\n\tconst popoversToClose = [instance];\n\n\tfor (let i = 0; i < openedRegistry.length; i++) {\n\t\tconst indexOfCurrentInstance = openedRegistry[i].parentPopovers.indexOf(instance);\n\t\tif (openedRegistry[i].parentPopovers.length > 0 && indexOfCurrentInstance > -1) {\n\t\t\tpopoversToClose.push(openedRegistry[i].instance);\n\t\t}\n\t}\n\n\tfor (let i = popoversToClose.length - 1; i >= 0; i--) {\n\t\tfor (let j = 0; j < openedRegistry.length; j++) {\n\t\t\tlet indexOfItemToRemove;\n\t\t\tif (popoversToClose[i] === openedRegistry[j].instance) {\n\t\t\t\tindexOfItemToRemove = j;\n\t\t\t}\n\n\t\t\tif (indexOfItemToRemove >= 0) {\n\t\t\t\tremoveOpenedPopup(openedRegistry[indexOfItemToRemove].instance);\n\t\t\t\tdetachScrollHandler(openedRegistry[indexOfItemToRemove].instance);\n\t\t\t\tconst itemToClose = openedRegistry.splice(indexOfItemToRemove, 1);\n\t\t\t\titemToClose[0].instance.close(false, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!openedRegistry.length) {\n\t\tdetachGlobalScrollHandler();\n\t\tdetachGlobalClickHandler();\n\t\tstopUpdateInterval();\n\t}\n};\n\nconst getRegistry = () => {\n\treturn openedRegistry;\n};\n\nconst getParentPopoversIfNested = instance => {\n\tlet currentElement = instance.parentNode;\n\tconst parentPopovers = [];\n\n\twhile (currentElement.parentNode) {\n\t\tfor (let i = 0; i < openedRegistry.length; i++) {\n\t\t\tif (currentElement && currentElement === openedRegistry[i].instance) {\n\t\t\t\tparentPopovers.push(currentElement);\n\t\t\t}\n\t\t}\n\n\t\tcurrentElement = currentElement.parentNode;\n\t}\n\n\treturn parentPopovers;\n};\n\nexport { addOpenedPopover, removeOpenedPopover, getRegistry };\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context._displayHeader ? block1(context, tags, suffix) : undefined }
${ context._displayFooter ? block4(context, tags, suffix) : undefined } `;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => html``;\nconst block3 = (context, tags, suffix) => html``;\nconst block4 = (context, tags, suffix) => html`${ context.footer.length ? block5(context, tags, suffix) : undefined }`;\nconst block5 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/BrowserScrollbar.css\",content:\"::-webkit-scrollbar:horizontal{height:var(--sapScrollBar_Dimension)}::-webkit-scrollbar:vertical{width:var(--sapScrollBar_Dimension)}::-webkit-scrollbar{background-color:var(--sapScrollBar_TrackColor);border-left:var(--browser_scrollbar_border)}::-webkit-scrollbar-thumb{border-radius:var(--browser_scrollbar_border_radius);background-color:var(--sapScrollBar_FaceColor)}::-webkit-scrollbar-thumb:hover{background-color:var(--sapScrollBar_Hover_FaceColor)}::-webkit-scrollbar-corner{background-color:var(--sapScrollBar_TrackColor)}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/PopupsCommon.css\",content:\":host{display:none;position:fixed;background:var(--sapGroup_ContentBackground);box-shadow:var(--sapContent_Shadow2);border-radius:var(--_ui5_popup_border_radius);min-height:2rem;box-sizing:border-box}.ui5-popup-root{background:inherit;border-radius:inherit;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;outline:none}.ui5-popup-root .ui5-popup-header-root{color:var(--sapPageHeader_TextColor);box-shadow:var(--sapContent_HeaderShadow);margin-bottom:.125rem}.ui5-popup-content{color:var(--sapTextColor)}.ui5-popup-footer-root{background:var(--sapPageFooter_Background);border-top:1px solid var(--sapPageFooter_BorderColor);color:var(--sapPageFooter_TextColor)}.ui5-popup-footer-root,.ui5-popup-header-root,:host([header-text]) .ui5-popup-header-text{margin:0;font-size:1rem;font-family:\\\"72override\\\",var(--_ui5_popup_header_font_family);display:flex;justify-content:center;align-items:center}.ui5-popup-header-root .ui5-popup-header-text{font-weight:var(--_ui5_popup_header_font_weight)}.ui5-popup-content{overflow:auto;box-sizing:border-box}:host([header-text]) .ui5-popup-header-text{text-align:center;min-height:var(--_ui5_popup_default_header_height);max-height:var(--_ui5_popup_default_header_height);line-height:var(--_ui5_popup_default_header_height);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:inline-block}:host([header-text]) .ui5-popup-header-root{justify-content:var(--_ui5_popup_header_prop_header_text_alignment)}:host(:not([header-text])) .ui5-popup-header-text{display:none}:host([disable-scrolling]) .ui5-popup-content{overflow:hidden}:host([media-range=S]) .ui5-popup-content{padding:1rem var(--_ui5_popup_content_padding_s)}:host([media-range=L]) .ui5-popup-content,:host([media-range=M]) .ui5-popup-content{padding:1rem var(--_ui5_popup_content_padding_m_l)}:host([media-range=XL]) .ui5-popup-content{padding:1rem var(--_ui5_popup_content_padding_xl)}.ui5-popup-header-root{background:var(--sapPageHeader_Background)}:host([media-range=S]) .ui5-popup-footer-root,:host([media-range=S]) .ui5-popup-header-root{padding-left:var(--_ui5_popup_header_footer_padding_s);padding-right:var(--_ui5_popup_header_footer_padding_s)}:host([media-range=L]) .ui5-popup-footer-root,:host([media-range=L]) .ui5-popup-header-root,:host([media-range=M]) .ui5-popup-footer-root,:host([media-range=M]) .ui5-popup-header-root{padding-left:var(--_ui5_popup_header_footer_padding_m_l);padding-right:var(--_ui5_popup_header_footer_padding_m_l)}:host([media-range=XL]) .ui5-popup-footer-root,:host([media-range=XL]) .ui5-popup-header-root{padding-left:var(--_ui5_popup_header_footer_padding_xl);padding-right:var(--_ui5_popup_header_footer_padding_xl)}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Popover.css\",content:\".ui5-popover-arrow{pointer-events:none;display:block;width:1rem;height:1rem;position:absolute;overflow:hidden}.ui5-popover-arrow:after{content:\\\"\\\";display:block;width:.7rem;height:.7rem;background-color:var(--sapGroup_ContentBackground);box-shadow:var(--sapContent_Shadow3);transform:rotate(-45deg)}:host{max-width:calc(100% - var(--_ui5_popup_viewport_margin)*2)}:host([opened][actual-placement-type=Top]){margin-top:var(--_ui5-popover-margin-bottom)}:host([opened][actual-placement-type=Bottom]){margin-top:var(--_ui5-popover-margin-top)}:host([actual-placement-type=Bottom]) .ui5-popover-arrow{left:calc(50% - .5625rem);top:-.5rem;height:.5625rem}:host([actual-placement-type=Bottom]) .ui5-popover-arrow:after{margin:var(--_ui5_popover_upward_arrow_margin)}:host([actual-placement-type=Left]) .ui5-popover-arrow{top:calc(50% - .5625rem);right:-.5625rem;width:.5625rem}:host([actual-placement-type=Left]) .ui5-popover-arrow:after{margin:var(--_ui5_popover_right_arrow_margin)}:host([actual-placement-type=Top]) .ui5-popover-arrow{left:calc(50% - .5625rem);height:.5625rem;top:100%}:host([actual-placement-type=Top]) .ui5-popover-arrow:after{margin:var(--_ui5_popover_downward_arrow_margin)}:host(:not([actual-placement-type])) .ui5-popover-arrow,:host([actual-placement-type=Right]) .ui5-popover-arrow{left:-.5625rem;top:calc(50% - .5625rem);width:.5625rem;height:1rem}:host(:not([actual-placement-type])) .ui5-popover-arrow:after,:host([actual-placement-type=Right]) .ui5-popover-arrow:after{margin:var(--_ui5_popover_left_arrow_margin)}:host([hide-arrow]) .ui5-popover-arrow{display:none}.ui5-popover-root{min-width:6.25rem}\"}","import Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport { isIOS } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport { getClosedPopupParent } from \"@ui5/webcomponents-base/dist/util/PopupUtils.js\";\nimport clamp from \"@ui5/webcomponents-base/dist/util/clamp.js\";\nimport Popup from \"./Popup.js\";\nimport PopoverPlacementType from \"./types/PopoverPlacementType.js\";\nimport PopoverVerticalAlign from \"./types/PopoverVerticalAlign.js\";\nimport PopoverHorizontalAlign from \"./types/PopoverHorizontalAlign.js\";\nimport { addOpenedPopover, removeOpenedPopover } from \"./popup-utils/PopoverRegistry.js\";\n\n// Template\nimport PopoverTemplate from \"./generated/templates/PopoverTemplate.lit.js\";\n// Styles\nimport browserScrollbarCSS from \"./generated/themes/BrowserScrollbar.css.js\";\nimport PopupsCommonCss from \"./generated/themes/PopupsCommon.css.js\";\nimport PopoverCss from \"./generated/themes/Popover.css.js\";\n\nconst ARROW_SIZE = 8;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-popover\",\n\tproperties: /** @lends sap.ui.webcomponents.main.Popover.prototype */ {\n\t\t/**\n\t\t * Defines the header text.\n\t\t *
\n\t\t * Note: If header
slot is provided, the headerText
is ignored.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\theaderText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Determines on which side the component is placed at.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * Left
\n\t\t * Right
\n\t\t * Top
\n\t\t * Bottom
\n\t\t *
\n\t\t *\n\t\t * @type {PopoverPlacementType}\n\t\t * @defaultvalue \"Right\"\n\t\t * @public\n\t\t */\n\t\tplacementType: {\n\t\t\ttype: PopoverPlacementType,\n\t\t\tdefaultValue: PopoverPlacementType.Right,\n\t\t},\n\n\t\t/**\n\t\t * Determines the horizontal alignment of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * Center
\n\t\t * Left
\n\t\t * Right
\n\t\t * Stretch
\n\t\t *
\n\t\t *\n\t\t * @type {PopoverHorizontalAlign}\n\t\t * @defaultvalue \"Center\"\n\t\t * @public\n\t\t */\n\t\thorizontalAlign: {\n\t\t\ttype: PopoverHorizontalAlign,\n\t\t\tdefaultValue: PopoverHorizontalAlign.Center,\n\t\t},\n\n\t\t/**\n\t\t * Determines the vertical alignment of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * Center
\n\t\t * Top
\n\t\t * Bottom
\n\t\t * Stretch
\n\t\t *
\n\t\t *\n\t\t * @type {PopoverVerticalAlign}\n\t\t * @defaultvalue \"Center\"\n\t\t * @public\n\t\t */\n\t\tverticalAlign: {\n\t\t\ttype: PopoverVerticalAlign,\n\t\t\tdefaultValue: PopoverVerticalAlign.Center,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component should close when\n\t\t * clicking/tapping outside of the popover.\n\t\t * If enabled, it blocks any interaction with the background.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tmodal: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the block layer will be shown if modal property is set to true.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.10\n\t\t */\n\t\thideBackdrop: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component arrow is hidden.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\thideArrow: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines if there is no enough space, the component can be placed\n\t\t * over the target.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tallowTargetOverlap: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the opener id of the element that the popover is shown at\n\t\t * @public\n\t\t * @type {String}\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.2.0\n\t\t */\n\t\topener: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the content is scrollable.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @private\n\t\t */\n\t\tdisableScrolling: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Sets the X translation of the arrow\n\t\t *\n\t\t * @private\n\t\t */\n\t\tarrowTranslateX: {\n\t\t\ttype: Integer,\n\t\t\tdefaultValue: 0,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * Sets the Y translation of the arrow\n\t\t *\n\t\t * @private\n\t\t */\n\t\tarrowTranslateY: {\n\t\t\ttype: Integer,\n\t\t\tdefaultValue: 0,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * Returns the calculated placement depending on the free space\n\t\t *\n\t\t * @private\n\t\t */\n\t\tactualPlacementType: {\n\t\t\ttype: PopoverPlacementType,\n\t\t\tdefaultValue: PopoverPlacementType.Right,\n\t\t},\n\n\t\t_maxHeight: {\n\t\t\ttype: Integer,\n\t\t\tnoAttribute: true,\n\t\t},\n\t\t_maxWidth: {\n\t\t\ttype: Integer,\n\t\t\tnoAttribute: true,\n\t\t},\n\t},\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Popover.prototype */ {\n\t\t/**\n\t\t * Defines the header HTML Element.\n\t\t *\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\theader: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * Defines the footer HTML Element.\n\t\t *\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\tfooter: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Popover.prototype */ {\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-popover
component displays additional information for an object\n * in a compact way and without leaving the page.\n * The Popover can contain various UI elements, such as fields, tables, images, and charts.\n * It can also include actions in the footer.\n *\n * Structure
\n *\n * The popover has three main areas:\n * \n * - Header (optional)
\n * - Content
\n * - Footer (optional)
\n *
\n *\n * Note: The ui5-popover
is closed when the user clicks\n * or taps outside the popover\n * or selects an action within the popover. You can prevent this with the\n * modal
property.\n *\n * CSS Shadow Parts
\n *\n * CSS Shadow Parts allow developers to style elements inside the Shadow DOM.\n *
\n * The ui5-popover
exposes the following CSS Shadow Parts:\n * \n * - header - Used to style the header of the component
\n * - content - Used to style the content of the component
\n * - footer - Used to style the footer of the component
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Popover.js\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Popover\n * @extends Popup\n * @tagname ui5-popover\n * @since 1.0.0-rc.6\n * @public\n */\nclass Popover extends Popup {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn [browserScrollbarCSS, PopupsCommonCss, PopoverCss];\n\t}\n\n\tstatic get template() {\n\t\treturn PopoverTemplate;\n\t}\n\n\tstatic get VIEWPORT_MARGIN() {\n\t\treturn 10; // px\n\t}\n\n\tonAfterRendering() {\n\t\tif (!this.isOpen() && this.open) {\n\t\t\tconst opener = document.getElementById(this.opener);\n\t\t\tif (!opener) {\n\t\t\t\tconsole.warn(\"Valid opener id is required.\"); // eslint-disable-line\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showAt(opener);\n\t\t} else if (this.isOpen() && !this.open) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tisOpenerClicked(event) {\n\t\tconst target = event.target;\n\t\treturn target === this._opener || (target.getFocusDomRef && target.getFocusDomRef() === this._opener) || event.composedPath().indexOf(this._opener) > -1;\n\t}\n\n\t/**\n\t * Shows the popover.\n\t * @param {HTMLElement} opener the element that the popover is shown at\n\t * @param {boolean} preventInitialFocus prevents applying the focus inside the popover\n\t * @public\n\t * @async\n\t * @returns {Promise} Resolved when the popover is open\n\t */\n\tasync showAt(opener, preventInitialFocus = false) {\n\t\tif (!opener || this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._opener = opener;\n\t\tthis._openerRect = opener.getBoundingClientRect();\n\n\t\tawait super._open(preventInitialFocus);\n\t}\n\n\t/**\n\t * Override for the _addOpenedPopup hook, which would otherwise just call addOpenedPopup(this)\n\t * @private\n\t */\n\t_addOpenedPopup() {\n\t\taddOpenedPopover(this);\n\t}\n\n\t/**\n\t * Override for the _removeOpenedPopup hook, which would otherwise just call removeOpenedPopup(this)\n\t * @private\n\t */\n\t_removeOpenedPopup() {\n\t\tremoveOpenedPopover(this);\n\t}\n\n\tshouldCloseDueToOverflow(placement, openerRect) {\n\t\tconst threshold = 32;\n\t\tconst limits = {\n\t\t\t\"Right\": openerRect.right,\n\t\t\t\"Left\": openerRect.left,\n\t\t\t\"Top\": openerRect.top,\n\t\t\t\"Bottom\": openerRect.bottom,\n\t\t};\n\n\t\tconst closedPopupParent = getClosedPopupParent(this._opener);\n\t\tlet overflowsBottom = false;\n\t\tlet overflowsTop = false;\n\n\t\tif (closedPopupParent.showAt) {\n\t\t\tconst contentRect = closedPopupParent.contentDOM.getBoundingClientRect();\n\t\t\toverflowsBottom = openerRect.top > (contentRect.top + contentRect.height);\n\t\t\toverflowsTop = (openerRect.top + openerRect.height) < contentRect.top;\n\t\t}\n\n\t\treturn (limits[placement] < 0 || (limits[placement] + threshold > closedPopupParent.innerHeight)) || overflowsBottom || overflowsTop;\n\t}\n\n\tshouldCloseDueToNoOpener(openerRect) {\n\t\treturn openerRect.top === 0\n\t\t\t&& openerRect.bottom === 0\n\t\t\t&& openerRect.left === 0\n\t\t\t&& openerRect.right === 0;\n\t}\n\n\tisOpenerOutsideViewport(openerRect) {\n\t\treturn openerRect.bottom < 0\n\t\t\t|| openerRect.top > window.innerHeight\n\t\t\t|| openerRect.right < 0\n\t\t\t|| openerRect.left > window.innerWidth;\n\t}\n\n\t/**\n\t * @override\n\t */\n\t_resize() {\n\t\tsuper._resize();\n\n\t\tif (this.opened) {\n\t\t\tthis.reposition();\n\t\t}\n\t}\n\n\treposition() {\n\t\tthis._show();\n\t}\n\n\t_show() {\n\t\tlet placement;\n\t\tconst popoverSize = this.getPopoverSize();\n\n\t\tif (popoverSize.width === 0 || popoverSize.height === 0) {\n\t\t\t// size can not be determined properly at this point, popover will be shown with the next reposition\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isOpen()) {\n\t\t\t// update opener rect if it was changed during the popover being opened\n\t\t\tthis._openerRect = this._opener.getBoundingClientRect();\n\t\t}\n\n\t\tif (this.shouldCloseDueToNoOpener(this._openerRect) && this.isFocusWithin()) {\n\t\t\t// reuse the old placement as the opener is not available,\n\t\t\t// but keep the popover open as the focus is within\n\t\t\tplacement = this._oldPlacement;\n\t\t} else {\n\t\t\tplacement = this.calcPlacement(this._openerRect, popoverSize);\n\t\t}\n\n\t\tconst stretching = this.horizontalAlign === PopoverHorizontalAlign.Stretch;\n\n\t\tif (this._preventRepositionAndClose || this.isOpenerOutsideViewport(this._openerRect)) {\n\t\t\treturn this.close();\n\t\t}\n\n\t\tthis._oldPlacement = placement;\n\t\tthis.actualPlacementType = placement.placementType;\n\n\t\tlet left = clamp(\n\t\t\tthis._left,\n\t\t\tPopover.VIEWPORT_MARGIN,\n\t\t\tdocument.documentElement.clientWidth - popoverSize.width - Popover.VIEWPORT_MARGIN,\n\t\t);\n\n\t\tif (this.actualPlacementType === PopoverPlacementType.Right) {\n\t\t\tleft = Math.max(left, this._left);\n\t\t}\n\n\t\tlet top = clamp(\n\t\t\tthis._top,\n\t\t\tPopover.VIEWPORT_MARGIN,\n\t\t\tdocument.documentElement.clientHeight - popoverSize.height - Popover.VIEWPORT_MARGIN,\n\t\t);\n\n\t\tif (this.actualPlacementType === PopoverPlacementType.Bottom) {\n\t\t\ttop = Math.max(top, this._top);\n\t\t}\n\n\t\tthis.arrowTranslateX = placement.arrow.x;\n\t\tthis.arrowTranslateY = placement.arrow.y;\n\n\t\ttop = this._adjustForIOSKeyboard(top);\n\n\t\tObject.assign(this.style, {\n\t\t\ttop: `${top}px`,\n\t\t\tleft: `${left}px`,\n\t\t});\n\t\tsuper._show();\n\n\t\tif (stretching && this._width) {\n\t\t\tthis.style.width = this._width;\n\t\t}\n\t}\n\n\t/**\n\t * Adjust the desired top position to compensate for shift of the screen\n\t * caused by opened keyboard on iOS which affects all elements with position:fixed.\n\t * @private\n\t * @param {int} top The target top in px.\n\t * @returns {int} The adjusted top in px.\n\t */\n\t_adjustForIOSKeyboard(top) {\n\t\tif (!isIOS()) {\n\t\t\treturn top;\n\t\t}\n\n\t\tconst actualTop = Math.ceil(this.getBoundingClientRect().top);\n\n\t\treturn top + (Number.parseInt(this.style.top || \"0\") - actualTop);\n\t}\n\n\tgetPopoverSize() {\n\t\tif (!this.opened) {\n\t\t\tObject.assign(this.style, {\n\t\t\t\tdisplay: \"block\",\n\t\t\t\ttop: \"-10000px\",\n\t\t\t\tleft: \"-10000px\",\n\t\t\t});\n\t\t}\n\n\t\tconst rect = this.getBoundingClientRect(),\n\t\t\twidth = rect.width,\n\t\t\theight = rect.height;\n\n\t\treturn { width, height };\n\t}\n\n\tget arrowDOM() {\n\t\treturn this.shadowRoot.querySelector(\".ui5-popover-arrow\");\n\t}\n\n\t/**\n\t * @private\n\t */\n\tcalcPlacement(targetRect, popoverSize) {\n\t\tlet left = 0;\n\t\tlet top = 0;\n\t\tconst allowTargetOverlap = this.allowTargetOverlap;\n\n\t\tconst clientWidth = document.documentElement.clientWidth;\n\t\tconst clientHeight = document.documentElement.clientHeight;\n\n\t\tlet maxHeight = clientHeight;\n\t\tlet maxWidth = clientWidth;\n\n\t\tconst placementType = this.getActualPlacementType(targetRect, popoverSize);\n\n\t\tthis._preventRepositionAndClose = this.shouldCloseDueToNoOpener(targetRect) || this.shouldCloseDueToOverflow(placementType, targetRect);\n\n\t\tconst isVertical = placementType === PopoverPlacementType.Top\n\t\t\t|| placementType === PopoverPlacementType.Bottom;\n\n\t\tif (this.horizontalAlign === PopoverHorizontalAlign.Stretch && isVertical) {\n\t\t\tpopoverSize.width = targetRect.width;\n\t\t\tthis._width = `${targetRect.width}px`;\n\t\t} else if (this.verticalAlign === PopoverVerticalAlign.Stretch && !isVertical) {\n\t\t\tpopoverSize.height = targetRect.height;\n\t\t}\n\n\t\tconst arrowOffset = this.hideArrow ? 0 : ARROW_SIZE;\n\n\t\t// calc popover positions\n\t\tswitch (placementType) {\n\t\tcase PopoverPlacementType.Top:\n\t\t\tleft = this.getVerticalLeft(targetRect, popoverSize);\n\t\t\ttop = Math.max(targetRect.top - popoverSize.height - arrowOffset, 0);\n\n\t\t\tif (!allowTargetOverlap) {\n\t\t\t\tmaxHeight = targetRect.top - arrowOffset;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Bottom:\n\t\t\tleft = this.getVerticalLeft(targetRect, popoverSize);\n\t\t\ttop = targetRect.bottom + arrowOffset;\n\n\t\t\tif (allowTargetOverlap) {\n\t\t\t\ttop = Math.max(Math.min(top, clientHeight - popoverSize.height), 0);\n\t\t\t} else {\n\t\t\t\tmaxHeight = clientHeight - targetRect.bottom - arrowOffset;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Left:\n\t\t\tleft = Math.max(targetRect.left - popoverSize.width - arrowOffset, 0);\n\t\t\ttop = this.getHorizontalTop(targetRect, popoverSize);\n\n\t\t\tif (!allowTargetOverlap) {\n\t\t\t\tmaxWidth = targetRect.left - arrowOffset;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Right:\n\t\t\tleft = targetRect.left + targetRect.width + arrowOffset;\n\t\t\ttop = this.getHorizontalTop(targetRect, popoverSize);\n\n\t\t\tif (allowTargetOverlap) {\n\t\t\t\tleft = Math.max(Math.min(left, clientWidth - popoverSize.width), 0);\n\t\t\t} else {\n\t\t\t\tmaxWidth = clientWidth - targetRect.right - arrowOffset;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\t// correct popover positions\n\t\tif (isVertical) {\n\t\t\tif (popoverSize.width > clientWidth || left < 0) {\n\t\t\t\tleft = 0;\n\t\t\t} else if (left + popoverSize.width > clientWidth) {\n\t\t\t\tleft -= left + popoverSize.width - clientWidth;\n\t\t\t}\n\t\t} else {\n\t\t\tif (popoverSize.height > clientHeight || top < 0) { // eslint-disable-line\n\t\t\t\ttop = 0;\n\t\t\t} else if (top + popoverSize.height > clientHeight) {\n\t\t\t\ttop -= top + popoverSize.height - clientHeight;\n\t\t\t}\n\t\t}\n\n\t\tthis._maxHeight = Math.round(maxHeight - Popover.VIEWPORT_MARGIN);\n\t\tthis._maxWidth = Math.round(maxWidth - Popover.VIEWPORT_MARGIN);\n\n\t\tif (this._left === undefined || Math.abs(this._left - left) > 1.5) {\n\t\t\tthis._left = Math.round(left);\n\t\t}\n\n\t\tif (this._top === undefined || Math.abs(this._top - top) > 1.5) {\n\t\t\tthis._top = Math.round(top);\n\t\t}\n\n\t\tconst borderRadius = Number.parseInt(window.getComputedStyle(this).getPropertyValue(\"border-radius\"));\n\t\tconst arrowPos = this.getArrowPosition(targetRect, popoverSize, left, top, isVertical, borderRadius);\n\n\t\treturn {\n\t\t\tarrow: arrowPos,\n\t\t\ttop: this._top,\n\t\t\tleft: this._left,\n\t\t\tplacementType,\n\t\t};\n\t}\n\n\t/**\n\t * Calculates the position for the arrow.\n\t * @private\n\t * @param targetRect BoundingClientRect of the target element\n\t * @param {{width: number, height: number}} popoverSize Width and height of the popover\n\t * @param left Left offset of the popover\n\t * @param top Top offset of the popover\n\t * @param isVertical If the popover is positioned vertically to the target element\n\t * @param {number} borderRadius Value of the border-radius property\n\t * @returns {{x: number, y: number}} Arrow's coordinates\n\t */\n\tgetArrowPosition(targetRect, { width, height }, left, top, isVertical, borderRadius) {\n\t\tlet arrowXCentered = this.horizontalAlign === PopoverHorizontalAlign.Center || this.horizontalAlign === PopoverHorizontalAlign.Stretch;\n\n\t\tif (this.horizontalAlign === PopoverHorizontalAlign.Right && left <= targetRect.left) {\n\t\t\tarrowXCentered = true;\n\t\t}\n\n\t\tif (this.horizontalAlign === PopoverHorizontalAlign.Left && left + width >= targetRect.left + targetRect.width) {\n\t\t\tarrowXCentered = true;\n\t\t}\n\n\t\tlet arrowTranslateX = 0;\n\t\tif (isVertical && arrowXCentered) {\n\t\t\tarrowTranslateX = targetRect.left + targetRect.width / 2 - left - width / 2;\n\t\t}\n\n\t\tlet arrowTranslateY = 0;\n\t\tif (!isVertical) {\n\t\t\tarrowTranslateY = targetRect.top + targetRect.height / 2 - top - height / 2;\n\t\t}\n\n\t\t// Restricts the arrow's translate value along each dimension,\n\t\t// so that the arrow does not clip over the popover's rounded borders.\n\t\tconst safeRangeForArrowY = height / 2 - borderRadius - ARROW_SIZE / 2;\n\t\tarrowTranslateY = clamp(\n\t\t\tarrowTranslateY,\n\t\t\t-safeRangeForArrowY,\n\t\t\tsafeRangeForArrowY,\n\t\t);\n\n\t\tconst safeRangeForArrowX = width / 2 - borderRadius - ARROW_SIZE / 2;\n\t\tarrowTranslateX = clamp(\n\t\t\tarrowTranslateX,\n\t\t\t-safeRangeForArrowX,\n\t\t\tsafeRangeForArrowX,\n\t\t);\n\n\t\treturn {\n\t\t\tx: Math.round(arrowTranslateX),\n\t\t\ty: Math.round(arrowTranslateY),\n\t\t};\n\t}\n\n\t/**\n\t * Fallbacks to new placement, prioritizing Left
and Right
placements.\n\t * @private\n\t */\n\tfallbackPlacement(clientWidth, clientHeight, targetRect, popoverSize) {\n\t\tif (targetRect.left > popoverSize.width) {\n\t\t\treturn PopoverPlacementType.Left;\n\t\t}\n\n\t\tif (clientWidth - targetRect.right > targetRect.left) {\n\t\t\treturn PopoverPlacementType.Right;\n\t\t}\n\n\t\tif (clientHeight - targetRect.bottom > popoverSize.height) {\n\t\t\treturn PopoverPlacementType.Bottom;\n\t\t}\n\n\t\tif (clientHeight - targetRect.bottom < targetRect.top) {\n\t\t\treturn PopoverPlacementType.Top;\n\t\t}\n\t}\n\n\tgetActualPlacementType(targetRect, popoverSize) {\n\t\tconst placementType = this.placementType;\n\t\tlet actualPlacementType = placementType;\n\n\t\tconst clientWidth = document.documentElement.clientWidth;\n\t\tconst clientHeight = document.documentElement.clientHeight;\n\n\t\tswitch (placementType) {\n\t\tcase PopoverPlacementType.Top:\n\t\t\tif (targetRect.top < popoverSize.height\n\t\t\t\t&& targetRect.top < clientHeight - targetRect.bottom) {\n\t\t\t\tactualPlacementType = PopoverPlacementType.Bottom;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Bottom:\n\t\t\tif (clientHeight - targetRect.bottom < popoverSize.height\n\t\t\t\t&& clientHeight - targetRect.bottom < targetRect.top) {\n\t\t\t\tactualPlacementType = PopoverPlacementType.Top;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Left:\n\t\t\tif (targetRect.left < popoverSize.width) {\n\t\t\t\tactualPlacementType = this.fallbackPlacement(clientWidth, clientHeight, targetRect, popoverSize) || placementType;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase PopoverPlacementType.Right:\n\t\t\tif (clientWidth - targetRect.right < popoverSize.width) {\n\t\t\t\tactualPlacementType = this.fallbackPlacement(clientWidth, clientHeight, targetRect, popoverSize) || placementType;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\treturn actualPlacementType;\n\t}\n\n\tgetVerticalLeft(targetRect, popoverSize) {\n\t\tlet left;\n\n\t\tswitch (this.horizontalAlign) {\n\t\tcase PopoverHorizontalAlign.Center:\n\t\tcase PopoverHorizontalAlign.Stretch:\n\n\t\t\tleft = targetRect.left - (popoverSize.width - targetRect.width) / 2;\n\t\t\tbreak;\n\t\tcase PopoverHorizontalAlign.Left:\n\t\t\tleft = targetRect.left;\n\t\t\tbreak;\n\t\tcase PopoverHorizontalAlign.Right:\n\t\t\tleft = targetRect.right - popoverSize.width;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn left;\n\t}\n\n\tgetHorizontalTop(targetRect, popoverSize) {\n\t\tlet top;\n\n\t\tswitch (this.verticalAlign) {\n\t\tcase PopoverVerticalAlign.Center:\n\t\tcase PopoverVerticalAlign.Stretch:\n\t\t\ttop = targetRect.top - (popoverSize.height - targetRect.height) / 2;\n\t\t\tbreak;\n\t\tcase PopoverVerticalAlign.Top:\n\t\t\ttop = targetRect.top;\n\t\t\tbreak;\n\t\tcase PopoverVerticalAlign.Bottom:\n\t\t\ttop = targetRect.bottom - popoverSize.height;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn top;\n\t}\n\n\tget isModal() { // Required by Popup.js\n\t\treturn this.modal;\n\t}\n\n\tget shouldHideBackdrop() { // Required by Popup.js\n\t\treturn this.hideBackdrop;\n\t}\n\n\tget _ariaLabelledBy() { // Required by Popup.js\n\t\tif (!this._ariaLabel && this._displayHeader) {\n\t\t\treturn \"ui5-popup-header\";\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget _ariaModal() { // Required by Popup.js\n\t\treturn true;\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\t...super.styles,\n\t\t\troot: {\n\t\t\t\t\"max-height\": `${this._maxHeight}px`,\n\t\t\t\t\"max-width\": `${this._maxWidth}px`,\n\t\t\t},\n\t\t\tarrow: {\n\t\t\t\ttransform: `translate(${this.arrowTranslateX}px, ${this.arrowTranslateY}px)`,\n\t\t\t},\n\t\t};\n\t}\n\n\tget classes() {\n\t\tconst allClasses = super.classes;\n\t\tallClasses.root[\"ui5-popover-root\"] = true;\n\n\t\treturn allClasses;\n\t}\n\n\t/**\n\t * Hook for descendants to hide header.\n\t */\n\tget _displayHeader() {\n\t\treturn this.header.length || this.headerText;\n\t}\n\n\t/**\n\t * Hook for descendants to hide footer.\n\t */\n\tget _displayFooter() {\n\t\treturn true;\n\t}\n}\n\nPopover.define();\n\nexport default Popover;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"resize-corner\";\nconst pathData = \"M386.5 305q10-8 19-8 11 0 19 8 8 10 8 19t-8 19l-161 161q-10 8-19 8t-19-8q-8-8-8-18t8-20zm38-134q8 8 8 19 0 10-8 18l-296 296q-8 8-18 8-11 0-19-8-8-7-8-19 0-11 8-19l295-295q8-8 19-8 12 0 19 8z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"resize-corner\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"resize-corner\";\nconst pathData = \"M384 224v32q0 12-10 22L182 470q-10 10-22 10h-32zM224 480l160-160v32q0 12-10 22l-96 96q-10 10-22 10h-32zm160-64v32q0 12-10 22t-22 10h-32z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"resize-corner\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/resize-corner.js\";\nimport {pathData as pathDataV4} from \"./v4/resize-corner.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"resize-corner\";\nexport { pathData, ltr, accData };","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context._displayHeader ? block1(context, tags, suffix) : undefined }
${ context.footer.length ? block4(context, tags, suffix) : undefined }${ context._showResizeHandle ? block5(context, tags, suffix) : undefined } `;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => html``;\nconst block3 = (context, tags, suffix) => html``;\nconst block4 = (context, tags, suffix) => html``;\nconst block5 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} name=\"resize-corner\" class=\"ui5-popup-resize-handle\" @mousedown=\"${context._onResizeMouseDown}\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Dialog.css\",content:\":host{min-width:20rem;min-height:6rem;max-height:94%;max-width:90%;flex-direction:column;box-shadow:var(--sapContent_Shadow3);border-radius:var(--sapElement_BorderCornerRadius)}:host([stretch]){width:90%;height:94%}:host([stretch][on-phone]){width:100%;height:100%;max-height:100%;max-width:100%;border-radius:0}:host([draggable]) .ui5-popup-header-root,:host([draggable]) ::slotted([slot=header]){cursor:move}:host([draggable]) .ui5-popup-header-root *{cursor:auto}.ui5-popup-root{display:flex;flex-direction:column;max-width:100vw}.ui5-popup-header-root{position:relative}.ui5-popup-header-root:focus{outline:none}.ui5-popup-header-root:focus:after{content:\\\"\\\";position:absolute;left:var(--_ui5_dialog_header_focus_left_offset);bottom:var(--_ui5_dialog_header_focus_bottom_offset);right:var(--_ui5_dialog_header_focus_right_offset);top:var(--_ui5_dialog_header_focus_top_offset);border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--_ui5_dialog_header_border_radius) var(--_ui5_dialog_header_border_radius) 0 0;pointer-events:none}:host([stretch]) .ui5-popup-content{width:100%;height:100%}.ui5-popup-content{min-height:var(--_ui5_dialog_content_min_height);flex:1 1 auto}.ui5-popup-resize-handle{position:absolute;bottom:var(--_ui5_dialog_resize_handle_bottom);inset-inline-end:var(--_ui5_dialog_resize_handle_right);cursor:var(--_ui5_dialog_resize_cursor);color:var(--_ui5_dialog_resize_handle_color)}:host ::slotted([slot=footer]){height:var(--_ui5_dialog_footer_height)}\"}","import { isPhone, isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport clamp from \"@ui5/webcomponents-base/dist/util/clamp.js\";\nimport {\n\tisUp, isDown, isLeft, isRight,\n\tisUpShift, isDownShift, isLeftShift, isRightShift,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Popup from \"./Popup.js\";\nimport \"@ui5/webcomponents-icons/dist/resize-corner.js\";\nimport Icon from \"./Icon.js\";\n\n// Template\nimport DialogTemplate from \"./generated/templates/DialogTemplate.lit.js\";\n// Styles\nimport browserScrollbarCSS from \"./generated/themes/BrowserScrollbar.css.js\";\nimport PopupsCommonCss from \"./generated/themes/PopupsCommon.css.js\";\nimport dialogCSS from \"./generated/themes/Dialog.css.js\";\n\n/**\n * Defines the step size at which this component would change by when being dragged or resized with the keyboard.\n */\nconst STEP_SIZE = 16;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-dialog\",\n\tslots: /** @lends sap.ui.webcomponents.main.Dialog.prototype */ {\n\t\t/**\n\t\t * Defines the header HTML Element.\n\t\t *
\n\t\t * Note: If header
slot is provided, the labelling of the dialog is a responsibility of the application developer.\n\t\t * accessibleName
should be used.\n\t\t *\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\theader: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * Defines the footer HTML Element.\n\t\t *\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\tfooter: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.Dialog.prototype */ {\n\t\t/**\n\t\t * Defines the header text.\n\t\t *
\n\t\t * Note: If header
slot is provided, the headerText
is ignored.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\theaderText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component should be stretched to fullscreen.\n\t\t *
\n\t\t * Note: The component will be stretched to approximately\n\t\t * 90% of the viewport.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tstretch: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component is draggable.\n\t\t * If this property is set to true, the Dialog will be draggable by its header.\n\t\t *
\n\t\t * Note: The component can be draggable only in desktop mode.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @since 1.0.0-rc.9\n\t\t * @public\n\t\t */\n\t\tdraggable: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Configures the component to be resizable.\n\t\t * If this property is set to true, the Dialog will have a resize handle in its bottom right corner in LTR languages.\n\t\t * In RTL languages, the resize handle will be placed in the bottom left corner.\n\t\t *
\n\t\t * Note: The component can be resizable only in desktop mode.\n\t\t *
\n\t\t * Note: Upon resizing, externally defined height and width styling will be ignored.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @since 1.0.0-rc.10\n\t\t * @public\n\t\t */\n\t\tresizable: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonPhone: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDesktop: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n};\n\n/**\n * @class\n * \n * The ui5-dialog
component is used to temporarily display some information in a\n * size-limited window in front of the regular app screen.\n * It is used to prompt the user for an action or a confirmation.\n * The ui5-dialog
interrupts the current app processing as it is the only focused UI element and\n * the main screen is dimmed/blocked.\n * The dialog combines concepts known from other technologies where the windows have\n * names such as dialog box, dialog window, pop-up, pop-up window, alert box, or message box.\n *
\n * The ui5-dialog
is modal, which means that user action is required before returning to the parent window is possible.\n * The content of the ui5-dialog
is fully customizable.\n *\n * Structure
\n * A ui5-dialog
consists of a header, content, and a footer for action buttons.\n * The ui5-dialog
is usually displayed at the center of the screen.\n * Its position can be changed by the user. To enable this, you need to set the property draggable
accordingly.\n\n *\n * Responsive Behavior
\n * The stretch
property can be used to stretch the\n * ui5-dialog
on full screen.\n *\n * CSS Shadow Parts
\n *\n * CSS Shadow Parts allow developers to style elements inside the Shadow DOM.\n *
\n * The ui5-dialog
exposes the following CSS Shadow Parts:\n * \n * - header - Used to style the header of the component
\n * - content - Used to style the content of the component
\n * - footer - Used to style the footer of the component
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Dialog\";
\n *\n * Note: We don't recommend nesting popup-like components (ui5-dialog
, ui5-popover
) inside ui5-dialog
.\n * Ideally you should create all popups on the same level inside your HTML page and just open them from one another, rather than nesting them.\n *\n * Note: We don't recommend nesting popup-like components (ui5-dialog
, ui5-popover
) inside other components containing z-index.\n * This might break z-index management.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Dialog\n * @extends Popup\n * @tagname ui5-dialog\n * @public\n */\nclass Dialog extends Popup {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._screenResizeHandler = this._center.bind(this);\n\n\t\tthis._dragMouseMoveHandler = this._onDragMouseMove.bind(this);\n\t\tthis._dragMouseUpHandler = this._onDragMouseUp.bind(this);\n\n\t\tthis._resizeMouseMoveHandler = this._onResizeMouseMove.bind(this);\n\t\tthis._resizeMouseUpHandler = this._onResizeMouseUp.bind(this);\n\t}\n\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tIcon,\n\t\t];\n\t}\n\n\tstatic get template() {\n\t\treturn DialogTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn [browserScrollbarCSS, PopupsCommonCss, dialogCSS];\n\t}\n\n\tstatic _isHeader(element) {\n\t\treturn element.classList.contains(\"ui5-popup-header-root\") || element.getAttribute(\"slot\") === \"header\";\n\t}\n\n\t/**\n\t * Shows the dialog.\n\t *\n\t * @param {boolean} preventInitialFocus Prevents applying the focus inside the popup\n\t * @async\n\t * @returns {Promise} Resolves when the dialog is open\n\t * @public\n\t */\n\tasync show(preventInitialFocus = false) {\n\t\tawait super._open(preventInitialFocus);\n\t}\n\n\tget isModal() { // Required by Popup.js\n\t\treturn true;\n\t}\n\n\tget shouldHideBackdrop() { // Required by Popup.js\n\t\treturn false;\n\t}\n\n\tget _ariaLabelledBy() { // Required by Popup.js\n\t\tlet ariaLabelledById;\n\n\t\tif (this.headerText !== \"\" && !this._ariaLabel) {\n\t\t\tariaLabelledById = \"ui5-popup-header-text\";\n\t\t}\n\n\t\treturn ariaLabelledById;\n\t}\n\n\tget _ariaModal() { // Required by Popup.js\n\t\treturn true;\n\t}\n\n\tget _displayProp() {\n\t\treturn \"flex\";\n\t}\n\n\t/**\n\t * Determines if the header should be shown.\n\t */\n\tget _displayHeader() {\n\t\treturn this.header.length || this.headerText || this.draggable || this.resizable;\n\t}\n\n\tget _movable() {\n\t\treturn !this.stretch && this.onDesktop && (this.draggable || this.resizable);\n\t}\n\n\tget _headerTabIndex() {\n\t\treturn this._movable ? \"0\" : undefined;\n\t}\n\n\tget _showResizeHandle() {\n\t\treturn this.resizable && this.onDesktop;\n\t}\n\n\tget _minHeight() {\n\t\tlet minHeight = Number.parseInt(window.getComputedStyle(this.contentDOM).minHeight);\n\n\t\tconst header = this._root.querySelector(\".ui5-popup-header-root\");\n\t\tif (header) {\n\t\t\tminHeight += header.offsetHeight;\n\t\t}\n\n\t\tconst footer = this._root.querySelector(\".ui5-popup-footer-root\");\n\t\tif (footer) {\n\t\t\tminHeight += footer.offsetHeight;\n\t\t}\n\n\t\treturn minHeight;\n\t}\n\n\t_show() {\n\t\tsuper._show();\n\t\tthis._center();\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._isRTL = this.effectiveDir === \"rtl\";\n\t\tthis.onPhone = isPhone();\n\t\tthis.onDesktop = isDesktop();\n\t}\n\n\tonAfterRendering() {\n\t\tif (!this.isOpen() && this.open) {\n\t\t\tthis.show();\n\t\t} else if (this.isOpen() && !this.open) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tonEnterDOM() {\n\t\tsuper.onEnterDOM();\n\t\tthis._attachScreenResizeHandler();\n\t}\n\n\tonExitDOM() {\n\t\tsuper.onExitDOM();\n\t\tthis._detachScreenResizeHandler();\n\t}\n\n\t/**\n\t * @override\n\t */\n\t_resize() {\n\t\tsuper._resize();\n\n\t\tif (this._screenResizeHandlerAttached) {\n\t\t\tthis._center();\n\t\t}\n\t}\n\n\t_attachScreenResizeHandler() {\n\t\tif (!this._screenResizeHandlerAttached) {\n\t\t\twindow.addEventListener(\"resize\", this._screenResizeHandler);\n\t\t\tthis._screenResizeHandlerAttached = true;\n\t\t}\n\t}\n\n\t_detachScreenResizeHandler() {\n\t\tif (this._screenResizeHandlerAttached) {\n\t\t\twindow.removeEventListener(\"resize\", this._screenResizeHandler);\n\t\t\tthis._screenResizeHandlerAttached = false; // prevent dialog from repositioning during resizing\n\t\t}\n\t}\n\n\t_center() {\n\t\tconst height = window.innerHeight - this.offsetHeight,\n\t\t\twidth = window.innerWidth - this.offsetWidth;\n\n\t\tObject.assign(this.style, {\n\t\t\ttop: `${Math.round(height / 2)}px`,\n\t\t\tleft: `${Math.round(width / 2)}px`,\n\t\t});\n\t}\n\n\t_revertSize() {\n\t\tObject.assign(this.style, {\n\t\t\ttop: \"\",\n\t\t\tleft: \"\",\n\t\t\twidth: \"\",\n\t\t\theight: \"\",\n\t\t});\n\t\tthis.removeEventListener(\"ui5-before-close\", this._revertSize);\n\t}\n\n\t/**\n\t * Event handlers\n\t */\n\t_onDragMouseDown(event) {\n\t\t// allow dragging only on the header\n\t\tif (!this._movable || !this.draggable || !Dialog._isHeader(event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst {\n\t\t\ttop,\n\t\t\tleft,\n\t\t} = this.getBoundingClientRect();\n\t\tconst {\n\t\t\twidth,\n\t\t\theight,\n\t\t} = window.getComputedStyle(this);\n\n\t\tObject.assign(this.style, {\n\t\t\ttop: `${top}px`,\n\t\t\tleft: `${left}px`,\n\t\t\twidth: `${Math.round(Number.parseFloat(width) * 100) / 100}px`,\n\t\t\theight: `${Math.round(Number.parseFloat(height) * 100) / 100}px`,\n\t\t});\n\n\t\tthis._x = event.clientX;\n\t\tthis._y = event.clientY;\n\n\t\tthis._attachMouseDragHandlers();\n\t}\n\n\t_onDragMouseMove(event) {\n\t\tevent.preventDefault();\n\n\t\tconst calcX = this._x - event.clientX;\n\t\tconst calcY = this._y - event.clientY;\n\t\tconst {\n\t\t\tleft,\n\t\t\ttop,\n\t\t} = this.getBoundingClientRect();\n\n\t\tObject.assign(this.style, {\n\t\t\tleft: `${Math.floor(left - calcX)}px`,\n\t\t\ttop: `${Math.floor(top - calcY)}px`,\n\t\t});\n\n\t\tthis._x = event.clientX;\n\t\tthis._y = event.clientY;\n\t}\n\n\t_onDragMouseUp() {\n\t\tthis._x = null;\n\t\tthis._y = null;\n\n\t\tthis._detachMouseDragHandlers();\n\t}\n\n\t_onDragOrResizeKeyDown(event) {\n\t\tif (!this._movable || !Dialog._isHeader(event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.draggable && [isUp, isDown, isLeft, isRight].some(key => key(event))) {\n\t\t\tthis._dragWithEvent(event);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.resizable && [isUpShift, isDownShift, isLeftShift, isRightShift].some(key => key(event))) {\n\t\t\tthis._resizeWithEvent(event);\n\t\t}\n\t}\n\n\t_dragWithEvent(event) {\n\t\tconst {\n\t\t\ttop,\n\t\t\tleft,\n\t\t\twidth,\n\t\t\theight,\n\t\t} = this.getBoundingClientRect();\n\n\t\tlet newPos,\n\t\t\tposDirection;\n\n\t\tswitch (true) {\n\t\tcase isUp(event):\n\t\t\tnewPos = top - STEP_SIZE;\n\t\t\tposDirection = \"top\";\n\t\t\tbreak;\n\t\tcase isDown(event):\n\t\t\tnewPos = top + STEP_SIZE;\n\t\t\tposDirection = \"top\";\n\t\t\tbreak;\n\t\tcase isLeft(event):\n\t\t\tnewPos = left - STEP_SIZE;\n\t\t\tposDirection = \"left\";\n\t\t\tbreak;\n\t\tcase isRight(event):\n\t\t\tnewPos = left + STEP_SIZE;\n\t\t\tposDirection = \"left\";\n\t\t\tbreak;\n\t\t}\n\n\t\tnewPos = clamp(\n\t\t\tnewPos,\n\t\t\t0,\n\t\t\tposDirection === \"left\" ? window.innerWidth - width : window.innerHeight - height,\n\t\t);\n\n\t\tthis.style[posDirection] = `${newPos}px`;\n\t}\n\n\t_resizeWithEvent(event) {\n\t\tthis._detachScreenResizeHandler();\n\t\tthis.addEventListener(\"ui5-before-close\", this._revertSize);\n\n\t\tconst { top, left } = this.getBoundingClientRect(),\n\t\t\tstyle = window.getComputedStyle(this),\n\t\t\tminWidth = Number.parseFloat(style.minWidth),\n\t\t\tmaxWidth = window.innerWidth - left,\n\t\t\tmaxHeight = window.innerHeight - top;\n\n\t\tlet width = Number.parseFloat(style.width),\n\t\t\theight = Number.parseFloat(style.height);\n\n\t\tswitch (true) {\n\t\tcase isUpShift(event):\n\t\t\theight -= STEP_SIZE;\n\t\t\tbreak;\n\t\tcase isDownShift(event):\n\t\t\theight += STEP_SIZE;\n\t\t\tbreak;\n\t\tcase isLeftShift(event):\n\t\t\twidth -= STEP_SIZE;\n\t\t\tbreak;\n\t\tcase isRightShift(event):\n\t\t\twidth += STEP_SIZE;\n\t\t\tbreak;\n\t\t}\n\n\t\twidth = clamp(width, minWidth, maxWidth);\n\t\theight = clamp(height, this._minHeight, maxHeight);\n\n\t\tObject.assign(this.style, {\n\t\t\twidth: `${width}px`,\n\t\t\theight: `${height}px`,\n\t\t});\n\t}\n\n\t_attachMouseDragHandlers() {\n\t\tthis._detachScreenResizeHandler();\n\n\t\twindow.addEventListener(\"mousemove\", this._dragMouseMoveHandler);\n\t\twindow.addEventListener(\"mouseup\", this._dragMouseUpHandler);\n\t}\n\n\t_detachMouseDragHandlers() {\n\t\twindow.removeEventListener(\"mousemove\", this._dragMouseMoveHandler);\n\t\twindow.removeEventListener(\"mouseup\", this._dragMouseUpHandler);\n\t}\n\n\t_onResizeMouseDown(event) {\n\t\tif (!this._movable || !this.resizable) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst {\n\t\t\ttop,\n\t\t\tleft,\n\t\t} = this.getBoundingClientRect();\n\t\tconst {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tminWidth,\n\t\t} = window.getComputedStyle(this);\n\n\t\tthis._initialX = event.clientX;\n\t\tthis._initialY = event.clientY;\n\t\tthis._initialWidth = Number.parseFloat(width);\n\t\tthis._initialHeight = Number.parseFloat(height);\n\t\tthis._initialTop = top;\n\t\tthis._initialLeft = left;\n\t\tthis._minWidth = Number.parseFloat(minWidth);\n\t\tthis._cachedMinHeight = this._minHeight;\n\n\t\tObject.assign(this.style, {\n\t\t\ttop: `${top}px`,\n\t\t\tleft: `${left}px`,\n\t\t});\n\n\t\tthis._attachMouseResizeHandlers();\n\t}\n\n\t_onResizeMouseMove(event) {\n\t\tconst { clientX, clientY } = event;\n\n\t\tlet newWidth,\n\t\t\tnewLeft;\n\n\t\tif (this._isRTL) {\n\t\t\tnewWidth = clamp(\n\t\t\t\tthis._initialWidth - (clientX - this._initialX),\n\t\t\t\tthis._minWidth,\n\t\t\t\tthis._initialLeft + this._initialWidth,\n\t\t\t);\n\n\t\t\tnewLeft = clamp(\n\t\t\t\tthis._initialLeft + (clientX - this._initialX),\n\t\t\t\t0,\n\t\t\t\tthis._initialX + this._initialWidth - this._minWidth,\n\t\t\t);\n\t\t} else {\n\t\t\tnewWidth = clamp(\n\t\t\t\tthis._initialWidth + (clientX - this._initialX),\n\t\t\t\tthis._minWidth,\n\t\t\t\twindow.innerWidth - this._initialLeft,\n\t\t\t);\n\t\t}\n\n\t\tconst newHeight = clamp(\n\t\t\tthis._initialHeight + (clientY - this._initialY),\n\t\t\tthis._cachedMinHeight,\n\t\t\twindow.innerHeight - this._initialTop,\n\t\t);\n\n\t\tObject.assign(this.style, {\n\t\t\theight: `${newHeight}px`,\n\t\t\twidth: `${newWidth}px`,\n\t\t\tleft: newLeft ? `${newLeft}px` : undefined,\n\t\t});\n\t}\n\n\t_onResizeMouseUp() {\n\t\tdelete this._initialX;\n\t\tdelete this._initialY;\n\t\tdelete this._initialWidth;\n\t\tdelete this._initialHeight;\n\t\tdelete this._initialTop;\n\t\tdelete this._initialLeft;\n\t\tdelete this._minWidth;\n\t\tdelete this._cachedMinHeight;\n\n\t\tthis._detachMouseResizeHandlers();\n\t}\n\n\t_attachMouseResizeHandlers() {\n\t\tthis._detachScreenResizeHandler();\n\n\t\twindow.addEventListener(\"mousemove\", this._resizeMouseMoveHandler);\n\t\twindow.addEventListener(\"mouseup\", this._resizeMouseUpHandler);\n\t\tthis.addEventListener(\"ui5-before-close\", this._revertSize);\n\t}\n\n\t_detachMouseResizeHandlers() {\n\t\twindow.removeEventListener(\"mousemove\", this._resizeMouseMoveHandler);\n\t\twindow.removeEventListener(\"mouseup\", this._resizeMouseUpHandler);\n\t}\n}\n\nDialog.define();\n\nexport default Dialog;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.TitleLevel.prototype\n * @public\n */\nconst TitleLevels = {\n\t/**\n\t * Renders h1
tag.\n\t * @public\n\t * @type {H1}\n\t */\n\tH1: \"H1\",\n\n\t/**\n\t * Renders h2
tag.\n\t * @public\n\t * @type {H2}\n\t */\n\tH2: \"H2\",\n\n\t/**\n\t * Renders h3
tag.\n\t * @public\n\t * @type {H3}\n\t */\n\tH3: \"H3\",\n\n\t/**\n\t * Renders h4
tag.\n\t * @public\n\t * @type {H4}\n\t */\n\tH4: \"H4\",\n\n\t/**\n\t * Renders h5
tag.\n\t * @public\n\t * @type {H5}\n\t */\n\tH5: \"H5\",\n\n\t/**\n\t * Renders h6
tag.\n\t * @public\n\t * @type {H6}\n\t */\n\tH6: \"H6\",\n};\n\n/**\n * @class\n * Defines the ui5-title
level\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.TitleLevel\n * @public\n * @enum {string}\n */\nclass TitleLevel extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!TitleLevels[value];\n\t}\n}\n\nTitleLevel.generateTypeAccessors(TitleLevels);\n\nexport default TitleLevel;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.h1 ? block1(context, tags, suffix) : undefined }${ context.h2 ? block2(context, tags, suffix) : undefined }${ context.h3 ? block3(context, tags, suffix) : undefined }${ context.h4 ? block4(context, tags, suffix) : undefined }${ context.h5 ? block5(context, tags, suffix) : undefined }${ context.h6 ? block6(context, tags, suffix) : undefined }`;\nconst block1 = (context, tags, suffix) => html`
`;\nconst block2 = (context, tags, suffix) => html`
`;\nconst block3 = (context, tags, suffix) => html`
`;\nconst block4 = (context, tags, suffix) => html`
`;\nconst block5 = (context, tags, suffix) => html`
`;\nconst block6 = (context, tags, suffix) => html`
`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Title.css\",content:\":host(:not([hidden])){display:block;cursor:text}:host{max-width:100%;color:var(--sapGroup_TitleTextColor);font-size:var(--sapFontHeader2Size);font-family:\\\"72override\\\",var(--sapFontHeaderFamily);text-shadow:var(--sapContent_TextShadow)}.ui5-title-root{display:inline-block;position:relative;font-weight:400;font-size:inherit;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;vertical-align:bottom;-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0;margin:0;cursor:inherit}:host([wrapping-type=Normal]) .ui5-title-root{white-space:pre-line}:host([level=H1]){font-size:var(--sapFontHeader1Size)}:host([level=H2]){font-size:var(--sapFontHeader2Size)}:host([level=H3]){font-size:var(--sapFontHeader3Size)}:host([level=H4]){font-size:var(--sapFontHeader4Size)}:host([level=H5]){font-size:var(--sapFontHeader5Size)}:host([level=H6]){font-size:var(--sapFontHeader6Size)}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport TitleLevel from \"./types/TitleLevel.js\";\nimport WrappingType from \"./types/WrappingType.js\";\n\n// Template\nimport TitleTemplate from \"./generated/templates/TitleTemplate.lit.js\";\n\n// Styles\nimport titleCss from \"./generated/themes/Title.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-title\",\n\tproperties: /** @lends sap.ui.webcomponents.main.Title.prototype */ {\n\n\t\t/**\n\t\t * Defines how the text of a component will be displayed when there is not enough space.\n\t\t * Available options are:\n\t\t * \n\t\t * None
- The text will be truncated with an ellipsis. \n\t\t * Normal
- The text will wrap. The words will not be broken based on hyphenation. \n\t\t *
\n\t\t *\n\t\t * @type {WrappingType}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\twrappingType: {\n\t\t\ttype: WrappingType,\n\t\t\tdefaultValue: WrappingType.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines the component level.\n\t\t * Available options are: \"H6\"
to \"H1\"
.\n\t\t *\n\t\t * @type {TitleLevel}\n\t\t * @defaultvalue \"H2\"\n\t\t * @public\n\t\t*/\n\t\tlevel: {\n\t\t\ttype: TitleLevel,\n\t\t\tdefaultValue: TitleLevel.H2,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.Title.prototype */ {\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *
\n\t\t * Note: Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-title
component is used to display titles inside a page.\n * It is a simple, large-sized text with explicit header/title semantics.\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Title\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Title\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-title\n * @public\n */\nclass Title 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 TitleTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn titleCss;\n\t}\n\n\tget normalizedLevel() {\n\t\treturn this.level.toLowerCase();\n\t}\n\n\tget h1() {\n\t\treturn this.normalizedLevel === \"h1\";\n\t}\n\n\tget h2() {\n\t\treturn this.normalizedLevel === \"h2\";\n\t}\n\n\tget h3() {\n\t\treturn this.normalizedLevel === \"h3\";\n\t}\n\n\tget h4() {\n\t\treturn this.normalizedLevel === \"h4\";\n\t}\n\n\tget h5() {\n\t\treturn this.normalizedLevel === \"h5\";\n\t}\n\n\tget h6() {\n\t\treturn this.normalizedLevel === \"h6\";\n\t}\n}\n\nTitle.define();\n\nexport default Title;\n","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/ResponsivePopover.css\",content:\":host{--_ui5_input_width:100%;min-width:6.25rem;min-height:2rem}:host([opened]){display:inline-block}.ui5-responsive-popover-header{height:var(--_ui5-responsive_popover_header_height);display:flex;justify-content:space-between;align-items:center;width:100%}.ui5-responsive-popover-header-text{width:calc(100% - var(--_ui5_button_base_min_width))}.ui5-responsive-popover-header-no-title{justify-content:flex-end}\"}","import { isPhone } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { getNextZIndex } from \"@ui5/webcomponents-base/dist/util/PopupUtils.js\";\nimport { RESPONSIVE_POPOVER_CLOSE_DIALOG_BUTTON } from \"./generated/i18n/i18n-defaults.js\";\nimport ResponsivePopoverTemplate from \"./generated/templates/ResponsivePopoverTemplate.lit.js\";\nimport Popover from \"./Popover.js\";\nimport Dialog from \"./Dialog.js\";\nimport Button from \"./Button.js\";\nimport Title from \"./Title.js\";\nimport \"@ui5/webcomponents-icons/dist/decline.js\";\n\n// Styles\nimport ResponsivePopoverCss from \"./generated/themes/ResponsivePopover.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-responsive-popover\",\n\tproperties: /** @lends sap.ui.webcomponents.main.ResponsivePopover.prototype */ {\n\t\t/**\n\t\t * Defines if only the content would be displayed (without header and footer) in the popover on Desktop.\n\t\t * By default both the header and footer would be displayed.\n\t\t * @private\n\t\t */\n\t\tcontentOnlyOnDesktop: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Used internaly for controls which must not have header.\n\t\t * @private\n\t\t */\n\t\t_hideHeader: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether a close button will be rendered in the header of the component\n\t\t * Note: If you are using the header
slot, this property will have no effect\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @since 1.0.0-rc.16\n\t\t */\n\t\t_hideCloseButton: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n * The ui5-responsive-popover
acts as a Popover on desktop and tablet, while on phone it acts as a Dialog.\n * The component improves tremendously the user experience on mobile.\n *\n * Usage
\n * Use it when you want to make sure that all the content is visible on any device.\n *\n * CSS Shadow Parts
\n *\n * CSS Shadow Parts allow developers to style elements inside the Shadow DOM.\n *
\n * The ui5-responsive-popover
exposes the following CSS Shadow Parts:\n * \n * - header - Used to style the header of the component
\n * - content - Used to style the content of the component
\n * - footer - Used to style the footer of the component
\n *
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.ResponsivePopover\n * @extends Popover\n * @tagname ui5-responsive-popover\n * @since 1.0.0-rc.6\n * @public\n */\nclass ResponsivePopover extends Popover {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn [Popover.styles, ResponsivePopoverCss];\n\t}\n\n\tget classes() {\n\t\tconst allClasses = super.classes;\n\n\t\tallClasses.header = {\n\t\t\t\"ui5-responsive-popover-header\": true,\n\t\t\t\"ui5-responsive-popover-header-no-title\": !this.headerText,\n\t\t};\n\n\t\treturn allClasses;\n\t}\n\n\tstatic get template() {\n\t\treturn ResponsivePopoverTemplate;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\t...Popover.dependencies,\n\t\t\tButton,\n\t\t\tDialog,\n\t\t\tTitle,\n\t\t];\n\t}\n\n\t/**\n\t * Shows popover on desktop and dialog on mobile.\n\t * @param {HTMLElement} opener the element that the popover is shown at\n\t * @param {boolean} preventInitialFocus Prevents applying the focus inside the popup\n\t * @public\n\t * @async\n\t * @returns {Promise} Resolves when the responsive popover is open\n\t */\n\tasync showAt(opener, preventInitialFocus = false) {\n\t\tif (!isPhone()) {\n\t\t\tawait super.showAt(opener, preventInitialFocus);\n\t\t} else {\n\t\t\tthis.style.display = \"contents\";\n\t\t\tthis.style.zIndex = getNextZIndex();\n\t\t\tawait this._dialog.show(preventInitialFocus);\n\t\t}\n\t}\n\n\t/**\n\t * Closes the popover/dialog.\n\t * @public\n\t */\n\tclose(escPressed = false, preventRegistryUpdate = false, preventFocusRestore = false) {\n\t\tif (!isPhone()) {\n\t\t\tsuper.close(escPressed, preventRegistryUpdate, preventFocusRestore);\n\t\t} else {\n\t\t\tthis._dialog.close(escPressed, preventRegistryUpdate, preventFocusRestore);\n\t\t}\n\t}\n\n\ttoggle(opener) {\n\t\tif (this.isOpen()) {\n\t\t\treturn this.close();\n\t\t}\n\n\t\tthis.showAt(opener);\n\t}\n\n\t/**\n\t * Tells if the responsive popover is open\n\t * @public\n\t * @returns {boolean}\n\t */\n\tisOpen() {\n\t\treturn isPhone() ? this._dialog.isOpen() : super.isOpen();\n\t}\n\n\tget _dialog() {\n\t\treturn this.shadowRoot.querySelector(\"[ui5-dialog]\");\n\t}\n\n\tget contentDOM() {\n\t\treturn this._isPhone ? this._dialog.contentDOM : super.contentDOM;\n\t}\n\n\tget _isPhone() {\n\t\treturn isPhone();\n\t}\n\n\tget _displayHeader() {\n\t\treturn (this._isPhone || !this.contentOnlyOnDesktop) && super._displayHeader;\n\t}\n\n\tget _displayFooter() {\n\t\treturn this._isPhone || !this.contentOnlyOnDesktop;\n\t}\n\n\tget _closeDialogAriaLabel() {\n\t\treturn ResponsivePopover.i18nBundle.getText(RESPONSIVE_POPOVER_CLOSE_DIALOG_BUTTON);\n\t}\n\n\t_beforeDialogOpen(event) {\n\t\tthis.open = true;\n\t\tthis.opened = true;\n\t\tthis._propagateDialogEvent(event);\n\t}\n\n\t_afterDialogClose(event) {\n\t\tthis.open = false;\n\t\tthis.opened = false;\n\t\tthis._propagateDialogEvent(event);\n\t}\n\n\t_propagateDialogEvent(event) {\n\t\tconst type = event.type.replace(\"ui5-\", \"\");\n\n\t\tthis.fireEvent(type, event.detail);\n\t}\n\n\tstatic async onDefine() {\n\t\tResponsivePopover.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n}\n\nResponsivePopover.define();\n\nexport default ResponsivePopover;\n","const NavigationMode = {\n\tAuto: \"Auto\",\n\tVertical: \"Vertical\",\n\tHorizontal: \"Horizontal\",\n\tPaging: \"Paging\",\n};\nexport default NavigationMode;\n","/**\n * @private\n * Different behavior for ItemNavigation.\n */\nconst ItemNavigationBehavior = {\n\t/**\n\t* Static behavior: navigations stops at the first or last item.\n \t*/\n\tStatic: \"Static\",\n\n\t/**\n\t* Cycling behavior: navigating past the last item continues with the first and vice versa.\n \t*/\n\tCyclic: \"Cyclic\",\n};\nexport default ItemNavigationBehavior;\n","import {\n\tisDown,\n\tisUp,\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n\tisPageDown,\n\tisPageUp,\n} from \"../Keys.js\";\nimport getActiveElement from \"../util/getActiveElement.js\";\n\nimport NavigationMode from \"../types/NavigationMode.js\";\nimport ItemNavigationBehavior from \"../types/ItemNavigationBehavior.js\";\n\n/**\n * The ItemNavigation class manages the calculations to determine the correct \"tabindex\" for a group of related items inside a root component.\n * Important: ItemNavigation only does the calculations and does not change \"tabindex\" directly, this is a responsibility of the developer.\n *\n * The keys that trigger ItemNavigation are:\n * - Up/down\n * - Left/right\n * - Home/End\n *\n * Usage:\n * 1) Use the \"getItemsCallback\" constructor property to pass a callback to ItemNavigation, which, whenever called, will return the list of items to navigate among.\n *\n * Each item passed to ItemNavigation via \"getItemsCallback\" must be:\n * - A) either a UI5Element with a \"_tabIndex\" property\n * - B) or an Object with \"id\" and \"_tabIndex\" properties which represents a part of the root component's shadow DOM.\n * The \"id\" must be a valid ID within the shadow root of the component ItemNavigation operates on.\n * This object must not be a DOM object because, as said, ItemNavigation will not set \"tabindex\" on it. It must be a representation of a DOM object only\n * and the developer has the responsibility to update the \"tabindex\" in the component's DOM.\n * - C) a combination of the above\n *\n * Whenever the user navigates with the keyboard, ItemNavigation will modify the \"_tabIndex\" properties of the items.\n * It is the items' responsibilities to re-render themselves and apply the correct value of \"tabindex\" (i.e. to map the \"_tabIndex\" ItemNavigation set to them to the \"tabindex\" property).\n * If the items of the ItemNavigation are UI5Elements themselves, this can happen naturally since they will be invalidated by their \"_tabIndex\" property.\n * If the items are Objects with \"id\" and \"_tabIndex\" however, it is the developer's responsibility to apply these and the easiest way is to have the root component invalidated by ItemNavigation.\n * To do so, set the \"affectedPropertiesNames\" constructor property to point to one or more of the root component's properties that need refreshing when \"_tabIndex\" is changed deeply.\n *\n * 2) Call the \"setCurrentItem\" method of ItemNavigation whenever you want to change the current item.\n * This is most commonly required if the user for example clicks on an item and thus selects it directly.\n * Pass as the only argument to \"setCurrentItem\" the item that becomes current (must be one of the items, returned by \"getItemsCallback\").\n *\n * @class\n * @public\n */\nclass ItemNavigation {\n\t/**\n\t *\n\t * @param rootWebComponent the component to operate on (component that slots or contains within its shadow root the items the user navigates among)\n\t * @param options Object with configuration options:\n\t * - currentIndex: the index of the item that will be initially selected (from which navigation will begin)\n\t * - 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)\n\t * - 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\n\t * \t- skipItemsSize: tells how many items upon PAGE_UP and PAGE_DOWN should be skipped to applying the focus on the next item\n\t * - behavior (Static|Cycling): tells what to do when trying to navigate beyond the first and last items\n\t * Static means that nothing happens if the user tries to navigate beyond the first/last item.\n\t * Cycling means that when the user navigates beyond the last item they go to the first and vice versa.\n\t * - getItemsCallback: function that, when called, returns an array with all items the user can navigate among\n\t * - affectedPropertiesNames: a list of metadata properties on the root component which, upon user navigation, will be reassigned by address thus causing the root component to invalidate\n\t */\n\tconstructor(rootWebComponent, options = {}) {\n\t\tthis._setRootComponent(rootWebComponent);\n\t\tthis._initOptions(options);\n\t}\n\n\t_setRootComponent(rootWebComponent) {\n\t\tif (!rootWebComponent.isUI5Element) {\n\t\t\tthrow new Error(\"The root web component must be a UI5 Element instance\");\n\t\t}\n\t\tthis.rootWebComponent = rootWebComponent;\n\t\tthis.rootWebComponent.addEventListener(\"keydown\", this._onkeydown.bind(this));\n\t\tthis.rootWebComponent._onComponentStateFinalized = () => {\n\t\t\tthis._init();\n\t\t};\n\t}\n\n\t_initOptions(options) {\n\t\tif (typeof options.getItemsCallback !== \"function\") {\n\t\t\tthrow new Error(\"getItemsCallback is required\");\n\t\t}\n\n\t\tthis._getItems = options.getItemsCallback;\n\t\tthis._currentIndex = options.currentIndex || 0;\n\t\tthis._rowSize = options.rowSize || 1;\n\t\tthis._behavior = options.behavior || ItemNavigationBehavior.Static;\n\t\tthis._navigationMode = options.navigationMode || NavigationMode.Auto;\n\t\tthis._affectedPropertiesNames = options.affectedPropertiesNames || [];\n\t\tthis._skipItemsSize = options.skipItemsSize || null;\n\t}\n\n\t/**\n\t * Call this method to set a new \"current\" (selected) item in the item navigation\n\t * Note: the item passed to this function must be one of the items, returned by the getItemsCallback function\n\t *\n\t * @public\n\t * @param current the new selected item\n\t */\n\tsetCurrentItem(current) {\n\t\tconst currentItemIndex = this._getItems().indexOf(current);\n\n\t\tif (currentItemIndex === -1) {\n\t\t\tconsole.warn(`The provided item is not managed by ItemNavigation`, current); // eslint-disable-line\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentIndex = currentItemIndex;\n\t\tthis._applyTabIndex();\n\t}\n\n\t/**\n\t * Call this method to dynamically change the row size\n\t *\n\t * @public\n\t * @param newRowSize\n\t */\n\tsetRowSize(newRowSize) {\n\t\tthis._rowSize = newRowSize;\n\t}\n\n\t_init() {\n\t\tthis._getItems().forEach((item, idx) => {\n\t\t\titem._tabIndex = (idx === this._currentIndex) ? \"0\" : \"-1\";\n\t\t});\n\t}\n\n\t_onkeydown(event) {\n\t\tif (!this._canNavigate()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst horizontalNavigationOn = this._navigationMode === NavigationMode.Horizontal || this._navigationMode === NavigationMode.Auto;\n\t\tconst verticalNavigationOn = this._navigationMode === NavigationMode.Vertical || this._navigationMode === NavigationMode.Auto;\n\t\tconst isRTL = this.rootWebComponent.effectiveDir === \"rtl\";\n\n\t\tif (isRTL && isLeft(event) && horizontalNavigationOn) {\n\t\t\tthis._handleRight();\n\t\t} else if (isRTL && isRight(event) && horizontalNavigationOn) {\n\t\t\tthis._handleLeft();\n\t\t} else if (isLeft(event) && horizontalNavigationOn) {\n\t\t\tthis._handleLeft();\n\t\t} else if (isRight(event) && horizontalNavigationOn) {\n\t\t\tthis._handleRight();\n\t\t} else if (isUp(event) && verticalNavigationOn) {\n\t\t\tthis._handleUp();\n\t\t} else if (isDown(event) && verticalNavigationOn) {\n\t\t\tthis._handleDown();\n\t\t} else if (isHome(event)) {\n\t\t\tthis._handleHome();\n\t\t} else if (isEnd(event)) {\n\t\t\tthis._handleEnd();\n\t\t} else if (isPageUp(event)) {\n\t\t\tthis._handlePageUp();\n\t\t} else if (isPageDown(event)) {\n\t\t\tthis._handlePageDown();\n\t\t} else {\n\t\t\treturn; // if none of the supported keys is pressed, we don't want to prevent the event or update the item navigation\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis._applyTabIndex();\n\t\tthis._focusCurrentItem();\n\t}\n\n\t_handleUp() {\n\t\tconst itemsLength = this._getItems().length;\n\t\tif (this._currentIndex - this._rowSize >= 0) { // no border reached, just decrease the index by a row\n\t\t\tthis._currentIndex -= this._rowSize;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._behavior === ItemNavigationBehavior.Cyclic) { // if cyclic, go to the **last** item in the **previous** column\n\t\t\tconst firstItemInThisColumnIndex = this._currentIndex % this._rowSize;\n\t\t\tconst firstItemInPreviousColumnIndex = firstItemInThisColumnIndex === 0 ? this._rowSize - 1 : firstItemInThisColumnIndex - 1; // find the first item in the previous column (if the current column is the first column -> move to the last column)\n\t\t\tconst rows = Math.ceil(itemsLength / this._rowSize); // how many rows there are (even if incomplete, f.e. for 14 items and _rowSize=4 -> 4 rows total, although only 2 items on the last row)\n\t\t\tlet lastItemInPreviousColumnIndex = firstItemInPreviousColumnIndex + (rows - 1) * this._rowSize; // multiply rows by columns, and add the column's first item's index\n\t\t\tif (lastItemInPreviousColumnIndex > itemsLength - 1) { // for incomplete rows, use the previous row's last item, as for them the last item is missing\n\t\t\t\tlastItemInPreviousColumnIndex -= this._rowSize;\n\t\t\t}\n\t\t\tthis._currentIndex = lastItemInPreviousColumnIndex;\n\t\t} else { // not cyclic, so just go to the first item\n\t\t\tthis._currentIndex = 0;\n\t\t}\n\t}\n\n\t_handleDown() {\n\t\tconst itemsLength = this._getItems().length;\n\t\tif (this._currentIndex + this._rowSize < itemsLength) { // no border reached, just increase the index by a row\n\t\t\tthis._currentIndex += this._rowSize;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._behavior === ItemNavigationBehavior.Cyclic) { // if cyclic, go to the **first** item in the **next** column\n\t\t\tconst firstItemInThisColumnIndex = this._currentIndex % this._rowSize; // find the first item in the current column first\n\t\t\tconst firstItemInNextColumnIndex = (firstItemInThisColumnIndex + 1) % this._rowSize; // to get the first item in the next column, just increase the index by 1. The modulo by rows is for the case when we are at the last column\n\t\t\tthis._currentIndex = firstItemInNextColumnIndex;\n\t\t} else { // not cyclic, so just go to the last item\n\t\t\tthis._currentIndex = itemsLength - 1;\n\t\t}\n\t}\n\n\t_handleLeft() {\n\t\tconst itemsLength = this._getItems().length;\n\t\tif (this._currentIndex > 0) {\n\t\t\tthis._currentIndex -= 1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._behavior === ItemNavigationBehavior.Cyclic) { // go to the first item in the next column\n\t\t\tthis._currentIndex = itemsLength - 1;\n\t\t}\n\t}\n\n\t_handleRight() {\n\t\tconst itemsLength = this._getItems().length;\n\t\tif (this._currentIndex < itemsLength - 1) {\n\t\t\tthis._currentIndex += 1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._behavior === ItemNavigationBehavior.Cyclic) { // go to the first item in the next column\n\t\t\tthis._currentIndex = 0;\n\t\t}\n\t}\n\n\t_handleHome() {\n\t\tconst homeEndRange = this._rowSize > 1 ? this._rowSize : this._getItems().length;\n\t\tthis._currentIndex -= this._currentIndex % homeEndRange;\n\t}\n\n\t_handleEnd() {\n\t\tconst homeEndRange = this._rowSize > 1 ? this._rowSize : this._getItems().length;\n\t\tthis._currentIndex += (homeEndRange - 1 - this._currentIndex % homeEndRange); // eslint-disable-line\n\t}\n\n\t_handlePageUp() {\n\t\tif (this._rowSize > 1) {\n\t\t\t// eslint-disable-next-line\n\t\t\t// TODO: handle page up on matrix (grid) layout - ColorPalette, ProductSwitch.\n\t\t\treturn;\n\t\t}\n\t\tthis._handlePageUpFlat();\n\t}\n\n\t_handlePageDown() {\n\t\tif (this._rowSize > 1) {\n\t\t\t// eslint-disable-next-line\n\t\t\t// TODO: handle page up on matrix (grid) layout - ColorPalette, ProductSwitch.\n\t\t\treturn;\n\t\t}\n\t\tthis._handlePageDownFlat();\n\t}\n\n\t/**\n\t * Handles PAGE_UP in a flat list-like structure, both vertically and horizontally.\n\t */\n\t_handlePageUpFlat() {\n\t\tif (this._skipItemsSize === null) {\n\t\t\t// Move the focus to the very top (as Home).\n\t\t\tthis._currentIndex -= this._currentIndex;\n\t\t}\n\n\t\tif (this._currentIndex + 1 > this._skipItemsSize) {\n\t\t\t// When there are more than \"skipItemsSize\" number of items to the top,\n\t\t\t// move the focus up/left with the predefined number.\n\t\t\tthis._currentIndex -= this._skipItemsSize;\n\t\t} else {\n\t\t\t// Otherwise, move the focus to the very top (as Home).\n\t\t\tthis._currentIndex -= this._currentIndex;\n\t\t}\n\t}\n\n\t/**\n\t * Handles PAGE_DOWN in a flat list-like structure, both vertically and horizontally.\n\t */\n\t_handlePageDownFlat() {\n\t\tif (this._skipItemsSize === null) {\n\t\t\t// Move the focus to the very bottom (as End).\n\t\t\tthis._currentIndex = this._getItems().length - 1;\n\t\t}\n\n\t\tconst currentToEndRange = this._getItems().length - this._currentIndex - 1;\n\n\t\tif (currentToEndRange > this._skipItemsSize) {\n\t\t\t// When there are more than \"skipItemsSize\" number of items until the bottom,\n\t\t\t// move the focus down/right with the predefined number.\n\t\t\tthis._currentIndex += this._skipItemsSize;\n\t\t} else {\n\t\t\t// Otherwise, move the focus to the very bottom (as End).\n\t\t\tthis._currentIndex = this._getItems().length - 1;\n\t\t}\n\t}\n\n\t_applyTabIndex() {\n\t\tconst items = this._getItems();\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\titems[i]._tabIndex = i === this._currentIndex ? \"0\" : \"-1\";\n\t\t}\n\n\t\tthis._affectedPropertiesNames.forEach(propName => {\n\t\t\tconst prop = this.rootWebComponent[propName];\n\t\t\tthis.rootWebComponent[propName] = Array.isArray(prop) ? [...prop] : { ...prop };\n\t\t});\n\t}\n\n\t_focusCurrentItem() {\n\t\tconst currentItem = this._getCurrentItem();\n\t\tif (currentItem) {\n\t\t\tcurrentItem.focus();\n\t\t}\n\t}\n\n\t_canNavigate() {\n\t\tconst currentItem = this._getCurrentItem();\n\t\tconst activeElement = getActiveElement();\n\n\t\treturn currentItem && currentItem === activeElement;\n\t}\n\n\t_getCurrentItem() {\n\t\tconst items = this._getItems();\n\n\t\tif (!items.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// normalize the index\n\t\twhile (this._currentIndex >= items.length) {\n\t\t\tthis._currentIndex -= this._rowSize;\n\t\t}\n\n\t\tif (this._currentIndex < 0) {\n\t\t\tthis._currentIndex = 0;\n\t\t}\n\n\t\tconst currentItem = items[this._currentIndex];\n\n\t\tif (!currentItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (currentItem.isUI5Element) {\n\t\t\treturn currentItem.getFocusDomRef();\n\t\t}\n\n\t\tif (!this.rootWebComponent.getDomRef()) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.rootWebComponent.getDomRef().querySelector(`#${currentItem.id}`);\n\t}\n}\n\nexport default ItemNavigation;\n","import isNodeHidden from \"./isNodeHidden.js\";\n\nconst isNodeTabbable = node => {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tconst nodeName = node.nodeName.toLowerCase();\n\n\tif (node.hasAttribute(\"data-sap-no-tab-ref\")) {\n\t\treturn false;\n\t}\n\n\tif (isNodeHidden(node)) {\n\t\treturn false;\n\t}\n\n\tconst tabIndex = node.getAttribute(\"tabindex\");\n\tif (tabIndex !== null && tabIndex !== undefined) {\n\t\treturn parseInt(tabIndex) >= 0;\n\t}\n\n\tif (nodeName === \"a\" || /input|select|textarea|button|object/.test(nodeName)) {\n\t\treturn !node.disabled;\n\t}\n};\n\nexport default isNodeTabbable;\n","import isNodeTabbable from \"./isNodeTabbable.js\";\n\nconst getTabbableElements = node => {\n\treturn getTabbables(node.children);\n};\n\nconst getLastTabbableElement = node => {\n\tconst tabbables = getTabbables(node.children);\n\treturn tabbables.length ? tabbables[tabbables.length - 1] : null;\n};\n\nconst getTabbables = (nodes, tabbables) => {\n\tconst tabbablesNodes = tabbables || [];\n\n\tif (!nodes) {\n\t\treturn tabbablesNodes;\n\t}\n\n\tArray.from(nodes).forEach(currentNode => {\n\t\tif (currentNode.nodeType === Node.TEXT_NODE || currentNode.nodeType === Node.COMMENT_NODE || currentNode.hasAttribute(\"data-sap-no-tab-ref\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (currentNode.shadowRoot) {\n\t\t\t// get the root node of the ShadowDom (1st none style tag)\n\t\t\tconst children = currentNode.shadowRoot.children;\n\t\t\tcurrentNode = Array.from(children).find(node => node.tagName !== \"STYLE\");\n\t\t}\n\n\t\tif (!currentNode) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isNodeTabbable(currentNode)) {\n\t\t\ttabbablesNodes.push(currentNode);\n\t\t}\n\n\t\tif (currentNode.tagName === \"SLOT\") {\n\t\t\tgetTabbables(currentNode.assignedNodes(), tabbablesNodes);\n\t\t} else {\n\t\t\tgetTabbables(currentNode.children, tabbablesNodes);\n\t\t}\n\t});\n\n\treturn tabbablesNodes;\n};\n\nexport {\n\tgetTabbableElements,\n\tgetLastTabbableElement,\n};\n","/**\n * Delays function execution by given threshold.\n * @param fn {Function}\n * @param delay {Integer}\n */\n\nlet debounceInterval = null;\n\nconst debounce = (fn, delay) => {\n\tclearTimeout(debounceInterval);\n\tdebounceInterval = setTimeout(() => {\n\t\tdebounceInterval = null;\n\t\tfn();\n\t}, delay);\n};\n\nexport default debounce;\n","/**\n * Determines if the element is within the viewport.\n * @param el {HTMLElement}\n */\nconst isElementInView = el => {\n\tconst rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 && rect.left >= 0\n\t\t\t&& rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n\t\t\t&& rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t);\n};\n\nexport default isElementInView;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.ListMode.prototype\n * @public\n */\nconst ListModes = {\n\t/**\n\t * Default mode (no selection).\n\t * @public\n\t * @type {None}\n\t */\n\tNone: \"None\",\n\n\t/**\n\t * Right-positioned single selection mode (only one list item can be selected).\n\t * @public\n\t * @type {SingleSelect}\n\t */\n\tSingleSelect: \"SingleSelect\",\n\n\t/**\n\t * Left-positioned single selection mode (only one list item can be selected).\n\t * @public\n\t * @type {SingleSelectBegin}\n\t */\n\tSingleSelectBegin: \"SingleSelectBegin\",\n\n\t/**\n\t * Selected item is highlighted but no selection element is visible\n\t * (only one list item can be selected).\n\t * @public\n\t * @type {SingleSelectEnd}\n\t */\n\tSingleSelectEnd: \"SingleSelectEnd\",\n\n\t/**\n\t * Selected item is highlighted and selection is changed upon arrow navigation\n\t * (only one list item can be selected - this is always the focused item).\n\t * @public\n\t * @type {SingleSelectAuto}\n\t */\n\tSingleSelectAuto: \"SingleSelectAuto\",\n\n\t/**\n\t * Multi selection mode (more than one list item can be selected).\n\t * @public\n\t * @type {MultiSelect}\n\t */\n\tMultiSelect: \"MultiSelect\",\n\n\t/**\n\t * Delete mode (only one list item can be deleted via provided delete button)\n\t * @public\n\t * @type {Delete}\n\t */\n\tDelete: \"Delete\",\n};\n\n/**\n * @class\n * Defines the type of ui5-list
.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.ListMode\n * @public\n * @enum {string}\n */\nclass ListMode extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ListModes[value];\n\t}\n}\n\nListMode.generateTypeAccessors(ListModes);\n\nexport default ListMode;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.ListGrowingMode.prototype\n * @public\n */\nconst ListGrowingModes = {\n\t/**\n\t * Component's load-more
is fired upon pressing a \"More\" button.\n\t * at the bottom.\n\t * @public\n\t * @type {Button}\n\t */\n\tButton: \"Button\",\n\n\t/**\n\t * Component's load-more
is fired upon scroll.\n\t * @public\n\t * @type {Scroll}\n\t */\n\tScroll: \"Scroll\",\n\n\t/**\n\t * Component's growing is not enabled.\n\t * @public\n\t * @type {None}\n\t */\n\tNone: \"None\",\n};\n\n/**\n * @class\n * Defines the growing mode, used in the ui5-list
.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.ListGrowingMode\n * @public\n * @enum {string}\n */\nclass ListGrowingMode extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ListGrowingModes[value];\n\t}\n}\n\nListGrowingMode.generateTypeAccessors(ListGrowingModes);\n\nexport default ListGrowingMode;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.ListSeparators.prototype\n * @public\n */\nconst ListSeparatorsTypes = {\n\t/**\n\t * Separators between the items including the last and the first one.\n\t * @public\n\t * @type {All}\n\t */\n\tAll: \"All\",\n\t/**\n\t * Separators between the items.\n\t * Note: This enumeration depends on the theme.\n\t * @public\n\t * @type {Inner}\n\t */\n\tInner: \"Inner\",\n\t/**\n\t * No item separators.\n\t * @public\n\t * @type {None}\n\t */\n\tNone: \"None\",\n};\n\n/**\n * @class\n * Defines which separator style will be applied for the list items.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.ListSeparators\n * @public\n * @enum {string}\n */\nclass ListSeparators extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ListSeparatorsTypes[value];\n\t}\n}\n\nListSeparators.generateTypeAccessors(ListSeparatorsTypes);\n\nexport default ListSeparators;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.BusyIndicatorSize.prototype\n * @public\n */\nconst BusyIndicatorSizes = {\n\t/**\n\t * small size\n\t * @public\n\t * @type {Small}\n\t */\n\tSmall: \"Small\",\n\n\t/**\n\t * medium size\n\t * @public\n\t * @type {Medium}\n\t */\n\tMedium: \"Medium\",\n\n\t/**\n\t * large size\n\t * @public\n\t * @type {Large}\n\t */\n\tLarge: \"Large\",\n};\n\n/**\n * @class\n * Different types of BusyIndicator.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.BusyIndicatorSize\n * @public\n * @enum {string}\n */\nclass BusyIndicatorSize extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!BusyIndicatorSizes[value];\n\t}\n}\n\nBusyIndicatorSize.generateTypeAccessors(BusyIndicatorSizes);\n\nexport default BusyIndicatorSize;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context._isBusy ? block1(context, tags, suffix) : undefined }${ context._isBusy ? block3(context, tags, suffix) : undefined }
`;\nconst block1 = (context, tags, suffix) => html`${ context.text ? block2(context, tags, suffix) : undefined }
`;\nconst block2 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-label\", tags, suffix)} id=\"${ifDefined(context._id)}-label\" class=\"ui5-busy-indicator-text\">${ifDefined(context.text)}${scopeTag(\"ui5-label\", tags, suffix)}>` : html`${ifDefined(context.text)}`;\nconst block3 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/BusyIndicator.css\",content:\":host(:not([hidden])){display:inline-block}:host([_is-busy]){color:var(--_ui5_busy_indicator_color)}:host([size=Small]) .ui5-busy-indicator-root{min-width:1.5rem;min-height:.5rem}:host([size=Small][text]:not([text=\\\"\\\"])) .ui5-busy-indicator-root{min-height:1.75rem}:host([size=Small]) .ui5-busy-indicator-circle{width:.5rem;height:.5rem}:host(:not([size])) .ui5-busy-indicator-root,:host([size=Medium]) .ui5-busy-indicator-root{min-width:3rem;min-height:1rem}:host(:not([size])[text]:not([text=\\\"\\\"])) .ui5-busy-indicator-root,:host([size=Medium][text]:not([text=\\\"\\\"])) .ui5-busy-indicator-root{min-height:2.25rem}:host(:not([size])) .ui5-busy-indicator-circle,:host([size=Medium]) .ui5-busy-indicator-circle{width:1rem;height:1rem}:host([size=Large]) .ui5-busy-indicator-root{min-width:6rem;min-height:2rem}:host([size=Large][text]:not([text=\\\"\\\"])) .ui5-busy-indicator-root{min-height:3.25rem}:host([size=Large]) .ui5-busy-indicator-circle{width:2rem;height:2rem}.ui5-busy-indicator-root{display:flex;justify-content:center;align-items:center;position:relative;background-color:inherit}.ui5-busy-indicator-busy-area{position:absolute;z-index:99;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;background-color:inherit;flex-direction:column}.ui5-busy-indicator-busy-area:focus{outline:var(--_ui5_busy_indicator_focus_outline);outline-offset:-2px;border-radius:var(--_ui5_busy_indicator_focus_border_radius)}.ui5-busy-indicator-circles-wrapper{line-height:0}.ui5-busy-indicator-circle{display:inline-block;background-color:currentColor;border-radius:50%}.ui5-busy-indicator-circle:before{content:\\\"\\\";width:100%;height:100%;border-radius:100%}.circle-animation-0{animation:grow 1.6s cubic-bezier(.32,.06,.85,1.11) infinite}.circle-animation-1{animation:grow 1.6s cubic-bezier(.32,.06,.85,1.11) infinite;animation-delay:.2s}.circle-animation-2{animation:grow 1.6s cubic-bezier(.32,.06,.85,1.11) infinite;animation-delay:.4s}.ui5-busy-indicator-text{width:100%;margin-top:.25rem;text-align:center}@keyframes grow{0%,50%,to{-webkit-transform:scale(.5);-moz-transform:scale(.5);transform:scale(.5)}25%{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1)}}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { isTabNext } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport BusyIndicatorSize from \"./types/BusyIndicatorSize.js\";\nimport Label from \"./Label.js\";\n\n// Template\nimport BusyIndicatorTemplate from \"./generated/templates/BusyIndicatorTemplate.lit.js\";\n\nimport { BUSY_INDICATOR_TITLE } from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport busyIndicatorCss from \"./generated/themes/BusyIndicator.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-busy-indicator\",\n\taltTag: \"ui5-busyindicator\",\n\tlanguageAware: true,\n\tslots: /** @lends sap.ui.webcomponents.main.BusyIndicator.prototype */ {\n\n\t\t/**\n\t\t * Determines the content over which the component will appear.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.BusyIndicator.prototype */ {\n\n\t\t/**\n\t\t * Defines text to be displayed below the component. It can be used to inform the user of the current operation.\n\t\t * @type {string}\n\t\t * @public\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.0.0-rc.7\n\t\t */\n\t\ttext: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the size of the component.\n\t\t *\n\t\t *
\n\t\t * Note:\n\t\t *\n\t\t * \n\t\t * Small
\n\t\t * Medium
\n\t\t * Large
\n\t\t *
\n\t\t *\n\t\t * @type {BusyIndicatorSize}\n\t\t * @defaultvalue \"Medium\"\n\t\t * @public\n\t\t */\n\t\tsize: {\n\t\t\ttype: BusyIndicatorSize,\n\t\t\tdefaultValue: BusyIndicatorSize.Medium,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the busy indicator is visible on the screen. By default it is not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the delay in milliseconds, after which the busy indicator will be visible on the screen.\n\t\t *\n\t\t * @type {Integer}\n\t\t * @defaultValue 1000\n\t\t * @public\n\t\t */\n\t\tdelay: {\n\t\t\ttype: Integer,\n\t\t\tdefaultValue: 1000,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the component is currently in busy state.\n\t\t * @private\n\t\t */\n\t\t_isBusy: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-busy-indicator
signals that some operation is going on and that the\n * user must wait. It does not block the current UI screen so other operations could be triggered in parallel.\n * It displays 3 dots and each dot expands and shrinks at a different rate, resulting in a cascading flow of animation.\n *\n * Usage
\n * For the ui5-busy-indicator
you can define the size, the text and whether it is shown or hidden.\n * In order to hide it, use the \"active\" property.\n *
\n * In order to show busy state over an HTML element, simply nest the HTML element in a ui5-busy-indicator
instance.\n *
\n * Note: Since ui5-busy-indicator
has display: inline-block;
by default and no width of its own,\n * whenever you need to wrap a block-level element, you should set display: block
to the busy indicator as well.\n *\n * When to use:
\n * \n * - The user needs to be able to cancel the operation.
\n * - Only part of the application or a particular component is affected.
\n *
\n *\n * When not to use:
\n * \n * - The operation takes less than one second.
\n * - You need to block the screen and prevent the user from starting another activity.
\n * - Do not show multiple busy indicators at once.
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/BusyIndicator\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.BusyIndicator\n * @extends UI5Element\n * @tagname ui5-busy-indicator\n * @public\n * @since 0.12.0\n */\nclass BusyIndicator extends UI5Element {\n\tconstructor() {\n\t\tsuper();\n\t\tthis._keydownHandler = this._handleKeydown.bind(this);\n\t\tthis._preventEventHandler = this._preventEvent.bind(this);\n\t}\n\n\tonEnterDOM() {\n\t\tthis.addEventListener(\"keydown\", this._keydownHandler, {\n\t\t\tcapture: true,\n\t\t});\n\t\tthis.addEventListener(\"keyup\", this._preventEventHandler, {\n\t\t\tcapture: true,\n\t\t});\n\t}\n\n\tonExitDOM() {\n\t\tif (this._busyTimeoutId) {\n\t\t\tclearTimeout(this._busyTimeoutId);\n\t\t\tdelete this._busyTimeoutId;\n\t\t}\n\n\t\tthis.removeEventListener(\"keydown\", this._keydownHandler, true);\n\t\tthis.removeEventListener(\"keyup\", this._preventEventHandler, true);\n\t}\n\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn busyIndicatorCss;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn BusyIndicatorTemplate;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [Label];\n\t}\n\n\tstatic async onDefine() {\n\t\tBusyIndicator.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n\n\tget ariaTitle() {\n\t\treturn BusyIndicator.i18nBundle.getText(BUSY_INDICATOR_TITLE);\n\t}\n\n\tget labelId() {\n\t\treturn this.text ? `${this._id}-label` : undefined;\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\t\"ui5-busy-indicator-root\": true,\n\t\t\t},\n\t\t};\n\t}\n\n\tonBeforeRendering() {\n\t\tif (this.active) {\n\t\t\tif (!this._isBusy && !this._busyTimeoutId) {\n\t\t\t\tthis._busyTimeoutId = setTimeout(() => {\n\t\t\t\t\tdelete this._busyTimeoutId;\n\t\t\t\t\tthis._isBusy = true;\n\t\t\t\t}, Math.max(0, this.delay));\n\t\t\t}\n\t\t} else {\n\t\t\tif (this._busyTimeoutId) {\n\t\t\t\tclearTimeout(this._busyTimeoutId);\n\t\t\t\tdelete this._busyTimeoutId;\n\t\t\t}\n\t\t\tthis._isBusy = false;\n\t\t}\n\t}\n\n\t_handleKeydown(event) {\n\t\tif (!this._isBusy) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.stopImmediatePropagation();\n\n\t\t// move the focus to the last element in this DOM and let TAB continue to the next focusable element\n\t\tif (isTabNext(event)) {\n\t\t\tthis.focusForward = true;\n\t\t\tthis.shadowRoot.querySelector(\"[data-ui5-focus-redirect]\").focus();\n\t\t\tthis.focusForward = false;\n\t\t}\n\t}\n\n\t_preventEvent(event) {\n\t\tif (this._isBusy) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\t}\n\n\t/**\n\t * Moves the focus to busy area when coming with SHIFT + TAB\n\t */\n\t_redirectFocus(event) {\n\t\tif (this.focusForward) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.shadowRoot.querySelector(\".ui5-busy-indicator-busy-area\").focus();\n\t}\n}\n\nBusyIndicator.define();\n\nexport default BusyIndicator;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.busy ? block8(context, tags, suffix) : undefined }
`;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => html``;\nconst block3 = (context, tags, suffix) => html``;\nconst block4 = (context, tags, suffix) => html`${ifDefined(context.noDataText)}
`;\nconst block5 = (context, tags, suffix) => html`${ifDefined(context._growingButtonText)}
`;\nconst block6 = (context, tags, suffix) => html``;\nconst block7 = (context, tags, suffix) => html``;\nconst block8 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-busy-indicator\", tags, suffix)} delay=\"${ifDefined(context.busyDelay)}\" active size=\"Medium\" class=\"ui5-list-busy-ind\" style=\"${styleMap(context.styles.busyInd)}\" data-sap-focus-ref>${scopeTag(\"ui5-busy-indicator\", tags, suffix)}>
` : html`
`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/List.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}[growing-button]{display:flex;align-items:center;padding:var(--_ui5_load_more_padding);border-top:1px solid var(--sapList_BorderColor);border-bottom:var(--_ui5_load_more_border-bottom);box-sizing:border-box;cursor:pointer;outline:none}[growing-button-inner]{display:flex;align-items:center;justify-content:center;flex-direction:column;min-height:var(--_ui5_load_more_text_height);width:100%;color:var(--sapButton_TextColor);background-color:var(--sapList_Background);border:var(--_ui5_load_more_border);border-radius:var(--_ui5_load_more_border_radius);box-sizing:border-box}[growing-button-inner]:focus{outline:var(--_ui5_load_more_outline_width) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);outline-offset:-.125rem;border-color:transparent}[growing-button-inner]:hover{background-color:var(--sapList_Hover_Background)}[growing-button-inner]:active,[growing-button-inner][active]{background-color:var(--sapList_Active_Background);border-color:var(--sapList_Active_Background)}[growing-button-inner]:active>*,[growing-button-inner][active]>*{color:var(--sapList_Active_TextColor)}[growing-button-subtext],[growing-button-text]{width:100%;text-align:center;font-family:\\\"72override\\\",var(--sapFontFamily);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box}[growing-button-text]{height:var(--_ui5_load_more_text_height);padding:.875rem 1rem 0 1rem;font-size:var(--_ui5_load_more_text_font_size);font-weight:700}[growing-button-subtext]{font-size:var(--sapFontSize);padding:var(--_ui5_load_more_desc_padding)}:host(:not([hidden])){display:block;max-width:100%;width:100%;-webkit-tap-highlight-color:transparent}:host([indent]) .ui5-list-root{padding:2rem}:host([separators=None]) .ui5-list-nodata{border-bottom:0}:host([busy]){opacity:.72}:host([busy]) .ui5-list-busy-row{position:absolute;left:0;right:0;bottom:0;top:0;outline:none}:host([busy]) .ui5-list-busy-ind{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1}.ui5-list-root{width:100%;height:100%;position:relative;box-sizing:border-box}.ui5-list-scroll-container{overflow:auto;height:100%}.ui5-list-ul{list-style-type:none;padding:0;margin:0}.ui5-list-ul:focus{outline:none}.ui5-list-focusarea{position:fixed}.ui5-list-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box;font-size:var(--sapFontHeader4Size);font-family:\\\"72override\\\",var(--sapFontFamily);color:var(--sapGroup_TitleTextColor);height:3rem;line-height:3rem;padding:0 1rem;background-color:var(--sapGroup_TitleBackground);border-bottom:1px solid var(--sapGroup_TitleBorderColor)}.ui5-list-footer{height:2rem;box-sizing:border-box;-webkit-text-size-adjust:none;font-size:var(--sapFontSize);font-family:\\\"72override\\\",var(--sapFontFamily);line-height:2rem;background-color:var(--sapList_FooterBackground);color:var(--ui5_list_footer_text_color);padding:0 1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ui5-list-nodata{list-style-type:none;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;color:var(--sapTextColor);background-color:var(--sapList_Background);border-bottom:1px solid var(--sapList_BorderColor);padding:0 1rem!important;height:var(--_ui5_list_no_data_height);font-size:var(--_ui5_list_no_data_font_size);font-family:\\\"72override\\\",var(--sapFontFamily)}.ui5-list-nodata-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ItemNavigation from \"@ui5/webcomponents-base/dist/delegate/ItemNavigation.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport { getLastTabbableElement } from \"@ui5/webcomponents-base/dist/util/TabbableElements.js\";\nimport {\n\tisTabNext,\n\tisSpace,\n\tisEnter,\n\tisTabPrevious,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport NavigationMode from \"@ui5/webcomponents-base/dist/types/NavigationMode.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport debounce from \"@ui5/webcomponents-base/dist/util/debounce.js\";\nimport isElementInView from \"@ui5/webcomponents-base/dist/util/isElementInView.js\";\nimport ListMode from \"./types/ListMode.js\";\nimport ListGrowingMode from \"./types/ListGrowingMode.js\";\nimport ListSeparators from \"./types/ListSeparators.js\";\nimport BusyIndicator from \"./BusyIndicator.js\";\n\n// Template\nimport ListTemplate from \"./generated/templates/ListTemplate.lit.js\";\n\n// Styles\nimport listCss from \"./generated/themes/List.css.js\";\nimport browserScrollbarCSS from \"./generated/themes/BrowserScrollbar.css.js\";\n\n// Texts\nimport {\n\tLOAD_MORE_TEXT, ARIA_LABEL_LIST_SELECTABLE,\n\tARIA_LABEL_LIST_MULTISELECTABLE,\n\tARIA_LABEL_LIST_DELETABLE,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nconst INFINITE_SCROLL_DEBOUNCE_RATE = 250; // ms\n\nconst PAGE_UP_DOWN_SIZE = 10;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-list\",\n\tmanagedSlots: true,\n\tfastNavigation: true,\n\tslots: /** @lends sap.ui.webcomponents.main.List.prototype */ {\n\n\t\t/**\n\t\t * Defines the component header.\n\t\t *
\n\t\t * Note: When header
is set, the\n\t\t * headerText
property is ignored.\n\t\t *\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\theader: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * Defines the items of the component.\n\t\t *
\n\t\t * Note: Use ui5-li
, ui5-li-custom
, and ui5-li-groupheader
for the intended design.\n\t\t *\n\t\t * @type {sap.ui.webcomponents.main.IListItem[]}\n\t\t * @slot items\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\tpropertyName: \"items\",\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.List.prototype */ {\n\n\t\t/**\n\t\t * Defines the component header text.\n\t\t *
\n\t\t * Note: If header
is set this property is ignored.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\theaderText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the footer text.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tfooterText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component is indented.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tindent: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the mode of the component.\n\t\t *
\n\t\t * Note: Available options are None
, SingleSelect
, SingleSelectBegin
,\n\t\t * SingleSelectEnd
, MultiSelect
, and Delete
.\n\t\t *\n\t\t * @type {ListMode}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tmode: {\n\t\t\ttype: ListMode,\n\t\t\tdefaultValue: ListMode.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text that is displayed when the component contains no items.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tnoDataText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the item separator style that is used.\n\t\t *
\n\t\t * Notes:\n\t\t * \n\t\t * - Avalaible options are
All
, Inner
, and None
. \n\t\t * - When set to
None
, none of the items are separated by horizontal lines. \n\t\t * - When set to
Inner
, the first item doesn't have a top separator and the last\n\t\t * item doesn't have a bottom separator. \n\t\t *
\n\t\t *\n\t\t * @type {ListSeparators}\n\t\t * @defaultvalue \"All\"\n\t\t * @public\n\t\t */\n\t\tseparators: {\n\t\t\ttype: ListSeparators,\n\t\t\tdefaultValue: ListSeparators.All,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component will have growing capability either by pressing a More
button,\n\t\t * or via user scroll. In both cases load-more
event is fired.\n\t\t *
\n\t\t *\n\t\t * Available options:\n\t\t *
\n\t\t * Button
- Shows a More
button at the bottom of the list,\n\t\t * pressing of which triggers the load-more
event.\n\t\t *
\n\t\t * Scroll
- The load-more
event is triggered when the user scrolls to the bottom of the list;\n\t\t *
\n\t\t * None
(default) - The growing is off.\n\t\t *
\n\t\t *\n\t\t * Restrictions: growing=\"Scroll\"
is not supported for Internet Explorer,\n\t\t * on IE the component will fallback to growing=\"Button\"
.\n\t\t * @type {ListGrowingMode}\n\t\t * @defaultvalue \"None\"\n\t\t * @since 1.0.0-rc.13\n\t\t * @public\n\t\t */\n\t\tgrowing: {\n\t\t\ttype: ListGrowingMode,\n\t\t\tdefaultValue: ListGrowingMode.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the component would display a loading indicator over the list.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.6\n\t\t */\n\t\tbusy: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the delay in milliseconds, after which the busy indicator will show up for this component.\n\t\t *\n\t\t * @type {Integer}\n\t\t * @defaultValue 1000\n\t\t * @public\n\t\t */\n\t\tbusyDelay: {\n\t\t\ttype: Integer,\n\t\t\tdefaultValue: 1000,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the IDs of the elements that label the input.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible role of the component.\n\t\t *
\n\t\t * @public\n\t\t * @type {string}\n\t\t * @defaultvalue \"list\"\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleRole: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"list\",\n\t\t},\n\n\t\t/**\n\t\t * Defines if the entire list is in view port.\n\t\t * @private\n\t\t */\n\t\t_inViewport: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the active state of the More
button.\n\t\t * @private\n\t\t */\n\t\t_loadMoreActive: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.List.prototype */ {\n\n\t\t/**\n\t\t * Fired when an item is activated, unless the item's type
property\n\t\t * is set to Inactive
.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#item-click\n\t\t * @allowPreventDefault\n\t\t * @param {HTMLElement} item The clicked item.\n\t\t * @public\n\t\t */\n\t\t\"item-click\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the Close
button of any item is clicked\n\t\t *
\n\t\t * Note: This event is only applicable to list items that can be closed (such as notification list items),\n\t\t * not to be confused with item-delete
.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#item-close\n\t\t * @param {HTMLElement} item the item about to be closed.\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\t\"item-close\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the Toggle
button of any item is clicked.\n\t\t *
\n\t\t * Note: This event is only applicable to list items that can be toggled (such as notification group list items).\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#item-toggle\n\t\t * @param {HTMLElement} item the toggled item.\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\t\"item-toggle\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the Delete button of any item is pressed.\n\t\t *
\n\t\t * Note: A Delete button is displayed on each item,\n\t\t * when the component mode
property is set to Delete
.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#item-delete\n\t\t * @param {HTMLElement} item the deleted item.\n\t\t * @public\n\t\t */\n\t\t\"item-delete\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when selection is changed by user interaction\n\t\t * in SingleSelect
, SingleSelectBegin
, SingleSelectEnd
and MultiSelect
modes.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#selection-change\n\t\t * @param {Array} selectedItems An array of the selected items.\n\t\t * @param {Array} previouslySelectedItems An array of the previously selected items.\n\t\t * @public\n\t\t */\n\t\t\"selection-change\": {\n\t\t\tdetail: {\n\t\t\t\tselectedItems: { type: Array },\n\t\t\t\tpreviouslySelectedItems: { type: Array },\n\t\t\t\tselectionComponentPressed: { type: Boolean }, // protected, indicates if the user used the selection components to change the selection\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the user scrolls to the bottom of the list.\n\t\t *
\n\t\t * Note: The event is fired when the growing='Scroll'
property is enabled.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.List#load-more\n\t\t * @public\n\t\t * @since 1.0.0-rc.6\n\t\t */\n\t\t\"load-more\": {},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-list
component allows displaying a list of items, advanced keyboard\n * handling support for navigating between items, and predefined modes to improve the development efficiency.\n *
\n * The ui5-list
is a container for the available list items:\n * \n * ui5-li
\n * ui5-li-custom
\n * ui5-li-groupheader
\n *
\n *
\n * To benefit from the built-in selection mechanism, you can use the available\n * selection modes, such as\n * SingleSelect
, MultiSelect
and Delete
.\n *
\n * Additionally, the ui5-list
provides header, footer, and customization for the list item separators.\n *\n *
\n * Keyboard Handling
\n *\n * Basic Navigation
\n * The ui5-list
provides advanced keyboard handling.\n * When a list is focused the user can use the following keyboard\n * shortcuts in order to perform a navigation:\n *
\n *\n * \n * - [UP/DOWN] - Navigates up and down the items
\n * - [HOME] - Navigates to first item
\n * - [END] - Navigates to the last item
\n *
\n *\n * The user can use the following keyboard shortcuts to perform actions (such as select, delete),\n * when the mode
property is in use:\n * \n * - [SPACE] - Select an item (if
type
is 'Active') when mode
is selection \n * - [DELETE] - Delete an item if
mode
property is Delete
\n *
\n *\n * Fast Navigation
\n * This component provides a build in fast navigation group which can be used via F6 / Shift + F6
or Ctrl + Alt(Option) + Down / Ctrl + Alt(Option) + Up
.\n * In order to use this functionality, you need to import the following module:\n * import \"@ui5/webcomponents-base/dist/features/F6Navigation.js\"
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/List.js\";
\n *
\n * import \"@ui5/webcomponents/dist/StandardListItem.js\";
(for ui5-li
)\n *
\n * import \"@ui5/webcomponents/dist/CustomListItem.js\";
(for ui5-li-custom
)\n *
\n * import \"@ui5/webcomponents/dist/GroupHeaderListItem.js\";
(for ui5-li-groupheader
)\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.List\n * @extends UI5Element\n * @tagname ui5-list\n * @appenddocs StandardListItem CustomListItem GroupHeaderListItem\n * @public\n */\nclass List 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 ListTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn [browserScrollbarCSS, listCss];\n\t}\n\n\tstatic async onDefine() {\n\t\tList.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [BusyIndicator];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.initItemNavigation();\n\n\t\t// Stores the last focused item within the internal ul element.\n\t\tthis._previouslyFocusedItem = null;\n\n\t\t// Indicates that the List is forwarding the focus before or after the internal ul.\n\t\tthis._forwardingFocus = false;\n\n\t\tthis._previouslySelectedItem = null;\n\n\t\t// Indicates that the List has already subscribed for resize.\n\t\tthis.resizeListenerAttached = false;\n\n\t\t// Indicates if the IntersectionObserver started observing the List\n\t\tthis.listEndObserved = false;\n\n\t\tthis.addEventListener(\"ui5-_press\", this.onItemPress.bind(this));\n\t\tthis.addEventListener(\"ui5-close\", this.onItemClose.bind(this));\n\t\tthis.addEventListener(\"ui5-toggle\", this.onItemToggle.bind(this));\n\t\tthis.addEventListener(\"ui5-_focused\", this.onItemFocused.bind(this));\n\t\tthis.addEventListener(\"ui5-_forward-after\", this.onForwardAfter.bind(this));\n\t\tthis.addEventListener(\"ui5-_forward-before\", this.onForwardBefore.bind(this));\n\t\tthis.addEventListener(\"ui5-_selection-requested\", this.onSelectionRequested.bind(this));\n\t\tthis.addEventListener(\"ui5-_focus-requested\", this.focusUploadCollectionItem.bind(this));\n\n\t\tthis._handleResize = this.checkListInViewport.bind(this);\n\n\t\t// Indicates the List bottom most part has been detected by the IntersectionObserver\n\t\t// for the first time.\n\t\tthis.initialIntersection = true;\n\t}\n\n\tonExitDOM() {\n\t\tthis.unobserveListEnd();\n\t\tthis.resizeListenerAttached = false;\n\t\tResizeHandler.deregister(this.getDomRef(), this._handleResize);\n\t}\n\n\tonBeforeRendering() {\n\t\tthis.prepareListItems();\n\t}\n\n\tonAfterRendering() {\n\t\tif (this.growsOnScroll) {\n\t\t\tthis.observeListEnd();\n\t\t} else if (this.listEndObserved) {\n\t\t\tthis.unobserveListEnd();\n\t\t}\n\n\t\tif (this.grows) {\n\t\t\tthis.checkListInViewport();\n\t\t\tthis.attachForResize();\n\t\t}\n\t}\n\n\tattachForResize() {\n\t\tif (!this.resizeListenerAttached) {\n\t\t\tthis.resizeListenerAttached = true;\n\t\t\tResizeHandler.register(this.getDomRef(), this._handleResize);\n\t\t}\n\t}\n\n\tget shouldRenderH1() {\n\t\treturn !this.header.length && this.headerText;\n\t}\n\n\tget headerID() {\n\t\treturn `${this._id}-header`;\n\t}\n\n\tget modeLabelID() {\n\t\treturn `${this._id}-modeLabel`;\n\t}\n\n\tget listEndDOM() {\n\t\treturn this.shadowRoot.querySelector(\".ui5-list-end-marker\");\n\t}\n\n\tget hasData() {\n\t\treturn this.getSlottedNodes(\"items\").length !== 0;\n\t}\n\n\tget showNoDataText() {\n\t\treturn !this.hasData && this.noDataText;\n\t}\n\n\tget isDelete() {\n\t\treturn this.mode === ListMode.Delete;\n\t}\n\n\tget isSingleSelect() {\n\t\treturn [\n\t\t\tListMode.SingleSelect,\n\t\t\tListMode.SingleSelectBegin,\n\t\t\tListMode.SingleSelectEnd,\n\t\t\tListMode.SingleSelectAuto,\n\t\t].includes(this.mode);\n\t}\n\n\tget isMultiSelect() {\n\t\treturn this.mode === ListMode.MultiSelect;\n\t}\n\n\tget ariaLabelledBy() {\n\t\tif (this.accessibleNameRef || this.accessibleName) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst ids = [];\n\n\t\tif (this.isMultiSelect || this.isSingleSelect || this.isDelete) {\n\t\t\tids.push(this.modeLabelID);\n\t\t}\n\n\t\tif (this.shouldRenderH1) {\n\t\t\tids.push(this.headerID);\n\t\t}\n\n\t\treturn ids.length ? ids.join(\" \") : undefined;\n\t}\n\n\tget ariaLabelTxt() {\n\t\treturn getEffectiveAriaLabelText(this);\n\t}\n\n\tget ariaLabelModeText() {\n\t\tif (this.isMultiSelect) {\n\t\t\treturn List.i18nBundle.getText(ARIA_LABEL_LIST_MULTISELECTABLE);\n\t\t}\n\t\tif (this.isSingleSelect) {\n\t\t\treturn List.i18nBundle.getText(ARIA_LABEL_LIST_SELECTABLE);\n\t\t}\n\t\tif (this.isDelete) {\n\t\t\treturn List.i18nBundle.getText(ARIA_LABEL_LIST_DELETABLE);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget grows() {\n\t\treturn this.growing !== ListGrowingMode.None;\n\t}\n\n\tget growsOnScroll() {\n\t\treturn this.growing === ListGrowingMode.Scroll;\n\t}\n\n\tget growsWithButton() {\n\t\treturn this.growing === ListGrowingMode.Button;\n\t}\n\n\tget _growingButtonText() {\n\t\treturn List.i18nBundle.getText(LOAD_MORE_TEXT);\n\t}\n\n\tget busyIndPosition() {\n\t\tif (!this.grows) {\n\t\t\treturn \"absolute\";\n\t\t}\n\n\t\treturn this._inViewport ? \"absolute\" : \"sticky\";\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\tbusyInd: {\n\t\t\t\tposition: this.busyIndPosition,\n\t\t\t},\n\t\t};\n\t}\n\n\tinitItemNavigation() {\n\t\tthis._itemNavigation = new ItemNavigation(this, {\n\t\t\tskipItemsSize: PAGE_UP_DOWN_SIZE, // PAGE_UP and PAGE_DOWN will skip trough 10 items\n\t\t\tnavigationMode: NavigationMode.Vertical,\n\t\t\tgetItemsCallback: () => this.getEnabledItems(),\n\t\t});\n\t}\n\n\tprepareListItems() {\n\t\tconst slottedItems = this.getSlottedNodes(\"items\");\n\n\t\tslottedItems.forEach((item, key) => {\n\t\t\tconst isLastChild = key === slottedItems.length - 1;\n\t\t\tconst showBottomBorder = this.separators === ListSeparators.All\n\t\t\t\t|| (this.separators === ListSeparators.Inner && !isLastChild);\n\n\t\t\titem._mode = this.mode;\n\t\t\titem.hasBorder = showBottomBorder;\n\t\t});\n\n\t\tthis._previouslySelectedItem = null;\n\t}\n\n\tasync observeListEnd() {\n\t\tif (!this.listEndObserved) {\n\t\t\tawait renderFinished();\n\t\t\tthis.getIntersectionObserver().observe(this.listEndDOM);\n\t\t\tthis.listEndObserved = true;\n\t\t}\n\t}\n\n\tunobserveListEnd() {\n\t\tif (this.growingIntersectionObserver) {\n\t\t\tthis.growingIntersectionObserver.disconnect();\n\t\t\tthis.growingIntersectionObserver = null;\n\t\t\tthis.listEndObserved = false;\n\t\t}\n\t}\n\n\tonInteresection(entries) {\n\t\tif (this.initialIntersection) {\n\t\t\tthis.initialIntersection = false;\n\t\t\treturn;\n\t\t}\n\t\tentries.forEach(entry => {\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tdebounce(this.loadMore.bind(this), INFINITE_SCROLL_DEBOUNCE_RATE);\n\t\t\t}\n\t\t});\n\t}\n\n\t/*\n\t* ITEM SELECTION BASED ON THE CURRENT MODE\n\t*/\n\tonSelectionRequested(event) {\n\t\tconst previouslySelectedItems = this.getSelectedItems();\n\t\tlet selectionChange = false;\n\t\tthis._selectionRequested = true;\n\n\t\tif (this[`handle${this.mode}`]) {\n\t\t\tselectionChange = this[`handle${this.mode}`](event.detail.item, event.detail.selected);\n\t\t}\n\n\t\tif (selectionChange) {\n\t\t\tthis.fireEvent(\"selection-change\", {\n\t\t\t\tselectedItems: this.getSelectedItems(),\n\t\t\t\tpreviouslySelectedItems,\n\t\t\t\tselectionComponentPressed: event.detail.selectionComponentPressed,\n\t\t\t\tkey: event.detail.key,\n\t\t\t});\n\t\t}\n\t}\n\n\thandleSingleSelect(item) {\n\t\tif (item.selected) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.deselectSelectedItems();\n\t\titem.selected = true;\n\n\t\treturn true;\n\t}\n\n\thandleSingleSelectBegin(item) {\n\t\treturn this.handleSingleSelect(item);\n\t}\n\n\thandleSingleSelectEnd(item) {\n\t\treturn this.handleSingleSelect(item);\n\t}\n\n\thandleSingleSelectAuto(item) {\n\t\treturn this.handleSingleSelect(item);\n\t}\n\n\thandleMultiSelect(item, selected) {\n\t\titem.selected = selected;\n\t\treturn true;\n\t}\n\n\thandleDelete(item) {\n\t\tthis.fireEvent(\"item-delete\", { item });\n\t}\n\n\tdeselectSelectedItems() {\n\t\tthis.getSelectedItems().forEach(item => { item.selected = false; });\n\t}\n\n\tgetSelectedItems() {\n\t\treturn this.getSlottedNodes(\"items\").filter(item => item.selected);\n\t}\n\n\tgetEnabledItems() {\n\t\treturn this.getSlottedNodes(\"items\").filter(item => !item.disabled);\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isTabNext(event)) {\n\t\t\tthis._handleTabNext(event);\n\t\t}\n\t}\n\n\t_onLoadMoreKeydown(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._loadMoreActive = true;\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis._onLoadMoreClick();\n\t\t\tthis._loadMoreActive = true;\n\t\t}\n\n\t\tif (isTabNext(event)) {\n\t\t\tthis.focusAfterElement();\n\t\t}\n\n\t\tif (isTabPrevious(event)) {\n\t\t\tif (this.getPreviouslyFocusedItem()) {\n\t\t\t\tthis.focusPreviouslyFocusedItem();\n\t\t\t} else {\n\t\t\t\tthis.focusFirstItem();\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_onLoadMoreKeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis._onLoadMoreClick();\n\t\t}\n\t\tthis._loadMoreActive = false;\n\t}\n\n\t_onLoadMoreMousedown() {\n\t\tthis._loadMoreActive = true;\n\t}\n\n\t_onLoadMoreMouseup() {\n\t\tthis._loadMoreActive = false;\n\t}\n\n\t_onLoadMoreClick() {\n\t\tthis.loadMore();\n\t}\n\n\tcheckListInViewport() {\n\t\tthis._inViewport = isElementInView(this.getDomRef());\n\t}\n\n\tloadMore() {\n\t\tthis.fireEvent(\"load-more\");\n\t}\n\n\t/*\n\t* KEYBOARD SUPPORT\n\t*/\n\t_handleTabNext(event) {\n\t\t// If forward navigation is performed, we check if the List has headerToolbar.\n\t\t// If yes - we check if the target is at the last tabbable element of the headerToolbar\n\t\t// to forward correctly the focus to the selected, previously focused or to the first list item.\n\t\tlet lastTabbableEl;\n\t\tconst target = this.getNormalizedTarget(event.target);\n\n\t\tif (this.headerToolbar) {\n\t\t\tlastTabbableEl = this.getHeaderToolbarLastTabbableElement();\n\t\t}\n\n\t\tif (!lastTabbableEl) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (lastTabbableEl === target) {\n\t\t\tif (this.getFirstItem(x => x.selected && !x.disabled)) {\n\t\t\t\tthis.focusFirstSelectedItem();\n\t\t\t} else if (this.getPreviouslyFocusedItem()) {\n\t\t\t\tthis.focusPreviouslyFocusedItem();\n\t\t\t} else {\n\t\t\t\tthis.focusFirstItem();\n\t\t\t}\n\n\t\t\tevent.stopImmediatePropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_onfocusin(event) {\n\t\tconst target = this.getNormalizedTarget(event.target);\n\t\t// If the focusin event does not origin from one of the 'triggers' - ignore it.\n\t\tif (!this.isForwardElement(target)) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// The focus arrives in the List for the first time.\n\t\t// If there is selected item - focus it or focus the first item.\n\t\tif (!this.getPreviouslyFocusedItem()) {\n\t\t\tif (this.growsWithButton && this.isForwardAfterElement(target)) {\n\t\t\t\tthis.focusGrowingButton();\n\t\t\t} else {\n\t\t\t\tthis.focusFirstItem();\n\t\t\t}\n\t\t\tevent.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// The focus returns to the List,\n\t\t// focus the first selected item or the previously focused element.\n\t\tif (!this.getForwardingFocus()) {\n\t\t\tif (this.growsWithButton && this.isForwardAfterElement(target)) {\n\t\t\t\tthis.focusGrowingButton();\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.focusPreviouslyFocusedItem();\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.setForwardingFocus(false);\n\t}\n\n\tisForwardElement(node) {\n\t\tconst nodeId = node.id;\n\t\tconst beforeElement = this.getBeforeElement();\n\n\t\tif (this._id === nodeId || (beforeElement && beforeElement.id === nodeId)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.isForwardAfterElement(node);\n\t}\n\n\tisForwardAfterElement(node) {\n\t\tconst nodeId = node.id;\n\t\tconst afterElement = this.getAfterElement();\n\n\t\treturn afterElement && afterElement.id === nodeId;\n\t}\n\n\tonItemFocused(event) {\n\t\tconst target = event.target;\n\n\t\tevent.stopPropagation();\n\n\t\tthis._itemNavigation.setCurrentItem(target);\n\t\tthis.fireEvent(\"item-focused\", { item: target });\n\n\t\tif (this.mode === ListMode.SingleSelectAuto) {\n\t\t\tthis.onSelectionRequested({\n\t\t\t\tdetail: {\n\t\t\t\t\titem: target,\n\t\t\t\t\tselectionComponentPressed: false,\n\t\t\t\t\tselected: true,\n\t\t\t\t\tkey: event.detail.key,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tonItemPress(event) {\n\t\tconst pressedItem = event.detail.item;\n\n\t\tif (!this.fireEvent(\"item-click\", { item: pressedItem }, true)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._selectionRequested && this.mode !== ListMode.Delete) {\n\t\t\tthis._selectionRequested = true;\n\t\t\tthis.onSelectionRequested({\n\t\t\t\tdetail: {\n\t\t\t\t\titem: pressedItem,\n\t\t\t\t\tselectionComponentPressed: false,\n\t\t\t\t\tselected: !pressedItem.selected,\n\t\t\t\t\tkey: event.detail.key,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthis._selectionRequested = false;\n\t}\n\n\t// This is applicable to NoficationListItem\n\tonItemClose(event) {\n\t\tthis.fireEvent(\"item-close\", { item: event.detail.item });\n\t}\n\n\tonItemToggle(event) {\n\t\tthis.fireEvent(\"item-toggle\", { item: event.detail.item });\n\t}\n\n\tonForwardBefore(event) {\n\t\tthis.setPreviouslyFocusedItem(event.target);\n\t\tthis.focusBeforeElement();\n\t\tevent.stopPropagation();\n\t}\n\n\tonForwardAfter(event) {\n\t\tthis.setPreviouslyFocusedItem(event.target);\n\n\t\tif (!this.growsWithButton) {\n\t\t\tthis.focusAfterElement();\n\t\t} else {\n\t\t\tthis.focusGrowingButton();\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tevent.stopPropagation();\n\t}\n\n\tfocusBeforeElement() {\n\t\tthis.setForwardingFocus(true);\n\t\tthis.getBeforeElement().focus();\n\t}\n\n\tfocusAfterElement() {\n\t\tthis.setForwardingFocus(true);\n\t\tthis.getAfterElement().focus();\n\t}\n\n\tfocusGrowingButton() {\n\t\tconst growingBtn = this.getGrowingButton();\n\n\t\tif (growingBtn) {\n\t\t\tgrowingBtn.focus();\n\t\t}\n\t}\n\n\tgetGrowingButton() {\n\t\treturn this.shadowRoot.querySelector(`#${this._id}-growing-btn`);\n\t}\n\n\t/**\n\t * Focuses the first list item and sets its tabindex to \"0\" via the ItemNavigation\n\t * @protected\n\t */\n\tfocusFirstItem() {\n\t\t// only enabled items are focusable\n\t\tconst firstItem = this.getFirstItem(x => !x.disabled);\n\n\t\tif (firstItem) {\n\t\t\tfirstItem.focus();\n\t\t}\n\t}\n\n\tfocusPreviouslyFocusedItem() {\n\t\tconst previouslyFocusedItem = this.getPreviouslyFocusedItem();\n\n\t\tif (previouslyFocusedItem) {\n\t\t\tpreviouslyFocusedItem.focus();\n\t\t}\n\t}\n\n\tfocusFirstSelectedItem() {\n\t\t// only enabled items are focusable\n\t\tconst firstSelectedItem = this.getFirstItem(x => x.selected && !x.disabled);\n\n\t\tif (firstSelectedItem) {\n\t\t\tfirstSelectedItem.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Focuses a list item and sets its tabindex to \"0\" via the ItemNavigation\n\t * @protected\n\t * @param item\n\t */\n\tfocusItem(item) {\n\t\tthis._itemNavigation.setCurrentItem(item);\n\t\titem.focus();\n\t}\n\n\tfocusUploadCollectionItem(event) {\n\t\tsetTimeout(() => {\n\t\t\tthis.setPreviouslyFocusedItem(event.target);\n\t\t\tthis.focusPreviouslyFocusedItem();\n\t\t}, 0);\n\t}\n\n\tsetForwardingFocus(forwardingFocus) {\n\t\tthis._forwardingFocus = forwardingFocus;\n\t}\n\n\tgetForwardingFocus() {\n\t\treturn this._forwardingFocus;\n\t}\n\n\tsetPreviouslyFocusedItem(item) {\n\t\tthis._previouslyFocusedItem = item;\n\t}\n\n\tgetPreviouslyFocusedItem() {\n\t\treturn this._previouslyFocusedItem;\n\t}\n\n\tgetFirstItem(filter) {\n\t\tconst slottedItems = this.getSlottedNodes(\"items\");\n\t\tlet firstItem = null;\n\n\t\tif (!filter) {\n\t\t\treturn !!slottedItems.length && slottedItems[0];\n\t\t}\n\n\t\tfor (let i = 0; i < slottedItems.length; i++) {\n\t\t\tif (filter(slottedItems[i])) {\n\t\t\t\tfirstItem = slottedItems[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn firstItem;\n\t}\n\n\tgetAfterElement() {\n\t\tif (!this._afterElement) {\n\t\t\tthis._afterElement = this.shadowRoot.querySelector(`#${this._id}-after`);\n\t\t}\n\t\treturn this._afterElement;\n\t}\n\n\tgetBeforeElement() {\n\t\tif (!this._beforeElement) {\n\t\t\tthis._beforeElement = this.shadowRoot.querySelector(`#${this._id}-before`);\n\t\t}\n\t\treturn this._beforeElement;\n\t}\n\n\tgetHeaderToolbarLastTabbableElement() {\n\t\treturn getLastTabbableElement(this.headerToolbar.getDomRef()) || this.headerToolbar.getDomRef();\n\t}\n\n\tgetNormalizedTarget(target) {\n\t\tlet focused = target;\n\n\t\tif (target.shadowRoot && target.shadowRoot.activeElement) {\n\t\t\tfocused = target.shadowRoot.activeElement;\n\t\t}\n\n\t\treturn focused;\n\t}\n\n\tgetIntersectionObserver() {\n\t\tif (!this.growingIntersectionObserver) {\n\t\t\tthis.growingIntersectionObserver = new IntersectionObserver(this.onInteresection.bind(this), {\n\t\t\t\troot: null,\n\t\t\t\trootMargin: \"0px\",\n\t\t\t\tthreshold: 1.0,\n\t\t\t});\n\t\t}\n\n\t\treturn this.growingIntersectionObserver;\n\t}\n}\n\nList.define();\n\nexport default List;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"edit\";\nconst pathData = \"M501.5 88q8 7 8 19 0 10-8 18l-373 379q-5 4-9 6t-10 2h-80q-12 0-19.5-7.5T2.5 485v-80q0-10 8-18l374-379q8-8 18-8 11 0 19 8zm-136 99l-43-43-256 261 43 43zm80-80l-43-43-42 43 42 42z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"edit\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"edit\";\nconst pathData = \"M475 104q5 7 5 12 0 6-5 11L150 453q-4 4-8 4L32 480l22-110q0-5 4-9L384 36q4-4 11-4t11 4zm-34 11l-46-44-64 64 45 45zm-87 88l-46-45L84 381l46 46z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"edit\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/edit.js\";\nimport {pathData as pathDataV4} from \"./v4/edit.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"edit\";\nexport { pathData, ltr, accData };","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.ListItemType.prototype\n * @public\n */\nconst ListItemTypes = {\n\t/**\n\t * Indicates the list item does not have any active feedback when item is pressed.\n\t * @public\n\t * @type {Inactive}\n\t */\n\tInactive: \"Inactive\",\n\n\t/**\n\t * Indicates that the item is clickable via active feedback when item is pressed.\n\t * @public\n\t * @type {Active}\n\t */\n\tActive: \"Active\",\n\n\t/**\n\t * Enables detail button of the list item that fires detail-click event.\n\t * @public\n\t * @type {Detail}\n\t */\n\tDetail: \"Detail\",\n};\n\n/**\n * @class\n * Different types of ListItem.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.ListItemType\n * @public\n * @enum {string}\n */\nclass ListItemType extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!ListItemTypes[value];\n\t}\n}\n\nListItemType.generateTypeAccessors(ListItemTypes);\n\nexport default ListItemType;\n","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/ListItemBase.css\",content:\":host(:not([hidden])){display:block}:host{height:var(--_ui5_list_item_base_height);background:var(--ui5-listitem-background-color);box-sizing:border-box;border-bottom:1px solid transparent}:host([selected]){background:var(--sapList_SelectionBackgroundColor)}:host([has-border]){border-bottom:var(--ui5-listitem-border-bottom)}:host([selected]){border-bottom:var(--ui5-listitem-selected-border-bottom)}:host(:not([focused])[selected][has-border]){border-bottom:var(--ui5-listitem-selected-border-bottom)}:host([focused][selected]){border-bottom:var(--ui5-listitem-focused-selected-border-bottom)}.ui5-li-root{position:relative;display:flex;align-items:center;width:100%;height:100%;padding:0 1rem 0 1rem;box-sizing:border-box}:host([focused]) .ui5-li-root.ui5-li--focusable{outline:none}:host([focused]) .ui5-li-root.ui5-li--focusable:after{content:\\\"\\\";border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);position:absolute;top:.125rem;right:.125rem;bottom:.125rem;left:.125rem;pointer-events:none}:host([focused]) .ui5-li-content:focus:after{content:\\\"\\\";border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}:host([active][focused]) .ui5-li-root.ui5-li--focusable:after{border-color:var(--ui5-listitem-active-border-color)}:host([disabled]){opacity:var(--_ui5-listitembase_disabled_opacity);pointer-events:none}.ui5-li-content{max-width:100%;font-family:\\\"72override\\\",var(--sapFontFamily);color:var(--sapList_TextColor)}\"}","import litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport { getTabbableElements } from \"@ui5/webcomponents-base/dist/util/TabbableElements.js\";\nimport { isTabNext, isTabPrevious } from \"@ui5/webcomponents-base/dist/Keys.js\";\n\n// Styles\nimport styles from \"./generated/themes/ListItemBase.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\tproperties: /** @lends sap.ui.webcomponents.main.ListItemBase.prototype */ {\n\n\t\t/**\n\t\t * Defines the selected state of the ListItem
.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t* Defines if the list item should display its bottom border.\n\t\t* @private\n\t\t*/\n\t\thasBorder: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_tabIndex: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"-1\",\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether ui5-li
is in disabled state.\n\t\t *
\n\t\t * Note: A disabled ui5-li
is noninteractive.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @protected\n\t\t * @since 1.0.0-rc.12\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the element is on focus\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.ListItemBase.prototype */ {\n\t\t_focused: {},\n\t\t\"_forward-after\": {},\n\t\t\"_forward-before\": {},\n\t},\n};\n\n/**\n * A class to serve as a foundation\n * for the ListItem
and GroupHeaderListItem
classes.\n *\n * @abstract\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.ListItemBase\n * @extends UI5Element\n * @public\n */\nclass ListItemBase 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 styles() {\n\t\treturn styles;\n\t}\n\n\t_onfocusin(event) {\n\t\tif (event.target !== this.getFocusDomRef()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focused = true;\n\t\tthis.fireEvent(\"_focused\", event);\n\t}\n\n\t_onfocusout(_event) {\n\t\tthis.focused = false;\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isTabNext(event)) {\n\t\t\treturn this._handleTabNext(event);\n\t\t}\n\n\t\tif (isTabPrevious(event)) {\n\t\t\treturn this._handleTabPrevious(event);\n\t\t}\n\t}\n\n\t_onkeyup() {}\n\n\t_handleTabNext(event) {\n\t\tconst target = event.target;\n\n\t\tif (this.shouldForwardTabAfter(target)) {\n\t\t\tif (!this.fireEvent(\"_forward-after\", { item: target }, true)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\t_handleTabPrevious(event) {\n\t\tconst target = event.target;\n\n\t\tif (this.shouldForwardTabBefore(target)) {\n\t\t\tconst eventData = event;\n\t\t\teventData.item = target;\n\t\t\tthis.fireEvent(\"_forward-before\", eventData);\n\t\t}\n\t}\n\n\t/*\n\t* Determines if th current list item either has no tabbable content or\n\t* [TAB] is performed onto the last tabbale content item.\n\t*/\n\tshouldForwardTabAfter(target) {\n\t\tconst aContent = getTabbableElements(this.getDomRef());\n\n\t\tif (target.getFocusDomRef) {\n\t\t\ttarget = target.getFocusDomRef();\n\t\t}\n\n\t\treturn !aContent.length || (aContent[aContent.length - 1] === target);\n\t}\n\n\t/*\n\t* Determines if the current list item is target of [SHIFT+TAB].\n\t*/\n\tshouldForwardTabBefore(target) {\n\t\treturn this.getDomRef() === target;\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tmain: {\n\t\t\t\t\"ui5-li-root\": true,\n\t\t\t\t\"ui5-li--focusable\": !this.disabled,\n\t\t\t},\n\t\t};\n\t}\n\n\tget ariaDisabled() {\n\t\treturn this.disabled ? \"true\" : undefined;\n\t}\n\n\tget tabIndex() {\n\t\tif (this.disabled) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this.selected) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._tabIndex;\n\t}\n}\n\nexport default ListItemBase;\n","class RadioButtonGroup {\n\tstatic hasGroup(groupName) {\n\t\treturn this.groups.has(groupName);\n\t}\n\n\tstatic getGroup(groupName) {\n\t\treturn this.groups.get(groupName);\n\t}\n\n\tstatic getCheckedRadioFromGroup(groupName) {\n\t\treturn this.checkedRadios.get(groupName);\n\t}\n\n\tstatic removeGroup(groupName) {\n\t\tthis.checkedRadios.delete(groupName);\n\t\treturn this.groups.delete(groupName);\n\t}\n\n\tstatic addToGroup(radioBtn, groupName) {\n\t\tif (this.hasGroup(groupName)) {\n\t\t\tthis.enforceSingleSelection(radioBtn, groupName);\n\t\t\tthis.getGroup(groupName).push(radioBtn);\n\t\t} else {\n\t\t\tthis.createGroup(radioBtn, groupName);\n\t\t}\n\n\t\tthis.updateTabOrder(groupName);\n\t}\n\n\tstatic removeFromGroup(radioBtn, groupName) {\n\t\tif (!this.hasGroup(groupName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = this.getGroup(groupName);\n\t\tconst checkedRadio = this.getCheckedRadioFromGroup(groupName);\n\n\t\t// Remove the radio button from the given group\n\t\tgroup.forEach((_radioBtn, idx, arr) => {\n\t\t\tif (radioBtn._id === _radioBtn._id) {\n\t\t\t\treturn arr.splice(idx, 1);\n\t\t\t}\n\t\t});\n\n\t\tif (checkedRadio === radioBtn) {\n\t\t\tthis.checkedRadios.set(groupName, null);\n\t\t}\n\n\t\t// Remove the group if it is empty\n\t\tif (!group.length) {\n\t\t\tthis.removeGroup(groupName);\n\t\t}\n\n\t\tthis.updateTabOrder(groupName);\n\t}\n\n\tstatic createGroup(radioBtn, groupName) {\n\t\tif (radioBtn.checked) {\n\t\t\tthis.checkedRadios.set(groupName, radioBtn);\n\t\t}\n\n\t\tthis.groups.set(groupName, [radioBtn]);\n\t}\n\n\tstatic selectNextItem(item, groupName) {\n\t\tconst group = this.getGroup(groupName),\n\t\t\tgroupLength = group.length,\n\t\t\tcurrentItemPosition = group.indexOf(item);\n\n\t\tif (groupLength <= 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextItemToSelect = this._nextSelectable(currentItemPosition, group);\n\n\t\tthis.updateSelectionInGroup(nextItemToSelect, groupName);\n\t}\n\n\tstatic updateTabOrder(groupName) {\n\t\tif (!this.hasGroup(groupName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = this.getGroup(groupName);\n\t\tconst hasCheckedRadio = group.some(radioBtn => radioBtn.checked);\n\n\t\tgroup.filter(radioBtn => !radioBtn.disabled).forEach((radioBtn, idx) => {\n\t\t\tif (hasCheckedRadio) {\n\t\t\t\tradioBtn._tabIndex = radioBtn.checked ? \"0\" : \"-1\";\n\t\t\t} else {\n\t\t\t\tradioBtn._tabIndex = idx === 0 ? \"0\" : \"-1\";\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic selectPreviousItem(item, groupName) {\n\t\tconst group = this.getGroup(groupName),\n\t\t\tgroupLength = group.length,\n\t\t\tcurrentItemPosition = group.indexOf(item);\n\n\t\tif (groupLength <= 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst previousItemToSelect = this._previousSelectable(currentItemPosition, group);\n\n\t\tthis.updateSelectionInGroup(previousItemToSelect, groupName);\n\t}\n\n\tstatic selectItem(item, groupName) {\n\t\tthis.updateSelectionInGroup(item, groupName);\n\t\tthis.updateTabOrder(groupName);\n\t}\n\n\tstatic updateSelectionInGroup(radioBtnToSelect, groupName) {\n\t\tconst checkedRadio = this.getCheckedRadioFromGroup(groupName);\n\n\t\tthis._deselectRadio(checkedRadio);\n\t\tthis._selectRadio(radioBtnToSelect);\n\t\tthis.checkedRadios.set(groupName, radioBtnToSelect);\n\t}\n\n\tstatic _deselectRadio(radioBtn) {\n\t\tif (radioBtn) {\n\t\t\tradioBtn.checked = false;\n\t\t}\n\t}\n\n\tstatic _selectRadio(radioBtn) {\n\t\tif (radioBtn) {\n\t\t\tradioBtn.focus();\n\t\t\tradioBtn.checked = true;\n\t\t\tradioBtn._checked = true;\n\t\t\tradioBtn.fireEvent(\"change\");\n\t\t}\n\t}\n\n\tstatic _nextSelectable(pos, group) {\n\t\tconst groupLength = group.length;\n\t\tlet nextRadioToSelect = null;\n\n\t\tif (pos === groupLength - 1) {\n\t\t\tif (group[0].disabled || group[0].readonly) {\n\t\t\t\treturn this._nextSelectable(1, group);\n\t\t\t}\n\t\t\tnextRadioToSelect = group[0];\n\t\t} else if (group[pos + 1].disabled || group[pos + 1].readonly) {\n\t\t\treturn this._nextSelectable(pos + 1, group);\n\t\t} else {\n\t\t\tnextRadioToSelect = group[pos + 1];\n\t\t}\n\n\t\treturn nextRadioToSelect;\n\t}\n\n\tstatic _previousSelectable(pos, group) {\n\t\tconst groupLength = group.length;\n\t\tlet previousRadioToSelect = null;\n\t\tif (pos === 0) {\n\t\t\tif (group[groupLength - 1].disabled || group[groupLength - 1].readonly) {\n\t\t\t\treturn this._previousSelectable(groupLength - 1, group);\n\t\t\t}\n\t\t\tpreviousRadioToSelect = group[groupLength - 1];\n\t\t} else if (group[pos - 1].disabled || group[pos - 1].readonly) {\n\t\t\treturn this._previousSelectable(pos - 1, group);\n\t\t} else {\n\t\t\tpreviousRadioToSelect = group[pos - 1];\n\t\t}\n\n\t\treturn previousRadioToSelect;\n\t}\n\n\tstatic enforceSingleSelection(radioBtn, groupName) {\n\t\tconst checkedRadio = this.getCheckedRadioFromGroup(groupName);\n\n\t\tif (radioBtn.checked) {\n\t\t\tif (!checkedRadio) {\n\t\t\t\tthis.checkedRadios.set(groupName, radioBtn);\n\t\t\t} else if (radioBtn !== checkedRadio) {\n\t\t\t\tthis._deselectRadio(checkedRadio);\n\t\t\t\tthis.checkedRadios.set(groupName, radioBtn);\n\t\t\t}\n\t\t} else if (radioBtn === checkedRadio) {\n\t\t\tthis.checkedRadios.set(groupName, null);\n\t\t}\n\n\t\tthis.updateTabOrder(groupName);\n\t}\n\n\tstatic get groups() {\n\t\tif (!this._groups) {\n\t\t\tthis._groups = new Map();\n\t\t}\n\t\treturn this._groups;\n\t}\n\n\tstatic get checkedRadios() {\n\t\tif (!this._checkedRadios) {\n\t\t\tthis._checkedRadios = new Map();\n\t\t}\n\t\treturn this._checkedRadios;\n\t}\n}\n\nexport default RadioButtonGroup;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-label\", tags, suffix)} id=\"${ifDefined(context._id)}-label\" class=\"ui5-radio-label\" for=\"${ifDefined(context._id)}\" wrapping-type=\"${ifDefined(context.wrappingType)}\">${ifDefined(context.text)}${scopeTag(\"ui5-label\", tags, suffix)}>` : html`${ifDefined(context.text)}`;\nconst block2 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\n\nconst blockSVG1 = (context, tags, suffix) => svg``;\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/RadioButton.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}:host(:not([hidden])){display:inline-block}:host{min-width:var(--_ui5_radio_button_min_width);max-width:100%;text-overflow:ellipsis;overflow:hidden;color:var(--_ui5_radio_button_color);border-radius:var(--_ui5_radio_button_border_radius);transition:var(--_ui5_radio_button_transition)}:host(:not([disabled])) .ui5-radio-root{cursor:pointer}:host([checked]){color:var(--_ui5_radio_button_checked_fill)}:host([checked]) .ui5-radio-svg-inner{fill:var(--_ui5_radio_button_inner_ring_color)}:host([checked]) .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_outer_ring_color)}:host([disabled]) .ui5-radio-root{color:var(--_ui5_radio_button_color);opacity:var(--sapContent_DisabledOpacity)}:host([disabled][checked]) .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_color)}:host(:not([disabled])) .ui5-radio-root:focus:before{content:\\\"\\\";display:var(--_ui5_radio_button_focus_outline);position:absolute;top:var(--_ui5_radio_button_focus_dist);bottom:var(--_ui5_radio_button_focus_dist);left:var(--_ui5_radio_button_focus_dist);right:var(--_ui5_radio_button_focus_dist);pointer-events:none;border:var(--_ui5_radio_button_border_width) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--_ui5_radio_button_border_radius)}:host(:not([disabled])[readonly]) .ui5-radio-root:focus:before{border:var(--_ui5_radio_button_border_width) var(--_ui5_radio_button_border_readonly_focus_style) var(--sapContent_FocusColor)}:host(:not([disabled])) .ui5-radio-root:focus{border-radius:var(--_ui5_radio_button_border_radius);border:var(--_ui5_radio_button_focus_border)}:host(:not([disabled]):hover){background:var(--_ui5_radio_button_hover_background);box-shadow:var(--_ui5_radio_button_hover_shadow)}:host(:not([value-state=Error]):not([value-state=Warning]):not([value-state=Success]):not([value-state=Information])) .ui5-radio-root:hover .ui5-radio-inner--hoverable .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_outer_ring_hover_color)}:host(:not([value-state=Error]):not([value-state=Warning]):not([value-state=Success]):not([value-state=Information])) .ui5-radio-root:hover .ui5-radio-inner--hoverable{filter:drop-shadow(var(--_ui5_radio_button_outer_ring_hover_shadow))}:host(:not([value-state=Error]):not([value-state=Warning]):not([value-state=Success]):not([value-state=Information])[checked]) .ui5-radio-root:hover .ui5-radio-inner--hoverable .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_outer_ring_checked_hover_color)}.ui5-radio-root:hover .ui5-radio-inner--hoverable .ui5-radio-svg-outer,:host([checked]) .ui5-radio-root:hover .ui5-radio-inner--hoverable .ui5-radio-svg-outer{fill:var(--_ui5_radio_button_hover_fill)}:host([active][checked]:not([value-state]):not([disabled]):not([readonly])) .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_outer_ring_checked_hover_color)}:host([active]:not([checked]):not([value-state]):not([disabled]):not([readonly])) .ui5-radio-svg-outer{stroke:var(--_ui5_radio_button_outer_ring_active_color)}:host([text]) .ui5-radio-root:focus:before{inset-inline:var(--_ui5_radio_button_focus_dist) 0}:host([text]) .ui5-radio-inner{padding:var(--_ui5_radio_button_outer_ring_padding_with_label)}:host([checked][readonly]) .ui5-radio-svg-inner{fill:var(--sapContent_NonInteractiveIconColor)}:host([readonly]) .ui5-radio-root .ui5-radio-svg-outer{fill:var(--sapField_ReadOnly_Background);stroke:var(--sapField_ReadOnly_BorderColor);stroke-dasharray:var(--_ui5_radio_button_read_only_border_type);stroke-width:var(--_ui5_radio_button_read_only_border_width)}:host([value-state=Error]) .ui5-radio-svg-outer,:host([value-state=Warning]) .ui5-radio-svg-outer{stroke-width:var(--sapField_InvalidBorderWidth)}:host([value-state=Information]) .ui5-radio-svg-outer{stroke-width:var(--_ui5_radio_button_information_border_width)}:host([value-state=Error][checked]) .ui5-radio-svg-inner{fill:var(--_ui5_radio_button_checked_error_fill)}:host([value-state=Error]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer,:host([value-state=Error]) .ui5-radio-svg-outer{stroke:var(--sapField_InvalidColor);fill:var(--sapField_InvalidBackground)}:host([value-state=Error]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable .ui5-radio-svg-outer{fill:var(--_ui5_radio_button_hover_fill_error)}:host([value-state=Error]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable{filter:drop-shadow(var(--_ui5_radio_button_outer_ring_hover_shadow_error))}:host([value-state=Warning][checked]) .ui5-radio-svg-inner{fill:var(--_ui5_radio_button_checked_warning_fill)}:host([value-state=Warning]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer,:host([value-state=Warning]) .ui5-radio-svg-outer{stroke:var(--sapField_WarningColor);fill:var(--sapField_WarningBackground)}:host([value-state=Warning]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable .ui5-radio-svg-outer{fill:var(--_ui5_radio_button_hover_fill_warning)}:host([value-state=Warning]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable{filter:drop-shadow(var(--_ui5_radio_button_outer_ring_hover_shadow_warning))}:host([value-state=Success][checked]) .ui5-radio-svg-inner{fill:var(--_ui5_radio_button_checked_success_fill)}:host([value-state=Success]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer,:host([value-state=Success]) .ui5-radio-svg-outer{stroke:var(--sapField_SuccessColor);fill:var(--sapField_SuccessBackground)}:host([value-state=Success]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable .ui5-radio-svg-outer{fill:var(--_ui5_radio_button_hover_fill_success)}:host([value-state=Success]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable{filter:drop-shadow(var(--_ui5_radio_button_outer_ring_hover_shadow_success))}:host([value-state=Information][checked]) .ui5-radio-svg-inner{fill:var(--_ui5_radio_button_checked_information_fill)}:host([value-state=Information]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer,:host([value-state=Information]) .ui5-radio-svg-outer{stroke:var(--sapField_InformationColor);fill:var(--sapField_InformationBackground)}:host([value-state=Information]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable .ui5-radio-svg-outer{fill:var(--_ui5_radio_button_hover_fill_information)}:host([value-state=Information]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable{filter:drop-shadow(var(--_ui5_radio_button_outer_ring_hover_shadow_information))}:host([value-state=Error]) .ui5-radio-root,:host([value-state=Information]) .ui5-radio-root,:host([value-state=Warning]) .ui5-radio-root{stroke-dasharray:var(--_ui5_radio_button_warning_error_border_dash)}.ui5-radio-root{height:var(--_ui5_radio_button_height);position:relative;display:inline-flex;flex-wrap:nowrap;outline:none;max-width:100%;width:var(--_ui5_radio_button_inner_width);box-sizing:border-box;border:var(--_ui5_radio_button_border);border-radius:var(--_ui5_radio_button_border_radius);transition:var(--_ui5_radio_button_transition)}.ui5-radio-inner{display:flex;align-items:center;padding:var(--_ui5_radio_button_outer_ring_padding);flex-shrink:0;height:var(--_ui5_radio_button_inner_size);font-size:1rem;pointer-events:none;vertical-align:top}.ui5-radio-inner:focus{outline:none}.ui5-radio-inner input{-webkit-appearance:none;visibility:hidden;width:0;left:0;position:absolute;font-size:inherit;margin:0}[ui5-label].ui5-radio-label{display:flex;align-items:center;padding-inline-end:var(--_ui5_radio_button_label_offset);vertical-align:top;max-width:100%;text-overflow:ellipsis;overflow:hidden;pointer-events:none;color:var(--_ui5_radio_button_label_color)}:host([wrapping-type=Normal][text]) .ui5-radio-root{height:auto}:host([wrapping-type=Normal][text]) [ui5-label].ui5-radio-label{padding:var(--_ui5_radio_button_label_side_padding) 0;word-break:break-all}.ui5-radio-svg{height:var(--_ui5_radio_button_svg_size);width:var(--_ui5_radio_button_svg_size);overflow:visible;pointer-events:none}.ui5-radio-svg-outer{fill:var(--_ui5_radio_button_outer_ring_bg);stroke:currentColor;stroke-width:var(--_ui5_radio_button_outer_ring_width)}.ui5-radio-svg-inner{fill:none;r:var(--_ui5_radio_button_inner_ring_radius)}.ui5-radio-svg-inner,.ui5-radio-svg-outer{flex-shrink:0}:host(.ui5-li-singlesel-radiobtn) .ui5-radio-root .ui5-radio-inner .ui5-radio-svg-outer{fill:var(--sapList_Background)}\"}","import { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport {\n\tisSpace,\n\tisEnter,\n\tisDown,\n\tisLeft,\n\tisUp,\n\tisRight,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Label from \"./Label.js\";\nimport RadioButtonGroup from \"./RadioButtonGroup.js\";\nimport WrappingType from \"./types/WrappingType.js\";\n\n// Template\nimport RadioButtonTemplate from \"./generated/templates/RadioButtonTemplate.lit.js\";\n\n// i18n\nimport {\n\tVALUE_STATE_ERROR,\n\tVALUE_STATE_WARNING,\n\tVALUE_STATE_SUCCESS,\n\tVALUE_STATE_INFORMATION,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport radioButtonCss from \"./generated/themes/RadioButton.css.js\";\n\nlet isGlobalHandlerAttached = false;\nlet activeRadio = null;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-radio-button\",\n\taltTag: \"ui5-radiobutton\",\n\tlanguageAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.RadioButton.prototype */ {\n\n\t\t/**\n\t\t * Defines whether the component is disabled.\n\t\t *
\n\t\t * Note: A disabled component is completely noninteractive.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is read-only.\n\t\t *
\n\t\t * Note: A read-only component is not editable,\n\t\t * but still provides visual feedback upon user interaction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\treadonly: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is checked or not.\n\t\t *
\n\t\t * Note: The property value can be changed with user interaction,\n\t\t * either by clicking/tapping on the component,\n\t\t * or by using the Space or Enter key.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\ttext: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
\n\t\t * Error
\n\t\t * Warning
\n\t\t * Success
\n\t\t * Information
\n\t\t *
\n\t\t *\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tvalueState: {\n\t\t\tdefaultValue: ValueState.None,\n\t\t\ttype: ValueState,\n\t\t},\n\n\t\t/**\n\t\t * Defines the name of the component.\n\t\t * Radio buttons with the same name
will form a radio button group.\n\t\t *\n\t\t *
\n\t\t * Note:\n\t\t * The selection can be changed with ARROW_UP/DOWN
and ARROW_LEFT/RIGHT
keys between radio buttons in same group.\n\t\t *\n\t\t *
\n\t\t * Note:\n\t\t * Only one radio button can be selected per group.\n\t\t *\n\t\t *
\n\t\t * Important: For the name
property to have effect when submitting forms, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t *
\n\t\t * Note: When set, a native input
HTML element\n\t\t * will be created inside the component so that it can be submitted as\n\t\t * part of an HTML form.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the form value of the component.\n\t\t * When a form with a radio button group is submitted, the group's value\n\t\t * will be the value of the currently selected radio button.\n\t\t *
\n\t\t * Important: For the value
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component text wraps when there is not enough space.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
- The text will be truncated with an ellipsis. \n\t\t * Normal
- The text will wrap. The words will not be broken based on hyphenation. \n\t\t *
\n\t\t *\n\t\t * @type {WrappingType}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\twrappingType: {\n\t\t\ttype: WrappingType,\n\t\t\tdefaultValue: WrappingType.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible ARIA name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.6.0\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the IDs of the elements that label the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.1.0\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_tabIndex: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"-1\",\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * Defines the active state (pressed or not) of the component.\n\t\t * @private\n\t\t */\n\t\t active: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.RadioButton.prototype */ {\n\t\t/**\n\t\t * The slot is used to render native input
HTML element within Light DOM to enable form submit,\n\t\t * when name
property is set.\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @private\n\t\t */\n\t\tformSupport: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.RadioButton.prototype */ {\n\n\t\t/**\n\t\t * Fired when the component checked state changes.\n\t\t *\n\t\t * @event\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\tchange: {},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-radio-button
component enables users to select a single option from a set of options.\n * When a ui5-radio-button
is selected by the user, the\n * change
event is fired.\n * When a ui5-radio-button
that is within a group is selected, the one\n * that was previously selected gets automatically deselected. You can group radio buttons by using the name
property.\n *
\n * Note: If ui5-radio-button
is not part of a group, it can be selected once, but can not be deselected back.\n *\n * Keyboard Handling
\n *\n * Once the ui5-radio-button
is on focus, it might be selected by pressing the Space and Enter keys.\n *
\n * The Arrow Down/Arrow Up and Arrow Left/Arrow Right keys can be used to change selection between next/previous radio buttons in one group,\n * while TAB and SHIFT + TAB can be used to enter or leave the radio button group.\n *
\n * Note: On entering radio button group, the focus goes to the currently selected radio button.\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/RadioButton\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.RadioButton\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-radio-button\n * @public\n */\nclass RadioButton extends UI5Element {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._deactivate = () => {\n\t\t\tif (activeRadio) {\n\t\t\t\tactiveRadio.active = false;\n\t\t\t}\n\t\t};\n\n\t\tif (!isGlobalHandlerAttached) {\n\t\t\tdocument.addEventListener(\"mouseup\", this._deactivate);\n\t\t\tisGlobalHandlerAttached = true;\n\t\t}\n\t}\n\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 RadioButtonTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn radioButtonCss;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [Label];\n\t}\n\n\tstatic async onDefine() {\n\t\tRadioButton.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n\n\tonBeforeRendering() {\n\t\tthis.syncGroup();\n\n\t\tthis._enableFormSupport();\n\t}\n\n\tsyncGroup() {\n\t\tconst oldGroup = this._name;\n\t\tconst currentGroup = this.name;\n\t\tconst oldChecked = this._checked;\n\t\tconst currentChecked = this.checked;\n\n\t\tif (currentGroup !== oldGroup) {\n\t\t\tif (oldGroup) {\n\t\t\t\t// remove the control from the previous group\n\t\t\t\tRadioButtonGroup.removeFromGroup(this, oldGroup);\n\t\t\t}\n\n\t\t\tif (currentGroup) {\n\t\t\t\t// add the control to the existing group\n\t\t\t\tRadioButtonGroup.addToGroup(this, currentGroup);\n\t\t\t}\n\t\t} else if (currentGroup) {\n\t\t\tRadioButtonGroup.enforceSingleSelection(this, currentGroup);\n\t\t}\n\n\t\tif (this.name && currentChecked !== oldChecked) {\n\t\t\tRadioButtonGroup.updateTabOrder(this.name);\n\t\t}\n\n\t\tthis._name = this.name;\n\t\tthis._checked = this.checked;\n\t}\n\n\t_enableFormSupport() {\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (FormSupport) {\n\t\t\tFormSupport.syncNativeHiddenInput(this, (element, nativeInput) => {\n\t\t\t\tnativeInput.disabled = element.disabled || !element.checked;\n\t\t\t\tnativeInput.value = element.checked ? element.value : \"\";\n\t\t\t});\n\t\t} else if (this.value) {\n\t\t\tconsole.warn(`In order for the \"value\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\t}\n\n\t_onclick() {\n\t\treturn this.toggle();\n\t}\n\n\t_handleDown(event) {\n\t\tconst currentGroup = this.name;\n\n\t\tif (!currentGroup) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tRadioButtonGroup.selectNextItem(this, currentGroup);\n\t}\n\n\t_handleUp(event) {\n\t\tconst currentGroup = this.name;\n\n\t\tif (!currentGroup) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tRadioButtonGroup.selectPreviousItem(this, currentGroup);\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis.active = true;\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.active = true;\n\t\t\treturn this.toggle();\n\t\t}\n\n\t\tconst isRTL = this.effectiveDir === \"rtl\";\n\n\t\tif (isDown(event) || (!isRTL && isRight(event)) || (isRTL && isLeft(event))) {\n\t\t\tthis._handleDown(event);\n\t\t}\n\n\t\tif (isUp(event) || (!isRTL && isLeft(event)) || (isRTL && isRight(event))) {\n\t\t\tthis._handleUp(event);\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis.toggle();\n\t\t}\n\n\t\tthis.active = false;\n\t}\n\n\t_onmousedown() {\n\t\tthis.active = true;\n\t\tactiveRadio = this; // eslint-disable-line\n\t}\n\n\t_onmouseup() {\n\t\tthis.active = false;\n\t}\n\n\t_onfocusout() {\n\t\tthis.active = false;\n\t}\n\n\ttoggle() {\n\t\tif (!this.canToggle()) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.name) {\n\t\t\tthis.checked = !this.checked;\n\t\t\tthis.fireEvent(\"change\");\n\t\t\treturn this;\n\t\t}\n\n\t\tRadioButtonGroup.selectItem(this, this.name);\n\t\treturn this;\n\t}\n\n\tcanToggle() {\n\t\treturn !(this.disabled || this.readonly || this.checked);\n\t}\n\n\tvalueStateTextMappings() {\n\t\treturn {\n\t\t\t\"Error\": RadioButton.i18nBundle.getText(VALUE_STATE_ERROR),\n\t\t\t\"Warning\": RadioButton.i18nBundle.getText(VALUE_STATE_WARNING),\n\t\t\t\"Success\": RadioButton.i18nBundle.getText(VALUE_STATE_SUCCESS),\n\t\t\t\"Information\": RadioButton.i18nBundle.getText(VALUE_STATE_INFORMATION),\n\t\t};\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tmain: {},\n\t\t\tinner: {\n\t\t\t\t\"ui5-radio-inner--hoverable\": !this.disabled && !this.readonly && isDesktop(),\n\t\t\t},\n\t\t};\n\t}\n\n\tget ariaReadonly() {\n\t\treturn this.readonly ? \"true\" : undefined;\n\t}\n\n\tget ariaDisabled() {\n\t\treturn this.disabled ? \"true\" : undefined;\n\t}\n\n\tget ariaLabelText() {\n\t\treturn [getEffectiveAriaLabelText(this), this.text].filter(Boolean).join(\" \");\n\t}\n\n\tget ariaDescribedBy() {\n\t\treturn this.hasValueState ? `${this._id}-descr` : undefined;\n\t}\n\n\tget hasValueState() {\n\t\treturn this.valueState !== ValueState.None;\n\t}\n\n\tget valueStateText() {\n\t\treturn this.valueStateTextMappings()[this.valueState];\n\t}\n\n\tget tabIndex() {\n\t\tconst tabindex = this.getAttribute(\"tabindex\");\n\n\t\tif (this.disabled) {\n\t\t\treturn \"-1\";\n\t\t}\n\n\t\tif (this.name) {\n\t\t\treturn this._tabIndex;\n\t\t}\n\n\t\treturn tabindex || \"0\";\n\t}\n\n\tget strokeWidth() {\n\t\treturn this.valueState === \"None\" ? \"1\" : \"2\";\n\t}\n}\n\nRadioButton.define();\n\nexport default RadioButton;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"accept\";\nconst pathData = \"M432 153q8 8 8 18v2q0 9-9 18L220 407q-8 8-18 8-12 0-21-9l-93-97q-8-7-8-18 0-12 9-21 7-7 18-7 12 0 21 9l75 76 191-197q7-7 18-7 13 0 20 9z\";\nconst ltr = true;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"accept\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"accept\";\nconst pathData = \"M456 94q5 5 5 11 0 4-2 8L237 439q-4 8-8.5 8.5t-5.5.5q-7 0-12-5L60 276q-5-5-5-10l.5-3.5L61 254l25-25q6-6 12-6t11 6l96 96q5 5 12 5l4.5-.5 8.5-8.5L405 72q4-7 8.5-7.5t5.5-.5q6 0 11 4z\";\nconst ltr = true;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"accept\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/accept.js\";\nimport {pathData as pathDataV4} from \"./v4/accept.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"accept\";\nexport { pathData, ltr, accData };","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} aria-hidden=\"true\" name=\"accept\" class=\"ui5-checkbox-icon\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block2 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-label\", tags, suffix)} id=\"${ifDefined(context._id)}-label\" class=\"ui5-checkbox-label\" wrapping-type=\"${ifDefined(context.wrappingType)}\">${ifDefined(context.text)}${scopeTag(\"ui5-label\", tags, suffix)}>` : html`${ifDefined(context.text)}`;\nconst block3 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/CheckBox.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}:host{-webkit-tap-highlight-color:rgba(0,0,0,0)}:host(:not([hidden])){display:inline-block}:host{overflow:hidden;max-width:100%;outline:none;border-radius:var(--_ui5_checkbox_border_radius);transition:var(--_ui5_checkbox_transition);cursor:pointer}:host([disabled]){cursor:default}:host([disabled]) .ui5-checkbox-root{opacity:var(--_ui5_checkbox_disabled_opacity)}:host([disabled]) .ui5-checkbox-inner{border-color:var(--_ui5_checkbox_inner_disabled_border_color)}:host([disabled]) .ui5-checkbox-label{color:var(--_ui5_checkbox_disabled_label_color)}:host([readonly]:not([value-state=Warning]):not([value-state=Error])) .ui5-checkbox-inner{background:var(--sapField_ReadOnly_Background);border:var(--_ui5_checkbox_inner_readonly_border);color:var(--sapContent_NonInteractiveIconColor)}:host([wrapping-type=Normal][text]) .ui5-checkbox-root{min-height:auto;box-sizing:border-box;align-items:flex-start;padding-top:var(--_ui5_checkbox_root_side_padding);padding-bottom:var(--_ui5_checkbox_root_side_padding)}:host([wrapping-type=Normal][text]) .ui5-checkbox-root .ui5-checkbox-inner,:host([wrapping-type=Normal][text]) .ui5-checkbox-root .ui5-checkbox-label{margin-top:var(--_ui5_checkbox_wrapped_content_margin_top)}:host([wrapping-type=Normal][text]) .ui5-checkbox-root .ui5-checkbox-label{word-break:break-all;align-self:center}:host([wrapping-type=Normal]) .ui5-checkbox-root:focus:before{bottom:var(--_ui5_checkbox_wrapped_focus_left_top_bottom_position)}:host([value-state=Error]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host([value-state=Error]) .ui5-checkbox-inner{background:var(--sapField_InvalidBackground);border:var(--_ui5_checkbox_inner_error_border);color:var(--sapField_InvalidColor)}:host([value-state=Error]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{box-shadow:var(--_ui5_checkbox_inner_error_box_shadow);background:var(--_ui5_checkbox_inner_error_background_hover)}:host([value-state=Warning]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host([value-state=Warning]) .ui5-checkbox-inner{background:var(--sapField_WarningBackground);border:var(--_ui5_checkbox_inner_warning_border);color:var(--_ui5_checkbox_inner_warning_color)}:host([value-state=Warning]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{box-shadow:var(--_ui5_checkbox_inner_warning_box_shadow);background:var(--_ui5_checkbox_inner_warning_background_hover)}:host([value-state=Information]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host([value-state=Information]) .ui5-checkbox-inner{background:var(--sapField_InformationBackground);border:var(--_ui5_checkbox_inner_information_border);color:var(--_ui5_checkbox_inner_information_color)}:host([value-state=Information]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{box-shadow:var(--_ui5_checkbox_inner_information_box_shadow);background:var(--_ui5_checkbox_inner_information_background_hover)}:host([value-state=Success]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host([value-state=Success]) .ui5-checkbox-inner{background:var(--sapField_SuccessBackground);border:var(--_ui5_checkbox_inner_success_border);color:var(--sapField_SuccessColor)}:host([value-state=Success]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{box-shadow:var(--_ui5_checkbox_inner_success_box_shadow);background:var(--_ui5_checkbox_inner_success_background_hover)}:host(:not([value-state])) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host([value-state=None]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{box-shadow:var(--_ui5_checkbox_inner_default_box_shadow)}:host([value-state=Warning]) .ui5-checkbox-icon,:host([value-state=Warning][indeterminate]) .ui5-checkbox-inner:after{color:var(--_ui5_checkbox_checkmark_warning_color)}:host([text]) .ui5-checkbox-root{padding-inline-end:var(--_ui5_checkbox_right_focus_distance)}:host([text]) .ui5-checkbox-root:focus:before{inset-inline-end:0}.ui5-checkbox-root{position:relative;display:inline-flex;align-items:center;width:100%;min-height:var(--_ui5_checkbox_width_height);min-width:var(--_ui5_checkbox_width_height);padding:0 var(--_ui5_checkbox_wrapper_padding);outline:none;transition:var(--_ui5_checkbox_transition);border:var(--_ui5_checkbox_default_focus_border);border-radius:var(--_ui5_checkbox_border_radius);box-sizing:border-box}.ui5-checkbox-root:focus:before{display:var(--_ui5_checkbox_focus_outline_display);content:\\\"\\\";position:absolute;inset-inline:var(--_ui5_checkbox_focus_position);inset-block:var(--_ui5_checkbox_focus_position);border:var(--_ui5_checkbox_focus_outline);border-radius:var(--_ui5_checkbox_focus_border_radius)}:host .ui5-checkbox-root:focus{border:var(--_ui5_checkbox_focus_border);border-radius:.5rem}:host(:hover:not([disabled])){background:var(--_ui5_checkbox_outer_hover_background);box-shadow:var(--_ui5_checkbox_box_shadow)}.ui5-checkbox--hoverable .ui5-checkbox-label:hover{color:var(--_ui5_checkbox_label_color)}:host(:not([active]):not([checked]):not([value-state])) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host(:not([active]):not([checked])[value-state=None]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{background:var(--_ui5_checkbox_hover_background);border-color:var(--_ui5_checkbox_inner_hover_border_color)}:host(:not([active])[checked]:not([value-state])) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover,:host(:not([active])[checked][value-state=None]) .ui5-checkbox--hoverable .ui5-checkbox-inner:hover{background:var(--_ui5_checkbox_hover_background);border-color:var(--_ui5_checkbox_inner_hover_checked_border_color)}:host([checked]:not([value-state])) .ui5-checkbox-inner,:host([checked][value-state=None]) .ui5-checkbox-inner{border-color:var(--_ui5_checkbox_inner_selected_border_color)}:host([active]:not([checked]):not([value-state]):not([disabled])) .ui5-checkbox-inner,:host([active]:not([checked])[value-state=None]:not([disabled])) .ui5-checkbox-inner{border-color:var(--_ui5_checkbox_inner_active_border_color);background-color:var(--_ui5_checkbox_active_background)}:host([active][checked]:not([value-state]):not([disabled])) .ui5-checkbox-inner,:host([active][checked][value-state=None]:not([disabled])) .ui5-checkbox-inner{border-color:var(--_ui5_checkbox_inner_selected_border_color)}.ui5-checkbox-inner{min-width:var(--_ui5_checkbox_inner_width_height);max-width:var(--_ui5_checkbox_inner_width_height);height:var(--_ui5_checkbox_inner_width_height);max-height:var(--_ui5_checkbox_inner_width_height);border:var(--_ui5_checkbox_inner_border);border-radius:var(--_ui5_checkbox_inner_border_radius);background:var(--_ui5_checkbox_inner_background);color:var(--_ui5_checkbox_checkmark_color);box-sizing:border-box;position:relative;cursor:inherit}:host([indeterminate][checked]) .ui5-checkbox-inner:after{content:\\\"\\\";background-color:currentColor;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--_ui5_checkbox_partially_icon_size);height:var(--_ui5_checkbox_partially_icon_size)}.ui5-checkbox-inner input{-webkit-appearance:none;visibility:hidden;width:0;left:0;position:absolute;font-size:inherit}.ui5-checkbox-root .ui5-checkbox-label{margin-inline-start:var(--_ui5_checkbox_label_offset);cursor:inherit;text-overflow:ellipsis;overflow:hidden;pointer-events:none;user-select:none;-webkit-user-select:none;color:var(--_ui5_checkbox_label_color)}.ui5-checkbox-icon{width:var(--_ui5_checkbox_icon_size);height:var(--_ui5_checkbox_icon_size);color:currentColor;cursor:inherit;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}\"}","import { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport { isSpace, isEnter } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport \"@ui5/webcomponents-icons/dist/accept.js\";\nimport Icon from \"./Icon.js\";\nimport Label from \"./Label.js\";\nimport WrappingType from \"./types/WrappingType.js\";\nimport {\n\tVALUE_STATE_ERROR,\n\tVALUE_STATE_WARNING,\n\tVALUE_STATE_SUCCESS,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Template\nimport CheckBoxTemplate from \"./generated/templates/CheckBoxTemplate.lit.js\";\n\n// Styles\nimport checkboxCss from \"./generated/themes/CheckBox.css.js\";\n\nlet isGlobalHandlerAttached = false;\nlet activeCb = null;\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-checkbox\",\n\tlanguageAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.CheckBox.prototype */ {\n\n\t\t/**\n\t\t * Receives id(or many ids) of the elements that label the component\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.1.0\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible ARIA name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.1.0\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is disabled.\n\t\t *
\n\t\t * Note: A disabled component is completely noninteractive.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is read-only.\n\t\t *
\n\t\t * Note: A red-only component is not editable,\n\t\t * but still provides visual feedback upon user interaction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\treadonly: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is required.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.3.0\n\t\t */\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t* Defines whether the component is displayed as partially checked.\n\t\t*
\n\t\t* Note: The indeterminate state can be set only programatically and can’t be achieved by user\n\t\t* interaction and the resulting visual state depends on the values of the indeterminate
\n\t\t* and checked
properties:\n\t\t* \n\t\t* - If the component is checked and indeterminate, it will be displayed as partially checked\n\t\t*
- If the component is checked and it is not indeterminate, it will be displayed as checked\n\t\t*
- If the component is not checked, it will be displayed as not checked regardless value of the indeterminate attribute\n\t\t*
\n\t\t*\n\t\t* @type {boolean}\n\t\t* @defaultvalue false\n\t\t* @public\n\t\t* @since 1.0.0-rc.15\n\t\t*/\n\t\tindeterminate: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the component is checked.\n\t\t *
\n\t\t * Note: The property can be changed with user interaction,\n\t\t * either by cliking/tapping on the component, or by\n\t\t * pressing the Enter or Space key.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\ttext: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state of the component.\n\t\t *\n\t\t *
\n\t\t * Note:\n\t\t *\n\t\t * \n\t\t * Warning
\n\t\t * Error
\n\t\t * None
(default) \n\t\t * Success
\n\t\t * Information
\n\t\t *
\n\t\t *\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tvalueState: {\n\t\t\ttype: ValueState,\n\t\t\tdefaultValue: ValueState.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component text wraps when there is not enough space.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
- The text will be truncated with an ellipsis. \n\t\t * Normal
- The text will wrap. The words will not be broken based on hyphenation. \n\t\t *
\n\t\t *\n\t\t * @type {WrappingType}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\t wrappingType: {\n\t\t\ttype: WrappingType,\n\t\t\tdefaultValue: WrappingType.None,\n\t\t},\n\n\t\t/**\n\t\t * Determines the name with which the component will be submitted in an HTML form.\n\t\t *\n\t\t *
\n\t\t * Important: For the name
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t *
\n\t\t * Note: When set, a native input
HTML element\n\t\t * will be created inside the component so that it can be submitted as\n\t\t * part of an HTML form. Do not use this property unless you need to submit a form.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the active state (pressed or not) of the component.\n\t\t * @private\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.CheckBox.prototype */ {\n\n\t\t/**\n\t\t * Fired when the component checked state changes.\n\t\t *\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tchange: {},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.CheckBox.prototype */ {\n\t\t/**\n\t\t * The slot is used to render native input
HTML element within Light DOM to enable form submit,\n\t\t * when name
property is set.\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @private\n\t\t */\n\t\tformSupport: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * Allows the user to set a binary value, such as true/false or yes/no for an item.\n *
\n * The ui5-checkbox
component consists of a box and a label that describes its purpose.\n * If it's checked, an indicator is displayed inside the box.\n * To check/uncheck the ui5-checkbox
, the user has to click or tap the square\n * box or its label.\n *
\n * The ui5-checkbox
component only has 2 states - checked and unchecked.\n * Clicking or tapping toggles the ui5-checkbox
between checked and unchecked state.\n *\n * Usage
\n *\n * You can define the checkbox text with via the text
property. If the text exceeds the available width, it is truncated by default.\n * In case you prefer text to wrap, set the wrappingType
property to \"Normal\".\n * The touchable area for toggling the ui5-checkbox
ends where the text ends.\n *
\n * You can disable the ui5-checkbox
by setting the disabled
property to\n * true
,\n * or use the ui5-checkbox
in read-only mode by setting the readonly
\n * property to true
.\n *\n *
\n * Keyboard Handling
\n *\n * The user can use the following keyboard shortcuts to toggle the checked state of the ui5-checkbox
.\n * \n * - [SPACE, ENTER] - Toggles between different states: checked, not checked.
\n *
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/CheckBox\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.CheckBox\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-checkbox\n * @public\n */\nclass CheckBox 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 CheckBoxTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn checkboxCss;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._deactivate = () => {\n\t\t\tif (activeCb) {\n\t\t\t\tactiveCb.active = false;\n\t\t\t}\n\t\t};\n\n\t\tif (!isGlobalHandlerAttached) {\n\t\t\tdocument.addEventListener(\"mouseup\", this._deactivate);\n\t\t\tisGlobalHandlerAttached = true;\n\t\t}\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._enableFormSupport();\n\t}\n\n\t_enableFormSupport() {\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (FormSupport) {\n\t\t\tFormSupport.syncNativeHiddenInput(this, (element, nativeInput) => {\n\t\t\t\tnativeInput.disabled = element.disabled || !element.checked;\n\t\t\t\tnativeInput.value = element.checked ? \"on\" : \"\";\n\t\t\t});\n\t\t} else if (this.name) {\n\t\t\tconsole.warn(`In order for the \"name\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\t}\n\n\t_onclick() {\n\t\tthis.toggle();\n\t}\n\n\t_onmousedown() {\n\t\tif (this.readonly || this.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.active = true;\n\t\tactiveCb = this; // eslint-disable-line\n\t}\n\n\t_onmouseup() {\n\t\tthis.active = false;\n\t}\n\n\t_onfocusout() {\n\t\tthis.active = false;\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active = true;\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.toggle();\n\t\t\tthis.active = true;\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis.toggle();\n\t\t}\n\n\t\tthis.active = false;\n\t}\n\n\ttoggle() {\n\t\tif (this.canToggle()) {\n\t\t\tif (this.indeterminate) {\n\t\t\t\tthis.indeterminate = false;\n\t\t\t\tthis.checked = true;\n\t\t\t} else {\n\t\t\t\tthis.checked = !this.checked;\n\t\t\t}\n\n\t\t\tthis.fireEvent(\"change\");\n\t\t\t// Angular two way data binding\n\t\t\tthis.fireEvent(\"value-changed\");\n\t\t}\n\t\treturn this;\n\t}\n\n\tcanToggle() {\n\t\treturn !(this.disabled || this.readonly);\n\t}\n\n\tvalueStateTextMappings() {\n\t\treturn {\n\t\t\t\"Error\": CheckBox.i18nBundle.getText(VALUE_STATE_ERROR),\n\t\t\t\"Warning\": CheckBox.i18nBundle.getText(VALUE_STATE_WARNING),\n\t\t\t\"Success\": CheckBox.i18nBundle.getText(VALUE_STATE_SUCCESS),\n\t\t};\n\t}\n\n\tget ariaLabelText() {\n\t\treturn getEffectiveAriaLabelText(this);\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tmain: {\n\t\t\t\t\"ui5-checkbox--hoverable\": !this.disabled && !this.readonly && isDesktop(),\n\t\t\t},\n\t\t};\n\t}\n\n\tget ariaReadonly() {\n\t\treturn this.readonly ? \"true\" : undefined;\n\t}\n\n\tget ariaDisabled() {\n\t\treturn this.disabled ? \"true\" : undefined;\n\t}\n\n\tget ariaChecked() {\n\t\treturn this.indeterminate && this.checked ? \"mixed\" : this.checked;\n\t}\n\n\tget ariaLabelledBy() {\n\t\tif (!this.ariaLabelText) {\n\t\t\treturn this.text ? `${this._id}-label` : undefined;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget ariaDescribedBy() {\n\t\treturn this.hasValueState ? `${this._id}-descr` : undefined;\n\t}\n\n\tget hasValueState() {\n\t\treturn this.valueState !== ValueState.None;\n\t}\n\n\tget valueStateText() {\n\t\treturn this.valueStateTextMappings()[this.valueState];\n\t}\n\n\tget tabIndex() {\n\t\tconst tabindex = this.getAttribute(\"tabindex\");\n\t\treturn this.disabled ? undefined : tabindex || \"0\";\n\t}\n\n\tget isCompletelyChecked() {\n\t\treturn this.checked && !this.indeterminate;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tLabel,\n\t\t\tIcon,\n\t\t];\n\t}\n\n\tstatic async onDefine() {\n\t\tCheckBox.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n}\n\nCheckBox.define();\n\nexport default CheckBox;\n","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/ListItem.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}:host([actionable]:not([disabled])){cursor:pointer}:host([selected][actionable]:not([active]):hover){background:var(--sapList_Hover_SelectionBackground)}:host([active][actionable]),:host([selected][active][actionable]){background:var(--sapList_Active_Background)}:host([actionable]:not([active]):not([selected]):hover){background:var(--sapList_Hover_Background)}:host([active][actionable]) .ui5-li-root.ui5-li--focusable .ui5-li-content:focus,:host([active][actionable]) .ui5-li-root.ui5-li--focusable:focus{outline-color:var(--sapContent_ContrastFocusColor)}:host([active][actionable]) .ui5-li-root .ui5-li-icon{color:var(--sapList_Active_TextColor)}:host([active][actionable]) .ui5-li-additional-text,:host([active][actionable]) .ui5-li-desc,:host([active][actionable]) .ui5-li-title{color:var(--sapList_Active_TextColor)}:host([additional-text-state=Warning]) .ui5-li-additional-text{color:var(--sapCriticalTextColor)}:host([additional-text-state=Success]) .ui5-li-additional-text{color:var(--sapPositiveTextColor)}:host([additional-text-state=Error]) .ui5-li-additional-text{color:var(--sapNegativeTextColor)}:host([additional-text-state=Information]) .ui5-li-additional-text{color:var(--sapInformativeTextColor)}:host([has-title][description]){height:5rem}:host([has-title][image]){height:5rem}:host([image]) .ui5-li-content{height:3rem}:host([description]) .ui5-li-root{padding:1rem}:host([description]) .ui5-li-content{height:3rem}:host([has-title][description]) .ui5-li-title{padding-bottom:.375rem}.ui5-li-text-wrapper{display:flex;flex-direction:column;flex:auto;min-width:1px;line-height:normal}:host([description]) .ui5-li-text-wrapper{height:100%;justify-content:space-between;padding:.125rem 0}.ui5-li-description-info-wrapper{display:flex;justify-content:space-between}.ui5-li-title{color:var(--sapTextColor);font-size:var(--_ui5_list_item_title_size)}.ui5-li-additional-text,.ui5-li-desc,:host(:not([wrapping-type=Normal])) .ui5-li-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host([wrapping-type=Normal]){height:auto}:host([wrapping-type=Normal]) .ui5-li-content{margin:var(--_ui5_list_item_content_vertical_offset) 0}.ui5-li-desc{color:var(--sapContent_LabelColor);font-size:var(--sapFontSize)}.ui5-li-additional-text{margin:0 .25rem;color:var(--sapNeutralTextColor);font-size:.875rem;min-width:3.75rem;text-align:end;max-width:40%}:host([description]) .ui5-li-additional-text{align-self:flex-end}.ui5-li-img{width:var(--_ui5_list_item_img_size);min-width:var(--_ui5_list_item_img_size);height:var(--_ui5_list_item_img_size);min-height:var(--_ui5_list_item_img_size);margin-top:var(--_ui5_list_item_img_top_margin);margin-bottom:var(--_ui5_list_item_img_bottom_margin);margin-inline-end:var(--_ui5_list_item_img_hn_margin);border-radius:.25rem}.ui5-li-img-inner{object-fit:contain}.ui5-li-icon{min-width:var(--_ui5_list_item_icon_size);min-height:var(--_ui5_list_item_icon_size);color:var(--sapContent_NonInteractiveIconColor);padding-inline-end:var(--_ui5_list_item_icon_padding-inline-end)}.ui5-li-content{display:flex;align-items:center;flex:auto;overflow:hidden}.ui5-li-deletebtn,.ui5-li-detailbtn{display:flex;align-items:center;margin-left:var(--_ui5_list_buttons_left_space)}.ui5-li-multisel-cb,.ui5-li-singlesel-radiobtn{flex-shrink:0}:host([description]) .ui5-li-singlesel-radiobtn{align-self:flex-start;margin-top:var(--_ui5_list_item_selection_btn_margin_top)}:host([description]) .ui5-li-multisel-cb{align-self:flex-start;margin-top:var(--_ui5_list_item_selection_btn_margin_top)}:host([_mode=SingleSelectBegin]) .ui5-li-root{padding-inline:0 1rem}:host([_mode=MultiSelect]) .ui5-li-root{padding-inline:0 1rem}:host([_mode=SingleSelectEnd]) .ui5-li-root{padding-inline:1rem 0}:host [ui5-checkbox].ui5-li-singlesel-radiobtn{margin-right:var(--_ui5_list_item_cb_margin_right)}\"}","import { isSpace, isEnter, isDelete } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport \"@ui5/webcomponents-icons/dist/decline.js\";\nimport \"@ui5/webcomponents-icons/dist/edit.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport ListItemType from \"./types/ListItemType.js\";\nimport ListMode from \"./types/ListMode.js\";\nimport ListItemBase from \"./ListItemBase.js\";\nimport RadioButton from \"./RadioButton.js\";\nimport CheckBox from \"./CheckBox.js\";\nimport Button from \"./Button.js\";\nimport {\n\tDELETE,\n\tARIA_LABEL_LIST_ITEM_CHECKBOX,\n\tARIA_LABEL_LIST_ITEM_RADIO_BUTTON,\n\tLIST_ITEM_SELECTED,\n\tLIST_ITEM_NOT_SELECTED,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport styles from \"./generated/themes/ListItem.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\tlanguageAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.ListItem.prototype */ {\n\n\t\t/**\n\t\t * Defines the visual indication and behavior of the list items.\n\t\t * Available options are Active
(by default), Inactive
and Detail
.\n\t\t *
\n\t\t * Note: When set to Active
, the item will provide visual response upon press and hover,\n\t\t * while with type Inactive
and Detail
- will not.\n\t\t *\n\t\t * @type {ListItemType}\n\t\t * @defaultvalue \"Active\"\n\t\t * @public\n\t\t*/\n\t\ttype: {\n\t\t\ttype: ListItemType,\n\t\t\tdefaultValue: ListItemType.Active,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the list item is active, e.g pressed down with the mouse or the keyboard keys.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @private\n\t\t*/\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the tooltip of the component.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @private\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the list item is actionable, e.g has hover and pressed effects.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @private\n\t\t*/\n\t\tactionable: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Used to define the role of the list item.\n\t\t *\n\t\t * @private\n\t\t * @type {string}\n\t\t * @defaultvalue \"listitem\"\n\t\t * @since 1.0.0-rc.9\n\t\t *\n\t\t */\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"listitem\",\n\t\t},\n\n\t\t/**\n\t\t * Used to define the role of the list item.\n\t\t *\n\t\t * @private\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.3.0\n\t\t *\n\t\t */\n\t\taccessibleRole: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_mode: {\n\t\t\ttype: ListMode,\n\t\t\tdefaultValue: ListMode.None,\n\t\t},\n\n\t\t_ariaHasPopup: {\n\t\t\ttype: String,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.ListItem.prototype */ {\n\t\t/**\n\t\t * Fired when the user clicks on the detail button when type is Detail
.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.ListItem#detail-click\n\t\t * @public\n\t\t */\n\t\t\"detail-click\": {},\n\t\t_press: {},\n\t\t_focused: {},\n\t\t\"_selection-requested\": {},\n\t},\n};\n\n/**\n * @class\n * A class to serve as a base\n * for the StandardListItem
and CustomListItem
classes.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.ListItem\n * @extends ListItemBase\n * @public\n */\nclass ListItem extends ListItemBase {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn [ListItemBase.styles, styles];\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tButton,\n\t\t\tRadioButton,\n\t\t\tCheckBox,\n\t\t];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.deactivateByKey = event => {\n\t\t\tif (isEnter(event)) {\n\t\t\t\tthis.deactivate();\n\t\t\t}\n\t\t};\n\n\t\tthis.deactivate = () => {\n\t\t\tif (this.active) {\n\t\t\t\tthis.active = false;\n\t\t\t}\n\t\t};\n\n\t\tconst handleTouchStartEvent = event => {\n\t\t\tthis._onmousedown(event);\n\t\t};\n\n\t\tthis._ontouchstart = {\n\t\t\thandleEvent: handleTouchStartEvent,\n\t\t\tpassive: true,\n\t\t};\n\t}\n\n\tonBeforeRendering(...params) {\n\t\tthis.actionable = (this.type === ListItemType.Active) && (this._mode !== ListMode.Delete);\n\t}\n\n\tonEnterDOM() {\n\t\tdocument.addEventListener(\"mouseup\", this.deactivate);\n\t\tdocument.addEventListener(\"touchend\", this.deactivate);\n\t\tdocument.addEventListener(\"keyup\", this.deactivateByKey);\n\t}\n\n\tonExitDOM() {\n\t\tdocument.removeEventListener(\"mouseup\", this.deactivate);\n\t\tdocument.removeEventListener(\"keyup\", this.deactivateByKey);\n\t\tdocument.removeEventListener(\"touchend\", this.deactivate);\n\t}\n\n\t_onkeydown(event) {\n\t\tsuper._onkeydown(event);\n\n\t\tconst itemActive = this.type === ListItemType.Active;\n\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif ((isSpace(event) || isEnter(event)) && itemActive) {\n\t\t\tthis.activate();\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.fireItemPress(event);\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event) || isEnter(event)) {\n\t\t\tthis.deactivate();\n\t\t}\n\n\t\tif (isSpace(event)) {\n\t\t\tthis.fireItemPress(event);\n\t\t}\n\n\t\tif (this.modeDelete && isDelete(event)) {\n\t\t\tthis.onDelete();\n\t\t}\n\t}\n\n\t_onmousedown(event) {\n\t\tif (event.isMarked === \"button\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.activate();\n\t}\n\n\t_onmouseup(event) {\n\t\tif (event.isMarked === \"button\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.deactivate();\n\t}\n\n\t_ontouchend(event) {\n\t\tthis._onmouseup(event);\n\t}\n\n\t_onfocusout() {\n\t\tsuper._onfocusout();\n\t\tthis.deactivate();\n\t}\n\n\t_onclick(event) {\n\t\tif (event.isMarked === \"button\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.fireItemPress(event);\n\t}\n\n\t/*\n\t * Called when selection components in Single (ui5-radio-button)\n\t * and Multi (ui5-checkbox) selection modes are used.\n\t */\n\tonMultiSelectionComponentPress(event) {\n\t\tif (this.isInactive) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fireEvent(\"_selection-requested\", { item: this, selected: event.target.checked, selectionComponentPressed: true });\n\t}\n\n\tonSingleSelectionComponentPress(event) {\n\t\tif (this.isInactive) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fireEvent(\"_selection-requested\", { item: this, selected: !event.target.selected, selectionComponentPressed: true });\n\t}\n\n\tactivate() {\n\t\tif (this.type === ListItemType.Active) {\n\t\t\tthis.active = true;\n\t\t}\n\t}\n\n\tonDelete(event) {\n\t\tthis.fireEvent(\"_selection-requested\", { item: this, selectionComponentPressed: false });\n\t}\n\n\tonDetailClick(event) {\n\t\tthis.fireEvent(\"detail-click\", { item: this, selected: this.selected });\n\t}\n\n\tfireItemPress(event) {\n\t\tif (this.isInactive) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fireEvent(\"_press\", { item: this, selected: this.selected, key: event.key });\n\t}\n\n\tget isInactive() {\n\t\treturn this.type === ListItemType.Inactive || this.type === ListItemType.Detail;\n\t}\n\n\tget placeSelectionElementBefore() {\n\t\treturn this._mode === ListMode.MultiSelect\n\t\t\t|| this._mode === ListMode.SingleSelectBegin;\n\t}\n\n\tget placeSelectionElementAfter() {\n\t\treturn !this.placeSelectionElementBefore\n\t\t\t&& (this._mode === ListMode.SingleSelectEnd || this._mode === ListMode.Delete);\n\t}\n\n\tget modeSingleSelect() {\n\t\treturn [\n\t\t\tListMode.SingleSelectBegin,\n\t\t\tListMode.SingleSelectEnd,\n\t\t\tListMode.SingleSelect,\n\t\t].includes(this._mode);\n\t}\n\n\tget modeMultiSelect() {\n\t\treturn this._mode === ListMode.MultiSelect;\n\t}\n\n\tget modeDelete() {\n\t\treturn this._mode === ListMode.Delete;\n\t}\n\n\t/**\n\t * Used in UploadCollectionItem\n\t */\n\tget renderDeleteButton() {\n\t\treturn this.modeDelete;\n\t}\n\n\tget disableDeleteButton() {\n\t\treturn false;\n\t}\n\t/**\n\t * End\n\t */\n\n\tget typeDetail() {\n\t\treturn this.type === ListItemType.Detail;\n\t}\n\n\tget typeActive() {\n\t\treturn this.type === ListItemType.Active;\n\t}\n\n\tget ariaSelected() {\n\t\tif (this.modeMultiSelect || this.modeSingleSelect) {\n\t\t\treturn this.selected;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget ariaSelectedText() {\n\t\tlet ariaSelectedText;\n\n\t\t// Selected state needs to be supported separately since now the role mapping is list -> listitem[]\n\t\t// to avoid the issue of nesting interactive elements, ex. (option -> radio/checkbox);\n\t\t// The text is added to aria-describedby because as part of the aria-labelledby\n\t\t// the whole content of the item is readout when the aria-labelledby value is changed.\n\t\tif (this.ariaSelected !== undefined) {\n\t\t\tariaSelectedText = this.ariaSelected ? ListItem.i18nBundle.getText(LIST_ITEM_SELECTED) : ListItem.i18nBundle.getText(LIST_ITEM_NOT_SELECTED);\n\t\t}\n\n\t\treturn ariaSelectedText;\n\t}\n\n\tget deleteText() {\n\t\treturn ListItem.i18nBundle.getText(DELETE);\n\t}\n\n\tget _accessibleNameRef() {\n\t\tif (this.accessibleName) {\n\t\t\t// accessibleName is set - return labels excluding content\n\t\t\treturn `${this._id}-invisibleText`;\n\t\t}\n\n\t\t// accessibleName is not set - return _accInfo.listItemAriaLabel including content\n\t\treturn `${this._id}-content ${this._id}-invisibleText`;\n\t}\n\n\tget _accInfo() {\n\t\treturn {\n\t\t\trole: this.accessibleRole || this.role,\n\t\t\tariaExpanded: undefined,\n\t\t\tariaLevel: undefined,\n\t\t\tariaLabel: ListItem.i18nBundle.getText(ARIA_LABEL_LIST_ITEM_CHECKBOX),\n\t\t\tariaLabelRadioButton: ListItem.i18nBundle.getText(ARIA_LABEL_LIST_ITEM_RADIO_BUTTON),\n\t\t\tariaSelectedText: this.ariaSelectedText,\n\t\t\tariaHaspopup: this._ariaHasPopup || undefined,\n\t\t};\n\t}\n\n\tstatic async onDefine() {\n\t\tListItem.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n}\n\nexport default ListItem;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.hasImage ? block1(context, tags, suffix) : block2(context, tags, suffix) }
`;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => html`${ context.icon ? block3(context, tags, suffix) : block4(context, tags, suffix) }`;\nconst block3 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-avatar-icon\" name=\"${ifDefined(context.icon)}\" accessible-name=\"${ifDefined(context.accessibleNameText)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block4 = (context, tags, suffix) => html`${ context.initials ? block5(context, tags, suffix) : undefined }`;\nconst block5 = (context, tags, suffix) => html`${ifDefined(context.validInitials)}`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Avatar.css\",content:\":host(:not([hidden])){display:inline-block;box-sizing:border-box}:host(:not([hidden]).ui5_hovered){opacity:.7}:host([focused]){outline:var(--_ui5_avatar_outline);outline-offset:var(--_ui5_avatar_focus_offset)}:host([interactive]){cursor:pointer}:host{height:3rem;width:3rem;border-radius:50%;border:var(--ui5-avatar-initials-border);outline:none;color:var(--ui5-avatar-initials-color)}.ui5-avatar-root{display:flex;align-items:center;justify-content:center;outline:none;height:100%;width:100%}:host([_size=XS]),:host([size=XS]){height:2rem;width:2rem;min-height:2rem;min-width:2rem;font-size:var(--_ui5_avatar_fontsize_XS)}:host([_size=S]),:host([size=S]){min-height:3rem;min-width:3rem;font-size:var(--_ui5_avatar_fontsize_S)}:host([_size=M]),:host([size=M]){min-height:4rem;min-width:4rem;font-size:var(--_ui5_avatar_fontsize_M)}:host([_size=L]),:host([size=L]){min-height:5rem;min-width:5rem;font-size:var(--_ui5_avatar_fontsize_L)}:host([_size=XL]),:host([size=XL]){min-height:7rem;min-width:7rem;font-size:var(--_ui5_avatar_fontsize_XL)}:host .ui5-avatar-icon{height:var(--_ui5_avatar_fontsize_S);width:var(--_ui5_avatar_fontsize_S);color:inherit}:host([_size=XS]) .ui5-avatar-icon,:host([size=XS]) .ui5-avatar-icon{height:var(--_ui5_avatar_icon_XS);width:var(--_ui5_avatar_icon_XS)}:host([_size=S]) .ui5-avatar-icon,:host([size=S]) .ui5-avatar-icon{height:var(--_ui5_avatar_icon_S);width:var(--_ui5_avatar_icon_S)}:host([_size=M]) .ui5-avatar-icon,:host([size=M]) .ui5-avatar-icon{height:var(--_ui5_avatar_icon_M);width:var(--_ui5_avatar_icon_M)}:host([_size=L]) .ui5-avatar-icon,:host([size=L]) .ui5-avatar-icon{height:var(--_ui5_avatar_icon_L);width:var(--_ui5_avatar_icon_L)}:host([_size=XL]) .ui5-avatar-icon,:host([size=XL]) .ui5-avatar-icon{height:var(--_ui5_avatar_icon_XL);width:var(--_ui5_avatar_icon_XL)}::slotted(*){border-radius:50%;width:100%;height:100%;pointer-events:none}:host([shape=Square]),:host([shape=Square]) ::slotted(*){border-radius:var(--ui5-avatar-border-radius)}:host(:not([_has-image])),:host(:not([color-scheme])),:host([_color-scheme=Accent6]),:host([color-scheme=Accent6]){background-color:var(--ui5-avatar-accent6);color:var(--ui5-avatar-accent6-color);border-color:var(--ui5-avatar-accent6-border-color)}:host([_color-scheme=Accent1]),:host([color-scheme=Accent1]){background-color:var(--ui5-avatar-accent1);color:var(--ui5-avatar-accent1-color);border-color:var(--ui5-avatar-accent1-border-color)}:host([_color-scheme=Accent2]),:host([color-scheme=Accent2]){background-color:var(--ui5-avatar-accent2);color:var(--ui5-avatar-accent2-color);border-color:var(--ui5-avatar-accent2-border-color)}:host([_color-scheme=Accent3]),:host([color-scheme=Accent3]){background-color:var(--ui5-avatar-accent3);color:var(--ui5-avatar-accent3-color);border-color:var(--ui5-avatar-accent3-border-color)}:host([_color-scheme=Accent4]),:host([color-scheme=Accent4]){background-color:var(--ui5-avatar-accent4);color:var(--ui5-avatar-accent4-color);border-color:var(--ui5-avatar-accent4-border-color)}:host([_color-scheme=Accent5]),:host([color-scheme=Accent5]){background-color:var(--ui5-avatar-accent5);color:var(--ui5-avatar-accent5-color);border-color:var(--ui5-avatar-accent5-border-color)}:host([_color-scheme=Accent7]),:host([color-scheme=Accent7]){background-color:var(--ui5-avatar-accent7);color:var(--ui5-avatar-accent7-color);border-color:var(--ui5-avatar-accent7-border-color)}:host([_color-scheme=Accent8]),:host([color-scheme=Accent8]){background-color:var(--ui5-avatar-accent8);color:var(--ui5-avatar-accent8-color);border-color:var(--ui5-avatar-accent8-border-color)}:host([_color-scheme=Accent9]),:host([color-scheme=Accent9]){background-color:var(--ui5-avatar-accent9);color:var(--ui5-avatar-accent9-color);border-color:var(--ui5-avatar-accent9-border-color)}:host([_color-scheme=Accent10]),:host([color-scheme=Accent10]){background-color:var(--ui5-avatar-accent10);color:var(--ui5-avatar-accent10-color);border-color:var(--ui5-avatar-accent10-border-color)}:host([_color-scheme=Placeholder]),:host([color-scheme=Placeholder]){background-color:var(--ui5-avatar-placeholder);color:var(--ui5-avatar-placeholder-color);border-color:var(--ui5-avatar-placeholder-border-color)}:host([_has-image]){background-color:transparent;vertical-align:middle}.ui5-avatar-initials{color:inherit}\"}","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * Different types of AvatarSize.\n * @lends sap.ui.webcomponents.main.types.AvatarSize.prototype\n * @public\n */\nconst AvatarSizes = {\n\t/**\n\t * component size - 2rem\n\t * font size - 1rem\n\t * @public\n\t * @type {XS}\n\t */\n\tXS: \"XS\",\n\n\t/**\n\t * component size - 3rem\n\t * font size - 1.5rem\n\t * @public\n\t * @type {S}\n\t */\n\tS: \"S\",\n\n\t/**\n\t * component size - 4rem\n\t * font size - 2rem\n\t * @public\n\t * @type {M}\n\t */\n\tM: \"M\",\n\n\t/**\n\t * component size - 5rem\n\t * font size - 2.5rem\n\t * @public\n\t * @type {L}\n\t */\n\tL: \"L\",\n\n\t/**\n\t * component size - 7rem\n\t * font size - 3rem\n\t * @public\n\t * @type {XL}\n\t */\n\tXL: \"XL\",\n};\n\n/**\n * @class\n * Different types of AvatarSize.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.AvatarSize\n * @public\n * @enum {string}\n */\nclass AvatarSize extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!AvatarSizes[value];\n\t}\n}\n\nAvatarSize.generateTypeAccessors(AvatarSizes);\n\nexport default AvatarSize;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * Different types of AvatarShape.\n * @lends sap.ui.webcomponents.main.types.AvatarShape.prototype\n * @public\n */\nconst AvatarShapes = {\n\t/**\n\t * Circular shape.\n\t * @public\n\t * @type {Circle}\n\t */\n\tCircle: \"Circle\",\n\n\t/**\n\t * Square shape.\n\t * @public\n\t * @type {Square}\n\t */\n\tSquare: \"Square\",\n};\n\n/**\n * @class\n * Different types of AvatarShape.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.AvatarShape\n * @public\n * @enum {string}\n */\nclass AvatarShape extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!AvatarShapes[value];\n\t}\n}\n\nAvatarShape.generateTypeAccessors(AvatarShapes);\n\nexport default AvatarShape;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * Different types of AvatarColorSchemes.\n * @lends sap.ui.webcomponents.main.types.AvatarColorScheme.prototype\n * @public\n */\nconst AvatarColorSchemes = {\n\t/**\n\t *\n\t * @public\n\t * @type {Accent1}\n\t */\n\tAccent1: \"Accent1\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent2}\n\t */\n\tAccent2: \"Accent2\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent3}\n\t */\n\tAccent3: \"Accent3\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent4}\n\t */\n\tAccent4: \"Accent4\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent5}\n\t */\n\tAccent5: \"Accent5\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent6}\n\t */\n\tAccent6: \"Accent6\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent7}\n\t */\n\tAccent7: \"Accent7\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent8}\n\t */\n\tAccent8: \"Accent8\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent9}\n\t */\n\tAccent9: \"Accent9\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Accent10}\n\t */\n\tAccent10: \"Accent10\",\n\n\t/**\n\t *\n\t * @public\n\t * @type {Placeholder}\n\t */\n\tPlaceholder: \"Placeholder\",\n};\n\n/**\n * @class\n * Different types of AvatarColorScheme.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.AvatarColorScheme\n * @public\n * @enum {string}\n */\nclass AvatarColorScheme extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!AvatarColorSchemes[value];\n\t}\n}\n\nAvatarColorScheme.generateTypeAccessors(AvatarColorSchemes);\n\nexport default AvatarColorScheme;\n","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\n\nimport { isEnter, isSpace } from \"@ui5/webcomponents-base/dist/Keys.js\";\n// Template\nimport AvatarTemplate from \"./generated/templates/AvatarTemplate.lit.js\";\n\nimport { AVATAR_TOOLTIP } from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport AvatarCss from \"./generated/themes/Avatar.css.js\";\n\nimport Icon from \"./Icon.js\";\nimport AvatarSize from \"./types/AvatarSize.js\";\nimport AvatarShape from \"./types/AvatarShape.js\";\nimport AvatarColorScheme from \"./types/AvatarColorScheme.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-avatar\",\n\tlanguageAware: true,\n\tmanagedSlots: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.Avatar.prototype */ {\n\n\t\t/**\n\t\t * Defines if the avatar is interactive (focusable and pressable).\n\t\t * @type {boolean}\n\t\t * @defaultValue false\n\t\t * @public\n\t\t */\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the elements is on focus\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the name of the UI5 Icon, that will be displayed.\n\t\t *
\n\t\t * Note: If image
slot is provided, the property will be ignored.\n\t\t *
\n\t\t * Note: You should import the desired icon first, then use its name as \"icon\".\n\t\t *
\n\t\t * import \"@ui5/webcomponents-icons/dist/{icon_name}.js\"\n\t\t *
\n\t\t * <ui5-avatar icon=\"employee\">
\n\t\t *\n\t\t * See all the available icons in the Icon Explorer.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the displayed initials.\n\t\t *
\n\t\t * Up to two Latin letters can be displayed as initials.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tinitials: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the shape of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * Circle
\n\t\t * Square
\n\t\t *
\n\t\t * @type {AvatarShape}\n\t\t * @defaultvalue \"Circle\"\n\t\t * @public\n\t\t */\n\t\tshape: {\n\t\t\ttype: AvatarShape,\n\t\t\tdefaultValue: AvatarShape.Circle,\n\t\t},\n\n\t\t/**\n\t\t * Defines predefined size of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * XS
\n\t\t * S
\n\t\t * M
\n\t\t * L
\n\t\t * XL
\n\t\t *
\n\t\t * @type {AvatarSize}\n\t\t * @defaultvalue \"S\"\n\t\t * @public\n\t\t */\n\t\tsize: {\n\t\t\ttype: AvatarSize,\n\t\t\tdefaultValue: AvatarSize.S,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_size: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: AvatarSize.S,\n\t\t},\n\n\t\t/**\n\t\t * Defines the background color of the desired image.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * Accent1
\n\t\t * Accent2
\n\t\t * Accent3
\n\t\t * Accent4
\n\t\t * Accent5
\n\t\t * Accent6
\n\t\t * Accent7
\n\t\t * Accent8
\n\t\t * Accent9
\n\t\t * Accent10
\n\t\t * Placeholder
\n\t\t *
\n\t\t * @type {AvatarColorScheme}\n\t\t * @defaultvalue \"Accent6\"\n\t\t * @public\n\t\t */\n\t\tcolorScheme: {\n\t\t\ttype: AvatarColorScheme,\n\t\t\tdefaultValue: AvatarColorScheme.Accent6,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_colorScheme: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: AvatarColorScheme.Accent6,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text alternative of the component.\n\t\t * If not provided a default text alternative will be set, if present.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.7\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the aria-haspopup value of the component when interactive
property is true
.\n\t\t *
\n\t\t * @type String\n\t\t * @since 1.0.0-rc.15\n\t\t * @protected\n\t\t */\n\t\tariaHaspopup: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_tabIndex: {\n\t\t\ttype: String,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t_hasImage: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.Avatar.prototype */ {\n\t\t/**\n\t\t * Receives the desired <img>
tag\n\t\t *\n\t\t * Note: If you experience flickering of the provided image, you can hide the component until it is being defined with the following CSS:\n\t\t *
\n\t\t * \n\t\t *\t\tui5-avatar:not(:defined) {
\n\t\t *\t\t\t visibility: hidden;
\n\t\t *\t\t}
\n\t\t *
\n\t\t * @type {HTMLElement}\n\t\t * @slot image\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\t\"default\": {\n\t\t\tpropertyName: \"image\",\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Avatar.prototype */ {\n\t\t/**\n\t\t* Fired on mouseup, space and enter if avatar is interactive\n\t\t*\n\t\t* @event\n\t\t* @private\n\t\t* @since 1.0.0-rc.11\n\t\t*/\n\t\tclick: {},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * An image-like component that has different display options for representing images and icons\n * in different shapes and sizes, depending on the use case.\n *\n * The shape can be circular or square. There are several predefined sizes, as well as an option to\n * set a custom size.\n *\n *
\n * Keyboard Handling
\n *\n * \n * - [SPACE, ENTER, RETURN] - Fires the
click
event if the interactive
property is set to true. \n * - [SHIFT] - If [SPACE] is pressed, pressing [SHIFT] releases the component without triggering the click event.
\n *
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Avatar.js\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Avatar\n * @extends UI5Element\n * @tagname ui5-avatar\n * @since 1.0.0-rc.6\n * @implements sap.ui.webcomponents.main.IAvatar\n * @public\n */\nclass Avatar 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 styles() {\n\t\treturn AvatarCss;\n\t}\n\n\tstatic get template() {\n\t\treturn AvatarTemplate;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [Icon];\n\t}\n\n\tstatic async onDefine() {\n\t\tAvatar.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n\n\tget tabindex() {\n\t\treturn this._tabIndex || (this.interactive ? \"0\" : \"-1\");\n\t}\n\n\t/**\n\t * Returns the effective avatar size.\n\t * @readonly\n\t * @type { String }\n\t * @defaultValue \"S\"\n\t * @private\n\t */\n\tget _effectiveSize() {\n\t\t// we read the attribute, because the \"size\" property will always have a default value\n\t\treturn this.getAttribute(\"size\") || this._size;\n\t}\n\n\t/**\n\t * Returns the effective background color.\n\t * @readonly\n\t * @type { String }\n\t * @defaultValue \"Accent6\"\n\t * @private\n\t */\n\tget _effectiveBackgroundColor() {\n\t\t// we read the attribute, because the \"background-color\" property will always have a default value\n\t\treturn this.getAttribute(\"_color-scheme\") || this._colorScheme;\n\t}\n\n\tget _role() {\n\t\treturn this.interactive ? \"button\" : undefined;\n\t}\n\n\tget _ariaHasPopup() {\n\t\treturn this._getAriaHasPopup();\n\t}\n\n\tget validInitials() {\n\t\tconst validInitials = /^[a-zA-Z]{1,2}$/;\n\n\t\tif (this.initials && validInitials.test(this.initials)) {\n\t\t\treturn this.initials;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget accessibleNameText() {\n\t\tif (this.accessibleName) {\n\t\t\treturn this.accessibleName;\n\t\t}\n\n\t\treturn Avatar.i18nBundle.getText(AVATAR_TOOLTIP) || undefined;\n\t}\n\n\tget hasImage() {\n\t\tthis._hasImage = !!this.image.length;\n\t\treturn this._hasImage;\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._onclick = this.interactive ? this._onClickHandler.bind(this) : undefined;\n\t}\n\n\t_onClickHandler(event) {\n\t\t// prevent the native event and fire custom event to ensure the noConfict \"ui5-click\" is fired\n\t\tevent.stopPropagation();\n\t\tthis.fireEvent(\"click\");\n\t}\n\n\t_onkeydown(event) {\n\t\tif (!this.interactive) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.fireEvent(\"click\");\n\t\t}\n\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault(); // prevent scrolling\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\tif (this.interactive && !event.shiftKey && isSpace(event)) {\n\t\t\tthis.fireEvent(\"click\");\n\t\t}\n\t}\n\n\t_onfocusout() {\n\t\tthis.focused = false;\n\t}\n\n\t_onfocusin() {\n\t\tif (this.interactive) {\n\t\t\tthis.focused = true;\n\t\t}\n\t}\n\n\t_getAriaHasPopup() {\n\t\tif (!this.interactive || this.ariaHaspopup === \"\") {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.ariaHaspopup;\n\t}\n}\n\nAvatar.define();\n\nexport default Avatar;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.placeSelectionElementBefore ? block1(context, tags, suffix) : undefined }${ context.displayImage ? block5(context, tags, suffix) : undefined }${ context.displayIconBegin ? block6(context, tags, suffix) : undefined }
${ context.description ? block7(context, tags, suffix) : undefined }${ !context.typeActive ? block9(context, tags, suffix) : undefined }
${ !context.description ? block10(context, tags, suffix) : undefined }
${ context.displayIconEnd ? block12(context, tags, suffix) : undefined }${ context.typeDetail ? block13(context, tags, suffix) : undefined }${ context.placeSelectionElementAfter ? block14(context, tags, suffix) : undefined }${ifDefined(context._accInfo.listItemAriaLabel)}${ifDefined(context.accessibleName)}${ifDefined(context._accInfo.ariaSelectedText)} `;\nconst block1 = (context, tags, suffix) => html`${ context.modeSingleSelect ? block2(context, tags, suffix) : undefined }${ context.modeMultiSelect ? block3(context, tags, suffix) : undefined }${ context.renderDeleteButton ? block4(context, tags, suffix) : undefined }`;\nconst block2 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-radio-button\", tags, suffix)} ?disabled=\"${context.isInactive}\" accessible-name=\"${ifDefined(context._accInfo.ariaLabelRadioButton)}\" tabindex=\"-1\" id=\"${ifDefined(context._id)}-singleSelectionElement\" class=\"ui5-li-singlesel-radiobtn\" ?checked=\"${context.selected}\" @click=\"${context.onSingleSelectionComponentPress}\">${scopeTag(\"ui5-radio-button\", tags, suffix)}>` : html``;\nconst block3 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-checkbox\", tags, suffix)} ?disabled=\"${context.isInactive}\" ?indeterminate=${context.indeterminate} tabindex=\"-1\" id=\"${ifDefined(context._id)}-multiSelectionElement\" class=\"ui5-li-multisel-cb\" ?checked=\"${context.selected}\" accessible-name=\"${ifDefined(context._accInfo.ariaLabel)}\" @click=\"${context.onMultiSelectionComponentPress}\">${scopeTag(\"ui5-checkbox\", tags, suffix)}>` : html``;\nconst block4 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-button\", tags, suffix)} tabindex=\"-1\" data-sap-no-tab-ref id=\"${ifDefined(context._id)}-deleteSelectionElement\" design=\"Transparent\" icon=\"decline\" ?disabled=\"${context.disableDeleteButton}\" @click=\"${context.onDelete}\" tooltip=\"${ifDefined(context.deleteText)}\">${scopeTag(\"ui5-button\", tags, suffix)}>
` : html`
`;\nconst block5 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-avatar\", tags, suffix)} shape=\"Square\" class=\"ui5-li-img\">
${scopeTag(\"ui5-avatar\", tags, suffix)}>` : html`
`;\nconst block6 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} part=\"icon\" name=\"${ifDefined(context.icon)}\" class=\"ui5-li-icon\" accessible-role=\"presentation\" aria-hidden=\"true\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block7 = (context, tags, suffix) => html`${ifDefined(context.description)}${ context.additionalText ? block8(context, tags, suffix) : undefined }
`;\nconst block8 = (context, tags, suffix) => html`${ifDefined(context.additionalText)}`;\nconst block9 = (context, tags, suffix) => html`${ifDefined(context.type)}`;\nconst block10 = (context, tags, suffix) => html`${ context.additionalText ? block11(context, tags, suffix) : undefined }`;\nconst block11 = (context, tags, suffix) => html`${ifDefined(context.additionalText)}`;\nconst block12 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} part=\"icon\" name=\"${ifDefined(context.icon)}\" class=\"ui5-li-icon\" accessible-role=\"presentation\" aria-hidden=\"true\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block13 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-button\", tags, suffix)} design=\"Transparent\" icon=\"edit\" @click=\"${context.onDetailClick}\">${scopeTag(\"ui5-button\", tags, suffix)}>
` : html`
`;\nconst block14 = (context, tags, suffix) => html`${ context.modeSingleSelect ? block15(context, tags, suffix) : undefined }${ context.modeMultiSelect ? block16(context, tags, suffix) : undefined }${ context.renderDeleteButton ? block17(context, tags, suffix) : undefined }`;\nconst block15 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-radio-button\", tags, suffix)} ?disabled=\"${context.isInactive}\" accessible-name=\"${ifDefined(context._accInfo.ariaLabelRadioButton)}\" tabindex=\"-1\" id=\"${ifDefined(context._id)}-singleSelectionElement\" class=\"ui5-li-singlesel-radiobtn\" ?checked=\"${context.selected}\" @click=\"${context.onSingleSelectionComponentPress}\">${scopeTag(\"ui5-radio-button\", tags, suffix)}>` : html``;\nconst block16 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-checkbox\", tags, suffix)} ?disabled=\"${context.isInactive}\" ?indeterminate=${context.indeterminate} tabindex=\"-1\" id=\"${ifDefined(context._id)}-multiSelectionElement\" class=\"ui5-li-multisel-cb\" ?checked=\"${context.selected}\" accessible-name=\"${ifDefined(context._accInfo.ariaLabel)}\" @click=\"${context.onMultiSelectionComponentPress}\">${scopeTag(\"ui5-checkbox\", tags, suffix)}>` : html``;\nconst block17 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-button\", tags, suffix)} tabindex=\"-1\" data-sap-no-tab-ref id=\"${ifDefined(context._id)}-deleteSelectionElement\" design=\"Transparent\" icon=\"decline\" ?disabled=\"${context.disableDeleteButton}\" @click=\"${context.onDelete}\" tooltip=\"${ifDefined(context.deleteText)}\">${scopeTag(\"ui5-button\", tags, suffix)}>
` : html`
`;\n\n\nexport default block0;","import ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport ListItem from \"./ListItem.js\";\nimport Icon from \"./Icon.js\";\nimport Avatar from \"./Avatar.js\";\nimport WrappingType from \"./types/WrappingType.js\";\nimport StandardListItemTemplate from \"./generated/templates/StandardListItemTemplate.lit.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-li\",\n\tproperties: /** @lends sap.ui.webcomponents.main.StandardListItem.prototype */ {\n\n\t\t/**\n\t\t * Defines the description displayed right under the item text, if such is present.\n\t\t * @type {string}\n\t\t * @defaultvalue: \"\"\n\t\t * @public\n\t\t * @since 0.8.0\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the icon
source URI.\n\t\t *
\n\t\t * Note:\n\t\t * SAP-icons font provides numerous built-in icons. To find all the available icons, see the\n\t\t * Icon Explorer.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the icon
should be displayed in the beginning of the list item or in the end.\n\t\t *
\n\t\t * Note: If image
is set, the icon
would be displayed after the image
.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\ticonEnd: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the image
source URI.\n\t\t *
\n\t\t * Note: The image
would be displayed in the beginning of the list item.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t */\n\t\timage: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the additionalText
, displayed in the end of the list item.\n\t\t * @type {string}\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\tadditionalText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the state of the additionalText
.\n\t\t *
\n\t\t * Available options are: \"None\"
(by default), \"Success\"
, \"Warning\"
, \"Information\"
and \"Error\"
.\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\tadditionalTextState: {\n\t\t\ttype: ValueState,\n\t\t\tdefaultValue: ValueState.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines the text alternative of the component.\n\t\t * Note: If not provided a default text alternative will be set, if present.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines if the text of the component should wrap, they truncate by default.\n\t\t *\n\t\t *
\n\t\t * Note: this property takes affect only if text node is provided to default slot of the component\n\t\t * @type {WrappingType}\n\t\t * @defaultvalue \"None\"\n\t\t * @private\n\t\t * @since 1.5.0\n\t\t */\n\t\twrappingType: {\n\t\t\ttype: WrappingType,\n\t\t\tdefaultValue: WrappingType.None,\n\t\t},\n\n\t\t/**\n\t\t * Indicates if the list item has text content.\n\t\t * @type {boolean}\n\t\t * @private\n\t\t */\n\t\thasTitle: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tslots: /** @lends sap.ui.webcomponents.main.StandardListItem.prototype */ {\n\t\t/**\n\t\t * Defines the text of the component.\n\t\t *
\n\t\t * Note: Although this slot accepts HTML Elements, it is strongly recommended that you only use text in order to preserve the intended design.\n\t\t *\n\t\t * @type {Node[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\ttype: Node,\n\t\t},\n\t},\n};\n\n/**\n * @class\n * The ui5-li
represents the simplest type of item for a ui5-list
.\n *\n * This is a list item,\n * providing the most common use cases such as text
,\n * image
and icon
.\n *\n * CSS Shadow Parts
\n *\n * CSS Shadow Parts allow developers to style elements inside the Shadow DOM.\n *
\n * The ui5-li
exposes the following CSS Shadow Parts:\n * \n * - title - Used to style the title of the list item
\n * - description - Used to style the description of the list item
\n * - additional-text - Used to style the additionalText of the list item
\n * - icon - Used to style the icon of the list item
\n *
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.StandardListItem\n * @extends ListItem\n * @tagname ui5-li\n * @implements sap.ui.webcomponents.main.IListItem\n * @public\n */\nclass StandardListItem extends ListItem {\n\tstatic get template() {\n\t\treturn StandardListItemTemplate;\n\t}\n\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tonBeforeRendering(...params) {\n\t\tsuper.onBeforeRendering(...params);\n\t\tthis.hasTitle = !!this.textContent;\n\t}\n\n\tget displayImage() {\n\t\treturn !!this.image;\n\t}\n\n\tget displayIconBegin() {\n\t\treturn (this.icon && !this.iconEnd);\n\t}\n\n\tget displayIconEnd() {\n\t\treturn (this.icon && this.iconEnd);\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\t...ListItem.dependencies,\n\t\t\tIcon,\n\t\t\tAvatar,\n\t\t];\n\t}\n}\n\nStandardListItem.define();\n\nexport default StandardListItem;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => suffix ? html`${ context.selectedOptionIcon ? block1(context, tags, suffix) : undefined }
${ifDefined(context._text)}
<${scopeTag(\"ui5-icon\", tags, suffix)} name=\"slim-arrow-down\" input-icon ?pressed=\"${context._iconPressed}\">${scopeTag(\"ui5-icon\", tags, suffix)}>${ context.hasValueState ? block2(context, tags, suffix) : undefined }
` : html`${ context.selectedOptionIcon ? block1(context, tags, suffix) : undefined }
${ifDefined(context._text)}
${ context.hasValueState ? block2(context, tags, suffix) : undefined }
`;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} aria-hidden=\"true\" class=\"ui5-select-option-icon\" name=\"${ifDefined(context.selectedOptionIcon)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block2 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\n\n\nexport default block0;","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.options ? block1(context, tags, suffix) : undefined }${ context.shouldOpenValueStateMessagePopover ? block13(context, tags, suffix) : undefined }`;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-responsive-popover\", tags, suffix)} hide-arrow _disable-initial-focus placement-type=\"Bottom\" class=\"ui5-select-popover ${classMap(context.classes.popover)}\" horizontal-align=\"Left\" @ui5-after-open=\"${ifDefined(context._afterOpen)}\" @ui5-before-open=\"${ifDefined(context._beforeOpen)}\" @ui5-after-close=\"${ifDefined(context._afterClose)}\" @keydown=\"${context._onkeydown}\" style=${styleMap(context.styles.responsivePopover)}>${ context._isPhone ? block2(context, tags, suffix) : undefined }${ !context._isPhone ? block7(context, tags, suffix) : undefined }<${scopeTag(\"ui5-list\", tags, suffix)} mode=\"SingleSelectAuto\" separators=\"None\" @mousedown=\"${context._itemMousedown}\" @ui5-selection-change=\"${ifDefined(context._handleItemPress)}\">${ repeat(context._syncedOptions, (item, index) => item._id || index, (item, index) => block12(item, index, context, tags, suffix)) }${scopeTag(\"ui5-list\", tags, suffix)}>${scopeTag(\"ui5-responsive-popover\", tags, suffix)}>` : html`${ context._isPhone ? block2(context, tags, suffix) : undefined }${ !context._isPhone ? block7(context, tags, suffix) : undefined }${ repeat(context._syncedOptions, (item, index) => item._id || index, (item, index) => block12(item, index, context, tags, suffix)) }`;\nconst block2 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block3 = (context, tags, suffix) => html`${ context.shouldDisplayDefaultValueStateMessage ? block4(context, tags, suffix) : block5(context, tags, suffix) }
`;\nconst block4 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block5 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block6(item, index, context, tags, suffix)) }`;\nconst block6 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\nconst block7 = (context, tags, suffix) => html`${ context.hasValueStateText ? block8(context, tags, suffix) : undefined }`;\nconst block8 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-input-value-state-message-icon\" name=\"${ifDefined(context._valueStateMessageInputIcon)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>${ context.shouldDisplayDefaultValueStateMessage ? block9(context, tags, suffix) : block10(context, tags, suffix) }
` : html`${ context.shouldDisplayDefaultValueStateMessage ? block9(context, tags, suffix) : block10(context, tags, suffix) }
`;\nconst block9 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block10 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block11(item, index, context, tags, suffix)) }`;\nconst block11 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\nconst block12 = (item, index, context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-li\", tags, suffix)} id=\"${ifDefined(item.id)}-li\" icon=\"${ifDefined(item.icon)}\" ?selected=\"${item.selected}\" ?focused=\"${item._focused}\" title=\"${ifDefined(item.title)}\" additional-text=\"${ifDefined(item.additionalText)}\" ?aria-selected=\"${item.selected}\" data-ui5-stable=\"${ifDefined(item.stableDomRef)}\">${ifDefined(item.textContent)}${scopeTag(\"ui5-li\", tags, suffix)}>` : html`${ifDefined(item.textContent)}`;\nconst block13 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-popover\", tags, suffix)} skip-registry-update _disable-initial-focus prevent-focus-restore hide-arrow class=\"ui5-valuestatemessage-popover\" placement-type=\"Bottom\" horizontal-align=\"Left\"><${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-input-value-state-message-icon\" name=\"${ifDefined(context._valueStateMessageInputIcon)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>${ context.shouldDisplayDefaultValueStateMessage ? block14(context, tags, suffix) : block15(context, tags, suffix) }
${scopeTag(\"ui5-popover\", tags, suffix)}>` : html`${ context.shouldDisplayDefaultValueStateMessage ? block14(context, tags, suffix) : block15(context, tags, suffix) }
`;\nconst block14 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block15 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block16(item, index, context, tags, suffix)) }`;\nconst block16 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Select.css\",content:\"[input-icon]{color:var(--_ui5_input_icon_color);cursor:pointer;outline:none;padding:var(--_ui5_input_icon_padding);border-inline-start:var(--_ui5_input_icon_border);min-width:1rem;min-height:1rem;border-radius:var(--_ui5_input_icon_border_radius)}[input-icon][pressed]{background:var(--_ui5_input_icon_pressed_bg);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:active{background-color:var(--sapButton_Active_Background);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:not([pressed]):not(:active):hover{background:var(--_ui5_input_icon_hover_bg);box-shadow:var(--_ui5_input_icon_box_shadow)}[input-icon]:hover{border-inline-start:var(--_ui5_select_hover_icon_left_border);box-shadow:var(--_ui5_input_icon_box_shadow)}.ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}:host(:not([hidden])){display:inline-block}:host{width:var(--_ui5_input_width);min-width:var(--_ui5_input_width);height:var(--_ui5_input_height);color:var(--sapField_TextColor);font-size:var(--sapFontSize);font-family:\\\"72override\\\",var(--sapFontFamily);font-style:normal;border:var(--_ui5-input-border);border-radius:var(--_ui5_input_border_radius);box-sizing:border-box;line-height:normal;letter-spacing:normal;word-spacing:normal;text-align:start;transition:var(--_ui5_input_transition);background:var(--sapField_BackgroundStyle);background-color:var(--_ui5_input_background_color)}:host([focused]){border-color:var(--_ui5_input_focused_border_color);background-color:var(--sapField_Focus_Background)}.ui5-input-focusable-element{position:relative}:host([focused]) .ui5-input-focusable-element:after{content:var(--ui5_input_focus_pseudo_element_content);position:absolute;pointer-events:none;z-index:2;border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--_ui5_input_focus_outline_color);border-radius:var(--_ui5_input_focus_border_radius);top:var(--_ui5_input_focus_offset);bottom:var(--_ui5_input_focus_offset);left:var(--_ui5_input_focus_offset);right:var(--_ui5_input_focus_offset)}.ui5-input-root:before{content:\\\"\\\";position:absolute;width:calc(100% - 2px);left:1px;bottom:-2px;border-bottom-left-radius:8px;border-bottom-right-radius:8px;height:var(--_ui5_input_bottom_border_height);transition:var(--_ui5_input_transition);background-color:var(--_ui5_input_bottom_border_color)}.ui5-input-root{width:100%;height:100%;position:relative;background:transparent;display:inline-block;outline:none;box-sizing:border-box;color:inherit;transition:border-color .2s ease-in-out;border-radius:var(--_ui5_input_border_radius);overflow:hidden}:host([disabled]){opacity:var(--_ui5_input_disabled_opacity);cursor:default;pointer-events:none;background-color:var(--_ui5-input_disabled_background);border-color:var(--_ui5_input_disabled_border_color)}:host([disabled]) .ui5-input-root:before,:host([readonly]) .ui5-input-root:before{content:none}[inner-input]{background:transparent;color:inherit;border:none;font-style:inherit;-webkit-appearance:none;-moz-appearance:textfield;padding:var(--_ui5_input_inner_padding);box-sizing:border-box;min-width:inherit;width:100%;text-overflow:ellipsis;flex:1;outline:none;font-size:inherit;font-family:inherit;line-height:inherit;letter-spacing:inherit;word-spacing:inherit;text-align:inherit}[inner-input][inner-input-with-icon]{padding:var(--_ui5_input_inner_padding_with_icon)}.ui5-input-value-state-icon{height:100%;display:var(--_ui5-input-value-state-icon-display);align-items:center}.ui5-input-value-state-icon>svg{margin-right:8px}[inner-input]::selection{background:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}:host([disabled]) [inner-input]::-webkit-input-placeholder{visibility:hidden}:host([readonly]) [inner-input]::-webkit-input-placeholder{visibility:hidden}:host([disabled]) [inner-input]::-moz-placeholder{visibility:hidden}:host([readonly]) [inner-input]::-moz-placeholder{visibility:hidden}[inner-input]::-webkit-input-placeholder{font-weight:400;font-style:var(--_ui5_input_placeholder_style);color:var(--_ui5_input_placeholder_color);padding-right:.125rem}[inner-input]::-moz-placeholder{font-weight:400;font-style:var(--_ui5_input_placeholder_style);color:var(--_ui5_input_placeholder_color);padding-right:.125rem}:host([value-state=Error]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5-input_error_placeholder_color);font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Error]) [inner-input]::-moz-placeholder{color:var(--_ui5-input_error_placeholder_color);font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Warning]) [inner-input]::-webkit-input-placeholder{font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Warning]) [inner-input]::-moz-placeholder{font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Success]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Success]) [inner-input]::-moz-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Information]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Information]) [inner-input]::-moz-placeholder{color:var(--_ui5_input_placeholder_color)}.ui5-input-content{height:100%;box-sizing:border-box;display:flex;flex-direction:row;justify-content:flex-end;overflow:hidden;outline:none;background:transparent;color:inherit;border-radius:var(--_ui5_input_border_radius)}:host([readonly]){border-color:var(--_ui5_input_readonly_border_color);background:var(--sapField_ReadOnly_BackgroundStyle);background-color:var(--_ui5_input_readonly_background)}:host(:not([value-state]):not([readonly]):hover),:host([value-state=None]:not([readonly]):hover){border:var(--_ui5_input_hover_border);border-color:var(--_ui5_input_focused_border_color);box-shadow:var(--_ui5_input_hover_box_shadow);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background)}:host(:not([value-state]):not([readonly])[focused]:hover),:host([value-state=None]:not([readonly])[focused]:hover){box-shadow:none}:host([focused]) .ui5-input-root:before{content:none}:host(:not([readonly]):not([disabled])[value-state]:not([value-state=None])){border-width:var(--_ui5_input_state_border_width)}:host([value-state=Error]) [inner-input],:host([value-state=Warning]) [inner-input]{font-style:var(--_ui5_input_error_warning_font_style);text-indent:var(--_ui5_input_error_warning_text_indent)}:host([value-state=Error]) [inner-input]{font-weight:var(--_ui5_input_error_font_weight)}:host([value-state=Warning]) [inner-input]{font-weight:var(--_ui5_input_warning_font_weight)}:host([value-state=Error]:not([readonly]):not([disabled])){background:var(--sapField_InvalidBackgroundStyle);background-color:var(--sapField_InvalidBackground);border-color:var(--_ui5_input_value_state_error_border_color)}:host([value-state=Error][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_error_background);border-color:var(--_ui5_input_focused_value_state_error_border_color)}:host([value-state=Error][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_error_focus_outline_color)}:host([value-state=Error]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5-input-value-state-error-border-botom-color)}:host([value-state=Error]:not([readonly]):not([focused]):hover){background-color:var(--_ui5_input_value_state_error_hover_background);box-shadow:var(--_ui5_input_value_state_error_hover_box_shadow)}:host([value-state=Error]:not([readonly]):not([disabled])),:host([value-state=Information]:not([readonly]):not([disabled])),:host([value-state=Warning]:not([readonly]):not([disabled])){border-style:var(--_ui5_input_error_warning_border_style)}:host([value-state=Warning]:not([readonly]):not([disabled])){background:var(--sapField_WarningBackgroundStyle);background-color:var(--sapField_WarningBackground);border-color:var(--_ui5_input_value_state_warning_border_color)}:host([value-state=Warning][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_warning_background);border-color:var(--_ui5_input_focused_value_state_warning_border_color)}:host([value-state=Warning][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_warning_focus_outline_color)}:host([value-state=Warning]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_state_warning_border_botom_color)}:host([value-state=Warning]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_warning_hover_box_shadow)}:host([value-state=Success]:not([readonly]):not([disabled])){background:var(--sapField_SuccessBackgroundStyle);background-color:var(--sapField_SuccessBackground);border-color:var(--_ui5_input_value_state_success_border_color);border-width:var(--_ui5_input_value_state_success_border_width)}:host([value-state=Success][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_success_background);border-color:var(--_ui5_input_focused_value_state_success_border_color)}:host([value-state=Success][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_success_focus_outline_color)}:host([value-state=Success]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_state_success_border_botom_color)}:host([value-state=Success]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_success_hover_box_shadow)}:host([value-state=Information]:not([readonly]):not([disabled])){background:var(--sapField_InformationBackgroundStyle);background-color:var(--sapField_InformationBackground);border-color:var(--_ui5_input_value_state_information_border_color);border-width:var(--_ui5_input_information_border_width)}:host([value-state=Information][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_information_background);border-color:var(--_ui5_input_focused_value_state_information_border_color)}:host([value-state=Information]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_success_information_border_botom_color)}:host([value-state=Information]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_information_hover_box_shadow)}.ui5-input-icon-root{min-width:var(--_ui5_input_icon_min_width);height:100%;display:flex;justify-content:center;align-items:center}::slotted([ui5-icon][slot=icon]){align-self:start;padding:var(--_ui5_input_custom_icon_padding)}:host([value-state=Error]) [input-icon],:host([value-state=Warning]) [input-icon]{padding:var(--_ui5_input_error_warning_icon_padding)}:host([value-state=Information]) [input-icon]{padding:var(--_ui5_input_information_icon_padding)}:host([value-state=Error]) ::slotted([input-icon][ui5-icon]),:host([value-state=Error]) ::slotted([ui5-icon][slot=icon]),:host([value-state=Warning]) ::slotted([ui5-icon][slot=icon]){padding:var(--_ui5_input_error_warning_custom_icon_padding)}:host([value-state=Information]) ::slotted([ui5-icon][slot=icon]){padding:var(--_ui5_input_information_custom_icon_padding)}:host([value-state=Error]) [input-icon]:active,:host([value-state=Error]) [input-icon][pressed]{box-shadow:var(--_ui5_input_error_icon_box_shadow);color:var(--_ui5_input_icon_error_pressed_color)}:host([value-state=Error]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_error_icon_box_shadow)}:host([value-state=Warning]) [input-icon]:active,:host([value-state=Warning]) [input-icon][pressed]{box-shadow:var(--_ui5_input_warning_icon_box_shadow);color:var(--_ui5_input_icon_warning_pressed_color)}:host([value-state=Warning]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_warning_icon_box_shadow)}:host([value-state=Information]) [input-icon]:active,:host([value-state=Information]) [input-icon][pressed]{box-shadow:var(--_ui5_input_information_icon_box_shadow);color:var(--_ui5_input_icon_information_pressed_color)}:host([value-state=Information]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_information_icon_box_shadow)}:host([value-state=Success]) [input-icon]:active,:host([value-state=Success]) [input-icon][pressed]{box-shadow:var(--_ui5_input_success_icon_box_shadow);color:var(--_ui5_input_icon_success_pressed_color)}:host([value-state=Success]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_success_icon_box_shadow)}[inner-input]::-webkit-inner-spin-button,[inner-input]::-webkit-outer-spin-button{-webkit-appearance:inherit;margin:inherit}.ui5-select-root{width:100%;height:100%;display:flex;outline:none;cursor:pointer;overflow:hidden;border-radius:var(--_ui5_input_border_radius)}.ui5-select-label-root{flex-shrink:1;flex-grow:1;align-self:center;min-width:1rem;padding-inline-start:.5rem;cursor:pointer;outline:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--_ui5_select_label_olor);font-family:\\\"72override\\\",var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400}.ui5-select-option-icon{padding-inline-start:.5rem;color:var(--sapField_TextColor);align-self:center}:host(:not([disabled])){cursor:pointer}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/ResponsivePopoverCommon.css\",content:\".input-root-phone{flex:1;position:relative;height:var(--_ui5_input_height);color:var(--sapField_TextColor);font-size:var(--sapFontSize);font-family:\\\"72override\\\",var(--sapFontFamily);background:var(--sapField_BackgroundStyle);background-color:var(--_ui5_input_background_color);border:var(--_ui5-input-border);border-radius:var(--_ui5_input_border_radius);box-sizing:border-box}.input-root-phone [inner-input]{padding:0 .5rem;width:100%;height:100%}.input-root-phone [inner-input]:focus{background-color:var(--sapField_Focus_Background)}.input-root-phone:focus-within:before{content:\\\"\\\";position:absolute;pointer-events:none;z-index:2;border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--_ui5_input_focus_border_radius);top:var(--_ui5_input_focus_offset);bottom:var(--_ui5_input_focus_offset);left:var(--_ui5_input_focus_offset);right:var(--_ui5_input_focus_offset)}.input-root-phone [value-state=Error] [input-icon][data-ui5-compact-size],.input-root-phone [value-state=Success] [input-icon][data-ui5-compact-size],.input-root-phone [value-state=Warning] [input-icon][data-ui5-compact-size]{padding:.1875rem .5rem}[inner-input]{background:transparent;color:inherit;border:none;font-style:normal;-webkit-appearance:none;-moz-appearance:textfield;line-height:normal;padding:var(--_ui5_input_inner_padding);box-sizing:border-box;min-width:3rem;text-overflow:ellipsis;flex:1;outline:none;font-size:inherit;font-family:inherit;border-radius:var(--_ui5_input_border_radius)}[inner-input]::-moz-selection,[inner-input]::selection{background:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}[inner-input]::-webkit-input-placeholder{font-style:italic;color:var(--sapField_PlaceholderTextColor)}[inner-input]::-moz-placeholder{font-style:italic;color:var(--sapField_PlaceholderTextColor)}.input-root-phone[value-state]:not([value-state=None]){border-width:var(--_ui5_input_state_border_width)}.input-root-phone[value-state=Error] [inner-input],.input-root-phone[value-state=Warning] [inner-input]{font-style:var(--_ui5_input_error_warning_font_style)}.input-root-phone[value-state=Error] [inner-input]{font-weight:var(--_ui5_input_error_font_weight)}.input-root-phone[value-state=Error]:not([readonly]){background:var(--sapField_InvalidBackgroundStyle);background-color:var(--sapField_InvalidBackground);border-color:var(--_ui5_input_value_state_error_border_color)}.input-root-phone[value-state=Error]:not([readonly]) [inner-input]:focus{background-color:var(--_ui5_input_focused_value_state_error_background);border-color:var(--_ui5_input_focused_value_state_error_border_color)}.input-root-phone[value-state=Error]:not([readonly]):focus-within:before{border-color:var(--_ui5_input_focused_value_state_error_focus_outline_color)}.input-root-phone[value-state=Error]:not([readonly]):not([disabled]),.input-root-phone[value-state=Information]:not([readonly]):not([disabled]),.input-root-phone[value-state=Warning]:not([readonly]):not([disabled]){border-style:var(--_ui5_input_error_warning_border_style)}.input-root-phone[value-state=Warning]:not([readonly]){background:var(--sapField_WarningBackgroundStyle);background-color:var(--sapField_WarningBackground);border-color:var(--_ui5_input_value_state_warning_border_color)}.input-root-phone[value-state=Warning]:not([readonly]) [inner-input]:focus{background-color:var(--_ui5_input_focused_value_state_warning_background);border-color:var(--_ui5_input_focused_value_state_warning_border_color)}.input-root-phone[value-state=Warning]:not([readonly]):focus-within:before{border-color:var(--_ui5_input_focused_value_state_warning_focus_outline_color)}.input-root-phone[value-state=Success]:not([readonly]){background:var(--sapField_SuccessBackgroundStyle);background-color:var(--sapField_SuccessBackground);border-color:var(--_ui5_input_value_state_success_border_color);border-width:var(--_ui5_input_value_state_success_border_width)}.input-root-phone[value-state=Success]:not([readonly]) [inner-input]:focus{background-color:var(--_ui5_input_focused_value_state_success_background);border-color:var(--_ui5_input_focused_value_state_success_border_color)}.input-root-phone[value-state=Success]:not([readonly]):focus-within:before{border-color:var(--_ui5_input_focused_value_state_success_focus_outline_color)}.input-root-phone[value-state=Information]:not([readonly]){background:var(--sapField_InformationBackgroundStyle);background-color:var(--sapField_InformationBackground);border-color:var(--_ui5_input_value_state_information_border_color);border-width:var(--_ui5_input_information_border_width)}.input-root-phone[value-state=Information]:not([readonly]) [inner-input]:focus{background-color:var(--_ui5_input_focused_value_state_information_background);border-color:var(--_ui5_input_focused_value_state_information_border_color)}.ui5-multi-combobox-toggle-button{margin-left:.5rem}.ui5-responsive-popover-header{width:100%;min-height:2.5rem;display:flex;flex-direction:column}.ui5-responsive-popover-header-text{width:calc(100% - var(--_ui5_button_base_min_width))}.ui5-responsive-popover-header .row{box-sizing:border-box;padding:.25rem 1rem;min-height:2.5rem;display:flex;justify-content:center;align-items:center;font-size:var(--sapFontHeader5Size)}.ui5-responsive-popover-footer{display:flex;justify-content:flex-end;padding:.25rem 0;width:100%}.ui5-responsive-popover-close-btn{position:absolute;right:1rem}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/ValueStateMessage.css\",content:\".ui5-valuestatemessage-popover{box-shadow:var(--_ui5_value_state_message_popover_box_shadow)}.ui5-input-value-state-message-icon{width:var(--_ui5_value_state_message_icon_width);height:var(--_ui5_value_state_message_icon_height);display:var(--_ui5_input_value_state_icon_display);position:absolute;padding-right:.375rem}.ui5-valuestatemessage-root .ui5-input-value-state-message-icon{left:var(--_ui5_input_value_state_icon_offset)}.ui5-input-value-state-message-icon[name=error]{color:var(--sapNegativeElementColor)}.ui5-input-value-state-message-icon[name=alert]{color:var(--sapCriticalElementColor)}.ui5-input-value-state-message-icon[name=success]{color:var(--sapPositiveElementColor)}.ui5-input-value-state-message-icon[name=information]{color:var(--sapInformativeElementColor)}.ui5-valuestatemessage-root{box-sizing:border-box;display:inline-block;color:var(--sapTextColor);font-size:var(--sapFontSmallSize);font-family:\\\"72override\\\",var(--sapFontFamily);height:auto;padding:var(--_ui5_value_state_message_padding);overflow:hidden;text-overflow:ellipsis;min-width:6.25rem;border:var(--_ui5_value_state_message_border)}[ui5-responsive-popover] .ui5-valuestatemessage-header{min-height:2rem;padding:var(--_ui5_value_state_header_padding);border:var(--_ui5_value_state_header_border);border-bottom:var(--_ui5_value_state_header_border_bottom)}.ui5-valuestatemessage--success{background:var(--sapSuccessBackground)}.ui5-valuestatemessage--warning{background:var(--sapWarningBackground)}.ui5-valuestatemessage--error{background:var(--sapErrorBackground)}.ui5-valuestatemessage--information{background:var(--sapInformationBackground)}.ui5-responsive-popover-header:focus,.ui5-responsive-popover-header[focused]{outline-offset:var(--_ui5_value_state_header_offset);outline:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor)}.ui5-valuestatemessage-popover::part(content),.ui5-valuestatemessage-popover::part(header){padding:0}.ui5-valuestatemessage-popover::part(footer),.ui5-valuestatemessage-popover::part(header){min-height:0}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/SelectPopover.css\",content:\".ui5-select-popover::part(content),.ui5-select-popover::part(header){padding:0}.ui5-select-popover [ui5-li]{height:var(--_ui5_list_item_dropdown_base_height)}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport {\n\tisSpace,\n\tisUp,\n\tisDown,\n\tisEnter,\n\tisEscape,\n\tisHome,\n\tisEnd,\n\tisShow,\n\tisTabNext,\n\tisTabPrevious,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport announce from \"@ui5/webcomponents-base/dist/util/InvisibleMessage.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport \"@ui5/webcomponents-icons/dist/slim-arrow-down.js\";\nimport \"@ui5/webcomponents-icons/dist/error.js\";\nimport \"@ui5/webcomponents-icons/dist/alert.js\";\nimport \"@ui5/webcomponents-icons/dist/sys-enter-2.js\";\nimport \"@ui5/webcomponents-icons/dist/information.js\";\nimport { isPhone } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport \"@ui5/webcomponents-icons/dist/decline.js\";\nimport {\n\tVALUE_STATE_SUCCESS,\n\tVALUE_STATE_INFORMATION,\n\tVALUE_STATE_ERROR,\n\tVALUE_STATE_WARNING,\n\tVALUE_STATE_TYPE_SUCCESS,\n\tVALUE_STATE_TYPE_INFORMATION,\n\tVALUE_STATE_TYPE_ERROR,\n\tVALUE_STATE_TYPE_WARNING,\n\tINPUT_SUGGESTIONS_TITLE,\n\tLIST_ITEM_POSITION,\n\tSELECT_ROLE_DESCRIPTION,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport Option from \"./Option.js\";\nimport Label from \"./Label.js\";\nimport ResponsivePopover from \"./ResponsivePopover.js\";\nimport Popover from \"./Popover.js\";\nimport List from \"./List.js\";\nimport StandardListItem from \"./StandardListItem.js\";\nimport Icon from \"./Icon.js\";\nimport Button from \"./Button.js\";\n\n// Templates\nimport SelectTemplate from \"./generated/templates/SelectTemplate.lit.js\";\nimport SelectPopoverTemplate from \"./generated/templates/SelectPopoverTemplate.lit.js\";\n\n// Styles\nimport selectCss from \"./generated/themes/Select.css.js\";\nimport ResponsivePopoverCommonCss from \"./generated/themes/ResponsivePopoverCommon.css.js\";\nimport ValueStateMessageCss from \"./generated/themes/ValueStateMessage.css.js\";\nimport SelectPopoverCss from \"./generated/themes/SelectPopover.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-select\",\n\tlanguageAware: true,\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Select.prototype */ {\n\n\t\t/**\n\t\t * Defines the component options.\n\t\t *\n\t\t *
\n\t\t * Note: Only one selected option is allowed.\n\t\t * If more than one option is defined as selected, the last one would be considered as the selected one.\n\t\t *\n\t\t *
\n\t\t * Note: Use the ui5-option
component to define the desired options.\n\t\t * @type {sap.ui.webcomponents.main.ISelectOption[]}\n\t\t * @slot options\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\tpropertyName: \"options\",\n\t\t\ttype: HTMLElement,\n\t\t\tinvalidateOnChildChange: true,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state message that will be displayed as pop up under the component.\n\t\t *
\n\t\t *\n\t\t * Note: If not specified, a default text (in the respective language) will be displayed.\n\t\t *
\n\t\t * Note: The valueStateMessage
would be displayed,\n\t\t * when the component is in Information
, Warning
or Error
value state.\n\t\t * @type {HTMLElement[]}\n\t\t * @since 1.0.0-rc.9\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\tvalueStateMessage: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * The slot is used to render native input
HTML element within Light DOM to enable form submit,\n\t\t * when name
property is set.\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @private\n\t\t */\n\t\tformSupport: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.Select.prototype */ {\n\n\t\t/**\n\t\t * Defines whether the component is in disabled state.\n\t\t *
\n\t\t * Note: A disabled component is noninteractive.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines the name with which the component will be submitted in an HTML form.\n\t\t * The value of the component will be the value of the currently selected ui5-option
.\n\t\t *\n\t\t *
\n\t\t * Important: For the name
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t *
\n\t\t * Note: When set, a native input
HTML element\n\t\t * will be created inside the ui5-select
so that it can be submitted as\n\t\t * part of an HTML form. Do not use this property unless you need to submit a form.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
\n\t\t * Error
\n\t\t * Warning
\n\t\t * Success
\n\t\t * Information
\n\t\t *
\n\t\t *\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tvalueState: {\n\t\t\ttype: ValueState,\n\t\t\tdefaultValue: ValueState.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is required.\n\t\t *\n\t\t * @since 1.0.0-rc.9\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible ARIA name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @since 1.0.0-rc.9\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Receives id(or many ids) of the elements that label the select.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t_text: {\n\t\t\ttype: String,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t_iconPressed: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\topened: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_listWidth: {\n\t\t\ttype: Integer,\n\t\t\tdefaultValue: 0,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Select.prototype */ {\n\t\t/**\n\t\t * Fired when the selected option changes.\n\t\t *\n\t\t * @event\n\t\t * @param {HTMLElement} selectedOption the selected option.\n\t\t * @public\n\t\t */\n\t\tchange: {\n\t\t\tdetail: {\n\t\t\t\tselectedOption: {},\n\t\t\t},\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n * The ui5-select
component is used to create a drop-down list.\n * The items inside the ui5-select
define the available options by using the ui5-option
component.\n *\n * Keyboard Handling
\n * The ui5-select
provides advanced keyboard handling.\n *
\n * \n * - [F4, ALT+UP, ALT+DOWN, SPACE, ENTER] - Opens/closes the drop-down.
\n * - [UP, DOWN] - If the drop-down is closed - changes selection to the next or the previous option. If the drop-down is opened - moves focus to the next or the previous option.
\n * - [SPACE, ENTER] - If the drop-down is opened - selects the focused option.
\n * - [ESC] - Closes the drop-down without changing the selection.
\n * - [HOME] - Navigates to first option
\n * - [END] - Navigates to the last option
\n *
\n *
\n *\n * ES6 Module Import
\n * import \"@ui5/webcomponents/dist/Select\";
\n *
\n * import \"@ui5/webcomponents/dist/Option\";
(comes with ui5-select
)\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Select\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-select\n * @appenddocs Option\n * @public\n * @since 0.8.0\n */\nclass Select 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 SelectTemplate;\n\t}\n\n\tstatic get staticAreaTemplate() {\n\t\treturn SelectPopoverTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn selectCss;\n\t}\n\n\tstatic get staticAreaStyles() {\n\t\treturn [ResponsivePopoverCommonCss, ValueStateMessageCss, SelectPopoverCss];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._syncedOptions = [];\n\t\tthis._selectedIndex = -1;\n\t\tthis._selectedIndexBeforeOpen = -1;\n\t\tthis._escapePressed = false;\n\t\tthis._lastSelectedOption = null;\n\t\tthis._typedChars = \"\";\n\t\tthis._typingTimeoutID = -1;\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._syncSelection();\n\t\tthis._enableFormSupport();\n\t}\n\n\tonAfterRendering() {\n\t\tthis.toggleValueStatePopover(this.shouldOpenValueStateMessagePopover);\n\n\t\tif (this._isPickerOpen) {\n\t\t\tif (!this._listWidth) {\n\t\t\t\tthis._listWidth = this.responsivePopover.offsetWidth;\n\t\t\t}\n\t\t}\n\n\t\tthis._attachRealDomRefs();\n\t}\n\n\t_onfocusin() {\n\t\tthis.focused = true;\n\t}\n\n\t_onfocusout() {\n\t\tthis.focused = false;\n\t}\n\n\tget _isPickerOpen() {\n\t\treturn !!this.responsivePopover && this.responsivePopover.opened;\n\t}\n\n\tasync _respPopover() {\n\t\tconst staticAreaItem = await this.getStaticAreaItemDomRef();\n\t\treturn staticAreaItem.querySelector(\"[ui5-responsive-popover]\");\n\t}\n\n\t/**\n\t * Currently selected option.\n\t * @readonly\n\t * @type { sap.ui.webcomponents.main.ISelectOption }\n\t * @public\n\t */\n\tget selectedOption() {\n\t\treturn this._filteredItems.find(option => option.selected);\n\t}\n\n\tasync _toggleRespPopover() {\n\t\tthis._iconPressed = true;\n\t\tthis.responsivePopover = await this._respPopover();\n\t\tif (this.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._isPickerOpen) {\n\t\t\tthis.responsivePopover.close();\n\t\t} else {\n\t\t\tthis.responsivePopover.showAt(this);\n\t\t}\n\t}\n\n\tasync _attachRealDomRefs() {\n\t\tthis.responsivePopover = await this._respPopover();\n\n\t\tthis.options.forEach(option => {\n\t\t\toption._getRealDomRef = () => this.responsivePopover.querySelector(`*[data-ui5-stable=${option.stableDomRef}]`);\n\t\t});\n\t}\n\n\t_syncSelection() {\n\t\tlet lastSelectedOptionIndex = -1,\n\t\t\tfirstEnabledOptionIndex = -1;\n\t\tconst options = this._filteredItems;\n\t\tconst syncOpts = options.map((opt, index) => {\n\t\t\tif (opt.selected || opt.textContent === this.value) {\n\t\t\t\t// The second condition in the IF statement is added because of Angular Reactive Forms Support(Two way data binding)\n\t\t\t\tlastSelectedOptionIndex = index;\n\t\t\t}\n\t\t\tif (firstEnabledOptionIndex === -1) {\n\t\t\t\tfirstEnabledOptionIndex = index;\n\t\t\t}\n\n\t\t\topt.selected = false;\n\t\t\topt._focused = false;\n\n\t\t\treturn {\n\t\t\t\tselected: false,\n\t\t\t\t_focused: false,\n\t\t\t\ticon: opt.icon,\n\t\t\t\tvalue: opt.value,\n\t\t\t\ttextContent: opt.textContent,\n\t\t\t\ttitle: opt.title,\n\t\t\t\tadditionalText: opt.additionalText,\n\t\t\t\tid: opt._id,\n\t\t\t\tstableDomRef: opt.stableDomRef,\n\t\t\t};\n\t\t});\n\n\t\tif (lastSelectedOptionIndex > -1 && !syncOpts[lastSelectedOptionIndex].disabled) {\n\t\t\tsyncOpts[lastSelectedOptionIndex].selected = true;\n\t\t\tsyncOpts[lastSelectedOptionIndex]._focused = true;\n\t\t\toptions[lastSelectedOptionIndex].selected = true;\n\t\t\toptions[lastSelectedOptionIndex]._focused = true;\n\t\t\tthis._text = syncOpts[lastSelectedOptionIndex].textContent;\n\t\t\tthis._selectedIndex = lastSelectedOptionIndex;\n\t\t} else {\n\t\t\tthis._text = \"\";\n\t\t\tthis._selectedIndex = -1;\n\t\t\tif (syncOpts[firstEnabledOptionIndex]) {\n\t\t\t\tsyncOpts[firstEnabledOptionIndex].selected = true;\n\t\t\t\tsyncOpts[firstEnabledOptionIndex]._focused = true;\n\t\t\t\toptions[firstEnabledOptionIndex].selected = true;\n\t\t\t\toptions[firstEnabledOptionIndex]._focused = true;\n\t\t\t\tthis._selectedIndex = firstEnabledOptionIndex;\n\t\t\t\tthis._text = options[firstEnabledOptionIndex].textContent;\n\t\t\t}\n\t\t}\n\n\t\tthis._syncedOptions = syncOpts;\n\t}\n\n\t_enableFormSupport() {\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (FormSupport) {\n\t\t\tFormSupport.syncNativeHiddenInput(this, (element, nativeInput) => {\n\t\t\t\tnativeInput.disabled = element.disabled;\n\t\t\t\tnativeInput.value = element._currentlySelectedOption ? element._currentlySelectedOption.value : \"\";\n\t\t\t});\n\t\t} else if (this.name) {\n\t\t\tconsole.warn(`In order for the \"name\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\t}\n\n\t_onkeydown(event) {\n\t\tconst isTab = (isTabNext(event) || isTabPrevious(event));\n\n\t\tif (isTab && this.responsivePopover && this.responsivePopover.opened) {\n\t\t\tthis.responsivePopover.close();\n\t\t}\n\n\t\tif (isShow(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._toggleRespPopover();\n\t\t} else if (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t} else if (isEscape(event) && this._isPickerOpen) {\n\t\t\tthis._escapePressed = true;\n\t\t} else if (isHome(event)) {\n\t\t\tthis._handleHomeKey(event);\n\t\t} else if (isEnd(event)) {\n\t\t\tthis._handleEndKey(event);\n\t\t} else if (isEnter(event)) {\n\t\t\tthis._handleSelectionChange();\n\t\t} else if (isUp(event) || isDown(event)) {\n\t\t\tthis._handleArrowNavigation(event);\n\t\t}\n\t}\n\n\t_handleKeyboardNavigation(event) {\n\t\tif (isEnter(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst typedCharacter = event.key.toLowerCase();\n\n\t\tthis._typedChars += typedCharacter;\n\n\t\t// We check if we have more than one characters and they are all duplicate, we set the\n\t\t// text to be the last input character (typedCharacter). If not, we set the text to be\n\t\t// the whole input string.\n\n\t\tconst text = (/^(.)\\1+$/i).test(this._typedChars) ? typedCharacter : this._typedChars;\n\n\t\tclearTimeout(this._typingTimeoutID);\n\n\t\tthis._typingTimeoutID = setTimeout(() => {\n\t\t\tthis._typedChars = \"\";\n\t\t\tthis._typingTimeoutID = -1;\n\t\t}, 1000);\n\n\t\tthis._selectTypedItem(text);\n\t}\n\n\t_selectTypedItem(text) {\n\t\tconst currentIndex = this._selectedIndex;\n\t\tconst itemToSelect = this._searchNextItemByText(text);\n\n\t\tif (itemToSelect) {\n\t\t\tconst nextIndex = this._filteredItems.indexOf(itemToSelect);\n\n\t\t\tthis._changeSelectedItem(this._selectedIndex, nextIndex);\n\n\t\t\tif (currentIndex !== this._selectedIndex) {\n\t\t\t\tthis.itemSelectionAnnounce();\n\t\t\t}\n\t\t}\n\t}\n\n\t_searchNextItemByText(text) {\n\t\tlet orderedOptions = this._filteredItems.slice(0);\n\t\tconst optionsAfterSelected = orderedOptions.splice(this._selectedIndex + 1, orderedOptions.length - this._selectedIndex);\n\t\tconst optionsBeforeSelected = orderedOptions.splice(0, orderedOptions.length - 1);\n\n\t\torderedOptions = optionsAfterSelected.concat(optionsBeforeSelected);\n\n\t\treturn orderedOptions.find(option => option.textContent.toLowerCase().startsWith(text));\n\t}\n\n\t_handleHomeKey(event) {\n\t\tevent.preventDefault();\n\t\tthis._changeSelectedItem(this._selectedIndex, 0);\n\t}\n\n\t_handleEndKey(event) {\n\t\tconst lastIndex = this._filteredItems.length - 1;\n\n\t\tevent.preventDefault();\n\t\tthis._changeSelectedItem(this._selectedIndex, lastIndex);\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tif (this._isPickerOpen) {\n\t\t\t\tthis._handleSelectionChange();\n\t\t\t} else {\n\t\t\t\tthis._toggleRespPopover();\n\t\t\t}\n\t\t}\n\t}\n\n\t_getSelectedItemIndex(item) {\n\t\treturn this._filteredItems.findIndex(option => `${option._id}-li` === item.id);\n\t}\n\n\t_select(index) {\n\t\tthis._filteredItems[this._selectedIndex].selected = false;\n\t\tthis._selectedIndex = index;\n\t\tthis._filteredItems[index].selected = true;\n\t}\n\n\t/**\n\t * The user clicked on an item from the list\n\t * @private\n\t */\n\t_handleItemPress(event) {\n\t\tconst item = event.detail.selectedItems[0];\n\t\tconst selectedItemIndex = this._getSelectedItemIndex(item);\n\n\t\tthis._handleSelectionChange(selectedItemIndex);\n\t}\n\n\t_itemMousedown(event) {\n\t\t// prevent actual focus of items\n\t\tevent.preventDefault();\n\t}\n\n\t_onclick(event) {\n\t\tthis.getFocusDomRef().focus();\n\t\tthis._toggleRespPopover();\n\t}\n\n\t/**\n\t * The user selected an item with Enter or Space\n\t * @private\n\t */\n\t_handleSelectionChange(index = this._selectedIndex) {\n\t\tthis._select(index);\n\n\t\tthis._toggleRespPopover();\n\t}\n\n\t_handleArrowNavigation(event) {\n\t\tlet nextIndex = -1;\n\t\tconst currentIndex = this._selectedIndex;\n\t\tconst isDownKey = isDown(event);\n\n\t\tevent.preventDefault();\n\t\tif (isDownKey) {\n\t\t\tnextIndex = this._getNextOptionIndex();\n\t\t} else {\n\t\t\tnextIndex = this._getPreviousOptionIndex();\n\t\t}\n\n\t\tthis._changeSelectedItem(this._selectedIndex, nextIndex);\n\n\t\tif (currentIndex !== this._selectedIndex) {\n\t\t\t// Announce new item even if picker is opened.\n\t\t\t// The aria-activedescendents attribute can't be used,\n\t\t\t// because listitem elements are in different shadow dom\n\t\t\tthis.itemSelectionAnnounce();\n\t\t}\n\t}\n\n\t_changeSelectedItem(oldIndex, newIndex) {\n\t\tconst options = this._filteredItems;\n\n\t\toptions[oldIndex].selected = false;\n\t\toptions[oldIndex]._focused = false;\n\n\t\toptions[newIndex].selected = true;\n\t\toptions[newIndex]._focused = true;\n\n\t\tthis._selectedIndex = newIndex;\n\n\t\tif (!this._isPickerOpen) {\n\t\t\t// arrow pressed on closed picker - do selection change\n\t\t\tthis._fireChangeEvent(options[newIndex]);\n\t\t}\n\t}\n\n\t_getNextOptionIndex() {\n\t\treturn this._selectedIndex === (this.options.length - 1) ? this._selectedIndex : (this._selectedIndex + 1);\n\t}\n\n\t_getPreviousOptionIndex() {\n\t\treturn this._selectedIndex === 0 ? this._selectedIndex : (this._selectedIndex - 1);\n\t}\n\n\t_beforeOpen() {\n\t\tthis._selectedIndexBeforeOpen = this._selectedIndex;\n\t\tthis._lastSelectedOption = this._filteredItems[this._selectedIndex];\n\t\tthis.focused = false;\n\t}\n\n\t_afterOpen() {\n\t\tthis.opened = true;\n\t}\n\n\t_afterClose() {\n\t\tthis.opened = false;\n\t\tthis.focused = true;\n\t\tthis._iconPressed = false;\n\t\tthis._listWidth = 0;\n\n\t\tif (this._escapePressed) {\n\t\t\tthis._select(this._selectedIndexBeforeOpen);\n\t\t\tthis._escapePressed = false;\n\t\t} else if (this._lastSelectedOption !== this._filteredItems[this._selectedIndex]) {\n\t\t\tthis._fireChangeEvent(this._filteredItems[this._selectedIndex]);\n\t\t\tthis._lastSelectedOption = this._filteredItems[this._selectedIndex];\n\t\t}\n\t}\n\n\t_fireChangeEvent(selectedOption) {\n\t\tthis.fireEvent(\"change\", { selectedOption });\n\n\t\t// Angular two way data binding\n\t\tthis.selectedItem = selectedOption.textContent;\n\t\tthis.fireEvent(\"selected-item-changed\");\n\t}\n\n\tget valueStateTextMappings() {\n\t\treturn {\n\t\t\t[ValueState.Success]: Select.i18nBundle.getText(VALUE_STATE_SUCCESS),\n\t\t\t[ValueState.Information]: Select.i18nBundle.getText(VALUE_STATE_INFORMATION),\n\t\t\t[ValueState.Error]: Select.i18nBundle.getText(VALUE_STATE_ERROR),\n\t\t\t[ValueState.Warning]: Select.i18nBundle.getText(VALUE_STATE_WARNING),\n\t\t};\n\t}\n\n\tget valueStateTypeMappings() {\n\t\treturn {\n\t\t\t[ValueState.Success]: Select.i18nBundle.getText(VALUE_STATE_TYPE_SUCCESS),\n\t\t\t[ValueState.Information]: Select.i18nBundle.getText(VALUE_STATE_TYPE_INFORMATION),\n\t\t\t[ValueState.Error]: Select.i18nBundle.getText(VALUE_STATE_TYPE_ERROR),\n\t\t\t[ValueState.Warning]: Select.i18nBundle.getText(VALUE_STATE_TYPE_WARNING),\n\t\t};\n\t}\n\n\tget valueStateText() {\n\t\tlet valueStateText;\n\n\t\tif (this.shouldDisplayDefaultValueStateMessage) {\n\t\t\tvalueStateText = this.valueStateDefaultText;\n\t\t} else {\n\t\t\tvalueStateText = this.valueStateMessageText.map(el => el.textContent).join(\" \");\n\t\t}\n\n\t\treturn `${this.valueStateTypeText} ${valueStateText}`;\n\t}\n\n\tget valueStateDefaultText() {\n\t\treturn this.valueStateTextMappings[this.valueState];\n\t}\n\n\tget valueStateTypeText() {\n\t\treturn this.valueStateTypeMappings[this.valueState];\n\t}\n\n\tget hasValueState() {\n\t\treturn this.valueState !== ValueState.None;\n\t}\n\n\tget valueStateTextId() {\n\t\treturn this.hasValueState ? `${this._id}-valueStateDesc` : undefined;\n\t}\n\n\tget isDisabled() {\n\t\treturn this.disabled || undefined;\n\t}\n\n\tget _headerTitleText() {\n\t\treturn Select.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);\n\t}\n\n\tget _currentSelectedItem() {\n\t\treturn this.shadowRoot.querySelector(`#${this._filteredItems[this._selectedIndex]._id}-li`);\n\t}\n\n\tget _currentlySelectedOption() {\n\t\treturn this._filteredItems[this._selectedIndex];\n\t}\n\n\tget tabIndex() {\n\t\treturn this.disabled\n\t\t|| (this.responsivePopover // Handles focus on Tab/Shift + Tab when the popover is opened\n\t\t&& this.responsivePopover.opened) ? \"-1\" : \"0\";\n\t}\n\n\t /**\n\t * This method is relevant for sap_horizon theme only\n\t */\n\tget _valueStateMessageInputIcon() {\n\t\tconst iconPerValueState = {\n\t\t\tError: \"error\",\n\t\t\tWarning: \"alert\",\n\t\t\tSuccess: \"sys-enter-2\",\n\t\t\tInformation: \"information\",\n\t\t};\n\n\t\treturn this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : \"\";\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tpopoverValueState: {\n\t\t\t\t\"ui5-valuestatemessage-root\": true,\n\t\t\t\t\"ui5-valuestatemessage--success\": this.valueState === ValueState.Success,\n\t\t\t\t\"ui5-valuestatemessage--error\": this.valueState === ValueState.Error,\n\t\t\t\t\"ui5-valuestatemessage--warning\": this.valueState === ValueState.Warning,\n\t\t\t\t\"ui5-valuestatemessage--information\": this.valueState === ValueState.Information,\n\t\t\t},\n\t\t\tpopover: {\n\t\t\t\t\"ui5-select-popover-valuestate\": this.hasValueState,\n\t\t\t},\n\t\t};\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\tpopoverHeader: {\n\t\t\t\t\"max-width\": `${this.offsetWidth}px`,\n\t\t\t},\n\t\t\tresponsivePopoverHeader: {\n\t\t\t\t\"display\": this._filteredItems.length && this._listWidth === 0 ? \"none\" : \"inline-block\",\n\t\t\t\t\"width\": `${this._filteredItems.length ? this._listWidth : this.offsetWidth}px`,\n\t\t\t},\n\t\t\tresponsivePopover: {\n\t\t\t\t\"min-width\": `${this.offsetWidth}px`,\n\t\t\t},\n\t\t};\n\t}\n\n\tget ariaLabelText() {\n\t\treturn getEffectiveAriaLabelText(this);\n\t}\n\n\tget valueStateMessageText() {\n\t\treturn this.getSlottedNodes(\"valueStateMessage\").map(el => el.cloneNode(true));\n\t}\n\n\tget shouldDisplayDefaultValueStateMessage() {\n\t\treturn !this.valueStateMessage.length && this.hasValueStateText;\n\t}\n\n\tget hasValueStateText() {\n\t\treturn this.hasValueState && this.valueState !== ValueState.Success;\n\t}\n\n\tget shouldOpenValueStateMessagePopover() {\n\t\treturn this.focused && this.hasValueStateText && !this._iconPressed\n\t\t\t&& !this._isPickerOpen && !this._isPhone;\n\t}\n\n\tget _ariaRoleDescription() {\n\t\treturn Select.i18nBundle.getText(SELECT_ROLE_DESCRIPTION);\n\t}\n\n\tget _isPhone() {\n\t\treturn isPhone();\n\t}\n\n\tget _filteredItems() {\n\t\treturn this.options.filter(option => !option.disabled);\n\t}\n\n\titemSelectionAnnounce() {\n\t\tlet text;\n\t\tconst optionsCount = this._filteredItems.length;\n\t\tconst itemPositionText = Select.i18nBundle.getText(LIST_ITEM_POSITION, this._selectedIndex + 1, optionsCount);\n\n\t\tif (this.focused && this._currentlySelectedOption) {\n\t\t\ttext = `${this._currentlySelectedOption.textContent} ${this._isPickerOpen ? itemPositionText : \"\"}`;\n\n\t\t\tannounce(text, \"Polite\");\n\t\t}\n\t}\n\n\tasync openValueStatePopover() {\n\t\tthis.popover = await this._getPopover();\n\t\tif (this.popover) {\n\t\t\tthis.popover.showAt(this);\n\t\t}\n\t}\n\n\tcloseValueStatePopover() {\n\t\tthis.popover && this.popover.close();\n\t}\n\n\ttoggleValueStatePopover(open) {\n\t\tif (open) {\n\t\t\tthis.openValueStatePopover();\n\t\t} else {\n\t\t\tthis.closeValueStatePopover();\n\t\t}\n\t}\n\n\tget selectedOptionIcon() {\n\t\treturn this.selectedOption && this.selectedOption.icon;\n\t}\n\n\tasync _getPopover() {\n\t\tconst staticAreaItem = await this.getStaticAreaItemDomRef();\n\t\treturn staticAreaItem.querySelector(\"[ui5-popover]\");\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tOption,\n\t\t\tLabel,\n\t\t\tResponsivePopover,\n\t\t\tPopover,\n\t\t\tList,\n\t\t\tStandardListItem,\n\t\t\tIcon,\n\t\t\tButton,\n\t\t];\n\t}\n\n\tstatic async onDefine() {\n\t\tSelect.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n}\n\nSelect.define();\n\nexport default Select;\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.generateTypeAccessors(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","var TimezoneUtil = {};\nvar sLocalTimezone = \"\";\nvar oIntlDateTimeFormatCache = {\n _oCache: new Map(),\n _iCacheLimit: 10,\n get: function (sTimezone) {\n var cacheEntry = this._oCache.get(sTimezone);\n if (cacheEntry) {\n return cacheEntry;\n }\n var oOptions = {\n hourCycle: \"h23\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n fractionalSecondDigits: 3,\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n timeZone: sTimezone,\n timeZoneName: \"short\",\n era: \"narrow\"\n };\n var oInstance = new Intl.DateTimeFormat(\"en-US\", oOptions);\n if (this._oCache.size === this._iCacheLimit) {\n this._oCache = new Map();\n }\n this._oCache.set(sTimezone, oInstance);\n return oInstance;\n }\n};\nTimezoneUtil.isValidTimezone = function (sTimezone) {\n if (!sTimezone) {\n return false;\n }\n try {\n oIntlDateTimeFormatCache.get(sTimezone);\n return true;\n } catch (oError) {\n return false;\n }\n};\nTimezoneUtil.convertToTimezone = function (oDate, sTargetTimezone) {\n var oFormatParts = this._getParts(oDate, sTargetTimezone);\n return TimezoneUtil._getDateFromParts(oFormatParts);\n};\nTimezoneUtil._getParts = function (oDate, sTargetTimezone) {\n var oIntlDate = oIntlDateTimeFormatCache.get(sTargetTimezone);\n var oParts = oIntlDate.formatToParts(new Date(oDate.getTime()));\n var oDateParts = Object.create(null);\n for (var sKey in oParts) {\n var oPart = oParts[sKey];\n if (oPart.type !== \"literal\") {\n oDateParts[oPart.type] = oPart.value;\n }\n }\n return oDateParts;\n};\nTimezoneUtil._getDateFromParts = function (oParts) {\n var oDate = new Date(0);\n var iUTCYear = parseInt(oParts.year);\n if (oParts.era === \"B\") {\n iUTCYear = iUTCYear * -1 + 1;\n }\n oDate.setUTCFullYear(iUTCYear, parseInt(oParts.month) - 1, parseInt(oParts.day));\n oDate.setUTCHours(parseInt(oParts.hour), parseInt(oParts.minute), parseInt(oParts.second), parseInt(oParts.fractionalSecond));\n return oDate;\n};\nTimezoneUtil.calculateOffset = function (oDate, sTimezoneSource) {\n var oFirstGuess = this.convertToTimezone(oDate, sTimezoneSource);\n var iInitialOffset = oDate.getTime() - oFirstGuess.getTime();\n var oDateSource = new Date(oDate.getTime() + iInitialOffset);\n var oDateTarget = this.convertToTimezone(oDateSource, sTimezoneSource);\n return (oDateSource.getTime() - oDateTarget.getTime()) / 1000;\n};\nTimezoneUtil.getLocalTimezone = function () {\n if (sLocalTimezone) {\n return sLocalTimezone;\n }\n sLocalTimezone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n return sLocalTimezone;\n};\nexport default TimezoneUtil;\n","import { getLanguage } from \"@ui5/webcomponents-base/dist/config/Language.js\";\nimport { getCalendarType } from \"@ui5/webcomponents-base/dist/config/CalendarType.js\";\nimport getDesigntimePropertyAsArray from \"@ui5/webcomponents-base/dist/util/getDesigntimePropertyAsArray.js\";\nimport getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport TimezoneUtil from \"./format/TimezoneUtil.js\";\n\nconst emptyFn = () => {};\n\n/**\n * OpenUI5 FormatSettings shim\n */\nconst FormatSettings = {\n\tgetFormatLocale: getLocale,\n\tgetLegacyDateFormat: emptyFn,\n\tgetLegacyDateCalendarCustomizing: emptyFn,\n\tgetCustomLocaleData: emptyFn,\n};\n\n/**\n * OpenUI5 Configuration Shim\n */\nconst Configuration = {\n\tgetLanguage,\n\tgetCalendarType,\n\tgetSupportedLanguages: () => getDesigntimePropertyAsArray(\"$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,es,et,fi,fr,hi,hr,hu,it,iw,ja,ko,lt,lv,nl,no,pl,pt,ro,ru,sh,sk,sl,sv,th,tr,uk,vi,zh_CN,zh_TW$\"),\n\tgetOriginInfo: emptyFn,\n\tgetFormatSettings: () => FormatSettings,\n\tgetTimezone: () => TimezoneUtil.getLocalTimezone(),\n};\n\n/**\n * OpenUI5 Core shim\n */\nconst Core = {\n\tgetConfiguration: () => Configuration,\n\tgetLibraryResourceBundle: emptyFn(),\n\tgetFormatSettings: () => FormatSettings,\n};\n\nexport default Core;\n","var ObjectPath = {};\nvar defaultRootContext = window;\nfunction getObjectPathArray(vObjectPath) {\n return Array.isArray(vObjectPath) ? vObjectPath.slice() : vObjectPath.split(\".\");\n}\nObjectPath.create = function (vObjectPath, oRootContext) {\n var oObject = oRootContext || defaultRootContext;\n var aNames = getObjectPathArray(vObjectPath);\n for (var i = 0; i < aNames.length; i++) {\n var sName = aNames[i];\n if (oObject[sName] === null || oObject[sName] !== undefined && (typeof oObject[sName] !== \"object\" && typeof oObject[sName] !== \"function\")) {\n throw new Error(\"Could not set object-path for '\" + aNames.join(\".\") + \"', path segment '\" + sName + \"' already exists.\");\n }\n oObject[sName] = oObject[sName] || ({});\n oObject = oObject[sName];\n }\n return oObject;\n};\nObjectPath.get = function (vObjectPath, oRootContext) {\n var oObject = oRootContext || defaultRootContext;\n var aNames = getObjectPathArray(vObjectPath);\n var sPropertyName = aNames.pop();\n for (var i = 0; i < aNames.length && oObject; i++) {\n oObject = oObject[aNames[i]];\n }\n return oObject ? oObject[sPropertyName] : undefined;\n};\nObjectPath.set = function (vObjectPath, vValue, oRootContext) {\n oRootContext = oRootContext || defaultRootContext;\n var aNames = getObjectPathArray(vObjectPath);\n var sPropertyName = aNames.pop();\n var oObject = ObjectPath.create(aNames, oRootContext);\n oObject[sPropertyName] = vValue;\n};\nexport default ObjectPath;\n","var fnNow = !(typeof window != \"undefined\" && window.performance && performance.now && performance.timing) ? Date.now : (function () {\n var iNavigationStart = performance.timing.navigationStart;\n return function perfnow() {\n return iNavigationStart + performance.now();\n };\n})();\nexport default fnNow;\n","import now from './util/now.js';\nvar Log = {};\nLog.Level = {\n NONE: -1,\n FATAL: 0,\n ERROR: 1,\n WARNING: 2,\n INFO: 3,\n DEBUG: 4,\n TRACE: 5,\n ALL: 5 + 1\n};\nvar sDefaultComponent, aLog = [], mMaxLevel = { '': Log.Level.ERROR }, iLogEntriesLimit = 3000, oListener = null, bLogSupportInfo = false;\nfunction pad0(i, w) {\n return ('000' + String(i)).slice(-w);\n}\nfunction level(sComponent) {\n return !sComponent || isNaN(mMaxLevel[sComponent]) ? mMaxLevel[''] : mMaxLevel[sComponent];\n}\nfunction discardLogEntries() {\n var iLogLength = aLog.length;\n if (iLogLength) {\n var iEntriesToKeep = Math.min(iLogLength, Math.floor(iLogEntriesLimit * 0.7));\n if (oListener) {\n oListener.onDiscardLogEntries(aLog.slice(0, iLogLength - iEntriesToKeep));\n }\n if (iEntriesToKeep) {\n aLog = aLog.slice(-iEntriesToKeep, iLogLength);\n } else {\n aLog = [];\n }\n }\n}\nfunction getLogEntryListenerInstance() {\n if (!oListener) {\n oListener = {\n listeners: [],\n onLogEntry: function (oLogEntry) {\n for (var i = 0; i < oListener.listeners.length; i++) {\n if (oListener.listeners[i].onLogEntry) {\n oListener.listeners[i].onLogEntry(oLogEntry);\n }\n }\n },\n onDiscardLogEntries: function (aDiscardedLogEntries) {\n for (var i = 0; i < oListener.listeners.length; i++) {\n if (oListener.listeners[i].onDiscardLogEntries) {\n oListener.listeners[i].onDiscardLogEntries(aDiscardedLogEntries);\n }\n }\n },\n attach: function (oLog, oLstnr) {\n if (oLstnr) {\n oListener.listeners.push(oLstnr);\n if (oLstnr.onAttachToLog) {\n oLstnr.onAttachToLog(oLog);\n }\n }\n },\n detach: function (oLog, oLstnr) {\n for (var i = 0; i < oListener.listeners.length; i++) {\n if (oListener.listeners[i] === oLstnr) {\n if (oLstnr.onDetachFromLog) {\n oLstnr.onDetachFromLog(oLog);\n }\n oListener.listeners.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n return oListener;\n}\nLog.fatal = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.FATAL, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.error = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.ERROR, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.warning = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.WARNING, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.info = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.INFO, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.debug = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.DEBUG, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.trace = function (sMessage, sDetails, sComponent, fnSupportInfo) {\n log(Log.Level.TRACE, sMessage, sDetails, sComponent, fnSupportInfo);\n};\nLog.setLevel = function (iLogLevel, sComponent, _bDefault) {\n sComponent = sComponent || sDefaultComponent || '';\n if (!_bDefault || mMaxLevel[sComponent] == null) {\n mMaxLevel[sComponent] = iLogLevel;\n var sLogLevel;\n Object.keys(Log.Level).forEach(function (sLevel) {\n if (Log.Level[sLevel] === iLogLevel) {\n sLogLevel = sLevel;\n }\n });\n log(Log.Level.INFO, 'Changing log level ' + (sComponent ? 'for \\'' + sComponent + '\\' ' : '') + 'to ' + sLogLevel, '', 'sap.base.log');\n }\n};\nLog.getLevel = function (sComponent) {\n return level(sComponent || sDefaultComponent);\n};\nLog.isLoggable = function (iLevel, sComponent) {\n return (iLevel == null ? Log.Level.DEBUG : iLevel) <= level(sComponent || sDefaultComponent);\n};\nLog.logSupportInfo = function (bEnabled) {\n bLogSupportInfo = bEnabled;\n};\nfunction log(iLevel, sMessage, sDetails, sComponent, fnSupportInfo) {\n if (!fnSupportInfo && !sComponent && typeof sDetails === 'function') {\n fnSupportInfo = sDetails;\n sDetails = '';\n }\n if (!fnSupportInfo && typeof sComponent === 'function') {\n fnSupportInfo = sComponent;\n sComponent = '';\n }\n sComponent = sComponent || sDefaultComponent;\n if (iLevel <= level(sComponent)) {\n var fNow = now(), oNow = new Date(fNow), iMicroSeconds = Math.floor((fNow - Math.floor(fNow)) * 1000), oLogEntry = {\n time: pad0(oNow.getHours(), 2) + ':' + pad0(oNow.getMinutes(), 2) + ':' + pad0(oNow.getSeconds(), 2) + '.' + pad0(oNow.getMilliseconds(), 3) + pad0(iMicroSeconds, 3),\n date: pad0(oNow.getFullYear(), 4) + '-' + pad0(oNow.getMonth() + 1, 2) + '-' + pad0(oNow.getDate(), 2),\n timestamp: fNow,\n level: iLevel,\n message: String(sMessage || ''),\n details: String(sDetails || ''),\n component: String(sComponent || '')\n };\n if (bLogSupportInfo && typeof fnSupportInfo === 'function') {\n oLogEntry.supportInfo = fnSupportInfo();\n }\n if (iLogEntriesLimit) {\n if (aLog.length >= iLogEntriesLimit) {\n discardLogEntries();\n }\n aLog.push(oLogEntry);\n }\n if (oListener) {\n oListener.onLogEntry(oLogEntry);\n }\n if (console) {\n var isDetailsError = sDetails instanceof Error, logText = oLogEntry.date + ' ' + oLogEntry.time + ' ' + oLogEntry.message + ' - ' + oLogEntry.details + ' ' + oLogEntry.component;\n switch (iLevel) {\n case Log.Level.FATAL:\n case Log.Level.ERROR:\n isDetailsError ? console.error(logText, '\\n', sDetails) : console.error(logText);\n break;\n case Log.Level.WARNING:\n isDetailsError ? console.warn(logText, '\\n', sDetails) : console.warn(logText);\n break;\n case Log.Level.INFO:\n if (console.info) {\n isDetailsError ? console.info(logText, '\\n', sDetails) : console.info(logText);\n } else {\n isDetailsError ? console.log(logText, '\\n', sDetails) : console.log(logText);\n }\n break;\n case Log.Level.DEBUG:\n isDetailsError ? console.debug(logText, '\\n', sDetails) : console.debug(logText);\n break;\n case Log.Level.TRACE:\n isDetailsError ? console.trace(logText, '\\n', sDetails) : console.trace(logText);\n break;\n }\n if (console.info && oLogEntry.supportInfo) {\n console.info(oLogEntry.supportInfo);\n }\n }\n return oLogEntry;\n }\n}\nLog.getLogEntries = function () {\n return aLog.slice();\n};\nLog.getLogEntriesLimit = function () {\n return iLogEntriesLimit;\n};\nLog.setLogEntriesLimit = function (iLimit) {\n if (iLimit < 0) {\n throw new Error('The log entries limit needs to be greater than or equal to 0!');\n }\n iLogEntriesLimit = iLimit;\n if (aLog.length >= iLogEntriesLimit) {\n discardLogEntries();\n }\n};\nLog.addLogListener = function (oListener) {\n getLogEntryListenerInstance().attach(this, oListener);\n};\nLog.removeLogListener = function (oListener) {\n getLogEntryListenerInstance().detach(this, oListener);\n};\nfunction Logger(sComponent) {\n this.fatal = function (msg, detail, comp, support) {\n Log.fatal(msg, detail, comp || sComponent, support);\n return this;\n };\n this.error = function (msg, detail, comp, support) {\n Log.error(msg, detail, comp || sComponent, support);\n return this;\n };\n this.warning = function (msg, detail, comp, support) {\n Log.warning(msg, detail, comp || sComponent, support);\n return this;\n };\n this.info = function (msg, detail, comp, support) {\n Log.info(msg, detail, comp || sComponent, support);\n return this;\n };\n this.debug = function (msg, detail, comp, support) {\n Log.debug(msg, detail, comp || sComponent, support);\n return this;\n };\n this.trace = function (msg, detail, comp, support) {\n Log.trace(msg, detail, comp || sComponent, support);\n return this;\n };\n this.setLevel = function (level, comp) {\n Log.setLevel(level, comp || sComponent);\n return this;\n };\n this.getLevel = function (comp) {\n return Log.getLevel(comp || sComponent);\n };\n this.isLoggable = function (level, comp) {\n return Log.isLoggable(level, comp || sComponent);\n };\n}\nLog.getLogger = function (sComponent, iDefaultLogLevel) {\n if (!isNaN(iDefaultLogLevel) && mMaxLevel[sComponent] == null) {\n mMaxLevel[sComponent] = iDefaultLogLevel;\n }\n return new Logger(sComponent);\n};\nexport default Log;","import Log from './Log.js';\nvar fnAssert = function (bResult, vMessage) {\n if (!bResult) {\n var sMessage = typeof vMessage === 'function' ? vMessage() : vMessage;\n console.assert(bResult, sMessage);\n }\n};\nexport default fnAssert;","import assert from '../../assert.js';\nvar fnUniqueSort = function (aArray) {\n assert(Array.isArray(aArray), 'uniqueSort: input parameter must be an Array');\n var iLength = aArray.length;\n if (iLength > 1) {\n aArray.sort();\n var j = 0;\n for (var i = 1; i < iLength; i++) {\n if (aArray.indexOf(aArray[i]) === i) {\n aArray[++j] = aArray[i];\n }\n }\n if (++j < iLength) {\n aArray.splice(j, iLength - j);\n }\n }\n return aArray;\n};\nexport default fnUniqueSort;","import ObjectPath from '../../base/util/ObjectPath.js';\nimport assert from '../../base/assert.js';\nimport Log from '../../base/Log.js';\nimport uniqueSort from '../../base/util/array/uniqueSort.js';\nvar Metadata = function (sClassName, oClassInfo) {\n assert(typeof sClassName === 'string' && sClassName, 'Metadata: sClassName must be a non-empty string');\n assert(typeof oClassInfo === 'object', 'Metadata: oClassInfo must be empty or an object');\n if (!oClassInfo || typeof oClassInfo.metadata !== 'object') {\n oClassInfo = {\n metadata: oClassInfo || {},\n constructor: ObjectPath.get(sClassName)\n };\n oClassInfo.metadata.__version = 1;\n }\n oClassInfo.metadata.__version = oClassInfo.metadata.__version || 2;\n if (typeof oClassInfo.constructor !== 'function') {\n throw Error('constructor for class ' + sClassName + ' must have been declared before creating metadata for it');\n }\n this._sClassName = sClassName;\n this._oClass = oClassInfo.constructor;\n this.extend(oClassInfo);\n};\nMetadata.prototype.extend = function (oClassInfo) {\n this.applySettings(oClassInfo);\n this.afterApplySettings();\n};\nMetadata.prototype.applySettings = function (oClassInfo) {\n var that = this, oStaticInfo = oClassInfo.metadata, oPrototype;\n if (oStaticInfo.baseType) {\n var oParentClass = ObjectPath.get(oStaticInfo.baseType);\n if (typeof oParentClass !== 'function') {\n Log.fatal('base class \\'' + oStaticInfo.baseType + '\\' does not exist');\n }\n if (oParentClass.getMetadata) {\n this._oParent = oParentClass.getMetadata();\n assert(oParentClass === oParentClass.getMetadata().getClass(), 'Metadata: oParentClass must match the class in the parent metadata');\n } else {\n this._oParent = new Metadata(oStaticInfo.baseType, {});\n }\n } else {\n this._oParent = undefined;\n }\n this._bAbstract = !!oStaticInfo['abstract'];\n this._bFinal = !!oStaticInfo['final'];\n this._sStereotype = oStaticInfo.stereotype || (this._oParent ? this._oParent._sStereotype : 'object');\n this._bDeprecated = !!oStaticInfo['deprecated'];\n this._aInterfaces = oStaticInfo.interfaces || [];\n this._aPublicMethods = oStaticInfo.publicMethods || [];\n this._bInterfacesUnique = false;\n oPrototype = this._oClass.prototype;\n for (var n in oClassInfo) {\n if (n !== 'metadata' && n !== 'constructor') {\n oPrototype[n] = oClassInfo[n];\n if (!n.match(/^_|^on|^init$|^exit$/)) {\n that._aPublicMethods.push(n);\n }\n }\n }\n};\nMetadata.prototype.afterApplySettings = function () {\n if (this._oParent) {\n this._aAllPublicMethods = this._oParent._aAllPublicMethods.concat(this._aPublicMethods);\n this._bInterfacesUnique = false;\n } else {\n this._aAllPublicMethods = this._aPublicMethods;\n }\n};\nMetadata.prototype.getStereotype = function () {\n return this._sStereotype;\n};\nMetadata.prototype.getName = function () {\n return this._sClassName;\n};\nMetadata.prototype.getClass = function () {\n return this._oClass;\n};\nMetadata.prototype.getParent = function () {\n return this._oParent;\n};\nMetadata.prototype._dedupInterfaces = function () {\n if (!this._bInterfacesUnique) {\n uniqueSort(this._aInterfaces);\n uniqueSort(this._aPublicMethods);\n uniqueSort(this._aAllPublicMethods);\n this._bInterfacesUnique = true;\n }\n};\nMetadata.prototype.getPublicMethods = function () {\n this._dedupInterfaces();\n return this._aPublicMethods;\n};\nMetadata.prototype.getAllPublicMethods = function () {\n this._dedupInterfaces();\n return this._aAllPublicMethods;\n};\nMetadata.prototype.getInterfaces = function () {\n this._dedupInterfaces();\n return this._aInterfaces;\n};\nMetadata.prototype.isInstanceOf = function (sInterface) {\n if (this._oParent) {\n if (this._oParent.isInstanceOf(sInterface)) {\n return true;\n }\n }\n var a = this._aInterfaces;\n for (var i = 0, l = a.length; i < l; i++) {\n if (a[i] === sInterface) {\n return true;\n }\n }\n return false;\n};\nObject.defineProperty(Metadata.prototype, '_mImplementedTypes', {\n get: function () {\n if (this === Metadata.prototype) {\n throw new Error('sap.ui.base.Metadata: The \\'_mImplementedTypes\\' property must not be accessed on the prototype');\n }\n var result = Object.create(this._oParent ? this._oParent._mImplementedTypes : null);\n result[this._sClassName] = true;\n var aInterfaces = this._aInterfaces, i = aInterfaces.length;\n while (i-- > 0) {\n if (!result[aInterfaces[i]]) {\n result[aInterfaces[i]] = true;\n }\n }\n Object.defineProperty(this, '_mImplementedTypes', {\n value: Object.freeze(result),\n writable: false,\n configurable: false\n });\n return result;\n },\n configurable: true\n});\nMetadata.prototype.isA = function (vTypeName) {\n var mTypes = this._mImplementedTypes;\n if (Array.isArray(vTypeName)) {\n for (var i = 0; i < vTypeName.length; i++) {\n if (vTypeName[i] in mTypes) {\n return true;\n }\n }\n return false;\n }\n return vTypeName in mTypes;\n};\nMetadata.prototype.isAbstract = function () {\n return this._bAbstract;\n};\nMetadata.prototype.isFinal = function () {\n return this._bFinal;\n};\nMetadata.prototype.isDeprecated = function () {\n return this._bDeprecated;\n};\nMetadata.prototype.addPublicMethods = function (sMethod) {\n var aNames = sMethod instanceof Array ? sMethod : arguments;\n Array.prototype.push.apply(this._aPublicMethods, aNames);\n Array.prototype.push.apply(this._aAllPublicMethods, aNames);\n this._bInterfacesUnique = false;\n};\nMetadata.createClass = function (fnBaseClass, sClassName, oClassInfo, FNMetaImpl) {\n if (typeof fnBaseClass === 'string') {\n FNMetaImpl = oClassInfo;\n oClassInfo = sClassName;\n sClassName = fnBaseClass;\n fnBaseClass = null;\n }\n assert(!fnBaseClass || typeof fnBaseClass === 'function');\n assert(typeof sClassName === 'string' && !!sClassName);\n assert(!oClassInfo || typeof oClassInfo === 'object');\n assert(!FNMetaImpl || typeof FNMetaImpl === 'function');\n FNMetaImpl = FNMetaImpl || Metadata;\n if (typeof FNMetaImpl.preprocessClassInfo === 'function') {\n oClassInfo = FNMetaImpl.preprocessClassInfo(oClassInfo);\n }\n oClassInfo = oClassInfo || {};\n oClassInfo.metadata = oClassInfo.metadata || {};\n if (!oClassInfo.hasOwnProperty('constructor')) {\n oClassInfo.constructor = undefined;\n }\n var fnClass = oClassInfo.constructor;\n assert(!fnClass || typeof fnClass === 'function');\n if (fnBaseClass) {\n if (!fnClass) {\n if (oClassInfo.metadata.deprecated) {\n fnClass = function () {\n Log.warning('Usage of deprecated class: ' + sClassName);\n fnBaseClass.apply(this, arguments);\n };\n } else {\n fnClass = function () {\n fnBaseClass.apply(this, arguments);\n };\n }\n }\n fnClass.prototype = Object.create(fnBaseClass.prototype);\n fnClass.prototype.constructor = fnClass;\n oClassInfo.metadata.baseType = fnBaseClass.getMetadata().getName();\n } else {\n fnClass = fnClass || function () {\n };\n delete oClassInfo.metadata.baseType;\n }\n oClassInfo.constructor = fnClass;\n ObjectPath.set(sClassName, fnClass);\n var oMetadata = new FNMetaImpl(sClassName, oClassInfo);\n fnClass.getMetadata = fnClass.prototype.getMetadata = function () {\n return oMetadata;\n };\n if (!fnClass.getMetadata().isFinal()) {\n fnClass.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {\n return Metadata.createClass(fnClass, sSCName, oSCClassInfo, fnSCMetaImpl || FNMetaImpl);\n };\n }\n return fnClass;\n};\nexport default Metadata;","import Metadata from './Metadata.js';\nimport Log from '../../base/Log.js';\nvar BaseObject = Metadata.createClass('sap.ui.base.Object', {\n constructor: function () {\n if (!(this instanceof BaseObject)) {\n throw Error('Cannot instantiate object: \"new\" is missing!');\n }\n }\n});\nBaseObject.prototype.destroy = function () {\n};\nBaseObject.prototype.getInterface = function () {\n var oInterface = new BaseObject._Interface(this, this.getMetadata().getAllPublicMethods());\n this.getInterface = function () {\n return oInterface;\n };\n return oInterface;\n};\nBaseObject.defineClass = function (sClassName, oStaticInfo, FNMetaImpl) {\n var oMetadata = new (FNMetaImpl || Metadata)(sClassName, oStaticInfo);\n var fnClass = oMetadata.getClass();\n fnClass.getMetadata = fnClass.prototype.getMetadata = function () {\n return oMetadata;\n };\n if (!oMetadata.isFinal()) {\n fnClass.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {\n return Metadata.createClass(fnClass, sSCName, oSCClassInfo, fnSCMetaImpl || FNMetaImpl);\n };\n }\n Log.debug('defined class \\'' + sClassName + '\\'' + (oMetadata.getParent() ? ' as subclass of ' + oMetadata.getParent().getName() : ''));\n return oMetadata;\n};\nBaseObject.prototype.isA = function (vTypeName) {\n return this.getMetadata().isA(vTypeName);\n};\nBaseObject.isA = function (oObject, vTypeName) {\n return oObject instanceof BaseObject && oObject.isA(vTypeName);\n};\nBaseObject._Interface = function (oObject, aMethods, _bReturnFacade) {\n if (!oObject) {\n return oObject;\n }\n function fCreateDelegator(oObject, sMethodName) {\n return function () {\n var tmp = oObject[sMethodName].apply(oObject, arguments);\n if (_bReturnFacade) {\n return this;\n } else {\n return tmp instanceof BaseObject ? tmp.getInterface() : tmp;\n }\n };\n }\n if (!aMethods) {\n return {};\n }\n var sMethodName;\n for (var i = 0, ml = aMethods.length; i < ml; i++) {\n sMethodName = aMethods[i];\n if (!oObject[sMethodName] || typeof oObject[sMethodName] === 'function') {\n this[sMethodName] = fCreateDelegator(oObject, sMethodName);\n }\n }\n};\nexport default BaseObject;","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 fnExtend = function () {\n var args = [\n false,\n true\n ];\n args.push.apply(args, arguments);\n return _merge.apply(null, args);\n};\nexport default fnExtend;","var CalendarType = {\n Gregorian: \"Gregorian\",\n Islamic: \"Islamic\",\n Japanese: \"Japanese\",\n Persian: \"Persian\",\n Buddhist: \"Buddhist\"\n};\nexport default CalendarType;\n","import BaseObject from '../base/Object.js';\nimport assert from '../../base/assert.js';\nimport CalendarType from './CalendarType.js';\nvar 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;\nvar Locale = BaseObject.extend('sap.ui.core.Locale', {\n constructor: function (sLocaleId) {\n BaseObject.apply(this);\n var aResult = rLocale.exec(sLocaleId.replace(/_/g, '-'));\n if (aResult === null) {\n throw new TypeError('The given language \\'' + sLocaleId + '\\' does not adhere to BCP-47.');\n }\n this.sLocaleId = sLocaleId;\n this.sLanguage = aResult[1] || null;\n this.sScript = aResult[2] || null;\n this.sRegion = aResult[3] || null;\n this.sVariant = aResult[4] && aResult[4].slice(1) || null;\n this.sExtension = aResult[5] && aResult[5].slice(1) || null;\n this.sPrivateUse = aResult[6] || null;\n if (this.sLanguage) {\n this.sLanguage = this.sLanguage.toLowerCase();\n }\n if (this.sScript) {\n this.sScript = this.sScript.toLowerCase().replace(/^[a-z]/, function ($) {\n return $.toUpperCase();\n });\n }\n if (this.sRegion) {\n this.sRegion = this.sRegion.toUpperCase();\n }\n },\n getLanguage: function () {\n return this.sLanguage;\n },\n getScript: function () {\n return this.sScript;\n },\n getRegion: function () {\n return this.sRegion;\n },\n getVariant: function () {\n return this.sVariant;\n },\n getVariantSubtags: function () {\n return this.sVariant ? this.sVariant.split('-') : [];\n },\n getExtension: function () {\n return this.sExtension;\n },\n getExtensionSubtags: function () {\n return this.sExtension ? this.sExtension.slice(2).split('-') : [];\n },\n getPrivateUse: function () {\n return this.sPrivateUse;\n },\n getPrivateUseSubtags: function () {\n return this.sPrivateUse ? this.sPrivateUse.slice(2).split('-') : [];\n },\n hasPrivateUseSubtag: function (sSubtag) {\n assert(sSubtag && sSubtag.match(/^[0-9A-Z]{1,8}$/i), 'subtag must be a valid BCP47 private use tag');\n return this.getPrivateUseSubtags().indexOf(sSubtag) >= 0;\n },\n toString: function () {\n return join(this.sLanguage, this.sScript, this.sRegion, this.sVariant, this.sExtension, this.sPrivateUse);\n },\n toLanguageTag: function () {\n var sLanguage = this.getModernLanguage();\n var sScript = this.sScript;\n if (sLanguage === 'sr' && sScript === 'Latn') {\n sLanguage = 'sh';\n sScript = null;\n }\n return join(sLanguage, sScript, this.sRegion, this.sVariant, this.sExtension, this.sPrivateUse);\n },\n getModernLanguage: function () {\n return M_ISO639_OLD_TO_NEW[this.sLanguage] || this.sLanguage;\n },\n getSAPLogonLanguage: function () {\n var sLanguage = this.sLanguage || '';\n if (sLanguage.indexOf('-') >= 0) {\n sLanguage = sLanguage.slice(0, sLanguage.indexOf('-'));\n }\n sLanguage = M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;\n if (sLanguage === 'zh' && !this.sScript && this.sRegion === 'TW') {\n return 'ZF';\n }\n return M_LOCALE_TO_ABAP_LANGUAGE[join(sLanguage, this.sScript)] || M_LOCALE_TO_ABAP_LANGUAGE[join(sLanguage, this.sRegion)] || M_LOCALE_TO_ABAP_LANGUAGE[getPseudoLanguageTag(this.sPrivateUse)] || sLanguage.toUpperCase();\n },\n getPreferredCalendarType: function () {\n return Locale._mPreferredCalendar[this.getLanguage() + '-' + this.getRegion()] || Locale._mPreferredCalendar[this.getLanguage()] || Locale._mPreferredCalendar['default'];\n }\n});\nfunction getPseudoLanguageTag(sPrivateUse) {\n if (sPrivateUse) {\n var m = /-(saptrc|sappsd|saprigi)(?:-|$)/i.exec(sPrivateUse);\n return m && 'en-US-x-' + m[1].toLowerCase();\n }\n}\nvar M_ISO639_OLD_TO_NEW = {\n 'iw': 'he',\n 'ji': 'yi'\n};\nvar M_ABAP_LANGUAGE_TO_LOCALE = {\n 'ZH': 'zh-Hans',\n 'ZF': 'zh-Hant',\n 'SH': 'sr-Latn',\n '6N': 'en-GB',\n '1P': 'pt-PT',\n '1X': 'es-MX',\n '3F': 'fr-CA',\n '1Q': 'en-US-x-saptrc',\n '2Q': 'en-US-x-sappsd',\n '3Q': 'en-US-x-saprigi'\n};\nvar M_LOCALE_TO_ABAP_LANGUAGE = inverse(M_ABAP_LANGUAGE_TO_LOCALE);\nfunction getDesigntimePropertyAsArray(sValue) {\n var m = /\\$([-a-z0-9A-Z._]+)(?::([^$]*))?\\$/.exec(sValue);\n return m && m[2] ? m[2].split(/,/) : null;\n}\nvar A_RTL_LOCALES = getDesigntimePropertyAsArray('$cldr-rtl-locales:ar,fa,he$') || [];\nLocale._cldrLocales = getDesigntimePropertyAsArray('$cldr-locales:ar,ar_EG,ar_SA,bg,ca,cy,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$');\nLocale._mPreferredCalendar = {\n 'ar-SA': CalendarType.Islamic,\n 'fa': CalendarType.Persian,\n 'th': CalendarType.Buddhist,\n 'default': CalendarType.Gregorian\n};\nLocale._coreI18nLocales = getDesigntimePropertyAsArray('$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,en_GB,es,es_MX,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$');\nLocale._impliesRTL = function (vLanguage) {\n var oLocale = vLanguage instanceof Locale ? vLanguage : new Locale(vLanguage);\n var sLanguage = oLocale.getLanguage() || '';\n sLanguage = sLanguage && M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;\n var sRegion = oLocale.getRegion() || '';\n if (sRegion && A_RTL_LOCALES.indexOf(sLanguage + '_' + sRegion) >= 0) {\n return true;\n }\n return A_RTL_LOCALES.indexOf(sLanguage) >= 0;\n};\nLocale.fromSAPLogonLanguage = function (sSAPLogonLanguage) {\n if (sSAPLogonLanguage && typeof sSAPLogonLanguage === 'string') {\n sSAPLogonLanguage = M_ABAP_LANGUAGE_TO_LOCALE[sSAPLogonLanguage.toUpperCase()] || sSAPLogonLanguage;\n try {\n return new Locale(sSAPLogonLanguage);\n } catch (e) {\n }\n }\n};\nfunction join() {\n return Array.prototype.filter.call(arguments, Boolean).join('-');\n}\nfunction inverse(obj) {\n return Object.keys(obj).reduce(function (inv, key) {\n inv[obj[key]] = key;\n return inv;\n }, {});\n}\nexport default Locale;","import { attachLanguageChange } from \"../locale/languageChange.js\";\nimport getLocale from \"../locale/getLocale.js\";\nimport { DEFAULT_LOCALE, SUPPORTED_LOCALES } from \"../generated/AssetParameters.js\";\nimport { getFeature } from \"../FeaturesRegistry.js\";\n\nconst localeDataMap = new Map();\nconst loaders = new Map();\nconst cldrPromises = new Map();\nconst reportedErrors = new Set();\nlet warningShown = false;\n\nconst M_ISO639_OLD_TO_NEW = {\n\t\"iw\": \"he\",\n\t\"ji\": \"yi\",\n\t\"in\": \"id\",\n};\n\nconst DEV_MODE = false;\n\nconst _showAssetsWarningOnce = localeId => {\n\tif (warningShown) {\n\t\treturn;\n\t}\n\n\tif (!DEV_MODE) {\n\t\tconsole.warn(`[LocaleData] Supported locale \"${localeId}\" not configured, import the \"Assets.js\" module from the webcomponents package you are using.`); /* eslint-disable-line */\n\t} else {\n\t\tconsole.warn(`[LocaleData] Note: in dev mode, CLDR assets might be disabled for performance reasons. Try running \"ENABLE_CLDR=1 yarn start\" to test CLDR assets.`); /* eslint-disable-line */\n\t}\n\n\twarningShown = true;\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// Special case 3: for Serbian, there are cyrillic and latin scripts, \"sh\" and \"sr-latn\" map to \"latin\", \"sr\" maps to cyrillic.\n\tif (language === \"sh\" || (language === \"sr\" && script === \"Latn\")) {\n\t\tlanguage = \"sr\";\n\t\tregion = \"Latn\";\n\t}\n\n\t// try language + region\n\tlet localeId = `${language}_${region}`;\n\tif (SUPPORTED_LOCALES.includes(localeId)) {\n\t\tif (loaders.has(localeId)) {\n\t\t\t// supported and has loader\n\t\t\treturn localeId;\n\t\t}\n\n\t\t// supported, no loader - fallback to default and warn\n\t\t_showAssetsWarningOnce(localeId);\n\t\treturn DEFAULT_LOCALE;\n\t}\n\n\t// not supported, try language only\n\tlocaleId = language;\n\tif (SUPPORTED_LOCALES.includes(localeId)) {\n\t\tif (loaders.has(localeId)) {\n\t\t\t// supported and has loader\n\t\t\treturn localeId;\n\t\t}\n\n\t\t// supported, no loader - fallback to default and warn\n\t\t_showAssetsWarningOnce(localeId);\n\t\treturn DEFAULT_LOCALE;\n\t}\n\n\t// not supported - fallback to default locale\n\treturn DEFAULT_LOCALE;\n};\n\n// internal set data\nconst setLocaleData = (localeId, content) => {\n\tlocaleDataMap.set(localeId, content);\n};\n\n// external getSync\nconst getLocaleData = localeId => {\n\t// if there is no loader, the default fallback was fetched and a warning was given - use default locale instead\n\tif (!loaders.has(localeId)) {\n\t\tlocaleId = DEFAULT_LOCALE;\n\t}\n\n\tconst content = localeDataMap.get(localeId);\n\tif (!content) {\n\t\tthrow new Error(`CLDR data for locale ${localeId} is not loaded!`);\n\t}\n\n\treturn content;\n};\n\n// load bundle over the network once\nconst _loadCldrOnce = localeId => {\n\tconst loadCldr = loaders.get(localeId);\n\n\tif (!cldrPromises.get(localeId)) {\n\t\tcldrPromises.set(localeId, loadCldr(localeId));\n\t}\n\n\treturn cldrPromises.get(localeId);\n};\n\n// external getAsync\nconst fetchCldr = async (language, region, script) => {\n\tconst localeId = calcLocale(language, region, script);\n\n\t// reuse OpenUI5 CLDR if present\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\tif (OpenUI5Support) {\n\t\tconst cldrContent = OpenUI5Support.getLocaleDataObject();\n\t\tif (cldrContent) {\n\t\t\t// only if openui5 actually returned valid content\n\t\t\tsetLocaleData(localeId, cldrContent);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// fetch it\n\ttry {\n\t\tconst cldrContent = await _loadCldrOnce(localeId);\n\t\tsetLocaleData(localeId, cldrContent);\n\t} catch (e) {\n\t\tif (!reportedErrors.has(e.message)) {\n\t\t\treportedErrors.add(e.message);\n\t\t\tconsole.error(e.message); /* eslint-disable-line */\n\t\t}\n\t}\n};\n\nconst registerLocaleDataLoader = (localeId, loader) => {\n\tloaders.set(localeId, loader);\n};\n\n// register default loader for \"en\" from ui5 CDN (dev workflow without assets)\nregisterLocaleDataLoader(\"en\", async runtimeLocaleId => {\n\treturn (await fetch(`https://ui5.sap.com/1.103.0/resources/sap/ui/core/cldr/en.json`)).json();\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\tregisterLocaleDataLoader,\n\tfetchCldr,\n\tgetLocaleData,\n};\n","import { getLocaleData } from \"@ui5/webcomponents-base/dist/asset-registries/LocaleData.js\";\n\nconst loadResource = moduleName => {\n\tconst moduleFormat = moduleName.match(/sap\\/ui\\/core\\/cldr\\/(\\w+)\\.json/);\n\tif (!moduleFormat) {\n\t\tthrow new Error(`Unknown module \"${moduleName}\"`);\n\t}\n\n\tconst localeId = moduleFormat[1];\n\treturn getLocaleData(localeId);\n};\n\nconst LoaderExtensions = {\n\tloadResource,\n};\n\nexport default LoaderExtensions;\n","import Core from './Core.js';\nimport extend from '../../base/util/extend.js';\nimport BaseObject from '../base/Object.js';\nimport CalendarType from './CalendarType.js';\nimport Locale from './Locale.js';\nimport assert from '../../base/assert.js';\nimport LoaderExtensions from '../../base/util/LoaderExtensions.js';\nvar LocaleData = BaseObject.extend('sap.ui.core.LocaleData', {\n constructor: function (oLocale) {\n this.oLocale = oLocale;\n BaseObject.apply(this);\n var oDataLoaded = getData(oLocale);\n this.mData = oDataLoaded.mData;\n this.sCLDRLocaleId = oDataLoaded.sCLDRLocaleId;\n },\n _get: function () {\n return this._getDeep(this.mData, arguments);\n },\n _getMerged: function () {\n return this._get.apply(this, arguments);\n },\n _getDeep: function (oObject, aPropertyNames) {\n var oResult = oObject;\n for (var i = 0; i < aPropertyNames.length; i++) {\n oResult = oResult[aPropertyNames[i]];\n if (oResult === undefined) {\n break;\n }\n }\n return oResult;\n },\n getOrientation: function () {\n return this._get('orientation');\n },\n getCurrentLanguageName: function () {\n var oLanguages = this.getLanguages();\n var sCurrentLanguage;\n var sLanguage = this.oLocale.getModernLanguage();\n var sScript = this.oLocale.getScript();\n if (sLanguage === 'sr' && sScript === 'Latn') {\n sLanguage = 'sh';\n sScript = null;\n }\n if (this.oLocale.getRegion()) {\n sCurrentLanguage = oLanguages[sLanguage + '_' + this.oLocale.getRegion()];\n }\n if (!sCurrentLanguage && sScript) {\n sCurrentLanguage = oLanguages[sLanguage + '_' + sScript];\n }\n if (!sCurrentLanguage) {\n sCurrentLanguage = oLanguages[sLanguage];\n }\n return sCurrentLanguage;\n },\n getLanguages: function () {\n return this._get('languages');\n },\n getScripts: function () {\n return this._get('scripts');\n },\n getTerritories: function () {\n return this._get('territories');\n },\n getMonths: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'months', 'format', sWidth);\n },\n getMonthsStandAlone: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'months', 'stand-alone', sWidth);\n },\n getDays: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide' || sWidth == 'short', 'sWidth must be narrow, abbreviate, wide or short');\n return this._get(getCLDRCalendarName(sCalendarType), 'days', 'format', sWidth);\n },\n getDaysStandAlone: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide' || sWidth == 'short', 'sWidth must be narrow, abbreviated, wide or short');\n return this._get(getCLDRCalendarName(sCalendarType), 'days', 'stand-alone', sWidth);\n },\n getQuarters: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'quarters', 'format', sWidth);\n },\n getQuartersStandAlone: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'quarters', 'stand-alone', sWidth);\n },\n getDayPeriods: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'dayPeriods', 'format', sWidth);\n },\n getDayPeriodsStandAlone: function (sWidth, sCalendarType) {\n assert(sWidth == 'narrow' || sWidth == 'abbreviated' || sWidth == 'wide', 'sWidth must be narrow, abbreviated or wide');\n return this._get(getCLDRCalendarName(sCalendarType), 'dayPeriods', 'stand-alone', sWidth);\n },\n getDatePattern: function (sStyle, sCalendarType) {\n assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');\n return this._get(getCLDRCalendarName(sCalendarType), 'dateFormats', sStyle);\n },\n getTimePattern: function (sStyle, sCalendarType) {\n assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');\n return this._get(getCLDRCalendarName(sCalendarType), 'timeFormats', sStyle);\n },\n getDateTimePattern: function (sStyle, sCalendarType) {\n assert(sStyle == 'short' || sStyle == 'medium' || sStyle == 'long' || sStyle == 'full', 'sStyle must be short, medium, long or full');\n return this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', sStyle);\n },\n getCombinedDateTimePattern: function (sDateStyle, sTimeStyle, sCalendarType) {\n assert(sDateStyle == 'short' || sDateStyle == 'medium' || sDateStyle == 'long' || sDateStyle == 'full', 'sStyle must be short, medium, long or full');\n assert(sTimeStyle == 'short' || sTimeStyle == 'medium' || sTimeStyle == 'long' || sTimeStyle == 'full', 'sStyle must be short, medium, long or full');\n var sDateTimePattern = this.getDateTimePattern(sDateStyle, sCalendarType), sDatePattern = this.getDatePattern(sDateStyle, sCalendarType), sTimePattern = this.getTimePattern(sTimeStyle, sCalendarType);\n return sDateTimePattern.replace('{0}', sTimePattern).replace('{1}', sDatePattern);\n },\n getCombinedDateTimeWithTimezonePattern: function (sDateStyle, sTimeStyle, sCalendarType) {\n return this.applyTimezonePattern(this.getCombinedDateTimePattern(sDateStyle, sTimeStyle, sCalendarType));\n },\n applyTimezonePattern: function (sPattern) {\n var aPatterns = [sPattern];\n var aMissingTokens = [{\n group: 'Timezone',\n length: 2,\n field: 'zone',\n symbol: 'V'\n }];\n this._appendItems(aPatterns, aMissingTokens);\n return aPatterns[0];\n },\n getCustomDateTimePattern: function (sSkeleton, sCalendarType) {\n var oAvailableFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'availableFormats');\n return this._getFormatPattern(sSkeleton, oAvailableFormats, sCalendarType);\n },\n getIntervalPattern: function (sId, sCalendarType) {\n var oIntervalFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'intervalFormats'), aIdParts, sIntervalId, sDifference, oInterval, sPattern;\n if (sId) {\n aIdParts = sId.split('-');\n sIntervalId = aIdParts[0];\n sDifference = aIdParts[1];\n oInterval = oIntervalFormats[sIntervalId];\n if (oInterval) {\n sPattern = oInterval[sDifference];\n if (sPattern) {\n return sPattern;\n }\n }\n }\n return oIntervalFormats.intervalFormatFallback;\n },\n getCombinedIntervalPattern: function (sPattern, sCalendarType) {\n var oIntervalFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'intervalFormats'), sFallbackPattern = oIntervalFormats.intervalFormatFallback;\n return sFallbackPattern.replace(/\\{(0|1)\\}/g, sPattern);\n },\n getCustomIntervalPattern: function (sSkeleton, vGreatestDiff, sCalendarType) {\n var oAvailableFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'intervalFormats');\n return this._getFormatPattern(sSkeleton, oAvailableFormats, sCalendarType, vGreatestDiff);\n },\n _getFormatPattern: function (sSkeleton, oAvailableFormats, sCalendarType, vDiff) {\n var vPattern, aPatterns, oIntervalFormats;\n if (!vDiff) {\n vPattern = oAvailableFormats[sSkeleton];\n } else if (typeof vDiff === 'string') {\n if (vDiff == 'j' || vDiff == 'J') {\n vDiff = this.getPreferredHourSymbol();\n }\n oIntervalFormats = oAvailableFormats[sSkeleton];\n vPattern = oIntervalFormats && oIntervalFormats[vDiff];\n }\n if (vPattern) {\n if (typeof vPattern === 'object') {\n aPatterns = Object.keys(vPattern).map(function (sKey) {\n return vPattern[sKey];\n });\n } else {\n return vPattern;\n }\n }\n if (!aPatterns) {\n aPatterns = this._createFormatPattern(sSkeleton, oAvailableFormats, sCalendarType, vDiff);\n }\n if (aPatterns && aPatterns.length === 1) {\n return aPatterns[0];\n }\n return aPatterns;\n },\n _createFormatPattern: function (sSkeleton, oAvailableFormats, sCalendarType, vDiff) {\n var aTokens = this._parseSkeletonFormat(sSkeleton), aPatterns, oBestMatch = this._findBestMatch(aTokens, sSkeleton, oAvailableFormats), oToken, oAvailableDateTimeFormats, oSymbol, oGroup, sPattern, sSinglePattern, sDiffSymbol, sDiffGroup, rMixedSkeleton = /^([GyYqQMLwWEecdD]+)([hHkKjJmszZvVOXx]+)$/, bSingleDate, i;\n if (vDiff) {\n if (typeof vDiff === 'string') {\n sDiffGroup = mCLDRSymbols[vDiff] ? mCLDRSymbols[vDiff].group : '';\n if (sDiffGroup) {\n bSingleDate = mCLDRSymbolGroups[sDiffGroup].index > aTokens[aTokens.length - 1].index;\n }\n sDiffSymbol = vDiff;\n } else {\n bSingleDate = true;\n if (aTokens[0].symbol === 'y' && oBestMatch && oBestMatch.pattern.G) {\n oSymbol = mCLDRSymbols['G'];\n oGroup = mCLDRSymbolGroups[oSymbol.group];\n aTokens.splice(0, 0, {\n symbol: 'G',\n group: oSymbol.group,\n match: oSymbol.match,\n index: oGroup.index,\n field: oGroup.field,\n length: 1\n });\n }\n for (i = aTokens.length - 1; i >= 0; i--) {\n oToken = aTokens[i];\n if (vDiff[oToken.group]) {\n bSingleDate = false;\n break;\n }\n }\n for (i = 0; i < aTokens.length; i++) {\n oToken = aTokens[i];\n if (vDiff[oToken.group]) {\n sDiffSymbol = oToken.symbol;\n break;\n }\n }\n if ((sDiffSymbol == 'h' || sDiffSymbol == 'K') && vDiff.DayPeriod) {\n sDiffSymbol = 'a';\n }\n }\n if (bSingleDate) {\n return [this.getCustomDateTimePattern(sSkeleton, sCalendarType)];\n }\n if (oBestMatch && oBestMatch.missingTokens.length === 0) {\n sPattern = oBestMatch.pattern[sDiffSymbol];\n if (sPattern && oBestMatch.distance > 0) {\n sPattern = this._expandFields(sPattern, oBestMatch.patternTokens, aTokens);\n }\n }\n if (!sPattern) {\n oAvailableDateTimeFormats = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'availableFormats');\n if (rMixedSkeleton.test(sSkeleton) && 'ahHkKjJms'.indexOf(sDiffSymbol) >= 0) {\n sPattern = this._getMixedFormatPattern(sSkeleton, oAvailableDateTimeFormats, sCalendarType, vDiff);\n } else {\n sSinglePattern = this._getFormatPattern(sSkeleton, oAvailableDateTimeFormats, sCalendarType);\n sPattern = this.getCombinedIntervalPattern(sSinglePattern, sCalendarType);\n }\n }\n aPatterns = [sPattern];\n } else if (!oBestMatch) {\n sPattern = sSkeleton;\n aPatterns = [sPattern];\n } else {\n if (typeof oBestMatch.pattern === 'string') {\n aPatterns = [oBestMatch.pattern];\n } else if (typeof oBestMatch.pattern === 'object') {\n aPatterns = [];\n for (var sKey in oBestMatch.pattern) {\n sPattern = oBestMatch.pattern[sKey];\n aPatterns.push(sPattern);\n }\n }\n if (oBestMatch.distance > 0) {\n if (oBestMatch.missingTokens.length > 0) {\n if (rMixedSkeleton.test(sSkeleton)) {\n aPatterns = [this._getMixedFormatPattern(sSkeleton, oAvailableFormats, sCalendarType)];\n } else {\n aPatterns = this._expandFields(aPatterns, oBestMatch.patternTokens, aTokens);\n aPatterns = this._appendItems(aPatterns, oBestMatch.missingTokens, sCalendarType);\n }\n } else {\n aPatterns = this._expandFields(aPatterns, oBestMatch.patternTokens, aTokens);\n }\n }\n }\n if (sSkeleton.indexOf('J') >= 0) {\n aPatterns.forEach(function (sPattern, iIndex) {\n aPatterns[iIndex] = sPattern.replace(/ ?[abB](?=([^']*'[^']*')*[^']*)$/g, '');\n });\n }\n return aPatterns;\n },\n _parseSkeletonFormat: function (sSkeleton) {\n var aTokens = [], oToken = { index: -1 }, sSymbol, oSymbol, oGroup;\n for (var i = 0; i < sSkeleton.length; i++) {\n sSymbol = sSkeleton.charAt(i);\n if (sSymbol == 'j' || sSymbol == 'J') {\n sSymbol = this.getPreferredHourSymbol();\n }\n if (sSymbol == oToken.symbol) {\n oToken.length++;\n continue;\n }\n oSymbol = mCLDRSymbols[sSymbol];\n oGroup = mCLDRSymbolGroups[oSymbol.group];\n if (oSymbol.group == 'Other' || oGroup.diffOnly) {\n throw new Error('Symbol \\'' + sSymbol + '\\' is not allowed in skeleton format \\'' + sSkeleton + '\\'');\n }\n if (oGroup.index <= oToken.index) {\n throw new Error('Symbol \\'' + sSymbol + '\\' at wrong position or duplicate in skeleton format \\'' + sSkeleton + '\\'');\n }\n oToken = {\n symbol: sSymbol,\n group: oSymbol.group,\n match: oSymbol.match,\n index: oGroup.index,\n field: oGroup.field,\n length: 1\n };\n aTokens.push(oToken);\n }\n return aTokens;\n },\n _findBestMatch: function (aTokens, sSkeleton, oAvailableFormats) {\n var aTestTokens, aMissingTokens, oToken, oTestToken, iTest, iDistance, bMatch, iFirstDiffPos, oTokenSymbol, oTestTokenSymbol, oBestMatch = {\n distance: 10000,\n firstDiffPos: -1\n };\n for (var sTestSkeleton in oAvailableFormats) {\n if (sTestSkeleton === 'intervalFormatFallback' || sTestSkeleton.indexOf('B') > -1) {\n continue;\n }\n aTestTokens = this._parseSkeletonFormat(sTestSkeleton);\n iDistance = 0;\n aMissingTokens = [];\n bMatch = true;\n if (aTokens.length < aTestTokens.length) {\n continue;\n }\n iTest = 0;\n iFirstDiffPos = aTokens.length;\n for (var i = 0; i < aTokens.length; i++) {\n oToken = aTokens[i];\n oTestToken = aTestTokens[iTest];\n if (iFirstDiffPos === aTokens.length) {\n iFirstDiffPos = i;\n }\n if (oTestToken) {\n oTokenSymbol = mCLDRSymbols[oToken.symbol];\n oTestTokenSymbol = mCLDRSymbols[oTestToken.symbol];\n if (oToken.symbol === oTestToken.symbol) {\n if (oToken.length === oTestToken.length) {\n if (iFirstDiffPos === i) {\n iFirstDiffPos = aTokens.length;\n }\n } else {\n if (oToken.length < oTokenSymbol.numericCeiling ? oTestToken.length < oTestTokenSymbol.numericCeiling : oTestToken.length >= oTestTokenSymbol.numericCeiling) {\n iDistance += Math.abs(oToken.length - oTestToken.length);\n } else {\n iDistance += 5;\n }\n }\n iTest++;\n continue;\n } else {\n if (oToken.match == oTestToken.match) {\n iDistance += Math.abs(oToken.length - oTestToken.length) + 10;\n iTest++;\n continue;\n }\n }\n }\n aMissingTokens.push(oToken);\n iDistance += 50 - i;\n }\n if (iTest < aTestTokens.length) {\n bMatch = false;\n }\n if (bMatch && (iDistance < oBestMatch.distance || iDistance === oBestMatch.distance && iFirstDiffPos > oBestMatch.firstDiffPos)) {\n oBestMatch.distance = iDistance;\n oBestMatch.firstDiffPos = iFirstDiffPos;\n oBestMatch.missingTokens = aMissingTokens;\n oBestMatch.pattern = oAvailableFormats[sTestSkeleton];\n oBestMatch.patternTokens = aTestTokens;\n }\n }\n if (oBestMatch.pattern) {\n return oBestMatch;\n }\n },\n _expandFields: function (vPattern, aPatternTokens, aTokens) {\n var bSinglePattern = typeof vPattern === 'string';\n var aPatterns;\n if (bSinglePattern) {\n aPatterns = [vPattern];\n } else {\n aPatterns = vPattern;\n }\n var aResult = aPatterns.map(function (sPattern) {\n var mGroups = {}, mPatternGroups = {}, sResultPatterm = '', bQuoted = false, i = 0, iSkeletonLength, iPatternLength, iBestLength, iNewLength, oSkeletonToken, oBestToken, oSymbol, sChar;\n aTokens.forEach(function (oToken) {\n mGroups[oToken.group] = oToken;\n });\n aPatternTokens.forEach(function (oToken) {\n mPatternGroups[oToken.group] = oToken;\n });\n while (i < sPattern.length) {\n sChar = sPattern.charAt(i);\n if (bQuoted) {\n sResultPatterm += sChar;\n if (sChar == '\\'') {\n bQuoted = false;\n }\n } else {\n oSymbol = mCLDRSymbols[sChar];\n if (oSymbol && mGroups[oSymbol.group] && mPatternGroups[oSymbol.group]) {\n oSkeletonToken = mGroups[oSymbol.group];\n oBestToken = mPatternGroups[oSymbol.group];\n iSkeletonLength = oSkeletonToken.length;\n iBestLength = oBestToken.length;\n iPatternLength = 1;\n while (sPattern.charAt(i + 1) == sChar) {\n i++;\n iPatternLength++;\n }\n if (iSkeletonLength === iBestLength || (iSkeletonLength < oSymbol.numericCeiling ? iPatternLength >= oSymbol.numericCeiling : iPatternLength < oSymbol.numericCeiling)) {\n iNewLength = iPatternLength;\n } else {\n iNewLength = Math.max(iPatternLength, iSkeletonLength);\n }\n for (var j = 0; j < iNewLength; j++) {\n sResultPatterm += sChar;\n }\n } else {\n sResultPatterm += sChar;\n if (sChar == '\\'') {\n bQuoted = true;\n }\n }\n }\n i++;\n }\n return sResultPatterm;\n });\n return bSinglePattern ? aResult[0] : aResult;\n },\n _appendItems: function (aPatterns, aMissingTokens, sCalendarType) {\n var oAppendItems = this._get(getCLDRCalendarName(sCalendarType), 'dateTimeFormats', 'appendItems');\n aPatterns.forEach(function (sPattern, iIndex) {\n var sDisplayName, sAppendPattern, sAppendField;\n aMissingTokens.forEach(function (oToken) {\n sAppendPattern = oAppendItems[oToken.group];\n sDisplayName = '\\'' + this.getDisplayName(oToken.field) + '\\'';\n sAppendField = '';\n for (var i = 0; i < oToken.length; i++) {\n sAppendField += oToken.symbol;\n }\n aPatterns[iIndex] = sAppendPattern.replace(/\\{0\\}/, sPattern).replace(/\\{1\\}/, sAppendField).replace(/\\{2\\}/, sDisplayName);\n }.bind(this));\n }.bind(this));\n return aPatterns;\n },\n _getMixedFormatPattern: function (sSkeleton, oAvailableFormats, sCalendarType, vDiff) {\n var rMixedSkeleton = /^([GyYqQMLwWEecdD]+)([hHkKjJmszZvVOXx]+)$/, rWideMonth = /MMMM|LLLL/, rAbbrevMonth = /MMM|LLL/, rWeekDay = /E|e|c/, oResult, sDateSkeleton, sTimeSkeleton, sStyle, sDatePattern, sTimePattern, sDateTimePattern, sResultPattern;\n oResult = rMixedSkeleton.exec(sSkeleton);\n sDateSkeleton = oResult[1];\n sTimeSkeleton = oResult[2];\n sDatePattern = this._getFormatPattern(sDateSkeleton, oAvailableFormats, sCalendarType);\n if (vDiff) {\n sTimePattern = this.getCustomIntervalPattern(sTimeSkeleton, vDiff, sCalendarType);\n } else {\n sTimePattern = this._getFormatPattern(sTimeSkeleton, oAvailableFormats, sCalendarType);\n }\n if (rWideMonth.test(sDateSkeleton)) {\n sStyle = rWeekDay.test(sDateSkeleton) ? 'full' : 'long';\n } else if (rAbbrevMonth.test(sDateSkeleton)) {\n sStyle = 'medium';\n } else {\n sStyle = 'short';\n }\n sDateTimePattern = this.getDateTimePattern(sStyle, sCalendarType);\n sResultPattern = sDateTimePattern.replace(/\\{1\\}/, sDatePattern).replace(/\\{0\\}/, sTimePattern);\n return sResultPattern;\n },\n getNumberSymbol: function (sType) {\n assert(sType == 'decimal' || sType == 'group' || sType == 'plusSign' || sType == 'minusSign' || sType == 'percentSign', 'sType must be decimal, group, plusSign, minusSign or percentSign');\n return this._get('symbols-latn-' + sType);\n },\n getLenientNumberSymbols: function (sType) {\n assert(sType == 'plusSign' || sType == 'minusSign', 'sType must be plusSign or minusSign');\n return this._get('lenient-scope-number')[sType];\n },\n getDecimalPattern: function () {\n return this._get('decimalFormat').standard;\n },\n getCurrencyPattern: function (sContext) {\n return this._get('currencyFormat')[sContext] || this._get('currencyFormat').standard;\n },\n getCurrencySpacing: function (sPosition) {\n return this._get('currencyFormat', 'currencySpacing', sPosition === 'after' ? 'afterCurrency' : 'beforeCurrency');\n },\n getPercentPattern: function () {\n return this._get('percentFormat').standard;\n },\n getMiscPattern: function (sName) {\n assert(sName == 'approximately' || sName == 'atLeast' || sName == 'atMost' || sName == 'range', 'sName must be approximately, atLeast, atMost or range');\n return this._get('miscPattern')[sName];\n },\n getMinimalDaysInFirstWeek: function () {\n return this._get('weekData-minDays');\n },\n getFirstDayOfWeek: function () {\n return this._get('weekData-firstDay');\n },\n getWeekendStart: function () {\n return this._get('weekData-weekendStart');\n },\n getWeekendEnd: function () {\n return this._get('weekData-weekendEnd');\n },\n getCustomCurrencyCodes: function () {\n var mCustomCurrencies = this._get('currency') || {}, mCustomCurrencyCodes = {};\n Object.keys(mCustomCurrencies).forEach(function (sCurrencyKey) {\n mCustomCurrencyCodes[sCurrencyKey] = sCurrencyKey;\n });\n return mCustomCurrencyCodes;\n },\n getCurrencyDigits: function (sCurrency) {\n var mCustomCurrencies = this._get('currency');\n if (mCustomCurrencies) {\n if (mCustomCurrencies[sCurrency] && mCustomCurrencies[sCurrency].hasOwnProperty('digits')) {\n return mCustomCurrencies[sCurrency].digits;\n } else if (mCustomCurrencies['DEFAULT'] && mCustomCurrencies['DEFAULT'].hasOwnProperty('digits')) {\n return mCustomCurrencies['DEFAULT'].digits;\n }\n }\n var iDigits = this._get('currencyDigits', sCurrency);\n if (iDigits == null) {\n iDigits = this._get('currencyDigits', 'DEFAULT');\n if (iDigits == null) {\n iDigits = 2;\n }\n }\n return iDigits;\n },\n getCurrencySymbol: function (sCurrency) {\n var oCurrencySymbols = this.getCurrencySymbols();\n return oCurrencySymbols && oCurrencySymbols[sCurrency] || sCurrency;\n },\n getCurrencyCodeBySymbol: function (sCurrencySymbol) {\n var oCurrencySymbols = this._get('currencySymbols'), sCurrencyCode;\n for (sCurrencyCode in oCurrencySymbols) {\n if (oCurrencySymbols[sCurrencyCode] === sCurrencySymbol) {\n return sCurrencyCode;\n }\n }\n return sCurrencySymbol;\n },\n getCurrencySymbols: function () {\n var mCustomCurrencies = this._get('currency'), mCustomCurrencySymbols = {}, sIsoCode;\n for (var sCurrencyKey in mCustomCurrencies) {\n sIsoCode = mCustomCurrencies[sCurrencyKey].isoCode;\n if (mCustomCurrencies[sCurrencyKey].symbol) {\n mCustomCurrencySymbols[sCurrencyKey] = mCustomCurrencies[sCurrencyKey].symbol;\n } else if (sIsoCode) {\n mCustomCurrencySymbols[sCurrencyKey] = this._get('currencySymbols')[sIsoCode];\n }\n }\n return Object.assign({}, this._get('currencySymbols'), mCustomCurrencySymbols);\n },\n getUnitDisplayName: function (sUnit) {\n var mUnitFormat = this.getUnitFormat(sUnit);\n return mUnitFormat && mUnitFormat['displayName'] || '';\n },\n getRelativePatterns: function (aScales, sStyle) {\n if (sStyle === undefined) {\n sStyle = 'wide';\n }\n assert(sStyle === 'wide' || sStyle === 'short' || sStyle === 'narrow', 'sStyle is only allowed to be set with \\'wide\\', \\'short\\' or \\'narrow\\'');\n var aPatterns = [], aPluralCategories = this.getPluralCategories(), oScale, oTimeEntry, iValue, iSign;\n if (!aScales) {\n aScales = [\n 'year',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second'\n ];\n }\n aScales.forEach(function (sScale) {\n oScale = this._get('dateFields', sScale + '-' + sStyle);\n for (var sEntry in oScale) {\n if (sEntry.indexOf('relative-type-') === 0) {\n iValue = parseInt(sEntry.substr(14));\n aPatterns.push({\n scale: sScale,\n value: iValue,\n pattern: oScale[sEntry]\n });\n } else if (sEntry.indexOf('relativeTime-type-') == 0) {\n oTimeEntry = oScale[sEntry];\n iSign = sEntry.substr(18) === 'past' ? -1 : 1;\n aPluralCategories.forEach(function (sKey) {\n aPatterns.push({\n scale: sScale,\n sign: iSign,\n pattern: oTimeEntry['relativeTimePattern-count-' + sKey]\n });\n });\n }\n }\n }.bind(this));\n return aPatterns;\n },\n getRelativePattern: function (sScale, iDiff, bFuture, sStyle) {\n var sPattern, oTypes, sKey, sPluralCategory;\n if (typeof bFuture === 'string') {\n sStyle = bFuture;\n bFuture = undefined;\n }\n if (bFuture === undefined) {\n bFuture = iDiff > 0;\n }\n if (sStyle === undefined) {\n sStyle = 'wide';\n }\n assert(sStyle === 'wide' || sStyle === 'short' || sStyle === 'narrow', 'sStyle is only allowed to be set with \\'wide\\', \\'short\\' or \\'narrow\\'');\n sKey = sScale + '-' + sStyle;\n if (iDiff === 0 || iDiff === -2 || iDiff === 2) {\n sPattern = this._get('dateFields', sKey, 'relative-type-' + iDiff);\n }\n if (!sPattern) {\n oTypes = this._get('dateFields', sKey, 'relativeTime-type-' + (bFuture ? 'future' : 'past'));\n sPluralCategory = this.getPluralCategory(Math.abs(iDiff).toString());\n sPattern = oTypes['relativeTimePattern-count-' + sPluralCategory];\n }\n return sPattern;\n },\n getRelativeSecond: function (iDiff, sStyle) {\n return this.getRelativePattern('second', iDiff, sStyle);\n },\n getRelativeMinute: function (iDiff, sStyle) {\n if (iDiff == 0) {\n return null;\n }\n return this.getRelativePattern('minute', iDiff, sStyle);\n },\n getRelativeHour: function (iDiff, sStyle) {\n if (iDiff == 0) {\n return null;\n }\n return this.getRelativePattern('hour', iDiff, sStyle);\n },\n getRelativeDay: function (iDiff, sStyle) {\n return this.getRelativePattern('day', iDiff, sStyle);\n },\n getRelativeWeek: function (iDiff, sStyle) {\n return this.getRelativePattern('week', iDiff, sStyle);\n },\n getRelativeMonth: function (iDiff, sStyle) {\n return this.getRelativePattern('month', iDiff, sStyle);\n },\n getDisplayName: function (sType, sStyle) {\n assert(sType == 'second' || sType == 'minute' || sType == 'hour' || sType == 'zone' || sType == 'day' || sType == 'weekday' || sType == 'week' || sType == 'month' || sType == 'quarter' || sType == 'year' || sType == 'era', 'sType must be second, minute, hour, zone, day, weekday, week, month, quarter, year, era');\n if (sStyle === undefined) {\n sStyle = 'wide';\n }\n assert(sStyle === 'wide' || sStyle === 'short' || sStyle === 'narrow', 'sStyle is only allowed to be set with \\'wide\\', \\'short\\' or \\'narrow\\'');\n var aSingleFormFields = [\n 'era',\n 'weekday',\n 'zone'\n ], sKey = aSingleFormFields.indexOf(sType) === -1 ? sType + '-' + sStyle : sType;\n return this._get('dateFields', sKey, 'displayName');\n },\n getRelativeYear: function (iDiff, sStyle) {\n return this.getRelativePattern('year', iDiff, sStyle);\n },\n getDecimalFormat: function (sStyle, sNumber, sPlural) {\n var sFormat;\n var oFormats;\n switch (sStyle) {\n case 'long':\n oFormats = this._get('decimalFormat-long');\n break;\n default:\n oFormats = this._get('decimalFormat-short');\n break;\n }\n if (oFormats) {\n var sName = sNumber + '-' + sPlural;\n sFormat = oFormats[sName];\n if (!sFormat) {\n sName = sNumber + '-other';\n sFormat = oFormats[sName];\n }\n }\n return sFormat;\n },\n getCurrencyFormat: function (sStyle, sNumber, sPlural) {\n var sFormat;\n var oFormats = this._get('currencyFormat-' + sStyle);\n if (!oFormats) {\n if (sStyle === 'sap-short') {\n throw new Error('Failed to get CLDR data for property \"currencyFormat-sap-short\"');\n }\n oFormats = this._get('currencyFormat-short');\n }\n if (oFormats) {\n var sName = sNumber + '-' + sPlural;\n sFormat = oFormats[sName];\n if (!sFormat) {\n sName = sNumber + '-other';\n sFormat = oFormats[sName];\n }\n }\n return sFormat;\n },\n getListFormat: function (sType, sStyle) {\n var oFormats = this._get('listPattern-' + (sType || 'standard') + '-' + (sStyle || 'wide'));\n if (oFormats) {\n return oFormats;\n }\n return {};\n },\n getResolvedUnitFormat: function (sUnit) {\n sUnit = this.getUnitFromMapping(sUnit) || sUnit;\n return this.getUnitFormat(sUnit);\n },\n getUnitFormat: function (sUnit) {\n return this._get('units', 'short', sUnit);\n },\n getUnitFormats: function () {\n return this._getMerged('units', 'short');\n },\n getUnitFromMapping: function (sMapping) {\n return this._get('unitMappings', sMapping);\n },\n getEras: function (sWidth, sCalendarType) {\n assert(sWidth == 'wide' || sWidth == 'abbreviated' || sWidth == 'narrow', 'sWidth must be wide, abbreviate or narrow');\n var oEras = this._get(getCLDRCalendarName(sCalendarType), 'era-' + sWidth), aEras = [];\n for (var i in oEras) {\n aEras[parseInt(i)] = oEras[i];\n }\n return aEras;\n },\n getEraDates: function (sCalendarType) {\n var oEraDates = this._get('eras-' + sCalendarType.toLowerCase()), aEraDates = [];\n for (var i in oEraDates) {\n aEraDates[parseInt(i)] = oEraDates[i];\n }\n return aEraDates;\n },\n getCalendarWeek: function (sStyle, iWeekNumber) {\n assert(sStyle == 'wide' || sStyle == 'narrow', 'sStyle must be wide or narrow');\n var oMessageBundle = Core.getLibraryResourceBundle('sap.ui.core', this.oLocale.toString()), sKey = 'date.week.calendarweek.' + sStyle;\n return oMessageBundle.getText(sKey, iWeekNumber);\n },\n firstDayStartsFirstWeek: function () {\n return this._get('weekData-algorithm') === 'FIRSTDAY_STARTS_FIRSTWEEK';\n },\n getPreferredCalendarType: function () {\n var sCalendarPreference = this._get('calendarPreference'), aCalendars = sCalendarPreference ? sCalendarPreference.split(' ') : [], sCalendarName, sType, i;\n for (i = 0; i < aCalendars.length; i++) {\n sCalendarName = aCalendars[i].split('-')[0];\n for (sType in CalendarType) {\n if (sCalendarName === sType.toLowerCase()) {\n return sType;\n }\n }\n }\n return CalendarType.Gregorian;\n },\n getPreferredHourSymbol: function () {\n return this._get('timeData', '_preferred');\n },\n getPluralCategories: function () {\n var oPlurals = this._get('plurals'), aCategories = Object.keys(oPlurals);\n aCategories.push('other');\n return aCategories;\n },\n getPluralCategory: function (sNumber) {\n var oPlurals = this._get('plurals');\n if (typeof sNumber === 'number') {\n sNumber = sNumber.toString();\n }\n if (!this._pluralTest) {\n this._pluralTest = {};\n }\n for (var sCategory in oPlurals) {\n var fnTest = this._pluralTest[sCategory];\n if (!fnTest) {\n fnTest = this._parsePluralRule(oPlurals[sCategory]);\n this._pluralTest[sCategory] = fnTest;\n }\n if (fnTest(sNumber)) {\n return sCategory;\n }\n }\n return 'other';\n },\n _parsePluralRule: function (sRule) {\n var OP_OR = 'or', OP_AND = 'and', OP_MOD = '%', OP_EQ = '=', OP_NEQ = '!=', OPD_N = 'n', OPD_I = 'i', OPD_F = 'f', OPD_T = 't', OPD_V = 'v', OPD_W = 'w', RANGE = '..', SEP = ',';\n var i = 0, aTokens;\n aTokens = sRule.split(' ');\n function accept(sToken) {\n if (aTokens[i] === sToken) {\n i++;\n return true;\n }\n return false;\n }\n function consume() {\n var sToken = aTokens[i];\n i++;\n return sToken;\n }\n function or_condition() {\n var fnAnd, fnOr;\n fnAnd = and_condition();\n if (accept(OP_OR)) {\n fnOr = or_condition();\n return function (o) {\n return fnAnd(o) || fnOr(o);\n };\n }\n return fnAnd;\n }\n function and_condition() {\n var fnRelation, fnAnd;\n fnRelation = relation();\n if (accept(OP_AND)) {\n fnAnd = and_condition();\n return function (o) {\n return fnRelation(o) && fnAnd(o);\n };\n }\n return fnRelation;\n }\n function relation() {\n var fnExpr, fnRangeList, bEq;\n fnExpr = expr();\n if (accept(OP_EQ)) {\n bEq = true;\n } else if (accept(OP_NEQ)) {\n bEq = false;\n } else {\n throw new Error('Expected \\'=\\' or \\'!=\\'');\n }\n fnRangeList = range_list();\n if (bEq) {\n return function (o) {\n return fnRangeList(o).indexOf(fnExpr(o)) >= 0;\n };\n } else {\n return function (o) {\n return fnRangeList(o).indexOf(fnExpr(o)) === -1;\n };\n }\n }\n function expr() {\n var fnOperand;\n fnOperand = operand();\n if (accept(OP_MOD)) {\n var iDivisor = parseInt(consume());\n return function (o) {\n return fnOperand(o) % iDivisor;\n };\n }\n return fnOperand;\n }\n function operand() {\n if (accept(OPD_N)) {\n return function (o) {\n return o.n;\n };\n } else if (accept(OPD_I)) {\n return function (o) {\n return o.i;\n };\n } else if (accept(OPD_F)) {\n return function (o) {\n return o.f;\n };\n } else if (accept(OPD_T)) {\n return function (o) {\n return o.t;\n };\n } else if (accept(OPD_V)) {\n return function (o) {\n return o.v;\n };\n } else if (accept(OPD_W)) {\n return function (o) {\n return o.w;\n };\n } else {\n throw new Error('Unknown operand: ' + consume());\n }\n }\n function range_list() {\n var aValues = [], sRangeList = consume(), aParts = sRangeList.split(SEP), aRange, iFrom, iTo;\n aParts.forEach(function (sPart) {\n aRange = sPart.split(RANGE);\n if (aRange.length === 1) {\n aValues.push(parseInt(sPart));\n } else {\n iFrom = parseInt(aRange[0]);\n iTo = parseInt(aRange[1]);\n for (var i = iFrom; i <= iTo; i++) {\n aValues.push(i);\n }\n }\n });\n return function (o) {\n return aValues;\n };\n }\n var fnOr = or_condition();\n if (i != aTokens.length) {\n throw new Error('Not completely parsed');\n }\n return function (sValue) {\n var iDotPos = sValue.indexOf('.'), sDecimal, sFraction, sFractionNoZeros, o;\n if (iDotPos === -1) {\n sDecimal = sValue;\n sFraction = '';\n sFractionNoZeros = '';\n } else {\n sDecimal = sValue.substr(0, iDotPos);\n sFraction = sValue.substr(iDotPos + 1);\n sFractionNoZeros = sFraction.replace(/0+$/, '');\n }\n o = {\n n: parseFloat(sValue),\n i: parseInt(sDecimal),\n v: sFraction.length,\n w: sFractionNoZeros.length,\n f: parseInt(sFraction),\n t: parseInt(sFractionNoZeros)\n };\n return fnOr(o);\n };\n }\n});\nvar mCLDRSymbolGroups = {\n 'Era': {\n field: 'era',\n index: 0\n },\n 'Year': {\n field: 'year',\n index: 1\n },\n 'Quarter': {\n field: 'quarter',\n index: 2\n },\n 'Month': {\n field: 'month',\n index: 3\n },\n 'Week': {\n field: 'week',\n index: 4\n },\n 'Day-Of-Week': {\n field: 'weekday',\n index: 5\n },\n 'Day': {\n field: 'day',\n index: 6\n },\n 'DayPeriod': {\n field: 'hour',\n index: 7,\n diffOnly: true\n },\n 'Hour': {\n field: 'hour',\n index: 8\n },\n 'Minute': {\n field: 'minute',\n index: 9\n },\n 'Second': {\n field: 'second',\n index: 10\n },\n 'Timezone': {\n field: 'zone',\n index: 11\n }\n};\nvar mCLDRSymbols = {\n 'G': {\n group: 'Era',\n match: 'Era',\n numericCeiling: 1\n },\n 'y': {\n group: 'Year',\n match: 'Year',\n numericCeiling: 100\n },\n 'Y': {\n group: 'Year',\n match: 'Year',\n numericCeiling: 100\n },\n 'Q': {\n group: 'Quarter',\n match: 'Quarter',\n numericCeiling: 3\n },\n 'q': {\n group: 'Quarter',\n match: 'Quarter',\n numericCeiling: 3\n },\n 'M': {\n group: 'Month',\n match: 'Month',\n numericCeiling: 3\n },\n 'L': {\n group: 'Month',\n match: 'Month',\n numericCeiling: 3\n },\n 'w': {\n group: 'Week',\n match: 'Week',\n numericCeiling: 100\n },\n 'W': {\n group: 'Week',\n match: 'Week',\n numericCeiling: 100\n },\n 'd': {\n group: 'Day',\n match: 'Day',\n numericCeiling: 100\n },\n 'D': {\n group: 'Day',\n match: 'Day',\n numericCeiling: 100\n },\n 'E': {\n group: 'Day-Of-Week',\n match: 'Day-Of-Week',\n numericCeiling: 1\n },\n 'e': {\n group: 'Day-Of-Week',\n match: 'Day-Of-Week',\n numericCeiling: 3\n },\n 'c': {\n group: 'Day-Of-Week',\n match: 'Day-Of-Week',\n numericCeiling: 2\n },\n 'h': {\n group: 'Hour',\n match: 'Hour12',\n numericCeiling: 100\n },\n 'H': {\n group: 'Hour',\n match: 'Hour24',\n numericCeiling: 100\n },\n 'k': {\n group: 'Hour',\n match: 'Hour24',\n numericCeiling: 100\n },\n 'K': {\n group: 'Hour',\n match: 'Hour12',\n numericCeiling: 100\n },\n 'm': {\n group: 'Minute',\n match: 'Minute',\n numericCeiling: 100\n },\n 's': {\n group: 'Second',\n match: 'Second',\n numericCeiling: 100\n },\n 'z': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'Z': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'O': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'v': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'V': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'X': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'x': {\n group: 'Timezone',\n match: 'Timezone',\n numericCeiling: 1\n },\n 'S': {\n group: 'Other',\n numericCeiling: 100\n },\n 'u': {\n group: 'Other',\n numericCeiling: 100\n },\n 'U': {\n group: 'Other',\n numericCeiling: 1\n },\n 'r': {\n group: 'Other',\n numericCeiling: 100\n },\n 'F': {\n group: 'Other',\n numericCeiling: 100\n },\n 'g': {\n group: 'Other',\n numericCeiling: 100\n },\n 'a': {\n group: 'DayPeriod',\n numericCeiling: 1\n },\n 'b': {\n group: 'Other',\n numericCeiling: 1\n },\n 'B': {\n group: 'Other',\n numericCeiling: 1\n },\n 'A': {\n group: 'Other',\n numericCeiling: 100\n }\n};\nvar M_ISO639_OLD_TO_NEW = {\n 'iw': 'he',\n 'ji': 'yi'\n};\nvar M_SUPPORTED_LOCALES = function () {\n var LOCALES = Locale._cldrLocales, result = {}, i;\n if (LOCALES) {\n for (i = 0; i < LOCALES.length; i++) {\n result[LOCALES[i]] = true;\n }\n }\n return result;\n}();\nvar mLocaleDatas = {};\nfunction getCLDRCalendarName(sCalendarType) {\n if (!sCalendarType) {\n sCalendarType = Core.getConfiguration().getCalendarType();\n }\n return 'ca-' + sCalendarType.toLowerCase();\n}\nfunction getData(oLocale) {\n var sLanguage = oLocale.getLanguage() || '', sScript = oLocale.getScript() || '', sRegion = oLocale.getRegion() || '', mData;\n function merge(obj, fallbackObj) {\n var name, value, fallbackValue;\n if (!fallbackObj) {\n return;\n }\n for (name in fallbackObj) {\n if (fallbackObj.hasOwnProperty(name)) {\n value = obj[name];\n fallbackValue = fallbackObj[name];\n if (value === undefined) {\n obj[name] = fallbackValue;\n } else if (value === null) {\n delete obj[name];\n } else if (typeof value === 'object' && typeof fallbackValue === 'object') {\n merge(value, fallbackValue);\n }\n }\n }\n }\n function getOrLoad(sId) {\n if (!mLocaleDatas[sId] && (!M_SUPPORTED_LOCALES || M_SUPPORTED_LOCALES[sId] === true)) {\n var data = mLocaleDatas[sId] = LoaderExtensions.loadResource('sap/ui/core/cldr/' + sId + '.json', {\n dataType: 'json',\n failOnError: false\n });\n if (data && data.__fallbackLocale) {\n merge(data, getOrLoad(data.__fallbackLocale));\n delete data.__fallbackLocale;\n }\n }\n return mLocaleDatas[sId];\n }\n sLanguage = sLanguage && M_ISO639_OLD_TO_NEW[sLanguage] || sLanguage;\n if (sLanguage === 'no') {\n sLanguage = 'nb';\n }\n if (sLanguage === 'zh' && !sRegion) {\n if (sScript === 'Hans') {\n sRegion = 'CN';\n } else if (sScript === 'Hant') {\n sRegion = 'TW';\n }\n }\n if (sLanguage === 'sh' || sLanguage === 'sr' && sScript === 'Latn') {\n sLanguage = 'sr_Latn';\n }\n var sId = sLanguage + '_' + sRegion;\n var sCLDRLocaleId = sId;\n if (sLanguage && sRegion) {\n mData = getOrLoad(sId);\n }\n if (!mData && sLanguage) {\n mData = getOrLoad(sLanguage);\n sCLDRLocaleId = sLanguage;\n }\n if (!mData) {\n mData = getOrLoad('en');\n sCLDRLocaleId = 'en';\n }\n mLocaleDatas[sId] = mData;\n sCLDRLocaleId = sCLDRLocaleId.replace(/_/g, '-');\n return {\n mData: mData,\n sCLDRLocaleId: sCLDRLocaleId\n };\n}\nvar CustomLocaleData = LocaleData.extend('sap.ui.core.CustomLocaleData', {\n constructor: function (oLocale) {\n LocaleData.apply(this, arguments);\n this.mCustomData = Core.getConfiguration().getFormatSettings().getCustomLocaleData();\n },\n _get: function () {\n var aArguments = Array.prototype.slice.call(arguments), sCalendar, sKey;\n if (aArguments[0].indexOf('ca-') == 0) {\n sCalendar = aArguments[0];\n if (sCalendar == getCLDRCalendarName()) {\n aArguments = aArguments.slice(1);\n }\n }\n sKey = aArguments.join('-');\n var vValue = this.mCustomData[sKey];\n if (vValue == null) {\n vValue = this._getDeep(this.mCustomData, arguments);\n if (vValue == null) {\n vValue = this._getDeep(this.mData, arguments);\n }\n }\n return vValue;\n },\n _getMerged: function () {\n var mData = this._getDeep(this.mData, arguments);\n var mCustomData = this._getDeep(this.mCustomData, arguments);\n return extend({}, mData, mCustomData);\n }\n});\nLocaleData.getInstance = function (oLocale) {\n return oLocale.hasPrivateUseSubtag('sapufmt') ? new CustomLocaleData(oLocale) : new LocaleData(oLocale);\n};\nexport default LocaleData;","var mRegistry = new Map();\nvar _Calendars = {\n get: function (sCalendarType) {\n if (!mRegistry.has(sCalendarType)) {\n throw new Error(\"Required calendar type: \" + sCalendarType + \" not loaded.\");\n }\n return mRegistry.get(sCalendarType);\n },\n set: function (sCalendarType, CalendarClass) {\n mRegistry.set(sCalendarType, CalendarClass);\n }\n};\nexport default _Calendars;\n","import Core from '../Core.js';\nimport BaseObject from '../../base/Object.js';\nimport LocaleData from '../LocaleData.js';\nimport _Calendars from './_Calendars.js';\nvar UniversalDate = BaseObject.extend('sap.ui.core.date.UniversalDate', {\n constructor: function () {\n var clDate = UniversalDate.getClass();\n return this.createDate(clDate, arguments);\n }\n});\nUniversalDate.UTC = function () {\n var clDate = UniversalDate.getClass();\n return clDate.UTC.apply(clDate, arguments);\n};\nUniversalDate.now = function () {\n return Date.now();\n};\nUniversalDate.prototype.createDate = function (clDate, aArgs) {\n switch (aArgs.length) {\n case 0:\n return new clDate();\n case 1:\n return new clDate(aArgs[0] instanceof Date ? aArgs[0].getTime() : aArgs[0]);\n case 2:\n return new clDate(aArgs[0], aArgs[1]);\n case 3:\n return new clDate(aArgs[0], aArgs[1], aArgs[2]);\n case 4:\n return new clDate(aArgs[0], aArgs[1], aArgs[2], aArgs[3]);\n case 5:\n return new clDate(aArgs[0], aArgs[1], aArgs[2], aArgs[3], aArgs[4]);\n case 6:\n return new clDate(aArgs[0], aArgs[1], aArgs[2], aArgs[3], aArgs[4], aArgs[5]);\n case 7:\n return new clDate(aArgs[0], aArgs[1], aArgs[2], aArgs[3], aArgs[4], aArgs[5], aArgs[6]);\n }\n};\nUniversalDate.getInstance = function (oDate, sCalendarType) {\n var clDate, oInstance;\n if (oDate instanceof UniversalDate) {\n oDate = oDate.getJSDate();\n } else if (!oDate) {\n oDate = new Date();\n }\n if (isNaN(oDate.getTime())) {\n throw new Error('The given date object is invalid');\n }\n if (!sCalendarType) {\n sCalendarType = Core.getConfiguration().getCalendarType();\n }\n clDate = UniversalDate.getClass(sCalendarType);\n oInstance = Object.create(clDate.prototype);\n oInstance.oDate = oDate;\n oInstance.sCalendarType = sCalendarType;\n return oInstance;\n};\nUniversalDate.getClass = function (sCalendarType) {\n if (!sCalendarType) {\n sCalendarType = Core.getConfiguration().getCalendarType();\n }\n return _Calendars.get(sCalendarType);\n};\n[\n 'getDate',\n 'getMonth',\n 'getFullYear',\n 'getYear',\n 'getDay',\n 'getHours',\n 'getMinutes',\n 'getSeconds',\n 'getMilliseconds',\n 'getUTCDate',\n 'getUTCMonth',\n 'getUTCFullYear',\n 'getUTCDay',\n 'getUTCHours',\n 'getUTCMinutes',\n 'getUTCSeconds',\n 'getUTCMilliseconds',\n 'getTime',\n 'valueOf',\n 'getTimezoneOffset',\n 'toString',\n 'toDateString',\n 'setDate',\n 'setFullYear',\n 'setYear',\n 'setMonth',\n 'setHours',\n 'setMinutes',\n 'setSeconds',\n 'setMilliseconds',\n 'setUTCDate',\n 'setUTCFullYear',\n 'setUTCMonth',\n 'setUTCHours',\n 'setUTCMinutes',\n 'setUTCSeconds',\n 'setUTCMilliseconds'\n].forEach(function (sName) {\n UniversalDate.prototype[sName] = function () {\n return this.oDate[sName].apply(this.oDate, arguments);\n };\n});\nUniversalDate.prototype.getJSDate = function () {\n return this.oDate;\n};\nUniversalDate.prototype.getCalendarType = function () {\n return this.sCalendarType;\n};\nUniversalDate.prototype.getEra = function () {\n return UniversalDate.getEraByDate(this.sCalendarType, this.oDate.getFullYear(), this.oDate.getMonth(), this.oDate.getDate());\n};\nUniversalDate.prototype.setEra = function (iEra) {\n};\nUniversalDate.prototype.getUTCEra = function () {\n return UniversalDate.getEraByDate(this.sCalendarType, this.oDate.getUTCFullYear(), this.oDate.getUTCMonth(), this.oDate.getUTCDate());\n};\nUniversalDate.prototype.setUTCEra = function (iEra) {\n};\nUniversalDate.prototype.getWeek = function () {\n return UniversalDate.getWeekByDate(this.sCalendarType, this.getFullYear(), this.getMonth(), this.getDate());\n};\nUniversalDate.prototype.setWeek = function (oWeek) {\n var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);\n this.setFullYear(oDate.year, oDate.month, oDate.day);\n};\nUniversalDate.prototype.getUTCWeek = function () {\n return UniversalDate.getWeekByDate(this.sCalendarType, this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate());\n};\nUniversalDate.prototype.setUTCWeek = function (oWeek) {\n var oDate = UniversalDate.getFirstDateOfWeek(this.sCalendarType, oWeek.year || this.getFullYear(), oWeek.week);\n this.setUTCFullYear(oDate.year, oDate.month, oDate.day);\n};\nUniversalDate.prototype.getQuarter = function () {\n return Math.floor(this.getMonth() / 3);\n};\nUniversalDate.prototype.getUTCQuarter = function () {\n return Math.floor(this.getUTCMonth() / 3);\n};\nUniversalDate.prototype.getDayPeriod = function () {\n if (this.getHours() < 12) {\n return 0;\n } else {\n return 1;\n }\n};\nUniversalDate.prototype.getUTCDayPeriod = function () {\n if (this.getUTCHours() < 12) {\n return 0;\n } else {\n return 1;\n }\n};\nUniversalDate.prototype.getTimezoneShort = function () {\n if (this.oDate.getTimezoneShort) {\n return this.oDate.getTimezoneShort();\n }\n};\nUniversalDate.prototype.getTimezoneLong = function () {\n if (this.oDate.getTimezoneLong) {\n return this.oDate.getTimezoneLong();\n }\n};\nvar iMillisecondsInWeek = 7 * 24 * 60 * 60 * 1000;\nUniversalDate.getWeekByDate = function (sCalendarType, iYear, iMonth, iDay) {\n var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(clDate.UTC(iYear, iMonth, iDay)), iWeek, iLastYear, iNextYear, oLastFirstDay, oNextFirstDay;\n if (oLocaleData.firstDayStartsFirstWeek()) {\n iWeek = calculateWeeks(oFirstDay, oDate);\n } else {\n iLastYear = iYear - 1;\n iNextYear = iYear + 1;\n oLastFirstDay = getFirstDayOfFirstWeek(clDate, iLastYear);\n oNextFirstDay = getFirstDayOfFirstWeek(clDate, iNextYear);\n if (oDate >= oNextFirstDay) {\n iYear = iNextYear;\n iWeek = 0;\n } else if (oDate < oFirstDay) {\n iYear = iLastYear;\n iWeek = calculateWeeks(oLastFirstDay, oDate);\n } else {\n iWeek = calculateWeeks(oFirstDay, oDate);\n }\n }\n return {\n year: iYear,\n week: iWeek\n };\n};\nUniversalDate.getFirstDateOfWeek = function (sCalendarType, iYear, iWeek) {\n var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), clDate = this.getClass(sCalendarType), oFirstDay = getFirstDayOfFirstWeek(clDate, iYear), oDate = new clDate(oFirstDay.valueOf() + iWeek * iMillisecondsInWeek), bIsRegionUS = oLocaleData.firstDayStartsFirstWeek();\n if (bIsRegionUS && iWeek === 0 && oFirstDay.getUTCFullYear() < iYear) {\n return {\n year: iYear,\n month: 0,\n day: 1\n };\n }\n return {\n year: oDate.getUTCFullYear(),\n month: oDate.getUTCMonth(),\n day: oDate.getUTCDate()\n };\n};\nfunction getFirstDayOfFirstWeek(clDate, iYear) {\n var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), iMinDays = oLocaleData.getMinimalDaysInFirstWeek(), iFirstDayOfWeek = oLocaleData.getFirstDayOfWeek(), oFirstDay = new clDate(clDate.UTC(iYear, 0, 1)), iDayCount = 7;\n if (isNaN(oFirstDay.getTime())) {\n throw new Error('Could not determine the first day of the week, because the date ' + 'object is invalid');\n }\n while (oFirstDay.getUTCDay() !== iFirstDayOfWeek) {\n oFirstDay.setUTCDate(oFirstDay.getUTCDate() - 1);\n iDayCount--;\n }\n if (iDayCount < iMinDays) {\n oFirstDay.setUTCDate(oFirstDay.getUTCDate() + 7);\n }\n return oFirstDay;\n}\nfunction calculateWeeks(oFromDate, oToDate) {\n return Math.floor((oToDate.valueOf() - oFromDate.valueOf()) / iMillisecondsInWeek);\n}\nvar mEras = {};\nUniversalDate.getEraByDate = function (sCalendarType, iYear, iMonth, iDay) {\n var aEras = getEras(sCalendarType), iTimestamp = new Date(0).setUTCFullYear(iYear, iMonth, iDay), oEra;\n for (var i = aEras.length - 1; i >= 0; i--) {\n oEra = aEras[i];\n if (!oEra) {\n continue;\n }\n if (oEra._start && iTimestamp >= oEra._startInfo.timestamp) {\n return i;\n }\n if (oEra._end && iTimestamp < oEra._endInfo.timestamp) {\n return i;\n }\n }\n};\nUniversalDate.getCurrentEra = function (sCalendarType) {\n var oNow = new Date();\n return this.getEraByDate(sCalendarType, oNow.getFullYear(), oNow.getMonth(), oNow.getDate());\n};\nUniversalDate.getEraStartDate = function (sCalendarType, iEra) {\n var aEras = getEras(sCalendarType), oEra = aEras[iEra] || aEras[0];\n if (oEra._start) {\n return oEra._startInfo;\n }\n};\nfunction getEras(sCalendarType) {\n var oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale(), oLocaleData = LocaleData.getInstance(oLocale), aEras = mEras[sCalendarType];\n if (!aEras) {\n var aEras = oLocaleData.getEraDates(sCalendarType);\n if (!aEras[0]) {\n aEras[0] = { _start: '1-1-1' };\n }\n for (var i = 0; i < aEras.length; i++) {\n var oEra = aEras[i];\n if (!oEra) {\n continue;\n }\n if (oEra._start) {\n oEra._startInfo = parseDateString(oEra._start);\n }\n if (oEra._end) {\n oEra._endInfo = parseDateString(oEra._end);\n }\n }\n mEras[sCalendarType] = aEras;\n }\n return aEras;\n}\nfunction parseDateString(sDateString) {\n var aParts = sDateString.split('-'), iYear, iMonth, iDay;\n if (aParts[0] == '') {\n iYear = -parseInt(aParts[1]);\n iMonth = parseInt(aParts[2]) - 1;\n iDay = parseInt(aParts[3]);\n } else {\n iYear = parseInt(aParts[0]);\n iMonth = parseInt(aParts[1]) - 1;\n iDay = parseInt(aParts[2]);\n }\n return {\n timestamp: new Date(0).setUTCFullYear(iYear, iMonth, iDay),\n year: iYear,\n month: iMonth,\n day: iDay\n };\n}\nexport default UniversalDate;","import UniversalDate from \"../sap/ui/core/date/UniversalDate.js\";\n\nclass CalendarDate {\n\tconstructor() {\n\t\tlet aArgs = arguments, // eslint-disable-line\n\t\t\toJSDate,\n\t\t\toNow,\n\t\t\tsCalendarType;\n\n\t\tswitch (aArgs.length) {\n\t\tcase 0: // defaults to the current date\n\t\t\toNow = new Date();\n\t\t\treturn this.constructor(oNow.getFullYear(), oNow.getMonth(), oNow.getDate());\n\n\t\tcase 1: // CalendarDate\n\t\tcase 2: // CalendarDate, sCalendarType\n\t\t\tif (!(aArgs[0] instanceof CalendarDate)) {\n\t\t\t\tthrow new Error(\"Invalid arguments: the first argument must be of type sap.ui.unified.calendar.CalendarDate.\");\n\t\t\t}\n\t\t\tsCalendarType = aArgs[1] ? aArgs[1] : aArgs[0]._oUDate.sCalendarType;\n\t\t\t// Use source.valueOf() (returns the same point of time regardless calendar type) instead of\n\t\t\t// source's getters to avoid non-gregorian Year, Month and Date may be used to construct a Gregorian date\n\t\t\toJSDate = new Date(aArgs[0].valueOf());\n\n\t\t\t// Make this date really local. Now getters are safe.\n\t\t\toJSDate.setFullYear(oJSDate.getUTCFullYear(), oJSDate.getUTCMonth(), oJSDate.getUTCDate());\n\t\t\toJSDate.setHours(oJSDate.getUTCHours(), oJSDate.getUTCMinutes(), oJSDate.getUTCSeconds(), oJSDate.getUTCMilliseconds());\n\n\t\t\tthis._oUDate = createUniversalUTCDate(oJSDate, sCalendarType);\n\t\t\tbreak;\n\n\t\tcase 3: // year, month, date\n\t\tcase 4: // year, month, date, sCalendarType\n\t\t\tcheckNumericLike(aArgs[0], `Invalid year: ${aArgs[0]}`);\n\t\t\tcheckNumericLike(aArgs[1], `Invalid month: ${aArgs[1]}`);\n\t\t\tcheckNumericLike(aArgs[2], `Invalid date: ${aArgs[2]}`);\n\n\t\t\toJSDate = new Date(0, 0, 1);\n\t\t\toJSDate.setFullYear(aArgs[0], aArgs[1], aArgs[2]); // 2 digits year is not supported. If so, it is considered as full year as well.\n\n\t\t\tif (aArgs[3]) {\n\t\t\t\tsCalendarType = aArgs[3];\n\t\t\t}\n\t\t\tthis._oUDate = createUniversalUTCDate(oJSDate, sCalendarType);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error(`${\"Invalid arguments. Accepted arguments are: 1) oCalendarDate, (optional)calendarType\"\n\t\t\t\t+ \"or 2) year, month, date, (optional) calendarType\"}${aArgs}`);\n\t\t}\n\t}\n\n\tgetYear() {\n\t\treturn this._oUDate.getUTCFullYear();\n\t}\n\n\tsetYear(year) {\n\t\tcheckNumericLike(year, `Invalid year: ${year}`);\n\t\tthis._oUDate.setUTCFullYear(year);\n\t\treturn this;\n\t}\n\n\tgetMonth() {\n\t\treturn this._oUDate.getUTCMonth();\n\t}\n\n\t/**\n\t * Sets the given month as ordinal month of the year.\n\t * @param {int} month An integer between 0 and 11, representing the months January through December( or their\n\t * equivalent month names for the given calendar).\n\t * If the specified value is is outside of the expected range, this method attempts to update the date information\n\t * accordingly. For example, if 12 is given as a month, the year will be incremented by 1, and 1 will be used for month.\n\t * @param {int} [date] An integer between 1 and 31, representing the day of the month, but other values are allowed.\n\t * 0 will result in the previous month's last day.\n\t * -1 will result in the day before the previous month's last day.\n\t * 32 will result in:\n\t * - first day of the next month if the current month has 31 days.\n\t * - second day of the next month if the current month has 30 days.\n\t * Other value will result in adding or subtracting days according to the given value.\n\t * @returns {sap.ui.unified.calendar.CalendarDate} this
for method chaining.\n\t */\n\tsetMonth(month, date) {\n\t\tcheckNumericLike(month, `Invalid month: ${month}`);\n\t\tif (date || date === 0) {\n\t\t\tcheckNumericLike(date, `Invalid date: ${date}`);\n\t\t\tthis._oUDate.setUTCMonth(month, date);\n\t\t} else {\n\t\t\tthis._oUDate.setUTCMonth(month);\n\t\t}\n\t\treturn this;\n\t}\n\n\tgetDate() {\n\t\treturn this._oUDate.getUTCDate();\n\t}\n\n\tsetDate(date) {\n\t\tcheckNumericLike(date, `Invalid date: ${date}`);\n\t\tthis._oUDate.setUTCDate(date);\n\t\treturn this;\n\t}\n\n\tgetDay() {\n\t\treturn this._oUDate.getUTCDay();\n\t}\n\n\tgetCalendarType() {\n\t\treturn this._oUDate.sCalendarType;\n\t}\n\n\tisBefore(oCalendarDate) {\n\t\tcheckCalendarDate(oCalendarDate);\n\t\treturn this.valueOf() < oCalendarDate.valueOf();\n\t}\n\n\tisAfter(oCalendarDate) {\n\t\tcheckCalendarDate(oCalendarDate);\n\t\treturn this.valueOf() > oCalendarDate.valueOf();\n\t}\n\n\tisSameOrBefore(oCalendarDate) {\n\t\tcheckCalendarDate(oCalendarDate);\n\t\treturn this.valueOf() <= oCalendarDate.valueOf();\n\t}\n\n\tisSameOrAfter(oCalendarDate) {\n\t\tcheckCalendarDate(oCalendarDate);\n\t\treturn this.valueOf() >= oCalendarDate.valueOf();\n\t}\n\n\tisSame(oCalendarDate) {\n\t\tcheckCalendarDate(oCalendarDate);\n\t\treturn this.valueOf() === oCalendarDate.valueOf();\n\t}\n\n\ttoLocalJSDate() {\n\t\t// Use this._oUDate.getTime()(returns the same point of time regardless calendar type) instead of\n\t\t// this._oUDate's getters to avoid non-gregorian Year, Month and Date to be used to construct a Gregorian date\n\t\tconst oLocalDate = new Date(this._oUDate.getTime());\n\n\t\t// Make this date really local. Now getters are safe.\n\t\toLocalDate.setFullYear(oLocalDate.getUTCFullYear(), oLocalDate.getUTCMonth(), oLocalDate.getUTCDate());\n\t\toLocalDate.setHours(0, 0, 0, 0);\n\n\t\treturn oLocalDate;\n\t}\n\n\ttoUTCJSDate() {\n\t\t// Use this._oUDate.getTime()(returns the same point of time regardless calendar type) instead of\n\t\t// this._oUDate's getters to avoid non-gregorian Year, Month and Date to be used to construct a Gregorian date\n\t\tconst oUTCDate = new Date(this._oUDate.getTime());\n\t\toUTCDate.setUTCHours(0, 0, 0, 0);\n\n\t\treturn oUTCDate;\n\t}\n\n\ttoString() {\n\t\treturn `${this._oUDate.sCalendarType}: ${this.getYear()}/${this.getMonth() + 1}/${this.getDate()}`;\n\t}\n\n\tvalueOf() {\n\t\treturn this._oUDate.getTime();\n\t}\n\n\tstatic fromLocalJSDate(oJSDate, sCalendarType) {\n\t\t// Cross frame check for a date should be performed here otherwise setDateValue would fail in OPA tests\n\t\t// because Date object in the test is different than the Date object in the application (due to the iframe).\n\t\t// We can use jQuery.type or this method:\n\t\tfunction isValidDate(date) {\n\t\t\treturn date && Object.prototype.toString.call(date) === \"[object Date]\" && !isNaN(date); // eslint-disable-line\n\t\t}\n\t\tif (!isValidDate(oJSDate)) {\n\t\t\tthrow new Error(`Date parameter must be a JavaScript Date object: [${oJSDate}].`);\n\t\t}\n\t\treturn new CalendarDate(oJSDate.getFullYear(), oJSDate.getMonth(), oJSDate.getDate(), sCalendarType);\n\t}\n\n\tstatic fromTimestamp(iTimestamp, sCalendarType) {\n\t\tconst oCalDate = new CalendarDate(0, 0, 1);\n\t\tlet oUDate;\n\t\ttry {\n\t\t\toUDate = UniversalDate.getInstance(new Date(iTimestamp), sCalendarType);\n\t\t} catch (e) {\n\t\t\toUDate = new Date(NaN); // UniversalDate.getInstance may now throw an Exception - keep the old behavior\n\t\t}\n\t\toCalDate._oUDate = oUDate;\n\t\treturn oCalDate;\n\t}\n}\n\nfunction createUniversalUTCDate(oDate, sCalendarType) {\n\tif (sCalendarType) {\n\t\treturn UniversalDate.getInstance(createUTCDate(oDate), sCalendarType);\n\t}\n\treturn new UniversalDate(createUTCDate(oDate).getTime());\n}\n\n/**\n * Creates a JavaScript UTC Date corresponding to the given JavaScript Date.\n * @param {Date} oDate JavaScript date object. Time related information is cut.\n * @returns {Date} JavaScript date created from the date object, but this time considered as UTC date information.\n */\nfunction createUTCDate(oDate) {\n\tconst oUTCDate = new Date(Date.UTC(0, 0, 1));\n\n\toUTCDate.setUTCFullYear(oDate.getFullYear(), oDate.getMonth(), oDate.getDate());\n\n\treturn oUTCDate;\n}\n\nfunction checkCalendarDate(oCalendarDate) {\n\tif (!(oCalendarDate instanceof CalendarDate)) {\n\t\tthrow new Error(`Invalid calendar date: [${oCalendarDate}]. Expected: sap.ui.unified.calendar.CalendarDate`);\n\t}\n}\n\n/**\n * Verifies the given value is numeric like, i.e. 3, \"3\" and throws an error if it is not.\n * @param {any} value The value of any type to check. If null or undefined, this method throws an error.\n * @param {string} message The message to be used if an error is to be thrown\n * @throws will throw an error if the value is null or undefined or is not like a number\n */\nfunction checkNumericLike(value, message) {\n\tif (value === undefined || value === Infinity || isNaN(value)) { // eslint-disable-line\n\t\tthrow message;\n\t}\n}\n\nexport default CalendarDate;\n","import CalendarDate from \"./CalendarDate.js\";\n\n/**\n * Adds or subtracts a given amount of days/months/years from a date.\n * If minDate or maxDate are given, the result will be enforced within these limits\n *\n * @param date CalendarDate instance\n * @param amount how many days/months/years to add (can be a negative number)\n * @param unit what to modify: \"day\", \"month\" or \"year\"\n * @param minDate minimum date to enforce\n * @param maxDate maximum date to enforce\n */\nconst modifyDateBy = (date, amount, unit, minDate = null, maxDate = null) => {\n\tconst newDate = new CalendarDate(date);\n\tif (unit === \"day\") {\n\t\tnewDate.setDate(date.getDate() + amount);\n\t} else if (unit === \"month\") {\n\t\tnewDate.setMonth(date.getMonth() + amount);\n\t\tconst stillSameMonth = amount === -1 && newDate.getMonth() === date.getMonth(); // f.e. PageUp remained in the same month\n\t\tconst monthSkipped = amount === 1 && newDate.getMonth() - date.getMonth() > 1; // f.e. PageDown skipped a whole month\n\t\tif (stillSameMonth || monthSkipped) { // Select the last day of the month in any of these 2 scenarios\n\t\t\tnewDate.setDate(0);\n\t\t}\n\t} else {\n\t\tnewDate.setYear(date.getYear() + amount);\n\t\tif (newDate.getMonth() !== date.getMonth()) { // f.e. 29th Feb to next/prev year\n\t\t\tnewDate.setDate(0); // Select the last day of the month\n\t\t}\n\t}\n\n\tif (minDate && newDate.valueOf() < minDate.valueOf()) {\n\t\treturn new CalendarDate(minDate);\n\t}\n\n\tif (maxDate && newDate.valueOf() > maxDate.valueOf()) {\n\t\treturn new CalendarDate(maxDate);\n\t}\n\n\treturn newDate;\n};\n\nexport default modifyDateBy;\n","/**\n * Returns a timestamp with only the year, month and day (with zero hours, minutes and seconds) and without 000 for milliseconds\n * @param millisecondsUTC\n * @returns {number}\n */\nconst getRoundedTimestamp = millisecondsUTC => {\n\tif (!millisecondsUTC) {\n\t\tmillisecondsUTC = new Date().getTime();\n\t}\n\tconst rounded = millisecondsUTC - (millisecondsUTC % (24 * 60 * 60 * 1000));\n\treturn rounded / 1000;\n};\n\nexport default getRoundedTimestamp;\n","import CalendarDate from \"./CalendarDate.js\";\n\n/**\n * Returns a UTC timestamp representing today\n * @public\n */\nconst getTodayUTCTimestamp = primaryCalendarType => CalendarDate.fromLocalJSDate(new Date(), primaryCalendarType).valueOf() / 1000;\n\nexport default getTodayUTCTimestamp;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"appointment-2\";\nconst pathData = \"M409.5 52q32 0 54.5 22t22.5 54v307q0 32-22.5 54t-54.5 22h-307q-32 0-54-22t-22-54V128q0-32 22-54t54-22h52V26q0-11 7-18.5t18-7.5T198 7.5t7.5 18.5v26h102V26q0-11 7-18.5t18-7.5q12 0 19 7.5t7 18.5v26h51zm-307 51q-25 0-25 25v77h358v-77q0-11-7.5-18t-18.5-7h-51v25q0 11-7 18.5t-19 7.5q-11 0-18-7.5t-7-18.5v-25h-102v25q0 11-7.5 18.5t-18.5 7.5-18-7.5-7-18.5v-25h-52zm307 357q11 0 18.5-7t7.5-18V256h-358v179q0 25 25 25h307zm-153-166q16 0 27 11t11 28q0 16-11 27t-27 11-27.5-11-11.5-27q0-17 11.5-28t27.5-11zm102 0q16 0 27 11t11 28q0 16-11 27t-27 11-27-11-11-27q0-17 11-28t27-11zm-204 0q16 0 27 11t11 28q0 16-11 27t-27 11q-17 0-28-11t-11-27q0-17 11-28t28-11z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"appointment-2\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"appointment-2\";\nconst pathData = \"M32 481V65q0-14 9.5-23T64 33h64V1h32v32h192V1h32v32h64q14 0 23 9t9 23v416q0 14-9 23t-23 9H64q-13 0-22.5-9T32 481zM384 97V65h-32v32h32zM128 65v32h32V65h-32zm320 416V129H64v352h384zM256 193q14 0 23 9t9 23-9 23-23 9-23-9-9-23 9-23 23-9zm128 0q14 0 23 9t9 23-9 23-23 9-23-9-9-23 9-23 23-9zM96 225q0-14 9-23t23-9 23 9 9 23-9 23-23 9-23-9-9-23zm32 96q14 0 23 9t9 23-9 23-23 9-23-9-9-23 9-23 23-9zm256 0q14 0 23 9t9 23-9 23-23 9-23-9-9-23 9-23 23-9zm-128 0q14 0 23 9t9 23-9 23-23 9-23-9-9-23 9-23 23-9z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"appointment-2\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/appointment-2.js\";\nimport {pathData as pathDataV4} from \"./v4/appointment-2.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"appointment-2\";\nexport { pathData, ltr, accData };","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * Different types of HasPopup.\n * @lends sap.ui.webcomponents.main.types.HasPopup.prototype\n * @public\n */\nconst PopupTypes = {\n\t/**\n\t * Dialog popup type.\n\t * @public\n\t * @type {Dialog}\n\t */\n\tDialog: \"Dialog\",\n\n\t/**\n\t * Grid popup type.\n\t * @public\n\t * @type {Grid}\n\t */\n\tGrid: \"Grid\",\n\n\t/**\n\t * ListBox popup type.\n\t * @public\n\t * @type {ListBox}\n\t */\n\tListBox: \"ListBox\",\n\n\t /**\n\t * Menu popup type.\n\t * @public\n\t * @type {Menu}\n\t */\n\tMenu: \"Menu\",\n\n\t /**\n\t * Tree popup type.\n\t * @public\n\t * @type {Tree}\n\t */\n\tTree: \"Tree\",\n};\n\n/**\n * @class\n * Different types of HasPopup.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.HasPopup\n * @public\n * @enum {string}\n */\nclass HasPopup extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!PopupTypes[value];\n\t}\n}\n\nHasPopup.generateTypeAccessors(PopupTypes);\n\nexport default HasPopup;\n","import Log from '../Log.js';\nvar fnEqual = function (a, b, maxDepth, contains, depth) {\n if (typeof maxDepth == 'boolean') {\n contains = maxDepth;\n maxDepth = undefined;\n }\n if (!depth) {\n depth = 0;\n }\n if (!maxDepth) {\n maxDepth = 10;\n }\n if (depth > maxDepth) {\n Log.warning('deepEqual comparison exceeded maximum recursion depth of ' + maxDepth + '. Treating values as unequal');\n return false;\n }\n if (a === b || Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (!contains && a.length !== b.length) {\n return false;\n }\n if (a.length > b.length) {\n return false;\n }\n for (var i = 0; i < a.length; i++) {\n if (!fnEqual(a[i], b[i], maxDepth, contains, depth + 1)) {\n return false;\n }\n }\n return true;\n }\n if (typeof a == 'object' && typeof b == 'object') {\n if (!a || !b) {\n return false;\n }\n if (a.constructor !== b.constructor) {\n return false;\n }\n if (!contains && Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n if (a instanceof Node) {\n return a.isEqualNode(b);\n }\n if (a instanceof Date) {\n return a.valueOf() === b.valueOf();\n }\n for (var i in a) {\n if (!fnEqual(a[i], b[i], maxDepth, contains, depth + 1)) {\n return false;\n }\n }\n return true;\n }\n return false;\n};\nexport default fnEqual;","import assert from '../assert.js';\nvar rMessageFormat = /('')|'([^']+(?:''[^']*)*)(?:'|$)|\\{([0-9]+(?:\\s*,[^{}]*)?)\\}|[{}]/g;\nvar fnFormatMessage = function (sPattern, aValues) {\n assert(typeof sPattern === 'string' || sPattern instanceof String, 'pattern must be string');\n if (arguments.length > 2 || aValues != null && !Array.isArray(aValues)) {\n aValues = Array.prototype.slice.call(arguments, 1);\n }\n aValues = aValues || [];\n return sPattern.replace(rMessageFormat, function ($0, $1, $2, $3, offset) {\n if ($1) {\n return '\\'';\n } else if ($2) {\n return $2.replace(/''/g, '\\'');\n } else if ($3) {\n return String(aValues[parseInt($3)]);\n }\n throw new Error('formatMessage: pattern syntax error at pos. ' + offset);\n });\n};\nexport default fnFormatMessage;","import Core from '../Core.js';\nimport CalendarType from '../CalendarType.js';\nimport Locale from '../Locale.js';\nimport LocaleData from '../LocaleData.js';\nimport UniversalDate from '../date/UniversalDate.js';\nimport TimezoneUtil from './TimezoneUtil.js';\nimport deepEqual from '../../../base/util/deepEqual.js';\nimport formatMessage from '../../../base/strings/formatMessage.js';\nimport Log from '../../../base/Log.js';\nimport extend from '../../../base/util/extend.js';\nvar DateFormat = function () {\n throw new Error();\n};\nvar mDateFormatTypes = {\n DATE: 'date',\n TIME: 'time',\n DATETIME: 'datetime',\n DATETIME_WITH_TIMEZONE: 'datetimeWithTimezone'\n};\nvar mCldrDatePattern = {};\nvar checkTimezoneParameterType = function (sTimezone) {\n if (typeof sTimezone !== 'string' && !(sTimezone instanceof String) && sTimezone != null) {\n throw new TypeError('The given timezone must be a string.');\n }\n};\nDateFormat.oDateInfo = {\n type: mDateFormatTypes.DATE,\n oDefaultFormatOptions: {\n style: 'medium',\n relativeScale: 'day',\n relativeStyle: 'wide'\n },\n aFallbackFormatOptions: [\n { style: 'short' },\n { style: 'medium' },\n { pattern: 'yyyy-MM-dd' },\n {\n pattern: 'yyyyMMdd',\n strictParsing: true\n }\n ],\n bShortFallbackFormatOptions: true,\n bPatternFallbackWithoutDelimiter: true,\n getPattern: function (oLocaleData, sStyle, sCalendarType) {\n return oLocaleData.getDatePattern(sStyle, sCalendarType);\n },\n oRequiredParts: {\n 'text': true,\n 'year': true,\n 'weekYear': true,\n 'month': true,\n 'day': true\n },\n aRelativeScales: [\n 'year',\n 'month',\n 'week',\n 'day'\n ],\n aRelativeParseScales: [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second'\n ],\n aIntervalCompareFields: [\n 'Era',\n 'FullYear',\n 'Quarter',\n 'Month',\n 'Week',\n 'Date'\n ]\n};\nDateFormat.oDateTimeInfo = {\n type: mDateFormatTypes.DATETIME,\n oDefaultFormatOptions: {\n style: 'medium',\n relativeScale: 'auto',\n relativeStyle: 'wide'\n },\n aFallbackFormatOptions: [\n { style: 'short' },\n { style: 'medium' },\n { pattern: 'yyyy-MM-dd\\'T\\'HH:mm:ss' },\n { pattern: 'yyyyMMdd HHmmss' }\n ],\n getPattern: function (oLocaleData, sStyle, sCalendarType) {\n var iSlashIndex = sStyle.indexOf('/');\n if (iSlashIndex > 0) {\n return oLocaleData.getCombinedDateTimePattern(sStyle.substr(0, iSlashIndex), sStyle.substr(iSlashIndex + 1), sCalendarType);\n } else {\n return oLocaleData.getCombinedDateTimePattern(sStyle, sStyle, sCalendarType);\n }\n },\n oRequiredParts: {\n 'text': true,\n 'year': true,\n 'weekYear': true,\n 'month': true,\n 'day': true,\n 'hour0_23': true,\n 'hour1_24': true,\n 'hour0_11': true,\n 'hour1_12': true\n },\n aRelativeScales: [\n 'year',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second'\n ],\n aRelativeParseScales: [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second'\n ],\n aIntervalCompareFields: [\n 'Era',\n 'FullYear',\n 'Quarter',\n 'Month',\n 'Week',\n 'Date',\n 'DayPeriod',\n 'Hours',\n 'Minutes',\n 'Seconds'\n ]\n};\nDateFormat._getDateTimeWithTimezoneInfo = function (oFormatOptions) {\n var bShowDate = oFormatOptions.showDate === undefined || oFormatOptions.showDate;\n var bShowTime = oFormatOptions.showTime === undefined || oFormatOptions.showTime;\n var bShowTimezone = oFormatOptions.showTimezone === undefined || oFormatOptions.showTimezone;\n var oBaselineType = DateFormat.oDateTimeInfo;\n if (bShowDate && !bShowTime) {\n oBaselineType = DateFormat.oDateInfo;\n } else if (!bShowDate && bShowTime) {\n oBaselineType = DateFormat.oTimeInfo;\n }\n return Object.assign({}, oBaselineType, {\n type: mDateFormatTypes.DATETIME_WITH_TIMEZONE,\n getTimezonePattern: function (sPattern) {\n if (!bShowDate && !bShowTime && bShowTimezone) {\n return 'VV';\n } else if (!bShowTimezone) {\n return sPattern;\n } else {\n return sPattern + ' VV';\n }\n },\n getPattern: function (oLocaleData, sStyle, sCalendarType) {\n if (!bShowDate && !bShowTime && bShowTimezone) {\n return 'VV';\n }\n if (!bShowTimezone) {\n return oBaselineType.getPattern(oLocaleData, sStyle, sCalendarType);\n }\n var sPattern = oBaselineType.getPattern(oLocaleData, sStyle, sCalendarType);\n return oLocaleData.applyTimezonePattern(sPattern);\n }\n });\n};\nDateFormat.oTimeInfo = {\n type: mDateFormatTypes.TIME,\n oDefaultFormatOptions: {\n style: 'medium',\n relativeScale: 'auto',\n relativeStyle: 'wide'\n },\n aFallbackFormatOptions: [\n { style: 'short' },\n { style: 'medium' },\n { pattern: 'HH:mm:ss' },\n { pattern: 'HHmmss' }\n ],\n getPattern: function (oLocaleData, sStyle, sCalendarType) {\n return oLocaleData.getTimePattern(sStyle, sCalendarType);\n },\n oRequiredParts: {\n 'text': true,\n 'hour0_23': true,\n 'hour1_24': true,\n 'hour0_11': true,\n 'hour1_12': true\n },\n aRelativeScales: [\n 'hour',\n 'minute',\n 'second'\n ],\n aRelativeParseScales: [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second'\n ],\n aIntervalCompareFields: [\n 'DayPeriod',\n 'Hours',\n 'Minutes',\n 'Seconds'\n ]\n};\nDateFormat.getInstance = function (oFormatOptions, oLocale) {\n return this.getDateInstance(oFormatOptions, oLocale);\n};\nDateFormat.getDateInstance = function (oFormatOptions, oLocale) {\n return this.createInstance(oFormatOptions, oLocale, this.oDateInfo);\n};\nDateFormat.getDateTimeInstance = function (oFormatOptions, oLocale) {\n return this.createInstance(oFormatOptions, oLocale, this.oDateTimeInfo);\n};\nDateFormat.getDateTimeWithTimezoneInstance = function (oFormatOptions, oLocale) {\n if (oFormatOptions && !(oFormatOptions instanceof Locale)) {\n oFormatOptions = Object.assign({}, oFormatOptions);\n if (typeof oFormatOptions.showTimezone === 'string') {\n var sShowTimezone = oFormatOptions.showTimezone;\n if (oFormatOptions.showDate === undefined && oFormatOptions.showTime === undefined) {\n if (sShowTimezone === 'Hide') {\n oFormatOptions.showTimezone = false;\n } else if (sShowTimezone === 'Only') {\n oFormatOptions.showDate = false;\n oFormatOptions.showTime = false;\n }\n }\n oFormatOptions.showTimezone = sShowTimezone !== 'Hide';\n }\n if (oFormatOptions.showDate === false && oFormatOptions.showTime === false && oFormatOptions.showTimezone === false) {\n throw new TypeError('Invalid Configuration. One of the following format options must be true: showDate, showTime or showTimezone.');\n }\n }\n return this.createInstance(oFormatOptions, oLocale, DateFormat._getDateTimeWithTimezoneInfo(oFormatOptions || {}));\n};\nDateFormat.getTimeInstance = function (oFormatOptions, oLocale) {\n return this.createInstance(oFormatOptions, oLocale, this.oTimeInfo);\n};\nfunction createIntervalPatternWithNormalConnector(oFormat) {\n var sPattern = oFormat.oLocaleData.getIntervalPattern('', oFormat.oFormatOptions.calendarType);\n sPattern = sPattern.replace(/[^\\{\\}01 ]/, '-');\n return sPattern.replace(/\\{(0|1)\\}/g, oFormat.oFormatOptions.pattern);\n}\nDateFormat.createInstance = function (oFormatOptions, oLocale, oInfo) {\n var oFormat = Object.create(this.prototype);\n if (oFormatOptions instanceof Locale) {\n oLocale = oFormatOptions;\n oFormatOptions = undefined;\n }\n if (!oLocale) {\n oLocale = Core.getConfiguration().getFormatSettings().getFormatLocale();\n }\n oFormat.oLocale = oLocale;\n oFormat.oLocaleData = LocaleData.getInstance(oLocale);\n oFormat.oFormatOptions = extend({}, oInfo.oDefaultFormatOptions, oFormatOptions);\n if (oInfo.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n oFormat.oFormatOptions.interval = false;\n oFormat.oFormatOptions.singleIntervalValue = false;\n oFormat.oFormatOptions.UTC = false;\n } else {\n oFormat.oFormatOptions.showTimezone = undefined;\n oFormat.oFormatOptions.showDate = undefined;\n oFormat.oFormatOptions.showTime = undefined;\n }\n oFormat.type = oInfo.type;\n if (!oFormat.oFormatOptions.calendarType) {\n oFormat.oFormatOptions.calendarType = Core.getConfiguration().getCalendarType();\n }\n if (!oFormat.oFormatOptions.pattern) {\n if (oFormat.oFormatOptions.format) {\n oFormat.oFormatOptions.pattern = oFormat.oLocaleData.getCustomDateTimePattern(oFormat.oFormatOptions.format, oFormat.oFormatOptions.calendarType);\n } else {\n oFormat.oFormatOptions.pattern = oInfo.getPattern(oFormat.oLocaleData, oFormat.oFormatOptions.style, oFormat.oFormatOptions.calendarType);\n }\n }\n if (oFormat.oFormatOptions.interval) {\n if (oFormat.oFormatOptions.format) {\n oFormat.intervalPatterns = oFormat.oLocaleData.getCustomIntervalPattern(oFormat.oFormatOptions.format, null, oFormat.oFormatOptions.calendarType);\n if (typeof oFormat.intervalPatterns === 'string') {\n oFormat.intervalPatterns = [oFormat.intervalPatterns];\n }\n oFormat.intervalPatterns.push(oFormat.oLocaleData.getCustomDateTimePattern(oFormat.oFormatOptions.format, oFormat.oFormatOptions.calendarType));\n } else {\n oFormat.intervalPatterns = [\n oFormat.oLocaleData.getCombinedIntervalPattern(oFormat.oFormatOptions.pattern, oFormat.oFormatOptions.calendarType),\n oFormat.oFormatOptions.pattern\n ];\n }\n var sCommonConnectorPattern = createIntervalPatternWithNormalConnector(oFormat);\n oFormat.intervalPatterns.push(sCommonConnectorPattern);\n }\n if (!oFormat.oFormatOptions.fallback) {\n if (!oInfo.oFallbackFormats) {\n oInfo.oFallbackFormats = {};\n }\n var sLocale = oLocale.toString(), sCalendarType = oFormat.oFormatOptions.calendarType, sKey = sLocale + '-' + sCalendarType, sPattern, aFallbackFormatOptions;\n if (oFormat.oFormatOptions.pattern && oInfo.bPatternFallbackWithoutDelimiter) {\n sKey = sKey + '-' + oFormat.oFormatOptions.pattern;\n }\n if (oFormat.oFormatOptions.interval) {\n sKey = sKey + '-' + 'interval';\n }\n var oFallbackFormats = oInfo.oFallbackFormats[sKey] ? Object.assign({}, oInfo.oFallbackFormats[sKey]) : undefined;\n if (!oFallbackFormats) {\n aFallbackFormatOptions = oInfo.aFallbackFormatOptions;\n if (oInfo.bShortFallbackFormatOptions) {\n sPattern = oInfo.getPattern(oFormat.oLocaleData, 'short');\n aFallbackFormatOptions = aFallbackFormatOptions.concat(DateFormat._createFallbackOptionsWithoutDelimiter(sPattern));\n }\n if (oFormat.oFormatOptions.pattern && oInfo.bPatternFallbackWithoutDelimiter) {\n aFallbackFormatOptions = DateFormat._createFallbackOptionsWithoutDelimiter(oFormat.oFormatOptions.pattern).concat(aFallbackFormatOptions);\n }\n oFallbackFormats = DateFormat._createFallbackFormat(aFallbackFormatOptions, sCalendarType, oLocale, oInfo, oFormat.oFormatOptions);\n }\n oFormat.aFallbackFormats = oFallbackFormats;\n }\n oFormat.oRequiredParts = oInfo.oRequiredParts;\n oFormat.aRelativeScales = oInfo.aRelativeScales;\n oFormat.aRelativeParseScales = oInfo.aRelativeParseScales;\n oFormat.aIntervalCompareFields = oInfo.aIntervalCompareFields;\n oFormat.init();\n return oFormat;\n};\nDateFormat.prototype.init = function () {\n var sCalendarType = this.oFormatOptions.calendarType;\n this.aMonthsAbbrev = this.oLocaleData.getMonths('abbreviated', sCalendarType);\n this.aMonthsWide = this.oLocaleData.getMonths('wide', sCalendarType);\n this.aMonthsNarrow = this.oLocaleData.getMonths('narrow', sCalendarType);\n this.aMonthsAbbrevSt = this.oLocaleData.getMonthsStandAlone('abbreviated', sCalendarType);\n this.aMonthsWideSt = this.oLocaleData.getMonthsStandAlone('wide', sCalendarType);\n this.aMonthsNarrowSt = this.oLocaleData.getMonthsStandAlone('narrow', sCalendarType);\n this.aDaysAbbrev = this.oLocaleData.getDays('abbreviated', sCalendarType);\n this.aDaysWide = this.oLocaleData.getDays('wide', sCalendarType);\n this.aDaysNarrow = this.oLocaleData.getDays('narrow', sCalendarType);\n this.aDaysShort = this.oLocaleData.getDays('short', sCalendarType);\n this.aDaysAbbrevSt = this.oLocaleData.getDaysStandAlone('abbreviated', sCalendarType);\n this.aDaysWideSt = this.oLocaleData.getDaysStandAlone('wide', sCalendarType);\n this.aDaysNarrowSt = this.oLocaleData.getDaysStandAlone('narrow', sCalendarType);\n this.aDaysShortSt = this.oLocaleData.getDaysStandAlone('short', sCalendarType);\n this.aQuartersAbbrev = this.oLocaleData.getQuarters('abbreviated', sCalendarType);\n this.aQuartersWide = this.oLocaleData.getQuarters('wide', sCalendarType);\n this.aQuartersNarrow = this.oLocaleData.getQuarters('narrow', sCalendarType);\n this.aQuartersAbbrevSt = this.oLocaleData.getQuartersStandAlone('abbreviated', sCalendarType);\n this.aQuartersWideSt = this.oLocaleData.getQuartersStandAlone('wide', sCalendarType);\n this.aQuartersNarrowSt = this.oLocaleData.getQuartersStandAlone('narrow', sCalendarType);\n this.aErasNarrow = this.oLocaleData.getEras('narrow', sCalendarType);\n this.aErasAbbrev = this.oLocaleData.getEras('abbreviated', sCalendarType);\n this.aErasWide = this.oLocaleData.getEras('wide', sCalendarType);\n this.aDayPeriods = this.oLocaleData.getDayPeriods('abbreviated', sCalendarType);\n this.aFormatArray = this.parseCldrDatePattern(this.oFormatOptions.pattern);\n this.sAllowedCharacters = this.getAllowedCharacters(this.aFormatArray);\n};\nDateFormat._createFallbackFormat = function (aFallbackFormatOptions, sCalendarType, oLocale, oInfo, oParentFormatOptions) {\n return aFallbackFormatOptions.map(function (oOptions) {\n var oFormatOptions = Object.assign({}, oOptions);\n oFormatOptions.showDate = oParentFormatOptions.showDate;\n oFormatOptions.showTime = oParentFormatOptions.showTime;\n oFormatOptions.showTimezone = oParentFormatOptions.showTimezone;\n if (typeof oInfo.getTimezonePattern === 'function' && oFormatOptions.pattern) {\n oFormatOptions.pattern = oInfo.getTimezonePattern(oFormatOptions.pattern);\n }\n if (oParentFormatOptions.interval) {\n oFormatOptions.interval = true;\n }\n oFormatOptions.calendarType = sCalendarType;\n oFormatOptions.fallback = true;\n var oFallbackFormat = DateFormat.createInstance(oFormatOptions, oLocale, oInfo);\n oFallbackFormat.bIsFallback = true;\n return oFallbackFormat;\n });\n};\nDateFormat._createFallbackOptionsWithoutDelimiter = function (sBasePattern) {\n var rNonDateFields = /[^dMyGU]/g, oDayReplace = {\n regex: /d+/g,\n replace: 'dd'\n }, oMonthReplace = {\n regex: /M+/g,\n replace: 'MM'\n }, oYearReplace = {\n regex: /[yU]+/g,\n replace: [\n 'yyyy',\n 'yy'\n ]\n };\n sBasePattern = sBasePattern.replace(rNonDateFields, '');\n sBasePattern = sBasePattern.replace(oDayReplace.regex, oDayReplace.replace);\n sBasePattern = sBasePattern.replace(oMonthReplace.regex, oMonthReplace.replace);\n return oYearReplace.replace.map(function (sReplace) {\n return {\n pattern: sBasePattern.replace(oYearReplace.regex, sReplace),\n strictParsing: true\n };\n });\n};\nvar oParseHelper = {\n isNumber: function (iCharCode) {\n return iCharCode >= 48 && iCharCode <= 57;\n },\n findNumbers: function (sValue, iMaxLength) {\n var iLength = 0;\n while (iLength < iMaxLength && this.isNumber(sValue.charCodeAt(iLength))) {\n iLength++;\n }\n if (typeof sValue !== 'string') {\n sValue = sValue.toString();\n }\n return sValue.substr(0, iLength);\n },\n startsWithIgnoreCase: function (sValue, sSubstring, sLocale) {\n if (sValue.startsWith(sSubstring)) {\n return true;\n }\n try {\n var sSubToLocaleUpperCase = sSubstring.toLocaleUpperCase(sLocale);\n var sValueUpperCase = sValue.toLocaleUpperCase(sLocale);\n if (sSubToLocaleUpperCase.length !== sSubstring.length || sValueUpperCase.length !== sValue.length) {\n return false;\n }\n return sValueUpperCase.startsWith(sSubToLocaleUpperCase);\n } catch (e) {\n return false;\n }\n },\n findEntry: function (sValue, aList, sLocale) {\n var iFoundIndex = -1, iMatchedLength = 0;\n for (var j = 0; j < aList.length; j++) {\n if (aList[j] && aList[j].length > iMatchedLength && this.startsWithIgnoreCase(sValue, aList[j], sLocale)) {\n iFoundIndex = j;\n iMatchedLength = aList[j].length;\n }\n }\n return {\n index: iFoundIndex,\n length: iMatchedLength\n };\n },\n parseTZ: function (sValue, bColonSeparated) {\n var iLength = 0;\n var iTZFactor = sValue.charAt(0) == '+' ? -1 : 1;\n var sPart;\n iLength++;\n sPart = this.findNumbers(sValue.substr(iLength), 2);\n var iTZDiffHour = parseInt(sPart);\n iLength += 2;\n if (bColonSeparated) {\n iLength++;\n }\n sPart = this.findNumbers(sValue.substr(iLength), 2);\n var iTZDiff = 0;\n if (sPart) {\n iLength += 2;\n iTZDiff = parseInt(sPart);\n }\n return {\n length: iLength,\n tzDiff: (iTZDiff + 60 * iTZDiffHour) * 60 * iTZFactor\n };\n },\n checkValid: function (sType, bPartInvalid, oFormat) {\n if (sType in oFormat.oRequiredParts && bPartInvalid) {\n return false;\n }\n }\n};\nDateFormat.prototype.oSymbols = {\n '': {\n name: 'text',\n format: function (oField, oDate) {\n return oField.value;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sChar;\n var bValid = true;\n var iValueIndex = 0;\n var iPatternIndex = 0;\n var sDelimiter = '-~\\u2010\\u2011\\u2012\\u2013\\u2014\\uFE58\\uFE63\\uFF0D\\uFF5E';\n for (; iPatternIndex < oPart.value.length; iPatternIndex++) {\n sChar = oPart.value.charAt(iPatternIndex);\n if (sChar === ' ') {\n while (sValue.charAt(iValueIndex) === ' ') {\n iValueIndex++;\n }\n } else if (sDelimiter.includes(sChar)) {\n if (!sDelimiter.includes(sValue.charAt(iValueIndex))) {\n bValid = false;\n }\n iValueIndex++;\n } else {\n if (sValue.charAt(iValueIndex) !== sChar) {\n bValid = false;\n }\n iValueIndex++;\n }\n if (!bValid) {\n break;\n }\n }\n if (bValid) {\n return { length: iValueIndex };\n } else {\n var bPartInvalid = false;\n if (oConfig.index < oConfig.formatArray.length - 1) {\n bPartInvalid = oConfig.formatArray[oConfig.index + 1].type in oFormat.oRequiredParts;\n }\n return { valid: oParseHelper.checkValid(oPart.type, bPartInvalid, oFormat) };\n }\n }\n },\n 'G': {\n name: 'era',\n format: function (oField, oDate, bUTC, oFormat) {\n var iEra = oDate.getUTCEra();\n if (oField.digits <= 3) {\n return oFormat.aErasAbbrev[iEra];\n } else if (oField.digits === 4) {\n return oFormat.aErasWide[iEra];\n } else {\n return oFormat.aErasNarrow[iEra];\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var aErasVariants = [\n oFormat.aErasWide,\n oFormat.aErasAbbrev,\n oFormat.aErasNarrow\n ];\n for (var i = 0; i < aErasVariants.length; i++) {\n var aVariants = aErasVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n era: oFound.index,\n length: oFound.length\n };\n }\n }\n return {\n era: oFormat.aErasWide.length - 1,\n valid: oParseHelper.checkValid(oPart.type, true, oFormat)\n };\n }\n },\n 'y': {\n name: 'year',\n format: function (oField, oDate, bUTC, oFormat) {\n var iYear = oDate.getUTCFullYear();\n var sYear = String(iYear);\n var sCalendarType = oFormat.oFormatOptions.calendarType;\n if (oField.digits == 2 && sYear.length > 2) {\n sYear = sYear.substr(sYear.length - 2);\n }\n if (sCalendarType != CalendarType.Japanese && oField.digits == 1 && iYear < 100) {\n sYear = sYear.padStart(4, '0');\n }\n return sYear.padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sCalendarType = oFormat.oFormatOptions.calendarType;\n var sPart;\n if (oPart.digits == 1) {\n sPart = oParseHelper.findNumbers(sValue, 4);\n } else if (oPart.digits == 2) {\n sPart = oParseHelper.findNumbers(sValue, 2);\n } else {\n sPart = oParseHelper.findNumbers(sValue, oPart.digits);\n }\n var iYear = parseInt(sPart);\n if (sCalendarType != CalendarType.Japanese && sPart.length <= 2) {\n var oCurrentDate = UniversalDate.getInstance(new Date(), sCalendarType), iCurrentYear = oCurrentDate.getUTCFullYear(), iCurrentCentury = Math.floor(iCurrentYear / 100), iYearDiff = iCurrentCentury * 100 + iYear - iCurrentYear;\n if (iYearDiff < -70) {\n iYear += (iCurrentCentury + 1) * 100;\n } else if (iYearDiff < 30) {\n iYear += iCurrentCentury * 100;\n } else {\n iYear += (iCurrentCentury - 1) * 100;\n }\n }\n return {\n length: sPart.length,\n valid: oParseHelper.checkValid(oPart.type, sPart === '', oFormat),\n year: iYear\n };\n }\n },\n 'Y': {\n name: 'weekYear',\n format: function (oField, oDate, bUTC, oFormat) {\n var oWeek = oDate.getUTCWeek();\n var iWeekYear = oWeek.year;\n var sWeekYear = String(iWeekYear);\n var sCalendarType = oFormat.oFormatOptions.calendarType;\n if (oField.digits == 2 && sWeekYear.length > 2) {\n sWeekYear = sWeekYear.substr(sWeekYear.length - 2);\n }\n if (sCalendarType != CalendarType.Japanese && oField.digits == 1 && iWeekYear < 100) {\n sWeekYear = sWeekYear.padStart(4, '0');\n }\n return sWeekYear.padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sCalendarType = oFormat.oFormatOptions.calendarType;\n var sPart;\n if (oPart.digits == 1) {\n sPart = oParseHelper.findNumbers(sValue, 4);\n } else if (oPart.digits == 2) {\n sPart = oParseHelper.findNumbers(sValue, 2);\n } else {\n sPart = oParseHelper.findNumbers(sValue, oPart.digits);\n }\n var iYear = parseInt(sPart);\n var iWeekYear = iYear;\n if (sCalendarType != CalendarType.Japanese && sPart.length <= 2) {\n var oCurrentDate = UniversalDate.getInstance(new Date(), sCalendarType), iCurrentYear = oCurrentDate.getUTCFullYear(), iCurrentCentury = Math.floor(iCurrentYear / 100), iYearDiff = iCurrentCentury * 100 + iWeekYear - iCurrentYear;\n if (iYearDiff < -70) {\n iWeekYear += (iCurrentCentury + 1) * 100;\n } else if (iYearDiff < 30) {\n iWeekYear += iCurrentCentury * 100;\n } else {\n iWeekYear += (iCurrentCentury - 1) * 100;\n }\n }\n return {\n length: sPart.length,\n valid: oParseHelper.checkValid(oPart.type, sPart === '', oFormat),\n year: iYear,\n weekYear: iWeekYear\n };\n }\n },\n 'M': {\n name: 'month',\n format: function (oField, oDate, bUTC, oFormat) {\n var iMonth = oDate.getUTCMonth();\n if (oField.digits == 3) {\n return oFormat.aMonthsAbbrev[iMonth];\n } else if (oField.digits == 4) {\n return oFormat.aMonthsWide[iMonth];\n } else if (oField.digits > 4) {\n return oFormat.aMonthsNarrow[iMonth];\n } else {\n return String(iMonth + 1).padStart(oField.digits, '0');\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var aMonthsVariants = [\n oFormat.aMonthsWide,\n oFormat.aMonthsWideSt,\n oFormat.aMonthsAbbrev,\n oFormat.aMonthsAbbrevSt,\n oFormat.aMonthsNarrow,\n oFormat.aMonthsNarrowSt\n ];\n var bValid;\n var iMonth;\n var sPart;\n if (oPart.digits < 3) {\n sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n iMonth = parseInt(sPart) - 1;\n if (oConfig.strict && (iMonth > 11 || iMonth < 0)) {\n bValid = false;\n }\n } else {\n for (var i = 0; i < aMonthsVariants.length; i++) {\n var aVariants = aMonthsVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n month: oFound.index,\n length: oFound.length\n };\n }\n }\n bValid = oParseHelper.checkValid(oPart.type, true, oFormat);\n }\n return {\n month: iMonth,\n length: sPart ? sPart.length : 0,\n valid: bValid\n };\n }\n },\n 'L': {\n name: 'monthStandalone',\n format: function (oField, oDate, bUTC, oFormat) {\n var iMonth = oDate.getUTCMonth();\n if (oField.digits == 3) {\n return oFormat.aMonthsAbbrevSt[iMonth];\n } else if (oField.digits == 4) {\n return oFormat.aMonthsWideSt[iMonth];\n } else if (oField.digits > 4) {\n return oFormat.aMonthsNarrowSt[iMonth];\n } else {\n return String(iMonth + 1).padStart(oField.digits, '0');\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var aMonthsVariants = [\n oFormat.aMonthsWide,\n oFormat.aMonthsWideSt,\n oFormat.aMonthsAbbrev,\n oFormat.aMonthsAbbrevSt,\n oFormat.aMonthsNarrow,\n oFormat.aMonthsNarrowSt\n ];\n var bValid;\n var iMonth;\n var sPart;\n if (oPart.digits < 3) {\n sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n iMonth = parseInt(sPart) - 1;\n if (oConfig.strict && (iMonth > 11 || iMonth < 0)) {\n bValid = false;\n }\n } else {\n for (var i = 0; i < aMonthsVariants.length; i++) {\n var aVariants = aMonthsVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n month: oFound.index,\n length: oFound.length\n };\n }\n }\n bValid = oParseHelper.checkValid(oPart.type, true, oFormat);\n }\n return {\n month: iMonth,\n length: sPart ? sPart.length : 0,\n valid: bValid\n };\n }\n },\n 'w': {\n name: 'weekInYear',\n format: function (oField, oDate, bUTC, oFormat) {\n var oWeek = oDate.getUTCWeek();\n var iWeek = oWeek.week;\n var sWeek = String(iWeek + 1);\n if (oField.digits < 3) {\n sWeek = sWeek.padStart(oField.digits, '0');\n } else {\n sWeek = oFormat.oLocaleData.getCalendarWeek(oField.digits === 3 ? 'narrow' : 'wide', sWeek.padStart(2, '0'));\n }\n return sWeek;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart;\n var iWeek;\n var iLength = 0;\n if (oPart.digits < 3) {\n sPart = oParseHelper.findNumbers(sValue, 2);\n iLength = sPart.length;\n iWeek = parseInt(sPart) - 1;\n bValid = oParseHelper.checkValid(oPart.type, !sPart, oFormat);\n } else {\n sPart = oFormat.oLocaleData.getCalendarWeek(oPart.digits === 3 ? 'narrow' : 'wide');\n sPart = sPart.replace('{0}', '([0-9]+)');\n var rWeekNumber = new RegExp(sPart), oResult = rWeekNumber.exec(sValue);\n if (oResult) {\n iLength = oResult[0].length;\n iWeek = parseInt(oResult[oResult.length - 1]) - 1;\n } else {\n bValid = oParseHelper.checkValid(oPart.type, true, oFormat);\n }\n }\n return {\n length: iLength,\n valid: bValid,\n week: iWeek\n };\n }\n },\n 'W': {\n name: 'weekInMonth',\n format: function (oField, oDate) {\n return '';\n },\n parse: function () {\n return {};\n }\n },\n 'D': {\n name: 'dayInYear',\n format: function (oField, oDate) {\n },\n parse: function () {\n return {};\n }\n },\n 'd': {\n name: 'day',\n format: function (oField, oDate) {\n var iDate = oDate.getUTCDate();\n return String(iDate).padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n var iDay = parseInt(sPart);\n if (oConfig.strict && (iDay > 31 || iDay < 1)) {\n bValid = false;\n }\n return {\n day: iDay,\n length: sPart.length,\n valid: bValid\n };\n }\n },\n 'Q': {\n name: 'quarter',\n format: function (oField, oDate, bUTC, oFormat) {\n var iQuarter = oDate.getUTCQuarter();\n if (oField.digits == 3) {\n return oFormat.aQuartersAbbrev[iQuarter];\n } else if (oField.digits == 4) {\n return oFormat.aQuartersWide[iQuarter];\n } else if (oField.digits > 4) {\n return oFormat.aQuartersNarrow[iQuarter];\n } else {\n return String(iQuarter + 1).padStart(oField.digits, '0');\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var iQuarter;\n var sPart;\n var aQuartersVariants = [\n oFormat.aQuartersWide,\n oFormat.aQuartersWideSt,\n oFormat.aQuartersAbbrev,\n oFormat.aQuartersAbbrevSt,\n oFormat.aQuartersNarrow,\n oFormat.aQuartersNarrowSt\n ];\n if (oPart.digits < 3) {\n sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n iQuarter = parseInt(sPart) - 1;\n if (oConfig.strict && iQuarter > 3) {\n bValid = false;\n }\n } else {\n for (var i = 0; i < aQuartersVariants.length; i++) {\n var aVariants = aQuartersVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n quarter: oFound.index,\n length: oFound.length\n };\n }\n }\n bValid = oParseHelper.checkValid(oPart.type, true, oFormat);\n }\n return {\n length: sPart ? sPart.length : 0,\n quarter: iQuarter,\n valid: bValid\n };\n }\n },\n 'q': {\n name: 'quarterStandalone',\n format: function (oField, oDate, bUTC, oFormat) {\n var iQuarter = oDate.getUTCQuarter();\n if (oField.digits == 3) {\n return oFormat.aQuartersAbbrevSt[iQuarter];\n } else if (oField.digits == 4) {\n return oFormat.aQuartersWideSt[iQuarter];\n } else if (oField.digits > 4) {\n return oFormat.aQuartersNarrowSt[iQuarter];\n } else {\n return String(iQuarter + 1).padStart(oField.digits, '0');\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var iQuarter;\n var sPart;\n var aQuartersVariants = [\n oFormat.aQuartersWide,\n oFormat.aQuartersWideSt,\n oFormat.aQuartersAbbrev,\n oFormat.aQuartersAbbrevSt,\n oFormat.aQuartersNarrow,\n oFormat.aQuartersNarrowSt\n ];\n if (oPart.digits < 3) {\n sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n iQuarter = parseInt(sPart) - 1;\n if (oConfig.strict && iQuarter > 3) {\n bValid = false;\n }\n } else {\n for (var i = 0; i < aQuartersVariants.length; i++) {\n var aVariants = aQuartersVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n quarter: oFound.index,\n length: oFound.length\n };\n }\n }\n bValid = oParseHelper.checkValid(oPart.type, true, oFormat);\n }\n return {\n length: sPart ? sPart.length : 0,\n quarter: iQuarter,\n valid: bValid\n };\n }\n },\n 'F': {\n name: 'dayOfWeekInMonth',\n format: function (oField, oDate, oFormat) {\n return '';\n },\n parse: function () {\n return {};\n }\n },\n 'E': {\n name: 'dayNameInWeek',\n format: function (oField, oDate, bUTC, oFormat) {\n var iDay = oDate.getUTCDay();\n if (oField.digits < 4) {\n return oFormat.aDaysAbbrev[iDay];\n } else if (oField.digits == 4) {\n return oFormat.aDaysWide[iDay];\n } else if (oField.digits == 5) {\n return oFormat.aDaysNarrow[iDay];\n } else {\n return oFormat.aDaysShort[iDay];\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var aDaysVariants = [\n oFormat.aDaysWide,\n oFormat.aDaysWideSt,\n oFormat.aDaysAbbrev,\n oFormat.aDaysAbbrevSt,\n oFormat.aDaysShort,\n oFormat.aDaysShortSt,\n oFormat.aDaysNarrow,\n oFormat.aDaysNarrowSt\n ];\n for (var i = 0; i < aDaysVariants.length; i++) {\n var aVariants = aDaysVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n dayOfWeek: oFound.index,\n length: oFound.length\n };\n }\n }\n }\n },\n 'c': {\n name: 'dayNameInWeekStandalone',\n format: function (oField, oDate, bUTC, oFormat) {\n var iDay = oDate.getUTCDay();\n if (oField.digits < 4) {\n return oFormat.aDaysAbbrevSt[iDay];\n } else if (oField.digits == 4) {\n return oFormat.aDaysWideSt[iDay];\n } else if (oField.digits == 5) {\n return oFormat.aDaysNarrowSt[iDay];\n } else {\n return oFormat.aDaysShortSt[iDay];\n }\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var aDaysVariants = [\n oFormat.aDaysWide,\n oFormat.aDaysWideSt,\n oFormat.aDaysAbbrev,\n oFormat.aDaysAbbrevSt,\n oFormat.aDaysShort,\n oFormat.aDaysShortSt,\n oFormat.aDaysNarrow,\n oFormat.aDaysNarrowSt\n ];\n for (var i = 0; i < aDaysVariants.length; i++) {\n var aVariants = aDaysVariants[i];\n var oFound = oParseHelper.findEntry(sValue, aVariants, oFormat.oLocaleData.sCLDRLocaleId);\n if (oFound.index !== -1) {\n return {\n day: oFound.index,\n length: oFound.length\n };\n }\n }\n }\n },\n 'u': {\n name: 'dayNumberOfWeek',\n format: function (oField, oDate, bUTC, oFormat) {\n var iDay = oDate.getUTCDay();\n return oFormat._adaptDayOfWeek(iDay);\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sPart = oParseHelper.findNumbers(sValue, oPart.digits);\n return {\n dayNumberOfWeek: parseInt(sPart),\n length: sPart.length\n };\n }\n },\n 'a': {\n name: 'amPmMarker',\n format: function (oField, oDate, bUTC, oFormat) {\n var iDayPeriod = oDate.getUTCDayPeriod();\n return oFormat.aDayPeriods[iDayPeriod];\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bPM;\n var iLength;\n var sAM = oFormat.aDayPeriods[0], sPM = oFormat.aDayPeriods[1];\n var rAMPM = /[aApP](?:\\.)?[\\x20\\xA0]?[mM](?:\\.)?/;\n var aMatch = sValue.match(rAMPM);\n var bVariant = aMatch && aMatch.index === 0;\n if (bVariant) {\n sValue = aMatch[0];\n sAM = sAM.replace(/[\\x20\\xA0]/g, '');\n sPM = sPM.replace(/[\\x20\\xA0]/g, '');\n sValue = sValue.replace(/[\\x20\\xA0]/g, '');\n sAM = sAM.replace(/\\./g, '').toLowerCase();\n sPM = sPM.replace(/\\./g, '').toLowerCase();\n sValue = sValue.replace(/\\./g, '').toLowerCase();\n }\n if (sValue.indexOf(sAM) === 0) {\n bPM = false;\n iLength = bVariant ? aMatch[0].length : sAM.length;\n } else if (sValue.indexOf(sPM) === 0) {\n bPM = true;\n iLength = bVariant ? aMatch[0].length : sPM.length;\n }\n return {\n pm: bPM,\n length: iLength\n };\n }\n },\n 'H': {\n name: 'hour0_23',\n format: function (oField, oDate) {\n var iHours = oDate.getUTCHours();\n return String(iHours).padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iHours = parseInt(sPart);\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (oConfig.strict && iHours > 23) {\n bValid = false;\n }\n return {\n hour: iHours,\n length: sPart.length,\n valid: bValid\n };\n }\n },\n 'k': {\n name: 'hour1_24',\n format: function (oField, oDate) {\n var iHours = oDate.getUTCHours();\n var sHours = iHours === 0 ? '24' : String(iHours);\n return sHours.padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iHours = parseInt(sPart);\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (iHours == 24) {\n iHours = 0;\n }\n if (oConfig.strict && iHours > 23) {\n bValid = false;\n }\n return {\n hour: iHours,\n length: sPart.length,\n valid: bValid\n };\n }\n },\n 'K': {\n name: 'hour0_11',\n format: function (oField, oDate) {\n var iHours = oDate.getUTCHours();\n var sHours = String(iHours > 11 ? iHours - 12 : iHours);\n return sHours.padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iHours = parseInt(sPart);\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (oConfig.strict && iHours > 11) {\n bValid = false;\n }\n return {\n hour: iHours,\n length: sPart.length,\n valid: bValid\n };\n }\n },\n 'h': {\n name: 'hour1_12',\n format: function (oField, oDate) {\n var iHours = oDate.getUTCHours();\n var sHours;\n if (iHours > 12) {\n sHours = String(iHours - 12);\n } else if (iHours == 0) {\n sHours = '12';\n } else {\n sHours = String(iHours);\n }\n return sHours.padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bPM = oConfig.dateValue.pm;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iHours = parseInt(sPart);\n var bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (iHours == 12) {\n iHours = 0;\n bPM = bPM === undefined ? true : bPM;\n }\n if (oConfig.strict && iHours > 11) {\n bValid = false;\n }\n return {\n hour: iHours,\n length: sPart.length,\n pm: bPM,\n valid: bValid\n };\n }\n },\n 'm': {\n name: 'minute',\n format: function (oField, oDate) {\n var iMinutes = oDate.getUTCMinutes();\n return String(iMinutes).padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iMinutes = parseInt(sPart);\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (oConfig.strict && iMinutes > 59) {\n bValid = false;\n }\n return {\n length: sPart.length,\n minute: iMinutes,\n valid: bValid\n };\n }\n },\n 's': {\n name: 'second',\n format: function (oField, oDate) {\n var iSeconds = oDate.getUTCSeconds();\n return String(iSeconds).padStart(oField.digits, '0');\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var bValid;\n var sPart = oParseHelper.findNumbers(sValue, Math.max(oPart.digits, 2));\n var iSeconds = parseInt(sPart);\n bValid = oParseHelper.checkValid(oPart.type, sPart === '', oFormat);\n if (oConfig.strict && iSeconds > 59) {\n bValid = false;\n }\n return {\n length: sPart.length,\n second: iSeconds,\n valid: bValid\n };\n }\n },\n 'S': {\n name: 'fractionalsecond',\n format: function (oField, oDate) {\n var iMilliseconds = oDate.getUTCMilliseconds();\n var sMilliseconds = String(iMilliseconds);\n var sFractionalseconds = sMilliseconds.padStart(3, '0');\n sFractionalseconds = sFractionalseconds.substr(0, oField.digits);\n sFractionalseconds = sFractionalseconds.padEnd(oField.digits, '0');\n return sFractionalseconds;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var sPart = oParseHelper.findNumbers(sValue, oPart.digits);\n var iLength = sPart.length;\n sPart = sPart.substr(0, 3);\n sPart = sPart.padEnd(3, '0');\n var iMilliseconds = parseInt(sPart);\n return {\n length: iLength,\n millisecond: iMilliseconds\n };\n }\n },\n 'z': {\n name: 'timezoneGeneral',\n format: function (oField, oDate, bUTC, oFormat, sTimezone) {\n if (oField.digits > 3 && oDate.getTimezoneLong && oDate.getTimezoneLong()) {\n return oDate.getTimezoneLong();\n } else if (oDate.getTimezoneShort && oDate.getTimezoneShort()) {\n return oDate.getTimezoneShort();\n }\n var iTimezoneOffset = TimezoneUtil.calculateOffset(oDate, sTimezone);\n var sTimeZone = 'GMT';\n var iTZOffset = Math.abs(iTimezoneOffset / 60);\n var bPositiveOffset = iTimezoneOffset > 0;\n var iHourOffset = Math.floor(iTZOffset / 60);\n var iMinuteOffset = Math.floor(iTZOffset % 60);\n if (!bUTC && iTZOffset != 0) {\n sTimeZone += bPositiveOffset ? '-' : '+';\n sTimeZone += String(iHourOffset).padStart(2, '0');\n sTimeZone += ':';\n sTimeZone += String(iMinuteOffset).padStart(2, '0');\n } else {\n sTimeZone += 'Z';\n }\n return sTimeZone;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n var iLength = 0;\n var iTZDiff;\n var oTZ = sValue.substring(0, 3);\n if (oTZ === 'GMT' || oTZ === 'UTC') {\n iLength = 3;\n } else if (sValue.substring(0, 2) === 'UT') {\n iLength = 2;\n } else if (sValue.charAt(0) === 'Z') {\n iLength = 1;\n iTZDiff = 0;\n } else {\n return { error: 'cannot be parsed correctly by sap.ui.core.format.DateFormat: The given timezone is not supported!' };\n }\n if (sValue.charAt(0) !== 'Z') {\n var oParsedTZ = oParseHelper.parseTZ(sValue.substr(iLength), true);\n iLength += oParsedTZ.length;\n iTZDiff = oParsedTZ.tzDiff;\n }\n return {\n length: iLength,\n tzDiff: iTZDiff\n };\n }\n },\n 'Z': {\n name: 'timezoneRFC822',\n format: function (oField, oDate, bUTC, oFormat, sTimezone) {\n var iTimezoneOffset = TimezoneUtil.calculateOffset(oDate, sTimezone);\n var iTZOffset = Math.abs(iTimezoneOffset / 60);\n var bPositiveOffset = iTimezoneOffset > 0;\n var iHourOffset = Math.floor(iTZOffset / 60);\n var iMinuteOffset = Math.floor(iTZOffset % 60);\n var sTimeZone = '';\n if (!bUTC) {\n sTimeZone += bPositiveOffset ? '-' : '+';\n sTimeZone += String(iHourOffset).padStart(2, '0');\n sTimeZone += String(iMinuteOffset).padStart(2, '0');\n }\n return sTimeZone;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n return oParseHelper.parseTZ(sValue, false);\n }\n },\n 'X': {\n name: 'timezoneISO8601',\n format: function (oField, oDate, bUTC, oFormat, sTimezone) {\n var iTimezoneOffset = TimezoneUtil.calculateOffset(oDate, sTimezone);\n var iTZOffset = Math.abs(iTimezoneOffset / 60);\n var bPositiveOffset = iTimezoneOffset > 0;\n var iHourOffset = Math.floor(iTZOffset / 60);\n var iMinuteOffset = Math.floor(iTZOffset % 60);\n var sTimeZone = '';\n if (!bUTC && iTZOffset != 0) {\n sTimeZone += bPositiveOffset ? '-' : '+';\n sTimeZone += String(iHourOffset).padStart(2, '0');\n if (oField.digits > 1 || iMinuteOffset > 0) {\n if (oField.digits === 3 || oField.digits === 5) {\n sTimeZone += ':';\n }\n sTimeZone += String(iMinuteOffset).padStart(2, '0');\n }\n } else {\n sTimeZone += 'Z';\n }\n return sTimeZone;\n },\n parse: function (sValue, oPart, oFormat, oConfig) {\n if (sValue.charAt(0) === 'Z') {\n return {\n length: 1,\n tzDiff: 0\n };\n } else {\n return oParseHelper.parseTZ(sValue, oPart.digits === 3 || oPart.digits === 5);\n }\n }\n },\n 'V': {\n name: 'timezoneID',\n format: function (oField, oDate, bUTC, oFormat, sTimezone) {\n if (!bUTC && oField.digits === 2) {\n return sTimezone;\n }\n return '';\n },\n parse: function (sValue, oPart, oFormat, oConfig, sTimezone) {\n var oTimezoneParsed = {\n timezone: '',\n length: 0\n };\n if (oPart.digits === 2) {\n if (sValue === sTimezone) {\n oTimezoneParsed.timezone = sTimezone;\n oTimezoneParsed.length = sTimezone.length;\n return oTimezoneParsed;\n }\n if (sValue) {\n var rIanaTimezone = new RegExp('([A-Za-z_])+([/][A-Za-z_]+)+');\n var aResult = rIanaTimezone.exec(sValue);\n if (aResult && aResult[0] && TimezoneUtil.isValidTimezone(aResult[0])) {\n oTimezoneParsed.timezone = aResult[0];\n oTimezoneParsed.length = aResult[0].length;\n return oTimezoneParsed;\n }\n }\n }\n return oTimezoneParsed;\n }\n }\n};\nDateFormat.prototype._format = function (oJSDate, bUTC, sTimezone) {\n if (this.oFormatOptions.relative) {\n var sRes = this.formatRelative(oJSDate, bUTC, this.oFormatOptions.relativeRange, sTimezone);\n if (sRes) {\n return sRes;\n }\n }\n var sCalendarType = this.oFormatOptions.calendarType;\n var oDate = UniversalDate.getInstance(oJSDate, sCalendarType);\n var aBuffer = [], oPart, sResult, sSymbol;\n for (var i = 0; i < this.aFormatArray.length; i++) {\n oPart = this.aFormatArray[i];\n sSymbol = oPart.symbol || '';\n aBuffer.push(this.oSymbols[sSymbol].format(oPart, oDate, bUTC, this, sTimezone));\n }\n sResult = aBuffer.join('');\n if (Core.getConfiguration().getOriginInfo()) {\n sResult = new String(sResult);\n sResult.originInfo = {\n source: 'Common Locale Data Repository',\n locale: this.oLocale.toString(),\n style: this.oFormatOptions.style,\n pattern: this.oFormatOptions.pattern\n };\n }\n return sResult;\n};\nDateFormat.prototype.format = function (vJSDate, bUTC) {\n var sTimezone;\n if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n sTimezone = bUTC;\n bUTC = false;\n checkTimezoneParameterType(sTimezone);\n if (sTimezone && !TimezoneUtil.isValidTimezone(sTimezone)) {\n Log.error('The given timezone isn\\'t valid.');\n return '';\n }\n }\n var sCalendarType = this.oFormatOptions.calendarType, sResult;\n if (bUTC === undefined) {\n bUTC = this.oFormatOptions.UTC;\n }\n sTimezone = sTimezone || Core.getConfiguration().getTimezone();\n if (Array.isArray(vJSDate)) {\n if (!this.oFormatOptions.interval) {\n Log.error('Non-interval DateFormat can\\'t format more than one date instance.');\n return '';\n }\n if (vJSDate.length !== 2) {\n Log.error('Interval DateFormat can only format with 2 date instances but ' + vJSDate.length + ' is given.');\n return '';\n }\n vJSDate = vJSDate.map(function (oJSDate) {\n return convertToTimezone(oJSDate, sTimezone, bUTC);\n });\n if (this.oFormatOptions.singleIntervalValue) {\n if (vJSDate[0] === null) {\n Log.error('First date instance which is passed to the interval DateFormat shouldn\\'t be null.');\n return '';\n }\n if (vJSDate[1] === null) {\n sResult = this._format(vJSDate[0], bUTC, sTimezone);\n }\n }\n if (sResult === undefined) {\n if (!vJSDate.every(isValidDateObject)) {\n Log.error('At least one date instance which is passed to the interval DateFormat isn\\'t valid.');\n return '';\n }\n sResult = this._formatInterval(vJSDate, bUTC);\n }\n } else {\n if (!isValidDateObject(vJSDate)) {\n if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE && this.oFormatOptions.pattern.includes('VV')) {\n return sTimezone;\n }\n Log.error('The given date instance isn\\'t valid.');\n return '';\n }\n if (this.oFormatOptions.interval) {\n Log.error('Interval DateFormat expects an array with two dates for the first argument but only one date is given.');\n return '';\n }\n vJSDate = convertToTimezone(vJSDate, sTimezone, bUTC);\n sResult = this._format(vJSDate, bUTC, sTimezone);\n }\n if (sCalendarType == CalendarType.Japanese && this.oLocale.getLanguage() === 'ja') {\n sResult = sResult.replace(/(^|[^\\d])1年/g, '$1元年');\n }\n return sResult;\n};\nDateFormat.prototype._formatInterval = function (aJSDates, bUTC) {\n var sCalendarType = this.oFormatOptions.calendarType;\n var oFromDate = UniversalDate.getInstance(aJSDates[0], sCalendarType);\n var oToDate = UniversalDate.getInstance(aJSDates[1], sCalendarType);\n var oDate;\n var oPart;\n var sSymbol;\n var aBuffer = [];\n var sPattern;\n var aFormatArray = [];\n var oDiffField = this._getGreatestDiffField([\n oFromDate,\n oToDate\n ]);\n if (!oDiffField) {\n return this._format(aJSDates[0], bUTC);\n }\n if (this.oFormatOptions.format) {\n sPattern = this.oLocaleData.getCustomIntervalPattern(this.oFormatOptions.format, oDiffField, sCalendarType);\n } else {\n sPattern = this.oLocaleData.getCombinedIntervalPattern(this.oFormatOptions.pattern, sCalendarType);\n }\n aFormatArray = this.parseCldrDatePattern(sPattern);\n oDate = oFromDate;\n for (var i = 0; i < aFormatArray.length; i++) {\n oPart = aFormatArray[i];\n sSymbol = oPart.symbol || '';\n if (oPart.repeat) {\n oDate = oToDate;\n }\n aBuffer.push(this.oSymbols[sSymbol].format(oPart, oDate, bUTC, this));\n }\n return aBuffer.join('');\n};\nvar mFieldToGroup = {\n Era: 'Era',\n FullYear: 'Year',\n Quarter: 'Quarter',\n Month: 'Month',\n Week: 'Week',\n Date: 'Day',\n DayPeriod: 'DayPeriod',\n Hours: 'Hour',\n Minutes: 'Minute',\n Seconds: 'Second'\n};\nDateFormat.prototype._getGreatestDiffField = function (aDates) {\n var bDiffFound = false, mDiff = {};\n this.aIntervalCompareFields.forEach(function (sField) {\n var sGetterPrefix = 'getUTC', sMethodName = sGetterPrefix + sField, sFieldGroup = mFieldToGroup[sField], vFromValue = aDates[0][sMethodName].apply(aDates[0]), vToValue = aDates[1][sMethodName].apply(aDates[1]);\n if (!deepEqual(vFromValue, vToValue)) {\n bDiffFound = true;\n mDiff[sFieldGroup] = true;\n }\n });\n if (bDiffFound) {\n return mDiff;\n }\n return null;\n};\nDateFormat.prototype._parse = function (sValue, aFormatArray, bUTC, bStrict, sTimezone) {\n var iIndex = 0, oPart, sSubValue, oResult;\n var oDateValue = {\n valid: true,\n lastTimezonePatternSymbol: ''\n };\n var oParseConf = {\n formatArray: aFormatArray,\n dateValue: oDateValue,\n strict: bStrict\n };\n for (var i = 0; i < aFormatArray.length; i++) {\n sSubValue = sValue.substr(iIndex);\n oPart = aFormatArray[i];\n oParseConf.index = i;\n oResult = this.oSymbols[oPart.symbol || ''].parse(sSubValue, oPart, this, oParseConf, sTimezone) || {};\n if (oResult.tzDiff !== undefined || oResult.timezone) {\n oResult.lastTimezonePatternSymbol = oPart.symbol;\n }\n oDateValue = extend(oDateValue, oResult);\n if (oResult.valid === false) {\n break;\n }\n iIndex += oResult.length || 0;\n }\n oDateValue.index = iIndex;\n if (oDateValue.pm) {\n oDateValue.hour += 12;\n }\n if (oDateValue.dayNumberOfWeek === undefined && oDateValue.dayOfWeek !== undefined) {\n oDateValue.dayNumberOfWeek = this._adaptDayOfWeek(oDateValue.dayOfWeek);\n }\n if (oDateValue.quarter !== undefined && oDateValue.month === undefined && oDateValue.day === undefined) {\n oDateValue.month = 3 * oDateValue.quarter;\n oDateValue.day = 1;\n }\n return oDateValue;\n};\nDateFormat.prototype._parseInterval = function (sValue, sCalendarType, bUTC, bStrict, sTimezone) {\n var aDateValues, iRepeat, oDateValue;\n this.intervalPatterns.some(function (sPattern) {\n var aFormatArray = this.parseCldrDatePattern(sPattern);\n iRepeat = undefined;\n for (var i = 0; i < aFormatArray.length; i++) {\n if (aFormatArray[i].repeat) {\n iRepeat = i;\n break;\n }\n }\n if (iRepeat === undefined) {\n oDateValue = this._parse(sValue, aFormatArray, bUTC, bStrict, sTimezone);\n if (oDateValue.index === 0 || oDateValue.index < sValue.length) {\n oDateValue.valid = false;\n }\n if (oDateValue.valid === false) {\n return;\n }\n aDateValues = [\n oDateValue,\n oDateValue\n ];\n return true;\n } else {\n aDateValues = [];\n oDateValue = this._parse(sValue, aFormatArray.slice(0, iRepeat), bUTC, bStrict, sTimezone);\n if (oDateValue.valid === false) {\n return;\n }\n aDateValues.push(oDateValue);\n var iLength = oDateValue.index;\n oDateValue = this._parse(sValue.substring(iLength), aFormatArray.slice(iRepeat), bUTC, bStrict, sTimezone);\n if (oDateValue.index === 0 || oDateValue.index + iLength < sValue.length) {\n oDateValue.valid = false;\n }\n if (oDateValue.valid === false) {\n return;\n }\n aDateValues.push(oDateValue);\n return true;\n }\n }.bind(this));\n return aDateValues;\n};\nvar convertToTimezone = function (oJSDate, sTimezone, bUTC) {\n if (!bUTC && isValidDateObject(oJSDate)) {\n return TimezoneUtil.convertToTimezone(oJSDate, sTimezone);\n }\n return oJSDate;\n};\nvar fnCreateDate = function (oDateValue, sCalendarType, bUTC, bStrict, sTimezone) {\n if (!oDateValue.valid) {\n return null;\n }\n var oDate, iYear = typeof oDateValue.year === 'number' ? oDateValue.year : 1970;\n oDate = UniversalDate.getInstance(new Date(0), sCalendarType);\n oDate.setUTCEra(oDateValue.era || UniversalDate.getCurrentEra(sCalendarType));\n oDate.setUTCFullYear(iYear);\n oDate.setUTCMonth(oDateValue.month || 0);\n oDate.setUTCDate(oDateValue.day || 1);\n oDate.setUTCHours(oDateValue.hour || 0);\n oDate.setUTCMinutes(oDateValue.minute || 0);\n oDate.setUTCSeconds(oDateValue.second || 0);\n oDate.setUTCMilliseconds(oDateValue.millisecond || 0);\n if (bStrict && (oDateValue.day || 1) !== oDate.getUTCDate()) {\n return null;\n }\n if (oDateValue.week !== undefined && (oDateValue.month === undefined || oDateValue.day === undefined)) {\n oDate.setUTCWeek({\n year: oDateValue.weekYear || oDateValue.year,\n week: oDateValue.week\n });\n if (oDateValue.dayNumberOfWeek !== undefined) {\n oDate.setUTCDate(oDate.getUTCDate() + oDateValue.dayNumberOfWeek - 1);\n }\n }\n oDate = oDate.getJSDate();\n if (!bUTC && (oDateValue.lastTimezonePatternSymbol === 'V' && oDateValue.timezone || oDateValue.tzDiff === undefined)) {\n if (oDateValue.timezone) {\n sTimezone = oDateValue.timezone;\n }\n if (sTimezone) {\n oDateValue.tzDiff = TimezoneUtil.calculateOffset(oDate, sTimezone);\n }\n }\n if (oDateValue.tzDiff) {\n oDate.setUTCSeconds((oDateValue.second || 0) + oDateValue.tzDiff);\n }\n return oDate;\n};\nfunction mergeWithoutOverwrite(object1, object2) {\n if (object1 === object2) {\n return object1;\n }\n var oMergedObject = {};\n Object.keys(object1).forEach(function (sKey) {\n oMergedObject[sKey] = object1[sKey];\n });\n Object.keys(object2).forEach(function (sKey) {\n if (!oMergedObject.hasOwnProperty(sKey)) {\n oMergedObject[sKey] = object2[sKey];\n }\n });\n return oMergedObject;\n}\nfunction isValidDateRange(oStartDate, oEndDate) {\n if (oStartDate.getTime() > oEndDate.getTime()) {\n return false;\n }\n return true;\n}\nfunction isValidDateObject(oDate) {\n return oDate && typeof oDate.getTime === 'function' && !isNaN(oDate.getTime());\n}\nDateFormat.prototype.parse = function (sValue, bUTC, bStrict) {\n var bShowDate = this.oFormatOptions.showDate === undefined || this.oFormatOptions.showDate;\n var bShowTime = this.oFormatOptions.showTime === undefined || this.oFormatOptions.showTime;\n if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE && (bShowDate && !bShowTime || !bShowDate && bShowTime)) {\n throw new TypeError('The input can only be parsed back to date if both date and time are supplied.');\n }\n var sTimezone;\n if (bUTC === undefined && this.type !== mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n bUTC = this.oFormatOptions.UTC;\n }\n var bUTCInputParameter = bUTC;\n if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n sTimezone = bUTC;\n bUTC = false;\n checkTimezoneParameterType(sTimezone);\n if (sTimezone && !TimezoneUtil.isValidTimezone(sTimezone)) {\n Log.error('The given timezone isn\\'t valid.');\n return null;\n }\n }\n sValue = sValue == null ? '' : String(sValue).trim();\n var oDateValue;\n var sCalendarType = this.oFormatOptions.calendarType;\n sTimezone = sTimezone || Core.getConfiguration().getTimezone();\n if (bStrict === undefined) {\n bStrict = this.oFormatOptions.strictParsing;\n }\n if (sCalendarType == CalendarType.Japanese && this.oLocale.getLanguage() === 'ja') {\n sValue = sValue.replace(/元年/g, '1年');\n }\n if (!this.oFormatOptions.interval) {\n var oJSDate = this.parseRelative(sValue, bUTC);\n if (oJSDate) {\n return oJSDate;\n }\n oDateValue = this._parse(sValue, this.aFormatArray, bUTC, bStrict, sTimezone);\n if (oDateValue.index === 0 || oDateValue.index < sValue.length) {\n oDateValue.valid = false;\n }\n oJSDate = fnCreateDate(oDateValue, sCalendarType, bUTC, bStrict, sTimezone);\n if (oJSDate) {\n if (this.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n var bShowTimezone = this.oFormatOptions.showTimezone === undefined || this.oFormatOptions.showTimezone;\n if (!bShowTimezone && bShowDate && bShowTime) {\n return [\n oJSDate,\n undefined\n ];\n } else if (bShowTimezone && !bShowDate && !bShowTime) {\n return [\n undefined,\n oDateValue.timezone\n ];\n }\n return [\n oJSDate,\n oDateValue.timezone || undefined\n ];\n }\n return oJSDate;\n }\n } else {\n var aDateValues = this._parseInterval(sValue, sCalendarType, bUTC, bStrict, sTimezone);\n var oJSDate1, oJSDate2;\n if (aDateValues && aDateValues.length == 2) {\n var oDateValue1 = mergeWithoutOverwrite(aDateValues[0], aDateValues[1]);\n var oDateValue2 = mergeWithoutOverwrite(aDateValues[1], aDateValues[0]);\n oJSDate1 = fnCreateDate(oDateValue1, sCalendarType, bUTC, bStrict, sTimezone);\n oJSDate2 = fnCreateDate(oDateValue2, sCalendarType, bUTC, bStrict, sTimezone);\n if (oJSDate1 && oJSDate2) {\n if (this.oFormatOptions.singleIntervalValue && oJSDate1.getTime() === oJSDate2.getTime()) {\n return [\n oJSDate1,\n null\n ];\n }\n var bValid = isValidDateRange(oJSDate1, oJSDate2);\n if (bStrict && !bValid) {\n Log.error('StrictParsing: Invalid date range. The given end date is before the start date.');\n return [\n null,\n null\n ];\n }\n return [\n oJSDate1,\n oJSDate2\n ];\n }\n }\n }\n if (!this.bIsFallback) {\n var vDate;\n this.aFallbackFormats.every(function (oFallbackFormat) {\n vDate = oFallbackFormat.parse(sValue, bUTCInputParameter, bStrict);\n if (Array.isArray(vDate)) {\n if (oFallbackFormat.type === mDateFormatTypes.DATETIME_WITH_TIMEZONE) {\n return false;\n }\n return !(vDate[0] && vDate[1]);\n } else {\n return !vDate;\n }\n });\n return vDate;\n }\n if (!this.oFormatOptions.interval) {\n return null;\n } else {\n return [\n null,\n null\n ];\n }\n};\nDateFormat.prototype.parseCldrDatePattern = function (sPattern) {\n if (mCldrDatePattern[sPattern]) {\n return mCldrDatePattern[sPattern];\n }\n var aFormatArray = [], i, bQuoted = false, oCurrentObject = null, sState = '', sNewState = '', mAppeared = {}, bIntervalStartFound = false;\n for (i = 0; i < sPattern.length; i++) {\n var sCurChar = sPattern.charAt(i), sNextChar, sPrevChar, sPrevPrevChar;\n if (bQuoted) {\n if (sCurChar == '\\'') {\n sPrevChar = sPattern.charAt(i - 1);\n sPrevPrevChar = sPattern.charAt(i - 2);\n sNextChar = sPattern.charAt(i + 1);\n if (sPrevChar == '\\'' && sPrevPrevChar != '\\'') {\n bQuoted = false;\n } else if (sNextChar == '\\'') {\n i += 1;\n } else {\n bQuoted = false;\n continue;\n }\n }\n if (sState == 'text') {\n oCurrentObject.value += sCurChar;\n } else {\n oCurrentObject = {\n type: 'text',\n value: sCurChar\n };\n aFormatArray.push(oCurrentObject);\n sState = 'text';\n }\n } else {\n if (sCurChar == '\\'') {\n bQuoted = true;\n } else if (this.oSymbols[sCurChar]) {\n sNewState = this.oSymbols[sCurChar].name;\n if (sState == sNewState) {\n oCurrentObject.digits++;\n } else {\n oCurrentObject = {\n type: sNewState,\n symbol: sCurChar,\n digits: 1\n };\n aFormatArray.push(oCurrentObject);\n sState = sNewState;\n if (!bIntervalStartFound) {\n if (mAppeared[sNewState]) {\n oCurrentObject.repeat = true;\n bIntervalStartFound = true;\n } else {\n mAppeared[sNewState] = true;\n }\n }\n }\n } else {\n if (sState == 'text') {\n oCurrentObject.value += sCurChar;\n } else {\n oCurrentObject = {\n type: 'text',\n value: sCurChar\n };\n aFormatArray.push(oCurrentObject);\n sState = 'text';\n }\n }\n }\n }\n mCldrDatePattern[sPattern] = aFormatArray;\n return aFormatArray;\n};\nDateFormat.prototype.parseRelative = function (sValue, bUTC) {\n var aPatterns, oEntry, rPattern, oResult, iValue;\n if (!sValue) {\n return null;\n }\n aPatterns = this.oLocaleData.getRelativePatterns(this.aRelativeParseScales, this.oFormatOptions.relativeStyle);\n for (var i = 0; i < aPatterns.length; i++) {\n oEntry = aPatterns[i];\n rPattern = new RegExp('^\\\\s*' + oEntry.pattern.replace(/\\{0\\}/, '(\\\\d+)') + '\\\\s*$', 'i');\n oResult = rPattern.exec(sValue);\n if (oResult) {\n if (oEntry.value !== undefined) {\n return computeRelativeDate(oEntry.value, oEntry.scale);\n } else {\n iValue = parseInt(oResult[1]);\n return computeRelativeDate(iValue * oEntry.sign, oEntry.scale);\n }\n }\n }\n function computeRelativeDate(iDiff, sScale) {\n var iToday, oToday = new Date(), oJSDate;\n if (bUTC) {\n iToday = oToday.getTime();\n } else {\n iToday = Date.UTC(oToday.getFullYear(), oToday.getMonth(), oToday.getDate(), oToday.getHours(), oToday.getMinutes(), oToday.getSeconds(), oToday.getMilliseconds());\n }\n oJSDate = new Date(iToday);\n switch (sScale) {\n case 'second':\n oJSDate.setUTCSeconds(oJSDate.getUTCSeconds() + iDiff);\n break;\n case 'minute':\n oJSDate.setUTCMinutes(oJSDate.getUTCMinutes() + iDiff);\n break;\n case 'hour':\n oJSDate.setUTCHours(oJSDate.getUTCHours() + iDiff);\n break;\n case 'day':\n oJSDate.setUTCDate(oJSDate.getUTCDate() + iDiff);\n break;\n case 'week':\n oJSDate.setUTCDate(oJSDate.getUTCDate() + iDiff * 7);\n break;\n case 'month':\n oJSDate.setUTCMonth(oJSDate.getUTCMonth() + iDiff);\n break;\n case 'quarter':\n oJSDate.setUTCMonth(oJSDate.getUTCMonth() + iDiff * 3);\n break;\n case 'year':\n oJSDate.setUTCFullYear(oJSDate.getUTCFullYear() + iDiff);\n break;\n }\n if (bUTC) {\n return oJSDate;\n } else {\n return new Date(oJSDate.getUTCFullYear(), oJSDate.getUTCMonth(), oJSDate.getUTCDate(), oJSDate.getUTCHours(), oJSDate.getUTCMinutes(), oJSDate.getUTCSeconds(), oJSDate.getUTCMilliseconds());\n }\n }\n};\nDateFormat.prototype.formatRelative = function (oJSDate, bUTC, aRange, sTimezone) {\n var oToday = convertToTimezone(new Date(), sTimezone), oDateUTC, sScale = this.oFormatOptions.relativeScale || 'day', iDiff, sPattern, iDiffSeconds;\n iDiffSeconds = (oJSDate.getTime() - oToday.getTime()) / 1000;\n if (this.oFormatOptions.relativeScale == 'auto') {\n sScale = this._getScale(iDiffSeconds, this.aRelativeScales);\n sScale = fixScaleForMonths(oJSDate, oToday, sScale, iDiffSeconds);\n }\n if (!aRange) {\n aRange = this._mRanges[sScale];\n }\n if (sScale == 'year' || sScale == 'month' || sScale == 'day') {\n oToday = new Date(Date.UTC(oToday.getUTCFullYear(), oToday.getUTCMonth(), oToday.getUTCDate()));\n oDateUTC = new Date(0);\n oDateUTC.setUTCFullYear(oJSDate.getUTCFullYear(), oJSDate.getUTCMonth(), oJSDate.getUTCDate());\n oJSDate = oDateUTC;\n }\n iDiff = this._getDifference(sScale, [\n oToday,\n oJSDate\n ]);\n if (this.oFormatOptions.relativeScale != 'auto' && (iDiff < aRange[0] || iDiff > aRange[1])) {\n return null;\n }\n sPattern = this.oLocaleData.getRelativePattern(sScale, iDiff, iDiffSeconds > 0, this.oFormatOptions.relativeStyle);\n return formatMessage(sPattern, [Math.abs(iDiff)]);\n};\nDateFormat.prototype._mRanges = {\n second: [\n -60,\n 60\n ],\n minute: [\n -60,\n 60\n ],\n hour: [\n -24,\n 24\n ],\n day: [\n -6,\n 6\n ],\n week: [\n -4,\n 4\n ],\n month: [\n -12,\n 12\n ],\n year: [\n -10,\n 10\n ]\n};\nDateFormat.prototype._mScales = {\n second: 1,\n minute: 60,\n hour: 3600,\n day: 86400,\n week: 604800,\n month: 2592000,\n quarter: 7776000,\n year: 31536000\n};\nDateFormat.prototype._getScale = function (iDiffSeconds, aScales) {\n var sScale, sTestScale;\n iDiffSeconds = Math.abs(iDiffSeconds);\n for (var i = 0; i < aScales.length; i++) {\n sTestScale = aScales[i];\n if (iDiffSeconds >= this._mScales[sTestScale]) {\n sScale = sTestScale;\n break;\n }\n }\n if (!sScale) {\n sScale = aScales[aScales.length - 1];\n }\n return sScale;\n};\nfunction fixScaleForMonths(oJSDate, oToday, sScale, iDiffSeconds) {\n var iMonthDiff = Math.abs(oJSDate.getUTCMonth() - oToday.getUTCMonth());\n if (sScale === 'week' && iMonthDiff === 2) {\n return 'month';\n } else if (sScale === 'week' && iMonthDiff === 1) {\n if (oJSDate.getUTCDate() === oToday.getUTCDate() || iDiffSeconds < 0 && oJSDate.getUTCDate() < oToday.getUTCDate() || iDiffSeconds > 0 && oJSDate.getUTCDate() > oToday.getUTCDate()) {\n return 'month';\n }\n } else if (sScale === 'month' && iMonthDiff === 1) {\n if (iDiffSeconds > 0 && oJSDate.getUTCDate() < oToday.getUTCDate() || iDiffSeconds < 0 && oJSDate.getUTCDate() > oToday.getUTCDate()) {\n return 'week';\n }\n }\n return sScale;\n}\nfunction cutDateFields(oDate, iStartIndex) {\n var aFields = [\n 'FullYear',\n 'Month',\n 'Date',\n 'Hours',\n 'Minutes',\n 'Seconds',\n 'Milliseconds'\n ], sMethodName;\n var oDateCopy = new Date(oDate.getTime());\n for (var i = iStartIndex; i < aFields.length; i++) {\n sMethodName = 'setUTC' + aFields[iStartIndex];\n oDateCopy[sMethodName].apply(oDateCopy, [0]);\n }\n return oDateCopy;\n}\nvar mRelativeDiffs = {\n year: function (oFromDate, oToDate) {\n return oToDate.getUTCFullYear() - oFromDate.getUTCFullYear();\n },\n month: function (oFromDate, oToDate) {\n return oToDate.getUTCMonth() - oFromDate.getUTCMonth() + this.year(oFromDate, oToDate) * 12;\n },\n week: function (oFromDate, oToDate, oFormat) {\n var iFromDay = oFormat._adaptDayOfWeek(oFromDate.getUTCDay());\n var iToDay = oFormat._adaptDayOfWeek(oToDate.getUTCDay());\n oFromDate = cutDateFields(oFromDate, 3);\n oToDate = cutDateFields(oToDate, 3);\n return (oToDate.getTime() - oFromDate.getTime() - (iToDay - iFromDay) * oFormat._mScales.day * 1000) / (oFormat._mScales.week * 1000);\n },\n day: function (oFromDate, oToDate, oFormat) {\n oFromDate = cutDateFields(oFromDate, 3);\n oToDate = cutDateFields(oToDate, 3);\n return (oToDate.getTime() - oFromDate.getTime()) / (oFormat._mScales.day * 1000);\n },\n hour: function (oFromDate, oToDate, oFormat) {\n oFromDate = cutDateFields(oFromDate, 4);\n oToDate = cutDateFields(oToDate, 4);\n return (oToDate.getTime() - oFromDate.getTime()) / (oFormat._mScales.hour * 1000);\n },\n minute: function (oFromDate, oToDate, oFormat) {\n oFromDate = cutDateFields(oFromDate, 5);\n oToDate = cutDateFields(oToDate, 5);\n return (oToDate.getTime() - oFromDate.getTime()) / (oFormat._mScales.minute * 1000);\n },\n second: function (oFromDate, oToDate, oFormat) {\n oFromDate = cutDateFields(oFromDate, 6);\n oToDate = cutDateFields(oToDate, 6);\n return (oToDate.getTime() - oFromDate.getTime()) / (oFormat._mScales.second * 1000);\n }\n};\nDateFormat.prototype._adaptDayOfWeek = function (iDayOfWeek) {\n var iFirstDayOfWeek = LocaleData.getInstance(Core.getConfiguration().getFormatSettings().getFormatLocale()).getFirstDayOfWeek();\n var iDayNumberOfWeek = iDayOfWeek - (iFirstDayOfWeek - 1);\n if (iDayNumberOfWeek <= 0) {\n iDayNumberOfWeek += 7;\n }\n return iDayNumberOfWeek;\n};\nDateFormat.prototype._getDifference = function (sScale, aDates) {\n var oFromDate = aDates[0];\n var oToDate = aDates[1];\n return Math.round(mRelativeDiffs[sScale](oFromDate, oToDate, this));\n};\nDateFormat.prototype.getAllowedCharacters = function (aFormatArray) {\n if (this.oFormatOptions.relative) {\n return '';\n }\n var sAllowedCharacters = '';\n var bNumbers = false;\n var bAll = false;\n var oPart;\n for (var i = 0; i < aFormatArray.length; i++) {\n oPart = aFormatArray[i];\n switch (oPart.type) {\n case 'text':\n if (sAllowedCharacters.indexOf(oPart.value) < 0) {\n sAllowedCharacters += oPart.value;\n }\n break;\n case 'day':\n case 'year':\n case 'weekYear':\n case 'dayNumberOfWeek':\n case 'weekInYear':\n case 'hour0_23':\n case 'hour1_24':\n case 'hour0_11':\n case 'hour1_12':\n case 'minute':\n case 'second':\n case 'fractionalsecond':\n if (!bNumbers) {\n sAllowedCharacters += '0123456789';\n bNumbers = true;\n }\n break;\n case 'month':\n case 'monthStandalone':\n if (oPart.digits < 3) {\n if (!bNumbers) {\n sAllowedCharacters += '0123456789';\n bNumbers = true;\n }\n } else {\n bAll = true;\n }\n break;\n default:\n bAll = true;\n break;\n }\n }\n if (bAll) {\n sAllowedCharacters = '';\n }\n return sAllowedCharacters;\n};\nexport default DateFormat;","import LocaleData from \"./LocaleData.js\";\n\nconst cache = new Map();\n\nconst getCachedLocaleDataInstance = locale => {\n\tif (!cache.has(locale)) {\n\t\tcache.set(locale, LocaleData.getInstance(locale));\n\t}\n\n\treturn cache.get(locale);\n};\n\nexport default getCachedLocaleDataInstance;\n","import CalendarDate from \"./CalendarDate.js\";\n\nconst cache = new Map();\n\nconst getMinCalendarDate = primaryCalendarType => {\n\tconst key = `min ${primaryCalendarType}`;\n\n\tif (!cache.has(key)) {\n\t\tconst minDate = new CalendarDate(1, 0, 1, primaryCalendarType);\n\t\tminDate.setYear(1);\n\t\tminDate.setMonth(0);\n\t\tminDate.setDate(1);\n\t\tcache.set(key, minDate);\n\t}\n\n\treturn cache.get(key);\n};\n\nconst getMaxCalendarDate = primaryCalendarType => {\n\tconst key = `max ${primaryCalendarType}`;\n\n\tif (!cache.has(key)) {\n\t\tconst maxDate = new CalendarDate(1, 0, 1, primaryCalendarType);\n\t\tmaxDate.setYear(9999);\n\t\tmaxDate.setMonth(11);\n\t\tconst tempDate = new CalendarDate(maxDate, primaryCalendarType);\n\t\ttempDate.setDate(1);\n\t\ttempDate.setMonth(tempDate.getMonth() + 1, 0);\n\t\tmaxDate.setDate(tempDate.getDate());// 31st for Gregorian Calendar\n\t\tcache.set(key, maxDate);\n\t}\n\n\treturn cache.get(key);\n};\n\nexport {\n\tgetMinCalendarDate,\n\tgetMaxCalendarDate,\n};\n","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { fetchCldr } from \"@ui5/webcomponents-base/dist/asset-registries/LocaleData.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { getCalendarType } from \"@ui5/webcomponents-base/dist/config/CalendarType.js\";\nimport DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport getCachedLocaleDataInstance from \"@ui5/webcomponents-localization/dist/getCachedLocaleDataInstance.js\";\nimport CalendarType from \"@ui5/webcomponents-base/dist/types/CalendarType.js\";\nimport getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport { getMaxCalendarDate, getMinCalendarDate } from \"@ui5/webcomponents-localization/dist/dates/ExtremeDates.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\tlanguageAware: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.DateComponentBase.prototype */ {\n\t\t/**\n\t\t * Sets a calendar type used for display.\n\t\t * If not set, the calendar type of the global configuration is used.\n\t\t * @type {CalendarType}\n\t\t * @public\n\t\t */\n\t\tprimaryCalendarType: {\n\t\t\ttype: CalendarType,\n\t\t},\n\n\t\t/**\n\t\t * Defines the secondary calendar type.\n\t\t * If not set, the calendar will only show the primary calendar type.\n\t\t * @type {CalendarType}\n\t\t * @since 1.0.0-rc.16\n\t\t * @defaultvalue undefined\n\t\t * @public\n\t\t */\n\t\tsecondaryCalendarType: {\n\t\t\ttype: CalendarType,\n\t\t},\n\n\t\t/**\n\t\t * Determines the minimum date available for selection.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.0.0-rc.6\n\t\t * @public\n\t\t */\n\t\tminDate: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Determines the maximum date available for selection.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @since 1.0.0-rc.6\n\t\t * @public\n\t\t */\n\t\tmaxDate: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Determines the format, displayed in the input field.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tformatPattern: {\n\t\t\ttype: String,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * Abstract class that provides common functionality for date-related components (day picker, month picker, year picker, calendar, date picker, date range picker, date time picker)\n * This includes:\n * - \"languageAware: true\" metadata setting, CLDR fetch and i18n initialization\n * - common properties (primaryCalendar, minDate, maxDate and formatPattern) declaration and methods that operate on them\n * - additional common methods\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.DateComponentBase\n * @extends sap.ui.webcomponents.base.UI5Element\n * @public\n */\nclass DateComponentBase 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\tconstructor() {\n\t\tsuper();\n\t}\n\n\tget _primaryCalendarType() {\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\treturn this.primaryCalendarType || getCalendarType() || localeData.getPreferredCalendarType();\n\t}\n\n\tget _minDate() {\n\t\treturn this.minDate && this.getFormat().parse(this.minDate) ? this._getCalendarDateFromString(this.minDate) : getMinCalendarDate(this._primaryCalendarType);\n\t}\n\n\tget _maxDate() {\n\t\treturn this.maxDate && this.getFormat().parse(this.maxDate) ? this._getCalendarDateFromString(this.maxDate) : getMaxCalendarDate(this._primaryCalendarType);\n\t}\n\n\tget _formatPattern() {\n\t\treturn this.formatPattern || \"medium\"; // get from config\n\t}\n\n\tget _isPattern() {\n\t\treturn this._formatPattern !== \"medium\" && this._formatPattern !== \"short\" && this._formatPattern !== \"long\";\n\t}\n\n\t_getCalendarDateFromString(value) {\n\t\tconst jsDate = this.getFormat().parse(value);\n\t\tif (jsDate) {\n\t\t\treturn CalendarDate.fromLocalJSDate(jsDate, this._primaryCalendarType);\n\t\t}\n\t}\n\n\t_getTimeStampFromString(value) {\n\t\tconst calDate = this._getCalendarDateFromString(value);\n\t\tif (calDate) {\n\t\t\treturn calDate.toUTCJSDate().valueOf();\n\t\t}\n\t}\n\n\t_getStringFromTimestamp(timestamp) {\n\t\tconst localDate = new Date(timestamp);\n\t\treturn this.getFormat().format(localDate, true);\n\t}\n\n\tgetFormat() {\n\t\treturn this._isPattern\n\t\t\t? DateFormat.getInstance({\n\t\t\t\tstrictParsing: true,\n\t\t\t\tpattern: this._formatPattern,\n\t\t\t\tcalendarType: this._primaryCalendarType,\n\t\t\t})\n\t\t\t: DateFormat.getInstance({\n\t\t\t\tstrictParsing: true,\n\t\t\t\tstyle: this._formatPattern,\n\t\t\t\tcalendarType: this._primaryCalendarType,\n\t\t\t});\n\t}\n\n\tstatic async onDefine() {\n\t\t[DateComponentBase.i18nBundle] = await Promise.all([\n\t\t\tgetI18nBundle(\"@ui5/webcomponents\"),\n\t\t\tfetchCldr(getLocale().getLanguage(), getLocale().getRegion(), getLocale().getScript()),\n\t\t]);\n\t}\n}\n\nexport default DateComponentBase;\n","import CalendarDate from \"./CalendarDate.js\";\n\nconst getDaysInMonth = date => {\n\tconst tempCalendarDate = new CalendarDate(date);\n\ttempCalendarDate.setDate(1);\n\ttempCalendarDate.setMonth(tempCalendarDate.getMonth() + 1);\n\ttempCalendarDate.setDate(0);\n\treturn tempCalendarDate.getDate();\n};\n\nexport default getDaysInMonth;\n","import CalendarDate from \"./CalendarDate.js\";\nimport getDaysInMonth from \"./getDaysInMonth.js\";\n\nconst transformDateToSecondaryType = (primaryCalendarType, secondaryCalendarType, timeStamp, hasYearPicker) => {\n\tlet firstDate = CalendarDate.fromLocalJSDate(new Date(timeStamp * 1000), primaryCalendarType);\n\tlet lastDate = CalendarDate.fromLocalJSDate(new Date(timeStamp * 1000), primaryCalendarType);\n\tfirstDate.setDate(1);\n\n\tif (hasYearPicker) {\n\t\tfirstDate.setMonth(0);\n\t\tlastDate.setMonth(11);\n\t}\n\n\tlastDate.setDate(getDaysInMonth(lastDate));\n\tfirstDate = new CalendarDate(firstDate, secondaryCalendarType);\n\tlastDate = new CalendarDate(lastDate, secondaryCalendarType);\n\treturn { firstDate, lastDate };\n};\n\nexport default transformDateToSecondaryType;\n","import getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport getCachedLocaleDataInstance from \"../getCachedLocaleDataInstance.js\";\n\n/**\n * Convert month number to month name (text).\n * If the numbers of the two months are the same you will get the name of the month,\n * otherwise you will get the two names separated by a dash\n *\n * @param firstMonth CalendarDate Month\n * @param lastMonth CalendarDate Month\n * @param calendarType calendar type\n * @returns {String}\n */\nconst convertMonthNumbersToMonthNames = (firstMonth, lastMonth, calendarType) => {\n\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\tconst pattern = localeData.getIntervalPattern();\n\tconst secondaryMonthsNames = localeData.getMonthsStandAlone(\"abbreviated\", calendarType);\n\tconst secondaryMonthsNamesWide = localeData.getMonthsStandAlone(\"wide\", calendarType);\n\n\tif (firstMonth === lastMonth) {\n\t\treturn {\n\t\t\ttext: localeData.getMonths(\"abbreviated\", calendarType)[firstMonth],\n\t\t\ttextInfo: localeData.getMonths(\"wide\", calendarType)[firstMonth],\n\t\t};\n\t}\n\n\treturn {\n\t\ttext: pattern.replace(/\\{0\\}/, secondaryMonthsNames[firstMonth]).replace(/\\{1\\}/, secondaryMonthsNames[lastMonth]),\n\t\ttextInfo: pattern.replace(/\\{0\\}/, secondaryMonthsNamesWide[firstMonth]).replace(/\\{1\\}/, secondaryMonthsNamesWide[lastMonth]),\n\t};\n};\n\nexport default convertMonthNumbersToMonthNames;\n","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\n\n/**\n* @public\n*/\nconst metadata = {\n\ttag: \"ui5-date\",\n\tproperties: /** @lends sap.ui.webcomponents.main.CalendarDate.prototype */ {\n\n\t\t/**\n\t\t * The date formatted according to the formatPattern
property of the ui5-calendar
that hosts the component\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-date
component defines a calendar date to be used inside ui5-calendar
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.CalendarDate\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-date\n * @implements sap.ui.webcomponents.main.ICalendarDate\n * @public\n */\nclass CalendarDate extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n}\n\nCalendarDate.define();\n\nexport default CalendarDate;\n","import Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport modifyDateBy from \"@ui5/webcomponents-localization/dist/dates/modifyDateBy.js\";\nimport getTodayUTCTimestamp from \"@ui5/webcomponents-localization/dist/dates/getTodayUTCTimestamp.js\";\nimport DateComponentBase from \"./DateComponentBase.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\tproperties: /** @lends sap.ui.webcomponents.main.CalendarPart.prototype */ {\n\t\t/**\n\t\t * The timestamp of the currently focused date. Set this property to move the component's focus to a certain date.\n\t\t * Node: Timestamp is 10-digit Integer representing the seconds (not milliseconds) since the Unix Epoch.\n\t\t * @type {Integer}\n\t\t * @protected\n\t\t */\n\t\ttimestamp: {\n\t\t\ttype: Integer,\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * Abstract base class for Calendar, DayPicker, MonthPicker and YearPicker that adds support for:\n * - common properties (timestamp, selectedDates): declarations and methods that operate on them\n * - other common code\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.CalendarPart\n * @extends DateComponentBase\n * @public\n */\nclass CalendarPart extends DateComponentBase {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tget _minTimestamp() {\n\t\treturn this._minDate.valueOf() / 1000;\n\t}\n\n\tget _maxTimestamp() {\n\t\treturn this._maxDate.valueOf() / 1000;\n\t}\n\n\t/**\n\t * Returns the effective timestamp to be used by the respective calendar part\n\t * @protected\n\t */\n\tget _timestamp() {\n\t\tlet timestamp = this.timestamp !== undefined ? this.timestamp : getTodayUTCTimestamp(this._primaryCalendarType);\n\t\tif (timestamp < this._minTimestamp || timestamp > this._maxTimestamp) {\n\t\t\ttimestamp = this._minTimestamp;\n\t\t}\n\t\treturn timestamp;\n\t}\n\n\tget _localDate() {\n\t\treturn new Date(this._timestamp * 1000);\n\t}\n\n\t/**\n\t * Returns a CalendarDate instance, representing the _timestamp getter - this date is central to all components' rendering logic\n\t * @protected\n\t */\n\tget _calendarDate() {\n\t\treturn CalendarDate.fromTimestamp(this._localDate.getTime(), this._primaryCalendarType);\n\t}\n\n\t/**\n\t * Change a timestamp and enforce limits\n\t *\n\t * @param timestamp\n\t * @protected\n\t */\n\t_safelySetTimestamp(timestamp) {\n\t\tconst min = this._minDate.valueOf() / 1000;\n\t\tconst max = this._maxDate.valueOf() / 1000;\n\n\t\tif (timestamp < min) {\n\t\t\ttimestamp = min;\n\t\t}\n\t\tif (timestamp > max) {\n\t\t\ttimestamp = max;\n\t\t}\n\n\t\tthis.timestamp = timestamp;\n\t}\n\n\t/**\n\t * Modify a timestamp by a certain amount of days/months/years and enforce limits\n\t * @param amount\n\t * @param unit\n\t * @protected\n\t */\n\t_safelyModifyTimestampBy(amount, unit) {\n\t\tconst newDate = modifyDateBy(this._calendarDate, amount, unit);\n\t\tthis._safelySetTimestamp(newDate.valueOf() / 1000);\n\t}\n\n\t_getTimestampFromDom(domNode) {\n\t\tconst oMonthDomRef = domNode.getAttribute(\"data-sap-timestamp\");\n\t\treturn parseInt(oMonthDomRef);\n\t}\n}\n\nexport default CalendarPart;\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-left\";\nconst pathData = \"M340.5 358q9 9 9 22 0 11-9 22-9 9-22 9-11 0-22-9l-124-124q-9-11-9-22 0-13 9-22l124-124q11-9 22-9 13 0 22 9t9 22q0 11-9 22l-103 102z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-left\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-left\";\nconst pathData = \"M351.5 421q6 6 6 12 0 5-6 11-5 5-11 5t-11-5l-166-165q-9-10-9-23t9-23l165-164q5-5 11.5-5t11.5 5 5 11-5 11l-159 159q-3 3-3 6t3 6z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-left\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/slim-arrow-left.js\";\nimport {pathData as pathDataV4} from \"./v4/slim-arrow-left.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"slim-arrow-left\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-right\";\nconst pathData = \"M172.5 154q-9-11-9-22 0-13 9-22 11-9 22-9 13 0 22 9l124 124q9 9 9 22 0 11-9 22l-124 124q-9 9-22 9-11 0-22-9-9-11-9-22 0-13 9-22l103-102z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-right\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"slim-arrow-right\";\nconst pathData = \"M357.5 233q10 10 10 23t-10 23l-165 165q-6 5-12 5-5 0-11-5-5-6-5-11 0-6 5-12l160-159q3-3 3-6t-3-6l-159-159q-5-5-5-11t5-11 11-5 11 5z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"slim-arrow-right\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/slim-arrow-right.js\";\nimport {pathData as pathDataV4} from \"./v4/slim-arrow-right.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"slim-arrow-right\";\nexport { pathData, ltr, accData };","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/CalendarHeader.css\",content:\":host{display:block;width:100%;height:100%}.ui5-calheader-root{display:flex;height:100%;padding:var(--_ui5_calendar_header_padding);box-sizing:border-box}.ui5-calheader-arrowbtn{display:flex;justify-content:center;align-items:center;width:var(--_ui5_calendar_header_arrow_button_width);background-color:var(--sapButton_Lite_Background);color:var(--sapButton_Lite_TextColor);cursor:pointer;overflow:hidden;white-space:nowrap;padding:0;font-size:var(--sapFontSize);user-select:none}.ui5-calheader-arrowbtn.ui5-calheader-arrowbtn-disabled,.ui5-calheader-arrowbtn.ui5-calheader-arrowbtn-disabled:active,.ui5-calheader-arrowbtn.ui5-calheader-arrowbtn-disabled:focus,.ui5-calheader-arrowbtn.ui5-calheader-arrowbtn-disabled:hover{pointer-events:none;opacity:.4;outline:none;background-color:var(--sapButton_Lite_Background);color:var(--sapButton_Lite_TextColor)}[hidden].ui5-calheader-arrowbtn.ui5-calheader-middlebtn{display:none}.ui5-calheader-arrowbtn:focus{outline:none}.ui5-calheader-arrowbtn:hover{background-color:var(--sapButton_Hover_Background);color:var(--sapButton_Lite_TextColor);box-shadow:var(--_ui5_calendar_header_arrow_button_box_shadow)}.ui5-calheader-arrowbtn:active{background-color:var(--sapButton_Active_Background);color:var(--sapButton_Active_TextColor)}.ui5-calheader-arrowbtn,.ui5-calheader-middlebtn{border:var(--_ui5_calendar_header_arrow_button_border);border-radius:var(--_ui5_calendar_header_arrow_button_border_radius);display:flex;background-color:var(--sapButton_Lite_Background);border-color:var(--sapButton_Lite_BorderColor)}.ui5-calheader-middlebtn{flex-direction:column;align-items:center;justify-content:center}.ui5-calheader-arrowbtn:not(:active) .ui5-calheader-btn-sectext{color:var(--sapNeutralElementColor);font-size:var(--sapFontSmallSize)}.ui5-calheader-arrowicon{color:currentColor;pointer-events:none}.ui5-calheader-midcontainer{display:flex;justify-content:space-around;flex:1 1 auto;padding:0 .5rem}.ui5-calheader-midcontainer .ui5-calheader-middlebtn:first-child{margin-inline-end:.5rem}.ui5-calheader-middlebtn{font-family:var(--_ui5_button_fontFamily);width:var(--_ui5_calendar_header_middle_button_width);flex:var(--_ui5_calendar_header_middle_button_flex);position:relative;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui5-calheader-middlebtn:focus{border:var(--_ui5_calendar_header_middle_button_focus_border);border-radius:var(--_ui5_calendar_header_middle_button_focus_border_radius);outline:var(--_ui5_calendar_header_middle_button_focus_outline);outline-offset:-.125rem;background:var(--_ui5_calendar_header_middle_button_focus_background)}.ui5-calheader-middlebtn:focus:active{outline:var(--_ui5_calendar_header_middle_button_focus_active_outline);outline-offset:-.0625rem;background:var(--_ui5_calendar_header_middle_button_focus_active_background)}.ui5-calheader-middlebtn:focus:after{content:\\\"\\\";display:var(--_ui5_calendar_header_middle_button_focus_after_display);width:var(--_ui5_calendar_header_middle_button_focus_after_width);height:var(--_ui5_calendar_header_middle_button_focus_after_height);border:var(--_ui5_calendar_header_middle_button_focus_after_border);position:absolute;top:var(--_ui5_calendar_header_middle_button_focus_after_top_offset);left:var(--_ui5_calendar_header_middle_button_focus_after_left_offset)}.ui5-calheader-middlebtn:focus:active:after{border-color:var(--sapContent_ContrastFocusColor)}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport { isSpace, isEnter } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport CalendarType from \"@ui5/webcomponents-base/dist/types/CalendarType.js\";\nimport \"@ui5/webcomponents-icons/dist/slim-arrow-left.js\";\nimport \"@ui5/webcomponents-icons/dist/slim-arrow-right.js\";\nimport Icon from \"./Icon.js\";\nimport CalendarHeaderTemplate from \"./generated/templates/CalendarHeaderTemplate.lit.js\";\nimport {\n\tCALENDAR_HEADER_NEXT_BUTTON,\n\tCALENDAR_HEADER_PREVIOUS_BUTTON,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport styles from \"./generated/themes/CalendarHeader.css.js\";\n\nconst metadata = {\n\ttag: \"ui5-calendar-header\",\n\tlanguageAware: true,\n\tproperties: {\n\t\t/**\n\t\t * Already normalized by Calendar\n\t\t * @type {Integer}\n\t\t * @public\n\t\t */\n\t\ttimestamp: {\n\t\t\ttype: Integer,\n\t\t},\n\n\t\t/**\n\t\t * Already normalized by Calendar\n\t\t * @type {CalendarType}\n\t\t * @public\n\t\t */\n\t\tprimaryCalendarType: {\n\t\t\ttype: CalendarType,\n\t\t},\n\n\t\t/**\n\t\t * Already normalized by Calendar\n\t\t * @sience 1.0.0-rc.16\n\t\t * @defaultvalue undefined\n\t\t * @type {CalendarType}\n\t\t * @public\n\t\t */\n\t\tsecondaryCalendarType: {\n\t\t\ttype: CalendarType,\n\t\t},\n\n\t\t/**\n\t\t * Stores information for month button for secondary calendar type\n\t\t * @type {Object}\n\t\t * @private\n\t\t*/\n\t\tbuttonTextForSecondaryCalendarType: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\tisNextButtonDisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\tisPrevButtonDisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\tisMonthButtonHidden: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_monthButtonText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_yearButtonText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_yearButtonTextSecType: {\n\t\t\ttype: String,\n\t\t},\n\n\t\tisYearButtonHidden: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tevents: {\n\t\t\"previous-press\": {},\n\t\t\"next-press\": {},\n\t\t\"show-month-press\": {},\n\t\t\"show-year-press\": {},\n\t},\n};\n\nclass CalendarHeader 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 CalendarHeaderTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn styles;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [Icon];\n\t}\n\n\tstatic async onDefine() {\n\t\tCalendarHeader.i18nBundle = await getI18nBundle(\"@ui5/webcomponents\");\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._prevButtonText = CalendarHeader.i18nBundle.getText(CALENDAR_HEADER_PREVIOUS_BUTTON);\n\t\tthis._nextButtonText = CalendarHeader.i18nBundle.getText(CALENDAR_HEADER_NEXT_BUTTON);\n\n\t\tif (this.hasSecondaryCalendarType) {\n\t\t\tthis._secondMonthButtonText = this.buttonTextForSecondaryCalendarType.monthButtonText;\n\t\t\tthis._secondYearButtonText = this.buttonTextForSecondaryCalendarType.yearButtonText;\n\t\t}\n\t}\n\n\tonPrevButtonClick(event) {\n\t\tthis.fireEvent(\"previous-press\", event);\n\t}\n\n\tonNextButtonClick(event) {\n\t\tthis.fireEvent(\"next-press\", event);\n\t}\n\n\tonMonthButtonClick(event) {\n\t\tthis.fireEvent(\"show-month-press\", event);\n\t}\n\n\tonMonthButtonKeyDown(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.fireEvent(\"show-month-press\", event);\n\t\t}\n\t}\n\n\tonMonthButtonKeyUp(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.fireEvent(\"show-month-press\", event);\n\t\t}\n\t}\n\n\tonYearButtonClick(event) {\n\t\tthis.fireEvent(\"show-year-press\", event);\n\t}\n\n\tonYearButtonKeyDown(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tthis.fireEvent(\"show-year-press\", event);\n\t\t}\n\t}\n\n\tonYearButtonKeyUp(event) {\n\t\tif (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.fireEvent(\"show-year-press\", event);\n\t\t}\n\t}\n\n\tget hasSecondaryCalendarType() {\n\t\treturn !!this.secondaryCalendarType;\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tprevButton: {\n\t\t\t\t\"ui5-calheader-arrowbtn\": true,\n\t\t\t\t\"ui5-calheader-arrowbtn-disabled\": this.isPrevButtonDisabled,\n\t\t\t},\n\t\t\tnextButton: {\n\t\t\t\t\"ui5-calheader-arrowbtn\": true,\n\t\t\t\t\"ui5-calheader-arrowbtn-disabled\": this.isNextButtonDisabled,\n\t\t\t},\n\t\t};\n\t}\n\n\tget accInfo() {\n\t\treturn {\n\t\t\tariaLabelMonthButton: this.hasSecondaryCalendarType\n\t\t\t\t? `${this._monthButtonText}, ${this.buttonTextForSecondaryCalendarType.monthButtonInfo}` : `${this._monthButtonText}`,\n\t\t};\n\t}\n}\n\nCalendarHeader.define();\n\nexport default CalendarHeader;\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 UniversalDate from \"../sap/ui/core/date/UniversalDate.js\";\n\nconst calculateWeekNumber = (confFirstDayOfWeek, oDate, iYear, oLocale, oLocaleData) => {\n\tlet iWeekNum = 0;\n\tlet iWeekDay = 0;\n\tconst iFirstDayOfWeek = Number.isInteger(confFirstDayOfWeek) ? confFirstDayOfWeek : oLocaleData.getFirstDayOfWeek();\n\n\t// search Locale for containing \"en-US\", since sometimes\n\t// when any user settings have been defined, subtag \"sapufmt\" is added to the locale name\n\t// this is described inside sap.ui.core.Configuration file\n\tif (oLocale && (oLocale.getLanguage() === \"en\" && oLocale.getRegion() === \"US\")) {\n\t\t/*\n\t\t\t* in US the week starts with Sunday\n\t\t\t* The first week of the year starts with January 1st. But Dec. 31 is still in the last year\n\t\t\t* So the week beginning in December and ending in January has 2 week numbers\n\t\t\t*/\n\t\tconst oJanFirst = new UniversalDate(oDate.getTime());\n\t\toJanFirst.setUTCFullYear(iYear, 0, 1);\n\t\tiWeekDay = oJanFirst.getUTCDay();\n\n\t\t// get the date for the same weekday like jan 1.\n\t\tconst oCheckDate = new UniversalDate(oDate.getTime());\n\t\toCheckDate.setUTCDate(oCheckDate.getUTCDate() - oCheckDate.getUTCDay() + iWeekDay);\n\n\t\tiWeekNum = Math.round((oCheckDate.getTime() - oJanFirst.getTime()) / 86400000 / 7) + 1;\n\t} else {\n\t\t// normally the first week of the year is the one where the first Thursday of the year is\n\t\t// find Thursday of this week\n\t\t// if the checked day is before the 1. day of the week use a day of the previous week to check\n\t\tconst oThursday = new UniversalDate(oDate.getTime());\n\t\toThursday.setUTCDate(oThursday.getUTCDate() - iFirstDayOfWeek);\n\t\tiWeekDay = oThursday.getUTCDay();\n\t\toThursday.setUTCDate(oThursday.getUTCDate() - iWeekDay + 4);\n\n\t\tconst oFirstDayOfYear = new UniversalDate(oThursday.getTime());\n\t\toFirstDayOfYear.setUTCMonth(0, 1);\n\t\tiWeekDay = oFirstDayOfYear.getUTCDay();\n\t\tlet iAddDays = 0;\n\t\tif (iWeekDay > 4) {\n\t\t\tiAddDays = 7; // first day of year is after Thursday, so first Thursday is in the next week\n\t\t}\n\t\tconst oFirstThursday = new UniversalDate(oFirstDayOfYear.getTime());\n\t\toFirstThursday.setUTCDate(1 - iWeekDay + 4 + iAddDays);\n\n\t\tiWeekNum = Math.round((oThursday.getTime() - oFirstThursday.getTime()) / 86400000 / 7) + 1;\n\t}\n\n\treturn iWeekNum;\n};\n\nexport default calculateWeekNumber;\n","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.CalendarSelectionMode.prototype\n * @public\n */\nconst CalendarSelectionModes = {\n\t/**\n\t * Only one date can be selected at a time\n\t * @public\n\t * @type {Single}\n\t */\n\tSingle: \"Single\",\n\n\t/**\n\t * Several dates can be selected\n\t * @public\n\t * @type {Multiple}\n\t */\n\tMultiple: \"Multiple\",\n\n\t/**\n\t * A range defined by a start date and an end date can be selected\n\t * @public\n\t * @type {Range}\n\t */\n\tRange: \"Range\",\n};\n\n/**\n * @class\n * Different date selection modes for ui5-calendar
.\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.CalendarSelectionMode\n * @public\n * @enum {string}\n */\nclass CalendarSelectionMode extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!CalendarSelectionModes[value];\n\t}\n}\n\nCalendarSelectionMode.generateTypeAccessors(CalendarSelectionModes);\n\nexport default CalendarSelectionMode;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ repeat(context._dayNames, (item, index) => item._id || index, (item, index) => block1(item, index, context, tags, suffix)) }
${ repeat(context._weeks, (item, index) => item._id || index, (item, index) => block2(item, index, context, tags, suffix)) }
`;\nconst block1 = (item, index, context, tags, suffix) => html`${ifDefined(item.ultraShortName)}
`;\nconst block2 = (item, index, context, tags, suffix) => html`${ item.length ? block3(item, index, context, tags, suffix) : block9(item, index, context, tags, suffix) }`;\nconst block3 = (item, index, context, tags, suffix) => html`${ repeat(item, (item, index) => item._id || index, (item, index) => block4(item, index, context, tags, suffix)) }
`;\nconst block4 = (item, index, context, tags, suffix) => html`${ item.timestamp ? block5(item, index, context, tags, suffix) : block7(item, index, context, tags, suffix) }`;\nconst block5 = (item, index, context, tags, suffix) => html`${ifDefined(item.day)}${ item._isSecondaryCalendarType ? block6(item, index, context, tags, suffix) : undefined }
`;\nconst block6 = (item, index, context, tags, suffix) => html`${ifDefined(item.secondDay)}`;\nconst block7 = (item, index, context, tags, suffix) => html`${ !item.isHidden ? block8(item, index, context, tags, suffix) : undefined }`;\nconst block8 = (item, index, context, tags, suffix) => html`${ifDefined(item.weekNum)}
`;\nconst block9 = (item, index, context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/DayPicker.css\",content:\":host(:not([hidden])){display:block}:host{height:100%;width:100%}:host([hide-week-numbers]) .ui5-dp-content{flex-basis:100%}:host([secondary-calendar-type]) .ui5-dp-item{flex-direction:column;justify-content:var(--_ui5_day_picker_item_justify_content)}:host([secondary-calendar-type]) .ui5-dp-daytext{height:1.575rem;padding:.575rem 0 0 0}:host([secondary-calendar-type]) .ui5-dp-daysectext{font-size:.625rem;height:1rem;padding:0 .375rem .375rem 50%}.ui5-dp-dayname,.ui5-dp-item,.ui5-dp-weekname{width:var(--_ui5_day_picker_item_width);height:var(--_ui5_day_picker_item_height);margin-top:var(--_ui5_daypicker_item_margin);margin-right:var(--_ui5_daypicker_item_margin);font-family:\\\"72override\\\",var(--sapFontFamily);border-radius:var(--_ui5_daypicker_item_border_radius)}.ui5-dp-weekname{color:var(--_ui5_daypicker_weekname_color)}.ui5-dp-weeks-row{display:flex}.ui5-dp-content{display:flex;flex-basis:87.5%;flex-direction:column;font-family:\\\"72override\\\",var(--sapFontFamily)}.ui5-dp-days-names-container{display:flex;height:var(--_ui5_daypicker_daynames_container_height)}.ui5-dp-weeknumber-container{padding-top:var(--_ui5_daypicker_weeknumbers_container_padding_top);flex-basis:12.5%}.ui5-dp-dayname,.ui5-dp-item,.ui5-dp-weekname,.ui5-dp-weekname-container{display:flex;flex-grow:1;justify-content:center;align-items:center;font-size:var(--sapFontSmallSize);outline:none;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui5-dp-item{position:relative;color:var(--sapTextColor);background:var(--sapLegend_WorkingBackground);font-size:var(--sapFontSize);border:var(--_ui5_daypicker_item_border);border-radius:var(--_ui5_daypicker_item_border_radius)}.ui5-dp-item:hover{background:var(--sapList_Hover_Background)}.ui5-dp-daytext{display:flex;width:100%;height:100%;justify-content:center;align-items:center;box-sizing:border-box}.ui5-dp-dayname{color:var(--_ui5_daypicker_dayname_color);height:100%}.ui5-dp-item.ui5-dp-item--weeekend{background:var(--sapLegend_NonWorkingBackground)}.ui5-dp-item.ui5-dp-item--disabled{pointer-events:none;opacity:.5}.ui5-dp-item.ui5-dp-item--weeekend:hover{background:var(--sapList_Hover_Background)}.ui5-dp-item.ui5-dp-item--othermonth{color:var(--_ui5_daypicker_item_othermonth_color);background:var(--_ui5_daypicker_item_othermonth_background_color);border-color:transparent}.ui5-dp-item.ui5-dp-item--othermonth:hover,.ui5-dp-item.ui5-dp-item--weeekend.ui5-dp-item--othermonth:hover{color:var(--_ui5_daypicker_item_othermonth_hover_color);background:var(--sapList_Hover_Background)}.ui5-dp-item:focus:after{content:\\\"\\\";border:var(--_ui5_daypicker_item_not_selected_focus_border);position:absolute;inset:var(--_ui5_daypicker_item_no_selected_inset);outline:none;border-radius:var(--_ui5_daypicker_item_border_radius_focus_after)}.ui5-dp-item.ui5-dp-item--now:before{position:absolute;inset:0;border:.125rem solid var(--sapLegend_CurrentDateTime);content:\\\"\\\";border-radius:var(--_ui5_daypicker_item_border_radius)}.ui5-dp-item.ui5-dp-item--now.ui5-dp-item--selected{box-shadow:var(--_ui5_daypicker_item_now_box_shadow)}:host([secondary-calendar-type]) .ui5-dp-item.ui5-dp-item--now .ui5-dp-daytext{height:1.8125rem;padding-top:.387rem}:host([secondary-calendar-type]) .ui5-dp-item.ui5-dp-item--now .ui5-dp-daysectext{height:1rem;padding-top:0;padding-bottom:.187rem}.ui5-dp-item.ui5-dp-item--selected{background:var(--sapContent_Selected_Background)}.ui5-dp-item.ui5-dp-item--selected:not(.ui5-dp-item.ui5-dp-item--now) .ui5-dp-daytext:after{position:absolute;inset:0;border:var(--_ui5_daypicker_item_selected_border);content:\\\"\\\";border-radius:var(--_ui5_daypicker_item_border_radius_focus_after)}.ui5-dp-item.ui5-dp-item--selected.ui5-dp-item.ui5-dp-item--now .ui5-dp-daytext{border:var(--_ui5_day_picker_item_selected_now_border);outline:var(--_ui5_daypicker_item_selected_text_outline);outline-offset:-.3125rem;border-radius:var(--_ui5_daypicker_item_border_radius_focus_after);font-family:var(--_ui5_daypicker_item_selected_text_font)}.ui5-dp-item.ui5-dp-item--selected .ui5-dp-daytext{background:var(--_ui5_daypicker_item_selected_background);color:var(--sapContent_Selected_TextColor);border-radius:var(--_ui5_daypicker_item_border_radius);border:var(--_ui5_daypicker_item_selected_text_border);font-family:var(--_ui5_daypicker_item_selected_text_font)}.ui5-dp-item.ui5-dp-item--selected:hover .ui5-dp-daytext{background:var(--_ui5_daypicker_item_selected_daytext_hover_background);color:var(--sapContent_Selected_TextColor)}.ui5-dp-item.ui5-dp-item--now:focus:after{inset:.1875rem;border-radius:var(--_ui5_daypicker_item_now_border_radius_focus_after);border:var(--_ui5_daypicker_item_now_border_focus_after);position:absolute;content:\\\"\\\";width:auto;height:auto}.ui5-dp-item.ui5-dp-item--selected.ui5-dp-item--now:focus:after{inset:.1875;border-radius:var(--_ui5_day_picker_item_selected_now_border_radios_foucs);border:var(--_ui5_day_picker_item_selected_now_border_foucs);position:absolute;content:\\\"\\\";width:auto;height:auto}.ui5-dp-item.ui5-dp-item--selected:hover{background:var(--sapContent_Selected_Hover_Background);color:var(--sapContent_ContrastTextColor)}.ui5-dp-item.ui5-dp-item--selected:focus:after{border-color:var(--_ui5_daypicker_item_selected_focus_color);border-width:var(--_ui5_daypicker_item_selected_focus_width)}.ui5-dp-items-container{outline:none}.ui5-dp-item.ui5-dp-item--selected-between .ui5-dp-daytext,.ui5-dp-item[hovered] .ui5-dp-daytext{border:var(--_ui5_daypicker_item_select_between_border);border-radius:var(--_ui5_daypicker_item_border_radius);background-color:var(--_ui5_daypicker_item_selected_between_text_background);color:var(--sapTextColor);font-weight:var(--_ui5_daypicker_item_selected_between_text_font)}.ui5-dp-item.ui5-dp-item--selected-between.ui5-dp-item--now:not(.ui5-dp-item--selected) .ui5-dp-daytext:after{content:\\\"\\\";position:absolute;inset:var(--_ui5_daypicker_item_now_selected_between_inset);border:var(--_ui5_daypicker_item_now_selected_between_border);border-radius:var(--_ui5_daypicker_item_now_selected_between_border_radius)}.ui5-dp-item.ui5-dp-item--selected-between,.ui5-dp-item[hovered]{border-radius:var(--_ui5_daypicker_item_selected_between_border);background:var(--_ui5_daypicker_item_selected_between_background)}.ui5-dp-item.ui5-dp-item--selected-between:hover{background:var(--_ui5_daypicker_item_selected_between_hover_background)}.ui5-dp-item.ui5-dp-item--selected.ui5-dp-item--selected-between:focus:after{border-color:var(--sapContent_FocusColor)}.ui5-dp-items-container>:first-child{justify-content:flex-end}.ui5-dp-emptyweek{height:var(--_ui5_day_picker_empty_height)}.ui5-dp-item.ui5-dp-item--now.ui5-dp-item--selected.ui5-dp-item--withsecondtype:focus:after{outline-offset:-.1875rem;border-radius:var(--_ui5-dp-item_withsecondtype_border)}.ui5-dp-item.ui5-dp-item--now.ui5-dp-item--selected.ui5-dp-item--withsecondtype .ui5-dp-daytext,.ui5-dp-item.ui5-dp-item--selected.ui5-dp-item--now.ui5-dp-item--withsecondtype .ui5-dp-daysectext{border:none;outline:none}\"}","import getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport { getFirstDayOfWeek } from \"@ui5/webcomponents-base/dist/config/FormatSettings.js\";\nimport getCachedLocaleDataInstance from \"@ui5/webcomponents-localization/dist/getCachedLocaleDataInstance.js\";\nimport {\n\tisSpace,\n\tisSpaceShift,\n\tisEnter,\n\tisEnterShift,\n\tisUp,\n\tisDown,\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n\tisHomeCtrl,\n\tisEndCtrl,\n\tisPageUp,\n\tisPageDown,\n\tisPageUpShift,\n\tisPageUpAlt,\n\tisPageUpShiftCtrl,\n\tisPageDownShift,\n\tisPageDownAlt,\n\tisPageDownShiftCtrl,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport calculateWeekNumber from \"@ui5/webcomponents-localization/dist/dates/calculateWeekNumber.js\";\nimport CalendarType from \"@ui5/webcomponents-base/dist/types/CalendarType.js\";\nimport CalendarSelectionMode from \"./types/CalendarSelectionMode.js\";\nimport CalendarPart from \"./CalendarPart.js\";\nimport DayPickerTemplate from \"./generated/templates/DayPickerTemplate.lit.js\";\n\nimport {\n\tDAY_PICKER_WEEK_NUMBER_TEXT,\n\tDAY_PICKER_NON_WORKING_DAY,\n\tDAY_PICKER_TODAY,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nimport dayPickerCSS from \"./generated/themes/DayPicker.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-daypicker\",\n\tproperties: /** @lends sap.ui.webcomponents.main.DayPicker.prototype */ {\n\t\t/**\n\t\t * An array of UTC timestamps representing the selected date or dates depending on the capabilities of the picker component.\n\t\t * @type {Array}\n\t\t * @public\n\t\t */\n\t\tselectedDates: {\n\t\t\ttype: Integer,\n\t\t\tmultiple: true,\n\t\t\tcompareValues: true,\n\t\t},\n\n\t\t/**\n\t\t * Defines the type of selection used in the day picker component.\n\t\t * Accepted property values are:
\n\t\t * \n\t\t * CalendarSelectionMode.Single
- enables a single date selection.(default value) \n\t\t * CalendarSelectionMode.Range
- enables selection of a date range. \n\t\t * CalendarSelectionMode.Multiple
- enables selection of multiple dates. \n\t\t *
\n\t\t * @type {CalendarSelectionMode}\n\t\t * @defaultvalue \"Single\"\n\t\t * @public\n\t\t */\n\t\tselectionMode: {\n\t\t\ttype: CalendarSelectionMode,\n\t\t\tdefaultValue: CalendarSelectionMode.Single,\n\t\t},\n\n\t\t/**\n\t\t * Defines the visibility of the week numbers column.\n\t\t *
\n\t\t *\n\t\t * Note: For calendars other than Gregorian,\n\t\t * the week numbers are not displayed regardless of what is set.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\thideWeekNumbers: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * @type {Object}\n\t\t * @private\n\t\t */\n\t\t_weeks: {\n\t\t\ttype: Object,\n\t\t\tmultiple: true,\n\t\t},\n\n\t\t_dayNames: {\n\t\t\ttype: Object,\n\t\t\tmultiple: true,\n\t\t},\n\n\t\t/**\n\t\t * When set, the component will skip all work in onBeforeRendering and will not automatically set the focus on itself\n\t\t * @type {boolean}\n\t\t * @private\n\t\t */\n\t\t_hidden: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t/**\n\t\t * When selectionMode=\"Range\" and the first day in the range is selected, this is the currently hovered (when using mouse) or focused (when using keyboard) day by the user\n\t\t * @private\n\t\t */\n\t\t_secondTimestamp: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.DayPicker.prototype */ {\n\t\t/**\n\t\t * Fired when the selected date(s) change\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tchange: {},\n\t\t/**\n\t\t * Fired when the timestamp changes (user navigates with the keyboard) or clicks with the mouse\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tnavigate: {},\n\t},\n};\n\nconst isBetween = (x, num1, num2) => x > Math.min(num1, num2) && x < Math.max(num1, num2);\n\nconst DAYS_IN_WEEK = 7;\n\n/**\n * @class\n *\n * Represents one month view inside a calendar.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.DayPicker\n * @extends CalendarPart\n * @tagname ui5-daypicker\n * @public\n */\nclass DayPicker extends CalendarPart {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get template() {\n\t\treturn DayPickerTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn dayPickerCSS;\n\t}\n\n\tonBeforeRendering() {\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\tthis._buildWeeks(localeData);\n\t\tthis._buildDayNames(localeData);\n\t}\n\n\t/**\n\t * Builds the _weeks object that represents the month\n\t * @param localeData\n\t * @private\n\t */\n\t_buildWeeks(localeData) {\n\t\tif (this._hidden) {\n\t\t\treturn; // Optimization to not do any work unless the current picker\n\t\t}\n\n\t\tthis._weeks = [];\n\n\t\tconst firstDayOfWeek = this._getFirstDayOfWeek();\n\t\tconst monthsNames = localeData.getMonths(\"wide\", this._primaryCalendarType);\n\t\tconst secondaryMonthsNames = this.hasSecondaryCalendarType && localeData.getMonths(\"wide\", this.secondaryCalendarType);\n\t\tconst nonWorkingDayLabel = DayPicker.i18nBundle.getText(DAY_PICKER_NON_WORKING_DAY);\n\t\tconst todayLabel = DayPicker.i18nBundle.getText(DAY_PICKER_TODAY);\n\t\tconst tempDate = this._getFirstDay(); // date that will be changed by 1 day 42 times\n\t\tconst todayDate = CalendarDate.fromLocalJSDate(new Date(), this._primaryCalendarType); // current day date - calculate once\n\t\tconst calendarDate = this._calendarDate; // store the _calendarDate value as this getter is expensive and degrades IE11 perf\n\t\tconst minDate = this._minDate; // store the _minDate (expensive getter)\n\t\tconst maxDate = this._maxDate; // store the _maxDate (expensive getter)\n\n\t\tconst tempSecondDate = this.hasSecondaryCalendarType && this._getSecondaryDay(tempDate);\n\n\t\tlet week = [];\n\t\tfor (let i = 0; i < DAYS_IN_WEEK * 6; i++) { // always show 6 weeks total, 42 days to avoid jumping\n\t\t\tconst timestamp = tempDate.valueOf() / 1000; // no need to round because CalendarDate does it\n\n\t\t\tlet dayOfTheWeek = tempDate.getDay() - firstDayOfWeek;\n\t\t\tif (dayOfTheWeek < 0) {\n\t\t\t\tdayOfTheWeek += DAYS_IN_WEEK;\n\t\t\t}\n\n\t\t\tconst isFocused = tempDate.getMonth() === calendarDate.getMonth() && tempDate.getDate() === calendarDate.getDate();\n\t\t\tconst isSelected = this._isDaySelected(timestamp);\n\t\t\tconst isSelectedBetween = this._isDayInsideSelectionRange(timestamp);\n\t\t\tconst isOtherMonth = tempDate.getMonth() !== calendarDate.getMonth();\n\t\t\tconst isWeekend = this._isWeekend(tempDate);\n\t\t\tconst isDisabled = tempDate.valueOf() < minDate.valueOf() || tempDate.valueOf() > maxDate.valueOf();\n\t\t\tconst isToday = tempDate.isSame(todayDate);\n\t\t\tconst isFirstDayOfWeek = tempDate.getDay() === firstDayOfWeek;\n\n\t\t\tconst nonWorkingAriaLabel = isWeekend ? `${nonWorkingDayLabel} ` : \"\";\n\t\t\tconst todayAriaLabel = isToday ? `${todayLabel} ` : \"\";\n\t\t\tconst ariaLabel = this.hasSecondaryCalendarType\n\t\t\t\t? `${todayAriaLabel}${nonWorkingAriaLabel}${monthsNames[tempDate.getMonth()]} ${tempDate.getDate()}, ${tempDate.getYear()}; ${secondaryMonthsNames[tempSecondDate.getMonth()]} ${tempSecondDate.getDate()}, ${tempSecondDate.getYear()}`\n\t\t\t\t: `${todayAriaLabel}${nonWorkingAriaLabel}${monthsNames[tempDate.getMonth()]} ${tempDate.getDate()}, ${tempDate.getYear()}`;\n\n\t\t\tconst day = {\n\t\t\t\ttimestamp: timestamp.toString(),\n\t\t\t\tfocusRef: isFocused,\n\t\t\t\t_tabIndex: isFocused ? \"0\" : \"-1\",\n\t\t\t\tselected: isSelected,\n\t\t\t\tday: tempDate.getDate(),\n\t\t\t\tsecondDay: this.hasSecondaryCalendarType && tempSecondDate.getDate(),\n\t\t\t\t_isSecondaryCalendarType: this.hasSecondaryCalendarType,\n\t\t\t\tclasses: `ui5-dp-item ui5-dp-wday${dayOfTheWeek}`,\n\t\t\t\tariaLabel,\n\t\t\t\tariaSelected: isSelected ? \"true\" : \"false\",\n\t\t\t\tariaDisabled: isOtherMonth ? \"true\" : undefined,\n\t\t\t\tdisabled: isDisabled,\n\t\t\t};\n\n\t\t\tif (isFirstDayOfWeek) {\n\t\t\t\tday.classes += \" ui5-dp-firstday\";\n\t\t\t}\n\n\t\t\tif (isSelected) {\n\t\t\t\tday.classes += \" ui5-dp-item--selected\";\n\t\t\t}\n\n\t\t\tif (isSelectedBetween) {\n\t\t\t\tday.classes += \" ui5-dp-item--selected-between\";\n\t\t\t}\n\n\t\t\tif (isToday) {\n\t\t\t\tday.classes += \" ui5-dp-item--now\";\n\t\t\t}\n\n\t\t\tif (isOtherMonth) {\n\t\t\t\tday.classes += \" ui5-dp-item--othermonth\";\n\t\t\t}\n\n\t\t\tif (isWeekend) {\n\t\t\t\tday.classes += \" ui5-dp-item--weeekend\";\n\t\t\t}\n\n\t\t\tif (isDisabled) {\n\t\t\t\tday.classes += \" ui5-dp-item--disabled\";\n\t\t\t}\n\n\t\t\tif (this.hasSecondaryCalendarType) {\n\t\t\t\tday.classes += \" ui5-dp-item--withsecondtype\";\n\t\t\t}\n\n\t\t\tweek.push(day);\n\n\t\t\tif (dayOfTheWeek === DAYS_IN_WEEK - 1) { // 0-indexed so 6 is the last day of the week\n\t\t\t\tweek.unshift({\n\t\t\t\t\tweekNum: calculateWeekNumber(getFirstDayOfWeek(), tempDate.toUTCJSDate(), tempDate.getYear(), getLocale(), localeData),\n\t\t\t\t\tisHidden: this.shouldHideWeekNumbers,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (week.length === DAYS_IN_WEEK + 1) { // 7 entries for each day + 1 for the week numbers\n\t\t\t\tthis._weeks.push(week);\n\t\t\t\tweek = [];\n\t\t\t}\n\n\t\t\ttempDate.setDate(tempDate.getDate() + 1);\n\t\t\tif (this.hasSecondaryCalendarType) {\n\t\t\t\ttempSecondDate.setDate(tempSecondDate.getDate() + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Builds the dayNames object (header of the month)\n\t * @param localeData\n\t * @private\n\t */\n\t_buildDayNames(localeData) {\n\t\tif (this._hidden) {\n\t\t\treturn; // Optimization to not do any work unless the current picker\n\t\t}\n\n\t\tlet dayOfTheWeek;\n\n\t\tconst aDayNamesWide = localeData.getDays(\"wide\", this._primaryCalendarType);\n\t\tconst aDayNamesAbbreviated = localeData.getDays(\"abbreviated\", this._primaryCalendarType);\n\t\tlet dayName;\n\n\t\tthis._dayNames = [];\n\t\tthis._dayNames.push({\n\t\t\tclasses: \"ui5-dp-dayname\",\n\t\t\tname: DayPicker.i18nBundle.getText(DAY_PICKER_WEEK_NUMBER_TEXT),\n\t\t});\n\t\tfor (let i = 0; i < DAYS_IN_WEEK; i++) {\n\t\t\tdayOfTheWeek = i + this._getFirstDayOfWeek();\n\t\t\tif (dayOfTheWeek > DAYS_IN_WEEK - 1) { // 0-indexed so index of 6 is the maximum allowed\n\t\t\t\tdayOfTheWeek -= DAYS_IN_WEEK;\n\t\t\t}\n\t\t\tdayName = {\n\t\t\t\tname: aDayNamesWide[dayOfTheWeek],\n\t\t\t\tultraShortName: aDayNamesAbbreviated[dayOfTheWeek],\n\t\t\t\tclasses: \"ui5-dp-dayname\",\n\t\t\t};\n\n\t\t\tthis._dayNames.push(dayName);\n\t\t}\n\n\t\tthis._dayNames[1].classes += \" ui5-dp-firstday\";\n\n\t\tif (this.shouldHideWeekNumbers) {\n\t\t\tthis._dayNames.shift();\n\t\t}\n\t}\n\n\tonAfterRendering() {\n\t\tif (this._autoFocus && !this._hidden) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t_onfocusin() {\n\t\tthis._autoFocus = true;\n\t}\n\n\t_onfocusout() {\n\t\tthis._autoFocus = false;\n\t}\n\n\t/**\n\t * Tells if the day is selected (dark blue)\n\t * @param timestamp\n\t * @returns {boolean}\n\t * @private\n\t */\n\t_isDaySelected(timestamp) {\n\t\tif (this.selectionMode === CalendarSelectionMode.Single) {\n\t\t\treturn timestamp === this.selectedDates[0];\n\t\t}\n\n\t\t// Multiple, Range\n\t\treturn this.selectedDates.includes(timestamp);\n\t}\n\n\t/**\n\t * Tells if the day is inside a selection range (light blue)\n\t * @param timestamp\n\t * @returns {*}\n\t * @private\n\t */\n\t_isDayInsideSelectionRange(timestamp) {\n\t\t// No selection at all (or not in range selection mode)\n\t\tif (this.selectionMode !== CalendarSelectionMode.Range || !this.selectedDates.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Only one date selected - the user is hovering with the mouse or navigating with the keyboard to select the second one\n\t\tif (this.selectedDates.length === 1 && this._secondTimestamp) {\n\t\t\treturn isBetween(timestamp, this.selectedDates[0], this._secondTimestamp);\n\t\t}\n\n\t\t// Two dates selected - stable range\n\t\treturn isBetween(timestamp, this.selectedDates[0], this.selectedDates[1]);\n\t}\n\n\t/**\n\t * Selects/deselects a day\n\t * @param event\n\t * @param isShift true if the user did Click+Shift or Enter+Shift (but not Space+Shift)\n\t * @private\n\t */\n\t_selectDate(event, isShift) {\n\t\tconst target = event.target;\n\n\t\tif (!this._isDayPressed(target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timestamp = this._getTimestampFromDom(target);\n\n\t\tthis._safelySetTimestamp(timestamp);\n\t\tthis._updateSecondTimestamp();\n\n\t\tif (this.selectionMode === CalendarSelectionMode.Single) {\n\t\t\tthis.selectedDates = [timestamp];\n\t\t} else if (this.selectionMode === CalendarSelectionMode.Multiple) {\n\t\t\tif (this.selectedDates.length > 0 && isShift) {\n\t\t\t\tthis._multipleSelection(timestamp);\n\t\t\t} else {\n\t\t\t\tthis._toggleTimestampInSelection(timestamp);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedDates = (this.selectedDates.length === 1) ? [...this.selectedDates, timestamp]\t: [timestamp];\n\t\t}\n\n\t\tthis.fireEvent(\"change\", {\n\t\t\ttimestamp: this.timestamp,\n\t\t\tdates: this.selectedDates,\n\t\t});\n\t}\n\n\t/**\n\t * Selects/deselects the whole row (week)\n\t * @param event\n\t * @private\n\t */\n\t_selectWeek(event) {\n\t\tthis._weeks.forEach(week => {\n\t\t\tconst dayInThisWeek = week.findIndex(item => {\n\t\t\t\tconst date = CalendarDate.fromTimestamp(parseInt(item.timestamp) * 1000);\n\t\t\t\treturn date.getMonth() === this._calendarDate.getMonth() && date.getDate() === this._calendarDate.getDate();\n\t\t\t}) !== -1;\n\t\t\tif (dayInThisWeek) { // The current day is in this week\n\t\t\t\tconst notAllDaysOfThisWeekSelected = week.some(item => item.timestamp && !this.selectedDates.includes(parseInt(item.timestamp)));\n\t\t\t\tif (notAllDaysOfThisWeekSelected) { // even if one day is not selected, select the whole week\n\t\t\t\t\tweek.filter(item => item.timestamp).forEach(item => {\n\t\t\t\t\t\tthis._addTimestampToSelection(parseInt(item.timestamp));\n\t\t\t\t\t});\n\t\t\t\t} else { // only if all days of this week are selected, deselect them\n\t\t\t\t\tweek.filter(item => item.timestamp).forEach(item => {\n\t\t\t\t\t\tthis._removeTimestampFromSelection(parseInt(item.timestamp));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.fireEvent(\"change\", {\n\t\t\ttimestamp: this.timestamp,\n\t\t\tdates: this.selectedDates,\n\t\t});\n\t}\n\n\t_toggleTimestampInSelection(timestamp) {\n\t\tif (this.selectedDates.includes(timestamp)) {\n\t\t\tthis._removeTimestampFromSelection(timestamp);\n\t\t} else {\n\t\t\tthis._addTimestampToSelection(timestamp);\n\t\t}\n\t}\n\n\t_addTimestampToSelection(timestamp) {\n\t\tif (!this.selectedDates.includes(timestamp)) {\n\t\t\tthis.selectedDates = [...this.selectedDates, timestamp];\n\t\t}\n\t}\n\n\t_removeTimestampFromSelection(timestamp) {\n\t\tthis.selectedDates = this.selectedDates.filter(value => value !== timestamp);\n\t}\n\n\t/**\n\t * When at least one day is selected and the user pressed shift\n\t * @param timestamp\n\t * @private\n\t */\n\t_multipleSelection(timestamp) {\n\t\tconst min = Math.min(...this.selectedDates);\n\t\tconst max = Math.max(...this.selectedDates);\n\t\tlet start;\n\t\tlet end;\n\t\tlet toggle = false;\n\n\t\tif (timestamp < min) {\n\t\t\tstart = timestamp;\n\t\t\tend = min;\n\t\t} else if (timestamp >= min && timestamp <= max) { // inside the current range - toggle all between the selected and focused\n\t\t\tconst distanceToMin = Math.abs(timestamp - min);\n\t\t\tconst distanceToMax = Math.abs(timestamp - max);\n\n\t\t\tif (distanceToMin < distanceToMax) {\n\t\t\t\tstart = timestamp;\n\t\t\t\tend = max;\n\t\t\t} else {\n\t\t\t\tstart = min;\n\t\t\t\tend = timestamp;\n\t\t\t}\n\t\t\ttoggle = true;\n\t\t} else {\n\t\t\tstart = max;\n\t\t\tend = timestamp;\n\t\t}\n\n\t\tconst startDate = CalendarDate.fromTimestamp(start * 1000);\n\t\tconst endDate = CalendarDate.fromTimestamp(end * 1000);\n\n\t\twhile (startDate.valueOf() <= endDate.valueOf()) {\n\t\t\tthis[toggle ? \"_toggleTimestampInSelection\" : \"_addTimestampToSelection\"](startDate.valueOf() / 1000);\n\t\t\tstartDate.setDate(startDate.getDate() + 1);\n\t\t}\n\t}\n\n\t/**\n\t * Set the hovered day as the _secondTimestamp\n\t * @param event\n\t * @private\n\t */\n\t_onmouseover(event) {\n\t\tconst hoveredItem = event.target.closest(\".ui5-dp-item\");\n\t\tif (hoveredItem && this.selectionMode === CalendarSelectionMode.Range && this.selectedDates.length === 1) {\n\t\t\tthis._secondTimestamp = this._getTimestampFromDom(hoveredItem);\n\t\t}\n\t}\n\n\t_onkeydown(event) {\n\t\tlet preventDefault = true;\n\n\t\tif (isEnter(event) || isEnterShift(event)) {\n\t\t\tthis._selectDate(event, isEnterShift(event));\n\t\t} else if (isSpace(event) || isSpaceShift(event)) {\n\t\t\tevent.preventDefault();\n\t\t} else if (isLeft(event)) {\n\t\t\tthis._modifyTimestampBy(-1, \"day\");\n\t\t} else if (isRight(event)) {\n\t\t\tthis._modifyTimestampBy(1, \"day\");\n\t\t} else if (isUp(event)) {\n\t\t\tthis._modifyTimestampBy(-7, \"day\");\n\t\t} else if (isDown(event)) {\n\t\t\tthis._modifyTimestampBy(7, \"day\");\n\t\t} else if (isPageUp(event)) {\n\t\t\tthis._modifyTimestampBy(-1, \"month\");\n\t\t} else if (isPageDown(event)) {\n\t\t\tthis._modifyTimestampBy(1, \"month\");\n\t\t} else if (isPageUpShift(event) || isPageUpAlt(event)) {\n\t\t\tthis._modifyTimestampBy(-1, \"year\");\n\t\t} else if (isPageDownShift(event) || isPageDownAlt(event)) {\n\t\t\tthis._modifyTimestampBy(1, \"year\");\n\t\t} else if (isPageUpShiftCtrl(event)) {\n\t\t\tthis._modifyTimestampBy(-10, \"year\");\n\t\t} else if (isPageDownShiftCtrl(event)) {\n\t\t\tthis._modifyTimestampBy(10, \"year\");\n\t\t} else if (isHome(event) || isEnd(event)) {\n\t\t\tthis._onHomeOrEnd(isHome(event));\n\t\t} else if (isHomeCtrl(event)) {\n\t\t\tconst tempDate = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\ttempDate.setDate(1); // Set the first day of the month\n\t\t\tthis._setTimestamp(tempDate.valueOf() / 1000);\n\t\t} else if (isEndCtrl(event)) {\n\t\t\tconst tempDate = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\ttempDate.setMonth(tempDate.getMonth() + 1);\n\t\t\ttempDate.setDate(0); // Set the last day of the month (0th day of next month)\n\t\t\tthis._setTimestamp(tempDate.valueOf() / 1000);\n\t\t} else {\n\t\t\tpreventDefault = false;\n\t\t}\n\n\t\tif (preventDefault) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_onkeyup(event) {\n\t\t// Even if Space+Shift was pressed, ignore the shift unless in Multiple selection\n\t\tif (isSpace(event) || (isSpaceShift(event) && this.selectionMode !== CalendarSelectionMode.Multiple)) {\n\t\t\tthis._selectDate(event, false);\n\t\t} else if (isSpaceShift(event)) {\n\t\t\tthis._selectWeek(event);\n\t\t}\n\t}\n\n\t/**\n\t * Click is the same as Enter: Click+Shift has the same effect as Enter+Shift\n\t * @param event\n\t * @private\n\t */\n\t_onclick(event) {\n\t\tthis._selectDate(event, event.shiftKey);\n\t}\n\n\t/**\n\t * One Home or End, move the focus to the first or last item in the row\n\t * @param homePressed\n\t * @private\n\t */\n\t_onHomeOrEnd(homePressed) {\n\t\tthis._weeks.forEach(week => {\n\t\t\tconst dayInThisWeek = week.findIndex(item => {\n\t\t\t\tconst date = CalendarDate.fromTimestamp(parseInt(item.timestamp) * 1000);\n\t\t\t\treturn date.getMonth() === this._calendarDate.getMonth() && date.getDate() === this._calendarDate.getDate();\n\t\t\t}) !== -1;\n\t\t\tif (dayInThisWeek) { // The current day is in this week\n\t\t\t\tconst index = homePressed ? 1 : 7; // select the first (if Home) or last (if End) day of the week\n\t\t\t\tthis._setTimestamp(parseInt(week[index].timestamp));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasPreviousPage() {\n\t\treturn !(this._calendarDate.getMonth() === this._minDate.getMonth() && this._calendarDate.getYear() === this._minDate.getYear());\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasNextPage() {\n\t\treturn !(this._calendarDate.getMonth() === this._maxDate.getMonth() && this._calendarDate.getYear() === this._maxDate.getYear());\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * Same as PageUp\n\t * @protected\n\t */\n\t_showPreviousPage() {\n\t\tthis._modifyTimestampBy(-1, \"month\");\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * Same as PageDown\n\t * @protected\n\t */\n\t_showNextPage() {\n\t\tthis._modifyTimestampBy(1, \"month\");\n\t}\n\n\t/**\n\t * Modifies the timestamp by a certain amount of days/months/years\n\t * @param amount\n\t * @param unit\n\t * @private\n\t */\n\t_modifyTimestampBy(amount, unit) {\n\t\t// Modify the current timestamp\n\t\tthis._safelyModifyTimestampBy(amount, unit);\n\t\tthis._updateSecondTimestamp();\n\n\t\t// Notify the calendar to update its timestamp\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t/**\n\t * Sets the timestamp to an absolute value\n\t * @param value\n\t * @private\n\t */\n\t_setTimestamp(value) {\n\t\tthis._safelySetTimestamp(value);\n\t\tthis._updateSecondTimestamp();\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t/**\n\t * During range selection, when the user is navigating with the keyboard, the currently focused day is considered the \"second day\"\n\t * @private\n\t */\n\t_updateSecondTimestamp() {\n\t\tif (this.selectionMode === CalendarSelectionMode.Range && this.selectedDates.length === 1) {\n\t\t\tthis._secondTimestamp = this.timestamp;\n\t\t}\n\t}\n\n\tget shouldHideWeekNumbers() {\n\t\tif (this._primaryCalendarType !== CalendarType.Gregorian) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.hideWeekNumbers;\n\t}\n\n\tget hasSecondaryCalendarType() {\n\t\treturn !!this.secondaryCalendarType;\n\t}\n\n\t_isWeekend(oDate) {\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\n\t\tconst iWeekDay = oDate.getDay(),\n\t\t\tiWeekendStart = localeData.getWeekendStart(),\n\t\t\tiWeekendEnd = localeData.getWeekendEnd();\n\n\t\treturn (iWeekDay >= iWeekendStart && iWeekDay <= iWeekendEnd)\n\t\t\t|| (iWeekendEnd < iWeekendStart && (iWeekDay >= iWeekendStart || iWeekDay <= iWeekendEnd));\n\t}\n\n\t_isDayPressed(target) {\n\t\tconst targetParent = target.parentNode;\n\t\treturn (target.className.indexOf(\"ui5-dp-item\") > -1) || (targetParent && targetParent.classList && targetParent.classList.contains(\"ui5-dp-item\"));\n\t}\n\n\t_getSecondaryDay(tempDate) {\n\t\treturn new CalendarDate(tempDate, this.secondaryCalendarType);\n\t}\n\n\t_getFirstDay() {\n\t\tlet daysFromPreviousMonth;\n\n\t\tconst firstDayOfWeek = this._getFirstDayOfWeek();\n\n\t\t// determine weekday of first day in month\n\t\tconst firstDay = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\tfirstDay.setDate(1);\n\t\tdaysFromPreviousMonth = firstDay.getDay() - firstDayOfWeek;\n\t\tif (daysFromPreviousMonth < 0) {\n\t\t\tdaysFromPreviousMonth = 7 + daysFromPreviousMonth;\n\t\t}\n\n\t\tif (daysFromPreviousMonth > 0) {\n\t\t\tfirstDay.setDate(1 - daysFromPreviousMonth);\n\t\t}\n\n\t\treturn firstDay;\n\t}\n\n\t_getFirstDayOfWeek() {\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\tconst confFirstDayOfWeek = getFirstDayOfWeek();\n\t\treturn Number.isInteger(confFirstDayOfWeek) ? confFirstDayOfWeek : localeData.getFirstDayOfWeek();\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\twrapper: {\n\t\t\t\tdisplay: this._hidden ? \"none\" : \"flex\",\n\t\t\t\t\"justify-content\": \"center\",\n\t\t\t},\n\t\t\tmain: {\n\t\t\t\twidth: \"100%\",\n\t\t\t},\n\t\t};\n\t}\n\n\tget ariaRoledescription() {\n\t\treturn this.hasSecondaryCalendarType\n\t\t\t? `${this._primaryCalendarType} calendar with secondary ${this.secondaryCalendarType} calendar`\n\t\t\t: `${this._primaryCalendarType} calendar`;\n\t}\n}\n\nDayPicker.define();\n\nexport default DayPicker;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ repeat(context._months, (item, index) => item._id || index, (item, index) => block1(item, index, context, tags, suffix)) }
`;\nconst block1 = (item, index, context, tags, suffix) => html`${ repeat(item, (item, index) => item._id || index, (item, index) => block2(item, index, context, tags, suffix)) }
`;\nconst block2 = (item, index, context, tags, suffix) => html`${ifDefined(item.name)}${ item.nameInSecType ? block3(item, index, context, tags, suffix) : undefined }
`;\nconst block3 = (item, index, context, tags, suffix) => html`${ifDefined(item.nameInSecType)}`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/MonthPicker.css\",content:\":host(:not([hidden])){display:block}:host{width:100%;height:100%}.ui5-mp-root{padding:2rem 0 1rem 0;display:flex;flex-direction:column;font-family:\\\"72override\\\",var(--sapFontFamily);font-size:var(--sapFontSize);justify-content:center;align-items:center}.ui5-mp-item{display:flex;flex-direction:column;width:calc(33.333% - .125rem);height:var(--_ui5_month_picker_item_height);color:var(--sapButton_Lite_TextColor);background-color:var(--sapLegend_WorkingBackground);align-items:center;justify-content:center;margin:var(--_ui5_monthpicker_item_margin);box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:default;outline:none;position:relative;border:var(--_ui5_monthpicker_item_border);border-radius:var(--_ui5_monthpicker_item_border_radius)}.ui5-dp-monthsectext{font-size:.75rem;color:var(--sapNeutralElementColor)}.ui5-mp-item:hover{background-color:var(--sapList_Hover_Background)}.ui5-mp-item.ui5-mp-item--selected,.ui5-mp-item.ui5-mp-item--selected .ui5-dp-monthsectext{box-shadow:var(--_ui5_monthpicker_item_selected_box_shadow);font-weight:var(--_ui5_monthpicker_item_selected_font_wieght);background-color:var(--_ui5_monthpicker_item_selected_background_color);color:var(--_ui5_monthpicker_item_selected_text_color)}.ui5-mp-item.ui5-mp-item--disabled{pointer-events:none;opacity:.5}.ui5-mp-item.ui5-mp-item--selected:focus{background-color:var(--sapContent_Selected_Background)}.ui5-mp-item.ui5-mp-item--selected:focus:after{border-color:var(--sapContent_ContrastFocusColor)}.ui5-mp-item.ui5-mp-item--selected:hover{background-color:var(--_ui5_monthpicker_item_selected_hover_color)}.ui5-mp-item:focus:after{content:\\\"\\\";position:absolute;border:var(--_ui5_button_focused_border);inset:0;border-radius:var(--_ui5_monthpicker_item_focus_after_border_radius)}.ui5-mp-quarter{display:flex;justify-content:center;align-items:center;width:100%}\"}","import getCachedLocaleDataInstance from \"@ui5/webcomponents-localization/dist/getCachedLocaleDataInstance.js\";\nimport convertMonthNumbersToMonthNames from \"@ui5/webcomponents-localization/dist/dates/convertMonthNumbersToMonthNames.js\";\nimport transformDateToSecondaryType from \"@ui5/webcomponents-localization/dist/dates/transformDateToSecondaryType.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport {\n\tisEnter,\n\tisSpace,\n\tisDown,\n\tisUp,\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n\tisHomeCtrl,\n\tisEndCtrl,\n\tisPageUp,\n\tisPageDown,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport CalendarPart from \"./CalendarPart.js\";\nimport MonthPickerTemplate from \"./generated/templates/MonthPickerTemplate.lit.js\";\nimport styles from \"./generated/themes/MonthPicker.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-monthpicker\",\n\tproperties: /** @lends sap.ui.webcomponents.main.MonthPicker.prototype */ {\n\t\t/**\n\t\t * An array of UTC timestamps representing the selected date or dates depending on the capabilities of the picker component.\n\t\t * @type {Array}\n\t\t * @public\n\t\t */\n\t\tselectedDates: {\n\t\t\ttype: Integer,\n\t\t\tmultiple: true,\n\t\t\tcompareValues: true,\n\t\t},\n\n\t\t_months: {\n\t\t\ttype: Object,\n\t\t\tmultiple: true,\n\t\t},\n\n\t\t_hidden: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.MonthPicker.prototype */ {\n\t\t/**\n\t\t * Fired when the user selects a month (space/enter/click).\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tchange: {},\n\t\t/**\n\t\t * Fired when the timestamp changes - the user navigates with the keyboard or clicks with the mouse.\n\t\t * @since 1.0.0-rc.9\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tnavigate: {},\n\t},\n};\n\nconst PAGE_SIZE = 12; // Total months on a single page\nconst ROW_SIZE = 3; // Months per row (4 rows of 3 months each)\n\n/**\n * Month picker component.\n *\n * @class\n *\n * Displays months which can be selected.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.MonthPicker\n * @extends CalendarPart\n * @tagname ui5-monthpicker\n * @public\n */\nclass MonthPicker extends CalendarPart {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get template() {\n\t\treturn MonthPickerTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn styles;\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._buildMonths();\n\t}\n\n\t_buildMonths() {\n\t\tif (this._hidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\tconst monthsNames = localeData.getMonthsStandAlone(\"wide\", this._primaryCalendarType);\n\n\t\tconst months = [];\n\t\tconst calendarDate = this._calendarDate; // store the value of the expensive getter\n\t\tconst minDate = this._minDate; // store the value of the expensive getter\n\t\tconst maxDate = this._maxDate; // store the value of the expensive getter\n\t\tconst tempDate = new CalendarDate(calendarDate, this._primaryCalendarType);\n\t\tlet timestamp;\n\n\t\t/* eslint-disable no-loop-func */\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\ttempDate.setMonth(i);\n\t\t\ttimestamp = tempDate.valueOf() / 1000;\n\n\t\t\tconst isSelected = this.selectedDates.some(itemTimestamp => {\n\t\t\t\tconst date = CalendarDate.fromTimestamp(itemTimestamp * 1000, this._primaryCalendarType);\n\t\t\t\treturn date.getYear() === tempDate.getYear() && date.getMonth() === tempDate.getMonth();\n\t\t\t});\n\t\t\tconst isFocused = tempDate.getMonth() === calendarDate.getMonth();\n\t\t\tconst isDisabled = this._isOutOfSelectableRange(tempDate, minDate, maxDate);\n\n\t\t\tconst month = {\n\t\t\t\ttimestamp: timestamp.toString(),\n\t\t\t\tfocusRef: isFocused,\n\t\t\t\t_tabIndex: isFocused ? \"0\" : \"-1\",\n\t\t\t\tselected: isSelected,\n\t\t\t\tariaSelected: isSelected ? \"true\" : \"false\",\n\t\t\t\tname: monthsNames[i],\n\t\t\t\tnameInSecType: this.secondaryCalendarType && this._getDisplayedSecondaryMonthText(timestamp).text,\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tclasses: \"ui5-mp-item\",\n\t\t\t};\n\n\t\t\tif (isSelected) {\n\t\t\t\tmonth.classes += \" ui5-mp-item--selected\";\n\t\t\t}\n\n\t\t\tif (isDisabled) {\n\t\t\t\tmonth.classes += \" ui5-mp-item--disabled\";\n\t\t\t}\n\n\t\t\tconst quarterIndex = parseInt(i / ROW_SIZE);\n\n\t\t\tif (months[quarterIndex]) {\n\t\t\t\tmonths[quarterIndex].push(month);\n\t\t\t} else {\n\t\t\t\tmonths[quarterIndex] = [month];\n\t\t\t}\n\t\t}\n\n\t\tthis._months = months;\n\t}\n\n\t_getDisplayedSecondaryMonthText(timestamp) {\n\t\tconst monthsName = transformDateToSecondaryType(this._primaryCalendarType, this.secondaryCalendarType, timestamp);\n\t\treturn convertMonthNumbersToMonthNames(monthsName.firstDate.getMonth(), monthsName.lastDate.getMonth(), this.secondaryCalendarType);\n\t}\n\n\tonAfterRendering() {\n\t\tif (!this._hidden) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t_onkeydown(event) {\n\t\tlet preventDefault = true;\n\n\t\tif (isEnter(event)) {\n\t\t\tthis._selectMonth(event);\n\t\t} else if (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t} else if (isLeft(event)) {\n\t\t\tthis._modifyTimestampBy(-1);\n\t\t} else if (isRight(event)) {\n\t\t\tthis._modifyTimestampBy(1);\n\t\t} else if (isUp(event)) {\n\t\t\tthis._modifyTimestampBy(-ROW_SIZE);\n\t\t} else if (isDown(event)) {\n\t\t\tthis._modifyTimestampBy(ROW_SIZE);\n\t\t} else if (isPageUp(event)) {\n\t\t\tthis._modifyTimestampBy(-PAGE_SIZE);\n\t\t} else if (isPageDown(event)) {\n\t\t\tthis._modifyTimestampBy(PAGE_SIZE);\n\t\t} else if (isHome(event) || isEnd(event)) {\n\t\t\tthis._onHomeOrEnd(isHome(event));\n\t\t} else if (isHomeCtrl(event)) {\n\t\t\tthis._setTimestamp(parseInt(this._months[0][0].timestamp)); // first month of first row\n\t\t} else if (isEndCtrl(event)) {\n\t\t\tthis._setTimestamp(parseInt(this._months[PAGE_SIZE / ROW_SIZE - 1][ROW_SIZE - 1].timestamp)); // last month of last row\n\t\t} else {\n\t\t\tpreventDefault = false;\n\t\t}\n\n\t\tif (preventDefault) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_onHomeOrEnd(homePressed) {\n\t\tthis._months.forEach(row => {\n\t\t\tconst indexInRow = row.findIndex(item => CalendarDate.fromTimestamp(parseInt(item.timestamp) * 1000).getMonth() === this._calendarDate.getMonth());\n\t\t\tif (indexInRow !== -1) { // The current month is on this row\n\t\t\t\tconst index = homePressed ? 0 : ROW_SIZE - 1; // select the first (if Home) or last (if End) month on the row\n\t\t\t\tthis._setTimestamp(parseInt(row[index].timestamp));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sets the timestamp to an absolute value\n\t * @param value\n\t * @private\n\t */\n\t_setTimestamp(value) {\n\t\tthis._safelySetTimestamp(value);\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t/**\n\t * Modifies timestamp by a given amount of months and, if necessary, loads the prev/next page\n\t * @param amount\n\t * @private\n\t */\n\t_modifyTimestampBy(amount) {\n\t\t// Modify the current timestamp\n\t\tthis._safelyModifyTimestampBy(amount, \"month\");\n\n\t\t// Notify the calendar to update its timestamp\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis._selectMonth(event);\n\t\t}\n\t}\n\n\t/**\n\t * User clicked with the mouser or pressed Enter/Space\n\t * @param event\n\t * @private\n\t */\n\t_selectMonth(event) {\n\t\tevent.preventDefault();\n\t\tif (event.target.className.indexOf(\"ui5-mp-item\") > -1) {\n\t\t\tconst timestamp = this._getTimestampFromDom(event.target);\n\t\t\tthis._safelySetTimestamp(timestamp);\n\t\t\tthis.fireEvent(\"change\", { timestamp: this.timestamp });\n\t\t}\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasPreviousPage() {\n\t\treturn this._calendarDate.getYear() !== this._minDate.getYear();\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasNextPage() {\n\t\treturn this._calendarDate.getYear() !== this._maxDate.getYear();\n\t}\n\n\t/**\n\t * Called by Calendar.js\n\t * User pressed the \"<\" button in the calendar header (same as PageUp)\n\t * @protected\n\t */\n\t_showPreviousPage() {\n\t\tthis._modifyTimestampBy(-PAGE_SIZE);\n\t}\n\n\t/**\n\t * Called by Calendar.js\n\t * User pressed the \">\" button in the calendar header (same as PageDown)\n\t * @protected\n\t */\n\t_showNextPage() {\n\t\tthis._modifyTimestampBy(PAGE_SIZE);\n\t}\n\n\t_isOutOfSelectableRange(date, minDate, maxDate) {\n\t\tconst month = date.getMonth();\n\t\tconst year = date.getYear();\n\t\tconst minYear = minDate.getYear();\n\t\tconst minMonth = minDate.getMonth();\n\t\tconst maxYear = maxDate.getYear();\n\t\tconst maxMonth = maxDate.getMonth();\n\n\t\treturn year < minYear || (year === minYear && month < minMonth) || year > maxYear || (year === maxYear && month > maxMonth);\n\t}\n}\n\nMonthPicker.define();\n\nexport default MonthPicker;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ repeat(context._years, (item, index) => item._id || index, (item, index) => block1(item, index, context, tags, suffix)) }
`;\nconst block1 = (item, index, context, tags, suffix) => html`${ repeat(item, (item, index) => item._id || index, (item, index) => block2(item, index, context, tags, suffix)) }
`;\nconst block2 = (item, index, context, tags, suffix) => html`${ifDefined(item.year)}${ item.yearInSecType ? block3(item, index, context, tags, suffix) : undefined }
`;\nconst block3 = (item, index, context, tags, suffix) => html`${ifDefined(item.yearInSecType)}`;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/YearPicker.css\",content:\":host(:not([hidden])){display:block}:host{width:100%;height:100%}.ui5-yp-root{padding:2rem 0 1rem 0;display:flex;flex-direction:column;font-family:\\\"72override\\\",var(--sapFontFamily);font-size:var(--sapFontSize);justify-content:center;align-items:center}.ui5-yp-interval-container{display:flex;justify-content:center;align-items:center;width:100%}.ui5-yp-item{display:flex;margin:var(--_ui5_yearpicker_item_margin);width:calc(25% - .125rem);height:var(--_ui5_year_picker_item_height);color:var(--sapButton_Lite_TextColor);background-color:var(--sapLegend_WorkingBackground);align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:default;outline:none;position:relative;border:var(--_ui5_yearpicker_item_border);border-radius:var(--_ui5_yearpicker_item_border_radius)}.ui5-yp-item-secondary-type{flex-direction:column;width:calc(50% - .125rem)}.ui5-yp-item-sec-type{font-size:.75rem;color:var(--sapNeutralElementColor)}.ui5-yp-item:hover{background-color:var(--sapList_Hover_Background)}.ui5-yp-item.ui5-yp-item--selected,.ui5-yp-item.ui5-yp-item--selected .ui5-yp-item-sec-type{background-color:var(--_ui5_yearpicker_item_selected_background_color);color:var(--_ui5_yearpicker_item_selected_text_color);box-shadow:var(--_ui5_yearpicker_item_selected_box_shadow);font-weight:700}.ui5-yp-item.ui5-yp-item--disabled{pointer-events:none;opacity:.5}.ui5-yp-item.ui5-yp-item--selected:focus{background-color:var(--_ui5_yearpicker_item_selected_focus)}.ui5-yp-item.ui5-yp-item--selected:focus:after{border-color:var(--sapContent_ContrastFocusColor)}.ui5-yp-item.ui5-yp-item--selected:hover{background-color:var(--_ui5_yearpicker_item_selected_hover_color)}.ui5-yp-item:focus:after{content:\\\"\\\";position:absolute;border:var(--_ui5_yearpicker_item_focus_after_border);inset:0;border-radius:var(--_ui5_yearpicker_item_focus_after_border_radius);outline:var(--_ui5_yearpicker_item_focus_after_outline)}\"}","import DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport {\n\tisEnter,\n\tisSpace,\n\tisDown,\n\tisUp,\n\tisLeft,\n\tisRight,\n\tisHome,\n\tisEnd,\n\tisHomeCtrl,\n\tisEndCtrl,\n\tisPageUp,\n\tisPageDown,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport transformDateToSecondaryType from \"@ui5/webcomponents-localization/dist/dates/transformDateToSecondaryType.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport { getMaxCalendarDate } from \"@ui5/webcomponents-localization/dist/dates/ExtremeDates.js\";\nimport CalendarPart from \"./CalendarPart.js\";\nimport YearPickerTemplate from \"./generated/templates/YearPickerTemplate.lit.js\";\nimport styles from \"./generated/themes/YearPicker.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-yearpicker\",\n\tproperties: /** @lends sap.ui.webcomponents.main.YearPicker.prototype */ {\n\t\t/**\n\t\t * An array of UTC timestamps representing the selected date or dates depending on the capabilities of the picker component.\n\t\t * @type {Array}\n\t\t * @public\n\t\t */\n\t\tselectedDates: {\n\t\t\ttype: Integer,\n\t\t\tmultiple: true,\n\t\t\tcompareValues: true,\n\t\t},\n\n\t\t_years: {\n\t\t\ttype: Object,\n\t\t\tmultiple: true,\n\t\t},\n\n\t\t_hidden: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.YearPicker.prototype */ {\n\t\t/**\n\t\t * Fired when the user selects a year (space/enter/click).\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tchange: {},\n\t\t/**\n\t\t * Fired when the timestamp changes - the user navigates with the keyboard or clicks with the mouse.\n\t\t * @since 1.0.0-rc.9\n\t\t * @public\n\t\t * @event\n\t\t */\n\t\tnavigate: {},\n\t},\n};\n\n/**\n * @class\n *\n * Displays years which can be selected.\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.YearPicker\n * @extends CalendarPart\n * @tagname ui5-yearpicker\n * @public\n */\nclass YearPicker extends CalendarPart {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get styles() {\n\t\treturn styles;\n\t}\n\n\tstatic get template() {\n\t\treturn YearPickerTemplate;\n\t}\n\n\tonBeforeRendering() {\n\t\tthis._buildYears();\n\t}\n\n\t_getPageSize() {\n\t\t// Total years on a single page depending on using on one or two calendar type\n\t\treturn this.secondaryCalendarType ? 8 : 20;\n\t}\n\n\t_getRowSize() {\n\t\t// Years per row (5 rows of 4 years each) for one claendar type and (4 row of 2 years each) for two calendar type\n\t\treturn this.secondaryCalendarType ? 2 : 4;\n\t}\n\n\t_buildYears() {\n\t\tif (this._hidden) {\n\t\t\treturn;\n\t\t}\n\t\tconst pageSize = this._getPageSize();\n\t\tconst oYearFormat = DateFormat.getDateInstance({ format: \"y\", calendarType: this._primaryCalendarType }, getLocale());\n\t\tconst oYearFormatInSecType = DateFormat.getDateInstance({ format: \"y\", calendarType: this.secondaryCalendarType }, getLocale());\n\t\tthis._calculateFirstYear();\n\t\tthis._lastYear = this._firstYear + pageSize - 1;\n\n\t\tconst calendarDate = this._calendarDate; // store the value of the expensive getter\n\t\tconst minDate = this._minDate; // store the value of the expensive getter\n\t\tconst maxDate = this._maxDate; // store the value of the expensive getter\n\t\tconst tempDate = new CalendarDate(calendarDate, this._primaryCalendarType);\n\t\tlet tempDateInSecType;\n\t\tlet textInSecType;\n\t\ttempDate.setYear(this._firstYear);\n\n\t\tconst intervals = [];\n\t\tlet timestamp;\n\n\t\t/* eslint-disable no-loop-func */\n\t\tfor (let i = 0; i < pageSize; i++) {\n\t\t\ttimestamp = tempDate.valueOf() / 1000;\n\n\t\t\tconst isSelected = this.selectedDates.some(itemTimestamp => {\n\t\t\t\tconst date = CalendarDate.fromTimestamp(itemTimestamp * 1000, this._primaryCalendarType);\n\t\t\t\treturn date.getYear() === tempDate.getYear();\n\t\t\t});\n\t\t\tconst isFocused = tempDate.getYear() === calendarDate.getYear();\n\t\t\tconst isDisabled = tempDate.getYear() < minDate.getYear() || tempDate.getYear() > maxDate.getYear();\n\n\t\t\tif (this.secondaryCalendarType) {\n\t\t\t\ttempDateInSecType = transformDateToSecondaryType(this._primaryCalendarType, this.secondaryCalendarType, timestamp, true);\n\t\t\t\ttextInSecType = tempDateInSecType.firstDate.getYear() === tempDateInSecType.lastDate.getYear\n\t\t\t\t\t? `${oYearFormatInSecType.format(tempDateInSecType.firstDate.toLocalJSDate(), true)}`\n\t\t\t\t\t: `${oYearFormatInSecType.format(tempDateInSecType.firstDate.toLocalJSDate(), true)} - ${oYearFormatInSecType.format(tempDateInSecType.lastDate.toLocalJSDate(), true)}`;\n\t\t\t}\n\n\t\t\tconst year = {\n\t\t\t\ttimestamp: timestamp.toString(),\n\t\t\t\t_tabIndex: isFocused ? \"0\" : \"-1\",\n\t\t\t\tfocusRef: isFocused,\n\t\t\t\tselected: isSelected,\n\t\t\t\tariaSelected: isSelected ? \"true\" : \"false\",\n\t\t\t\tyear: oYearFormat.format(tempDate.toLocalJSDate()),\n\t\t\t\tyearInSecType: this.secondaryCalendarType && textInSecType,\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tclasses: \"ui5-yp-item\",\n\t\t\t};\n\n\t\t\tif (isSelected) {\n\t\t\t\tyear.classes += \" ui5-yp-item--selected\";\n\t\t\t}\n\n\t\t\tif (isDisabled) {\n\t\t\t\tyear.classes += \" ui5-yp-item--disabled\";\n\t\t\t}\n\n\t\t\tif (this.secondaryCalendarType) {\n\t\t\t\tyear.classes += \" ui5-yp-item-secondary-type\";\n\t\t\t}\n\t\t\tconst intervalIndex = parseInt(i / this._getRowSize());\n\n\t\t\tif (intervals[intervalIndex]) {\n\t\t\t\tintervals[intervalIndex].push(year);\n\t\t\t} else {\n\t\t\t\tintervals[intervalIndex] = [year];\n\t\t\t}\n\n\t\t\ttempDate.setYear(tempDate.getYear() + 1);\n\t\t}\n\n\t\tthis._years = intervals;\n\t}\n\n\t_calculateFirstYear() {\n\t\tconst pageSize = this._getPageSize();\n\t\tconst absoluteMaxYear = getMaxCalendarDate(this._primaryCalendarType).getYear(); // 9999\n\t\tconst currentYear = this._calendarDate.getYear();\n\n\t\t// 1. If first load - center the current year (set first year to be current year minus half page size)\n\t\tif (!this._firstYear) {\n\t\t\tthis._firstYear = currentYear - pageSize / 2;\n\t\t}\n\n\t\t// 2. If out of range - change by a page (20) - do not center in order to keep the same position as the last page\n\t\tif (currentYear < this._firstYear) {\n\t\t\tthis._firstYear -= pageSize;\n\t\t} else if (currentYear >= this._firstYear + pageSize) {\n\t\t\tthis._firstYear += pageSize;\n\t\t}\n\n\t\t// 3. If the date was changed by more than 20 years - reset _firstYear completely\n\t\tif (Math.abs(this._firstYear - currentYear) >= pageSize) {\n\t\t\tthis._firstYear = currentYear - pageSize / 2;\n\t\t}\n\n\t\t// Keep it in the range between the min and max year\n\t\tthis._firstYear = Math.max(this._firstYear, this._minDate.getYear());\n\t\tthis._firstYear = Math.min(this._firstYear, this._maxDate.getYear());\n\n\t\t// If first year is > 9980, make it 9980 to not show any years beyond 9999\n\t\tif (this._firstYear > absoluteMaxYear - pageSize + 1) {\n\t\t\tthis._firstYear = absoluteMaxYear - pageSize + 1;\n\t\t}\n\t}\n\n\tonAfterRendering() {\n\t\tif (!this._hidden) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t_onkeydown(event) {\n\t\tlet preventDefault = true;\n\t\tconst pageSize = this._getPageSize();\n\t\tconst rowSize = this._getRowSize();\n\n\t\tif (isEnter(event)) {\n\t\t\tthis._selectYear(event);\n\t\t} else if (isSpace(event)) {\n\t\t\tevent.preventDefault();\n\t\t} else if (isLeft(event)) {\n\t\t\tthis._modifyTimestampBy(-1);\n\t\t} else if (isRight(event)) {\n\t\t\tthis._modifyTimestampBy(1);\n\t\t} else if (isUp(event)) {\n\t\t\tthis._modifyTimestampBy(-rowSize);\n\t\t} else if (isDown(event)) {\n\t\t\tthis._modifyTimestampBy(rowSize);\n\t\t} else if (isPageUp(event)) {\n\t\t\tthis._modifyTimestampBy(-pageSize);\n\t\t} else if (isPageDown(event)) {\n\t\t\tthis._modifyTimestampBy(pageSize);\n\t\t} else if (isHome(event) || isEnd(event)) {\n\t\t\tthis._onHomeOrEnd(isHome(event));\n\t\t} else if (isHomeCtrl(event)) {\n\t\t\tthis._setTimestamp(parseInt(this._years[0][0].timestamp)); // first year of first row\n\t\t} else if (isEndCtrl(event)) {\n\t\t\tthis._setTimestamp(parseInt(this._years[pageSize / rowSize - 1][rowSize - 1].timestamp)); // last year of last row\n\t\t} else {\n\t\t\tpreventDefault = false;\n\t\t}\n\n\t\tif (preventDefault) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_onHomeOrEnd(homePressed) {\n\t\tthis._years.forEach(row => {\n\t\t\tconst indexInRow = row.findIndex(item => CalendarDate.fromTimestamp(parseInt(item.timestamp) * 1000).getYear() === this._calendarDate.getYear());\n\t\t\tif (indexInRow !== -1) { // The current year is on this row\n\t\t\t\tconst index = homePressed ? 0 : this._getRowSize() - 1; // select the first (if Home) or last (if End) year on the row\n\t\t\t\tthis._setTimestamp(parseInt(row[index].timestamp));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sets the timestamp to an absolute value\n\t * @param value\n\t * @private\n\t */\n\t_setTimestamp(value) {\n\t\tthis._safelySetTimestamp(value);\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t/**\n\t * Modifies timestamp by a given amount of years and, if necessary, loads the prev/next page\n\t * @param amount\n\t * @private\n\t */\n\t_modifyTimestampBy(amount) {\n\t\t// Modify the current timestamp\n\t\tthis._safelyModifyTimestampBy(amount, \"year\");\n\n\t\t// Notify the calendar to update its timestamp\n\t\tthis.fireEvent(\"navigate\", { timestamp: this.timestamp });\n\t}\n\n\t_onkeyup(event) {\n\t\tif (isSpace(event)) {\n\t\t\tthis._selectYear(event);\n\t\t}\n\t}\n\n\t/**\n\t * User clicked with the mouser or pressed Enter/Space\n\t * @param event\n\t * @private\n\t */\n\t_selectYear(event) {\n\t\tevent.preventDefault();\n\t\tif (event.target.className.indexOf(\"ui5-yp-item\") > -1) {\n\t\t\tconst timestamp = this._getTimestampFromDom(event.target);\n\t\t\tthis._safelySetTimestamp(timestamp);\n\t\t\tthis.fireEvent(\"change\", { timestamp: this.timestamp });\n\t\t}\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasPreviousPage() {\n\t\treturn this._firstYear > this._minDate.getYear();\n\t}\n\n\t/**\n\t * Called from Calendar.js\n\t * @protected\n\t */\n\t_hasNextPage() {\n\t\treturn this._firstYear + this._getPageSize() - 1 < this._maxDate.getYear();\n\t}\n\n\t/**\n\t * Called by Calendar.js\n\t * User pressed the \"<\" button in the calendar header (same as PageUp)\n\t * @protected\n\t */\n\t_showPreviousPage() {\n\t\tconst pageSize = this._getPageSize();\n\t\tthis._modifyTimestampBy(-pageSize);\n\t}\n\n\t/**\n\t * Called by Calendar.js\n\t * User pressed the \">\" button in the calendar header (same as PageDown)\n\t * @protected\n\t */\n\t_showNextPage() {\n\t\tthis._modifyTimestampBy(this._getPageSize());\n\t}\n}\n\nYearPicker.define();\n\nexport default YearPicker;\n","import UniversalDate from './UniversalDate.js';\nimport CalendarType from '../CalendarType.js';\nimport _Calendars from './_Calendars.js';\nvar Gregorian = UniversalDate.extend('sap.ui.core.date.Gregorian', {\n constructor: function () {\n this.oDate = this.createDate(Date, arguments);\n this.sCalendarType = CalendarType.Gregorian;\n }\n});\nGregorian.UTC = function () {\n return Date.UTC.apply(Date, arguments);\n};\nGregorian.now = function () {\n return Date.now();\n};\n_Calendars.set(CalendarType.Gregorian, Gregorian);\nexport default Gregorian;","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-daypicker\", tags, suffix)} id=\"${ifDefined(context._id)}-daypicker\" ?hidden=\"${context._isDayPickerHidden}\" format-pattern=\"${ifDefined(context._formatPattern)}\" .selectedDates=\"${ifDefined(context._selectedDatesTimestamps)}\" ._hidden=\"${ifDefined(context._isDayPickerHidden)}\" .primaryCalendarType=\"${ifDefined(context._primaryCalendarType)}\" .secondaryCalendarType=\"${ifDefined(context.secondaryCalendarType)}\" .selectionMode=\"${ifDefined(context.selectionMode)}\" .minDate=\"${ifDefined(context.minDate)}\" .maxDate=\"${ifDefined(context.maxDate)}\" timestamp=\"${ifDefined(context._timestamp)}\" ?hide-week-numbers=\"${context.hideWeekNumbers}\" @ui5-change=\"${ifDefined(context.onSelectedDatesChange)}\" @ui5-navigate=\"${ifDefined(context.onNavigate)}\">${scopeTag(\"ui5-daypicker\", tags, suffix)}><${scopeTag(\"ui5-monthpicker\", tags, suffix)} id=\"${ifDefined(context._id)}-MP\" ?hidden=\"${context._isMonthPickerHidden}\" format-pattern=\"${ifDefined(context._formatPattern)}\" .selectedDates=\"${ifDefined(context._selectedDatesTimestamps)}\" ._hidden=\"${ifDefined(context._isMonthPickerHidden)}\" .primaryCalendarType=\"${ifDefined(context._primaryCalendarType)}\" .secondaryCalendarType=\"${ifDefined(context.secondaryCalendarType)}\" .minDate=\"${ifDefined(context.minDate)}\" .maxDate=\"${ifDefined(context.maxDate)}\" timestamp=\"${ifDefined(context._timestamp)}\" @ui5-change=\"${ifDefined(context.onSelectedMonthChange)}\" @ui5-navigate=\"${ifDefined(context.onNavigate)}\">${scopeTag(\"ui5-monthpicker\", tags, suffix)}><${scopeTag(\"ui5-yearpicker\", tags, suffix)} id=\"${ifDefined(context._id)}-YP\" ?hidden=\"${context._isYearPickerHidden}\" format-pattern=\"${ifDefined(context._formatPattern)}\" .selectedDates=\"${ifDefined(context._selectedDatesTimestamps)}\" ._hidden=\"${ifDefined(context._isYearPickerHidden)}\" .primaryCalendarType=\"${ifDefined(context._primaryCalendarType)}\" .secondaryCalendarType=\"${ifDefined(context.secondaryCalendarType)}\" .minDate=\"${ifDefined(context.minDate)}\" .maxDate=\"${ifDefined(context.maxDate)}\" timestamp=\"${ifDefined(context._timestamp)}\" @ui5-change=\"${ifDefined(context.onSelectedYearChange)}\" @ui5-navigate=\"${ifDefined(context.onNavigate)}\">${scopeTag(\"ui5-yearpicker\", tags, suffix)}>
<${scopeTag(\"ui5-calendar-header\", tags, suffix)} id=\"${ifDefined(context._id)}-head\" .primaryCalendarType=\"${ifDefined(context._primaryCalendarType)}\" .secondaryCalendarType=\"${ifDefined(context.secondaryCalendarType)}\" .buttonTextForSecondaryCalendarType=\"${ifDefined(context.secondaryCalendarTypeButtonText)}\" timestamp=\"${ifDefined(context._timestamp)}\" .isPrevButtonDisabled=\"${ifDefined(context._previousButtonDisabled)}\" .isNextButtonDisabled=\"${ifDefined(context._nextButtonDisabled)}\" .isMonthButtonHidden=\"${ifDefined(context._isHeaderMonthButtonHidden)}\" ._monthButtonText=\"${ifDefined(context._headerMonthButtonText)}\" ._yearButtonText=\"${ifDefined(context._headerYearButtonText)}\" ._yearButtonTextSecType=\"${ifDefined(context._headerYearButtonTextSecType)}\" @ui5-previous-press=\"${ifDefined(context.onHeaderPreviousPress)}\" @ui5-next-press=\"${ifDefined(context.onHeaderNextPress)}\" @ui5-show-month-press=\"${ifDefined(context.onHeaderShowMonthPress)}\" @ui5-show-year-press=\"${ifDefined(context.onHeaderShowYearPress)}\">${scopeTag(\"ui5-calendar-header\", tags, suffix)}>
` : html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Calendar.css\",content:\":host(:not([hidden])){display:inline-block}.ui5-cal-root{background:var(--sapList_Background);box-sizing:border-box;height:var(--_ui5_calendar_height);width:var(--_ui5_calendar_width);padding:var(--_ui5_calendar_top_bottom_padding) var(--_ui5_calendar_left_right_padding) 0;display:flex;flex-direction:column-reverse;justify-content:flex-end}.ui5-cal-root [ui5-calendar-header]{height:var(--_ui5_calendar_header_height);font-family:var(--_ui5_button_fontFamily)}.ui5-cal-root .ui5-cal-content{padding:0 var(--_ui5_calendar_left_right_padding) var(--_ui5_calendar_top_bottom_padding)}\"}","import transformDateToSecondaryType from \"@ui5/webcomponents-localization/dist/dates/transformDateToSecondaryType.js\";\nimport convertMonthNumbersToMonthNames from \"@ui5/webcomponents-localization/dist/dates/convertMonthNumbersToMonthNames.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport { renderFinished } from \"@ui5/webcomponents-base/dist/Render.js\";\nimport {\n\tisF4,\n\tisF4Shift,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport getCachedLocaleDataInstance from \"@ui5/webcomponents-localization/dist/getCachedLocaleDataInstance.js\";\nimport getLocale from \"@ui5/webcomponents-base/dist/locale/getLocale.js\";\nimport DateFormat from \"@ui5/webcomponents-localization/dist/DateFormat.js\";\nimport * as CalendarDateComponent from \"./CalendarDate.js\";\nimport CalendarPart from \"./CalendarPart.js\";\nimport CalendarHeader from \"./CalendarHeader.js\";\nimport DayPicker from \"./DayPicker.js\";\nimport MonthPicker from \"./MonthPicker.js\";\nimport YearPicker from \"./YearPicker.js\";\nimport CalendarSelectionMode from \"./types/CalendarSelectionMode.js\";\n\n// Default calendar for bundling\nimport \"@ui5/webcomponents-localization/dist/features/calendar/Gregorian.js\";\n\n// Template\nimport CalendarTemplate from \"./generated/templates/CalendarTemplate.lit.js\";\n\n// Styles\nimport calendarCSS from \"./generated/themes/Calendar.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-calendar\",\n\tfastNavigation: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.Calendar.prototype */ {\n\t\t/**\n\t\t * Defines the type of selection used in the calendar component.\n\t\t * Accepted property values are:
\n\t\t * \n\t\t * CalendarSelectionMode.Single
- enables a single date selection.(default value) \n\t\t * CalendarSelectionMode.Range
- enables selection of a date range. \n\t\t * CalendarSelectionMode.Multiple
- enables selection of multiple dates. \n\t\t *
\n\t\t * @type {CalendarSelectionMode}\n\t\t * @defaultvalue \"Single\"\n\t\t * @public\n\t\t */\n\t\tselectionMode: {\n\t\t\ttype: CalendarSelectionMode,\n\t\t\tdefaultValue: CalendarSelectionMode.Single,\n\t\t},\n\n\t\t/**\n\t\t * Defines the visibility of the week numbers column.\n\t\t *
\n\t\t *\n\t\t * Note: For calendars other than Gregorian,\n\t\t * the week numbers are not displayed regardless of what is set.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\thideWeekNumbers: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Which picker is currently visible to the user: day/month/year\n\t\t */\n\t\t_currentPicker: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"day\",\n\t\t},\n\n\t\t_previousButtonDisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_nextButtonDisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_headerMonthButtonText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_headerYearButtonText: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t_headerYearButtonTextSecType: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Calendar.prototype */ {\n\t\t/**\n\t\t * Defines the selected date or dates (depending on the selectionMode
property) for this calendar as instances of ui5-date
\n\t\t *\n\t\t * @type {sap.ui.webcomponents.main.ICalendarDate[]}\n\t\t * @slot dates\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\tpropertyName: \"dates\",\n\t\t\ttype: HTMLElement,\n\t\t\tinvalidateOnChildChange: true,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Calendar.prototype */ {\n\t\t/**\n\t\t * Fired when the selected dates change.\n\t\t * Note: If you call preventDefault()
for this event, the component will not\n\t\t * create instances of ui5-date
for the newly selected dates. In that case you should do this manually.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.Calendar#selected-dates-change\n\t\t * @allowPreventDefault\n\t\t * @param {Array} values The selected dates\n\t\t * @param {Array} dates The selected dates as UTC timestamps\n\t\t * @public\n\t\t */\n\t\t\"selected-dates-change\": {\n\t\t\tdetail: {\n\t\t\t\tdates: { type: Array },\n\t\t\t\tvalues: { type: Array },\n\t\t\t},\n\t\t},\n\n\t\t\"show-month-press\": {},\n\t\t\"show-year-press\": {},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-calendar
component allows users to select one or more dates.\n *
\n * Currently selected dates are represented with instances of ui5-date
as\n * children of the ui5-calendar
. The value property of each ui5-date
must be a\n * date string, correctly formatted according to the ui5-calendar
's formatPattern
property.\n * Whenever the user changes the date selection, ui5-calendar
will automatically create/remove instances\n * of ui5-date
in itself, unless you prevent this behavior by calling preventDefault()
for the\n * selected-dates-change
event. This is useful if you want to control the selected dates externally.\n *
\n *\n * Usage
\n *\n * The user can navigate to a particular date by:\n *
\n * \n * - Pressing over a month inside the months view
\n * - Pressing over an year inside the years view
\n *
\n *
\n * The user can confirm a date selection by pressing over a date inside the days view.\n *
\n *\n * Keyboard Handling
\n * The ui5-calendar
provides advanced keyboard handling.\n * When a picker is showed and focused the user can use the following keyboard\n * shortcuts in order to perform a navigation:\n *
\n * - Day picker:
\n * \n * - [F4] - Shows month picker
\n * - [SHIFT] + [F4] - Shows year picker
\n * - [PAGEUP] - Navigate to the previous month
\n * - [PAGEDOWN] - Navigate to the next month
\n * - [SHIFT] + [PAGEUP] - Navigate to the previous year
\n * - [SHIFT] + [PAGEDOWN] - Navigate to the next year
\n * - [CTRL] + [SHIFT] + [PAGEUP] - Navigate ten years backwards
\n * - [CTRL] + [SHIFT] + [PAGEDOWN] - Navigate ten years forwards
\n * - [HOME] - Navigate to the first day of the week
\n * - [END] - Navigate to the last day of the week
\n * - [CTRL] + [HOME] - Navigate to the first day of the month
\n * - [CTRL] + [END] - Navigate to the last day of the month
\n *
\n *
\n * - Month picker:
\n * \n * - [PAGEUP] - Navigate to the previous year
\n * - [PAGEDOWN] - Navigate to the next year
\n * - [HOME] - Navigate to the first month of the current row
\n * - [END] - Navigate to the last month of the current row
\n * - [CTRL] + [HOME] - Navigate to the first month of the current year
\n * - [CTRL] + [END] - Navigate to the last month of the year
\n *
\n *
\n * - Year picker:
\n * \n * - [PAGEUP] - Navigate to the previous year range
\n * - [PAGEDOWN] - Navigate the next year range
\n * - [HOME] - Navigate to the first year of the current row
\n * - [END] - Navigate to the last year of the current row
\n * - [CTRL] + [HOME] - Navigate to the first year of the current year range
\n * - [CTRL] + [END] - Navigate to the last year of the current year range
\n *
\n *
\n *\n * Fast Navigation
\n * This component provides a build in fast navigation group which can be used via F6 / Shift + F6
or Ctrl + Alt(Option) + Down / Ctrl + Alt(Option) + Up
.\n * In order to use this functionality, you need to import the following module:\n * import \"@ui5/webcomponents-base/dist/features/F6Navigation.js\"
\n *
\n *\n* Calendar types
\n * The component supports several calendar types - Gregorian, Buddhist, Islamic, Japanese and Persian.\n * By default the Gregorian Calendar is used. In order to use the Buddhist, Islamic, Japanese or Persian calendar,\n * you need to set the primaryCalendarType
property and import one or more of the following modules:\n *
\n *\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Buddhist.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Islamic.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Japanese.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Persian.js\";
\n *
\n *\n * Or, you can use the global configuration and set the calendarType
key:\n *
\n * \n * <script data-id=\"sap-ui-config\" type=\"application/json\">\n * {\n *\t\"calendarType\": \"Japanese\"\n * }\n * </script>\n *
\n *\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Calendar\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Calendar\n * @extends CalendarPart\n * @tagname ui5-calendar\n * @appenddocs CalendarDate\n * @public\n * @since 1.0.0-rc.11\n */\nclass Calendar extends CalendarPart {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get template() {\n\t\treturn CalendarTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn calendarCSS;\n\t}\n\n\t/**\n\t * @private\n\t */\n\tget _selectedDatesTimestamps() {\n\t\treturn this.dates.map(date => {\n\t\t\tconst value = date.value;\n\t\t\treturn value && !!this.getFormat().parse(value) ? this._getTimeStampFromString(value) / 1000 : undefined;\n\t\t}).filter(date => !!date);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_setSelectedDates(selectedDates) {\n\t\tconst selectedValues = selectedDates.map(timestamp => this.getFormat().format(new Date(timestamp * 1000), true)); // Format as UTC\n\t\tconst valuesInDOM = [...this.dates].map(dateElement => dateElement.value);\n\n\t\t// Remove all elements for dates that are no longer selected\n\t\tthis.dates.filter(dateElement => !selectedValues.includes(dateElement.value)).forEach(dateElement => {\n\t\t\tthis.removeChild(dateElement);\n\t\t});\n\n\t\t// Create tags for the selected dates that don't already exist in DOM\n\t\tselectedValues.filter(value => !valuesInDOM.includes(value)).forEach(value => {\n\t\t\tconst dateElement = document.createElement(CalendarDateComponent.default.getMetadata().getTag());\n\t\t\tdateElement.value = value;\n\t\t\tthis.appendChild(dateElement);\n\t\t});\n\t}\n\n\tasync onAfterRendering() {\n\t\tawait renderFinished(); // Await for the current picker to render and then ask if it has previous/next pages\n\t\tthis._previousButtonDisabled = !this._currentPickerDOM._hasPreviousPage();\n\t\tthis._nextButtonDisabled = !this._currentPickerDOM._hasNextPage();\n\n\t\tconst yearFormat = DateFormat.getDateInstance({ format: \"y\", calendarType: this.primaryCalendarType });\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\tthis._headerMonthButtonText = localeData.getMonthsStandAlone(\"wide\", this.primaryCalendarType)[this._calendarDate.getMonth()];\n\n\t\tif (this._currentPicker === \"year\") {\n\t\t\tconst rangeStart = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\tconst rangeEnd = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\trangeStart.setYear(this._currentPickerDOM._firstYear);\n\t\t\trangeEnd.setYear(this._currentPickerDOM._lastYear);\n\n\t\t\tthis._headerYearButtonText = `${yearFormat.format(rangeStart.toLocalJSDate(), true)} - ${yearFormat.format(rangeEnd.toLocalJSDate(), true)}`;\n\t\t} else {\n\t\t\tthis._headerYearButtonText = String(yearFormat.format(this._localDate, true));\n\t\t}\n\n\t\tthis.secondaryCalendarType && this._setSecondaryCalendarTypeButtonText();\n\t}\n\n\t/**\n\t * The user clicked the \"month\" button in the header\n\t */\n\tonHeaderShowMonthPress(event) {\n\t\tthis._currentPickerDOM._autoFocus = false;\n\t\tthis._currentPicker = \"month\";\n\t\tthis.fireEvent(\"show-month-press\", event);\n\t}\n\n\t/**\n\t * The user clicked the \"year\" button in the header\n\t */\n\tonHeaderShowYearPress(event) {\n\t\tthis._currentPickerDOM._autoFocus = false;\n\t\tthis._currentPicker = \"year\";\n\t\tthis.fireEvent(\"show-year-press\", event);\n\t}\n\n\tget _currentPickerDOM() {\n\t\treturn this.shadowRoot.querySelector(`[ui5-${this._currentPicker}picker]`);\n\t}\n\n\t/**\n\t * The year clicked the \"Previous\" button in the header\n\t */\n\tonHeaderPreviousPress() {\n\t\tthis._currentPickerDOM._showPreviousPage();\n\t}\n\n\t/**\n\t * The year clicked the \"Next\" button in the header\n\t */\n\tonHeaderNextPress() {\n\t\tthis._currentPickerDOM._showNextPage();\n\t}\n\n\t_setSecondaryCalendarTypeButtonText() {\n\t\tconst localeData = getCachedLocaleDataInstance(getLocale());\n\t\tconst yearFormatSecType = DateFormat.getDateInstance({ format: \"y\", calendarType: this.secondaryCalendarType });\n\t\tthis._headerMonthButtonTextInSexType = localeData.getMonthsStandAlone(\"wide\", this.secondaryCalendarType)[this._calendarDate.getMonth()];\n\n\t\tif (this._currentPicker === \"year\") {\n\t\t\tconst rangeStart = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\tconst rangeEnd = new CalendarDate(this._calendarDate, this._primaryCalendarType);\n\t\t\trangeStart.setYear(this._currentPickerDOM._firstYear);\n\t\t\trangeEnd.setYear(this._currentPickerDOM._lastYear);\n\n\t\t\tconst rangeStartSecType = transformDateToSecondaryType(this.primaryCalendarType, this.secondaryCalendarType, rangeStart.valueOf() / 1000, true)\n\t\t\t\t.firstDate;\n\t\t\tconst rangeEndSecType = transformDateToSecondaryType(this.primaryCalendarType, this.secondaryCalendarType, rangeEnd.valueOf() / 1000, true)\n\t\t\t\t.lastDate;\n\t\t\tthis._headerYearButtonTextSecType = `${yearFormatSecType.format(rangeStartSecType.toLocalJSDate(), true)} - ${yearFormatSecType.format(rangeEndSecType.toLocalJSDate(), true)}`;\n\t\t} else {\n\t\t\tthis._headerYearButtonTextSecType = String(yearFormatSecType.format(this._localDate, true));\n\t\t}\n\t}\n\n\tget secondaryCalendarTypeButtonText() {\n\t\tif (!this.secondaryCalendarType) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst localDate = new Date(this._timestamp * 1000);\n\t\tconst secondYearFormat = DateFormat.getDateInstance({ format: \"y\", calendarType: this.secondaryCalendarType });\n\t\tconst dateInSecType = transformDateToSecondaryType(this._primaryCalendarType, this.secondaryCalendarType, this._timestamp);\n\t\tconst secondMonthInfo = convertMonthNumbersToMonthNames(dateInSecType.firstDate.getMonth(), dateInSecType.lastDate.getMonth(), this.secondaryCalendarType);\n\t\tconst secondYearText = secondYearFormat.format(localDate, true);\n\n\t\treturn {\n\t\t\tyearButtonText: secondYearText,\n\t\t\tmonthButtonText: secondMonthInfo.text,\n\t\t\tmonthButtonInfo: secondMonthInfo.textInfo,\n\t\t};\n\t}\n\n\t/**\n\t * The month button is hidden when the month picker or year picker is shown\n\t * @returns {boolean}\n\t * @private\n\t */\n\tget _isHeaderMonthButtonHidden() {\n\t\treturn this._currentPicker === \"month\" || this._currentPicker === \"year\";\n\t}\n\n\tget _isDayPickerHidden() {\n\t\treturn this._currentPicker !== \"day\";\n\t}\n\n\tget _isMonthPickerHidden() {\n\t\treturn this._currentPicker !== \"month\";\n\t}\n\n\tget _isYearPickerHidden() {\n\t\treturn this._currentPicker !== \"year\";\n\t}\n\n\tonSelectedDatesChange(event) {\n\t\tconst timestamp = event.detail.timestamp;\n\t\tconst selectedDates = event.detail.dates;\n\t\tconst datesValues = selectedDates.map(ts => {\n\t\t\tconst calendarDate = CalendarDate.fromTimestamp(ts * 1000, this._primaryCalendarType);\n\t\t\treturn this.getFormat().format(calendarDate.toUTCJSDate(), true);\n\t\t});\n\n\t\tthis.timestamp = timestamp;\n\t\tconst defaultPrevented = !this.fireEvent(\"selected-dates-change\", { timestamp, dates: [...selectedDates], values: datesValues }, true);\n\t\tif (!defaultPrevented) {\n\t\t\tthis._setSelectedDates(selectedDates);\n\t\t}\n\t}\n\n\tonSelectedMonthChange(event) {\n\t\tthis.timestamp = event.detail.timestamp;\n\t\tthis._currentPicker = \"day\";\n\t\tthis._currentPickerDOM._autoFocus = true;\n\t}\n\n\tonSelectedYearChange(event) {\n\t\tthis.timestamp = event.detail.timestamp;\n\t\tthis._currentPicker = \"day\";\n\t\tthis._currentPickerDOM._autoFocus = true;\n\t}\n\n\tonNavigate(event) {\n\t\tthis.timestamp = event.detail.timestamp;\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isF4(event) && this._currentPicker !== \"month\") {\n\t\t\tthis._currentPicker = \"month\";\n\t\t}\n\n\t\tif (isF4Shift(event) && this._currentPicker !== \"year\") {\n\t\t\tthis._currentPicker = \"year\";\n\t\t}\n\t}\n\n\t/**\n\t * Returns an array of UTC timestamps, representing the selected dates.\n\t * @protected\n\t * @deprecated\n\t */\n\tget selectedDates() {\n\t\treturn this._selectedDatesTimestamps;\n\t}\n\n\t/**\n\t * Creates instances of ui5-date
inside this ui5-calendar
with values, equal to the provided UTC timestamps\n\t * @protected\n\t * @deprecated\n\t * @param selectedDates Array of UTC timestamps\n\t */\n\tset selectedDates(selectedDates) {\n\t\tthis._setSelectedDates(selectedDates);\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tCalendarDateComponent.default,\n\t\t\tCalendarHeader,\n\t\t\tDayPicker,\n\t\t\tMonthPicker,\n\t\t\tYearPicker,\n\t\t];\n\t}\n}\n\nCalendar.define();\n\nexport default Calendar;\n","/**\n * Returns the caret (cursor) position of the specified text field (field).\n * Return value range is 0-field.value.length.\n */\nconst getCaretPosition = field => {\n\t// Initialize\n\tlet caretPos = 0;\n\n\tif (field.selectionStart || field.selectionStart === \"0\") { // Firefox support\n\t\tcaretPos = field.selectionDirection === \"backward\" ? field.selectionStart : field.selectionEnd;\n\t}\n\n\treturn caretPos;\n};\n\nconst setCaretPosition = (field, caretPos) => {\n\tif (field.createTextRange) {\n\t\tconst range = field.createTextRange();\n\t\trange.move(\"character\", caretPos);\n\t\trange.select();\n\t} else if (field.selectionStart) {\n\t\tfield.focus();\n\t\tfield.setSelectionRange(caretPos, caretPos);\n\t} else {\n\t\tfield.focus();\n\t}\n};\n\nexport {\n\tgetCaretPosition,\n\tsetCaretPosition,\n};\n","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"not-editable\";\nconst pathData = \"M499 88q8 7 8 18 0 12-8 19L126 504q-8 8-19 8H27q-12 0-19.5-7.5T0 485v-80q0-10 8-18L382 8q7-8 18-8 12 0 19 8zm-56 18l-43-42-42 42 42 43zm-80 80l-43-42L64 405l43 43zm141 252q8 8 8 18 0 8-8 18-7 7-18 7t-18-7l-33-34-33 34q-7 7-18 7t-18-7q-8-10-8-18 0-10 8-18l33-33-33-34q-8-8-8-17 0-10 8-18t18-8 18 8l33 33 33-33q8-8 18-8t18 8 8 18q0 9-8 17l-33 34z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons-v5\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"not-editable\";\nexport { pathData, ltr, accData };","import { registerIcon } from \"@ui5/webcomponents-base/dist/asset-registries/Icons.js\";\n\nconst name = \"not-editable\";\nconst pathData = \"M443 104q5 7 5 12 0 6-5 11L118 453q-4 4-8 4L0 480l22-110q0-5 4-9L352 36q4-4 11-4t11 4zm-34 11l-46-44-64 64 45 45zm-87 88l-46-45L52 381l46 46zm158 116l32 32-66 63 66 66-32 32-63-66-65 66-33-32 66-66-66-63 33-32 65 64z\";\nconst ltr = false;\nconst accData = null;\nconst collection = \"SAP-icons\";\nconst packageName = \"@ui5/webcomponents-icons\";\n\nregisterIcon(name, { pathData, ltr, collection, packageName });\n\nexport default \"not-editable\";\nexport { pathData, ltr, accData };","import { isThemeFamily } from \"@ui5/webcomponents-base/dist/config/Theme.js\";\nimport {pathData as pathDataV5, ltr, accData} from \"./v5/not-editable.js\";\nimport {pathData as pathDataV4} from \"./v4/not-editable.js\";\n\nconst pathData = isThemeFamily(\"sap_horizon\") ? pathDataV5 : pathDataV4;\n\nexport default \"not-editable\";\nexport { pathData, ltr, accData };","import DataType from \"@ui5/webcomponents-base/dist/types/DataType.js\";\n\n/**\n * @lends sap.ui.webcomponents.main.types.InputType.prototype\n * @public\n */\nconst InputTypes = {\n\t/**\n\t * Defines a one-line text input field:\n\t * @public\n\t * @type {Text}\n\t */\n\tText: \"Text\",\n\n\t/**\n\t * Used for input fields that must contain an e-mail address.\n\t * @public\n\t * @type {Email}\n\t */\n\tEmail: \"Email\",\n\n\t/**\n\t * Defines a numeric input field.\n\t * @public\n\t * @type {Number}\n\t */\n\tNumber: \"Number\",\n\n\t/**\n\t * Defines a password field.\n\t * @public\n\t * @type {Password}\n\t */\n\tPassword: \"Password\",\n\n\t/**\n\t * Used for input fields that should contain a telephone number.\n\t * @public\n\t * @type {Tel}\n\t */\n\tTel: \"Tel\",\n\n\t/**\n\t * Used for input fields that should contain a URL address.\n\t * @public\n\t * @type {URL}\n\t */\n\tURL: \"URL\",\n};\n\n/**\n * @class\n * Defines input types\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.types.InputType\n * @public\n * @enum {string}\n */\nclass InputType extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!InputTypes[value];\n\t}\n}\n\nInputType.generateTypeAccessors(InputTypes);\n\nexport default InputType;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html``;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} @click=${context._clear} @mousedown=${context._iconMouseDown} tabindex=\"-1\" input-icon class=\"ui5-input-clear-icon\" name=\"decline\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\nconst block2 = (context, tags, suffix) => html`
`;\nconst block3 = (context, tags, suffix) => html`${ifDefined(context.suggestionsText)}${ifDefined(context.availableSuggestionsCount)}`;\nconst block4 = (context, tags, suffix) => html`${ifDefined(context.accInfo.input.ariaDescription)}`;\nconst block5 = (context, tags, suffix) => html`${ifDefined(context.ariaValueStateHiddenText)}`;\n\n\nexport default block0;","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => html`${ context.showSuggestions ? block1(context, tags, suffix) : undefined }${ context.hasValueStateMessage ? block17(context, tags, suffix) : undefined } `;\nconst block1 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-responsive-popover\", tags, suffix)} class=\"${classMap(context.classes.popover)}\" hide-arrow _disable-initial-focus placement-type=\"Bottom\" horizontal-align=\"Left\" style=\"${styleMap(context.styles.suggestionsPopover)}\" @ui5-after-open=\"${ifDefined(context._afterOpenPopover)}\" @ui5-after-close=\"${ifDefined(context._afterClosePopover)}\" @ui5-scroll=\"${ifDefined(context._scroll)}\">${ context._isPhone ? block2(context, tags, suffix) : undefined }${ !context._isPhone ? block7(context, tags, suffix) : undefined }<${scopeTag(\"ui5-list\", tags, suffix)} separators=\"${ifDefined(context.suggestionSeparators)}\" @mousedown=\"${context.onItemMouseDown}\" mode=\"SingleSelect\">${ repeat(context.suggestionsTexts, (item, index) => item._id || index, (item, index) => block12(item, index, context, tags, suffix)) }${scopeTag(\"ui5-list\", tags, suffix)}>${ context._isPhone ? block16(context, tags, suffix) : undefined }${scopeTag(\"ui5-responsive-popover\", tags, suffix)}>` : html`${ context._isPhone ? block2(context, tags, suffix) : undefined }${ !context._isPhone ? block7(context, tags, suffix) : undefined }${ repeat(context.suggestionsTexts, (item, index) => item._id || index, (item, index) => block12(item, index, context, tags, suffix)) }${ context._isPhone ? block16(context, tags, suffix) : undefined }`;\nconst block2 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block3 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-input-value-state-message-icon\" name=\"${ifDefined(context._valueStateMessageInputIcon)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>${ context.shouldDisplayDefaultValueStateMessage ? block4(context, tags, suffix) : block5(context, tags, suffix) }
` : html`${ context.shouldDisplayDefaultValueStateMessage ? block4(context, tags, suffix) : block5(context, tags, suffix) }
`;\nconst block4 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block5 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block6(item, index, context, tags, suffix)) }`;\nconst block6 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\nconst block7 = (context, tags, suffix) => html`${ context.hasValueStateMessage ? block8(context, tags, suffix) : undefined }`;\nconst block8 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block9 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block10 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block11(item, index, context, tags, suffix)) }`;\nconst block11 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\nconst block12 = (item, index, context, tags, suffix) => html`${ item.groupItem ? block13(item, index, context, tags, suffix) : block14(item, index, context, tags, suffix) }`;\nconst block13 = (item, index, context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-li-groupheader\", tags, suffix)} data-ui5-key=\"${ifDefined(item.key)}\">${unsafeHTML(item.text)}${scopeTag(\"ui5-li-groupheader\", tags, suffix)}>` : html`${unsafeHTML(item.text)}`;\nconst block14 = (item, index, context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-li-suggestion-item\", tags, suffix)} image=\"${ifDefined(item.image)}\" icon=\"${ifDefined(item.icon)}\" additional-text=\"${ifDefined(item.additionalText)}\" type=\"${ifDefined(item.type)}\" additional-text-state=\"${ifDefined(item.additionalTextState)}\" data-ui5-key=\"${ifDefined(item.key)}\">${unsafeHTML(item.text)}${ item.description ? block15(item, index, context, tags, suffix) : undefined }${scopeTag(\"ui5-li-suggestion-item\", tags, suffix)}>` : html`${unsafeHTML(item.text)}${ item.description ? block15(item, index, context, tags, suffix) : undefined }`;\nconst block15 = (item, index, context, tags, suffix) => html`${unsafeHTML(item.description)}`;\nconst block16 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block17 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-popover\", tags, suffix)} skip-registry-update _disable-initial-focus prevent-focus-restore hide-arrow class=\"ui5-valuestatemessage-popover\" placement-type=\"Bottom\" horizontal-align=\"${ifDefined(context._valueStatePopoverHorizontalAlign)}\"><${scopeTag(\"ui5-icon\", tags, suffix)} class=\"ui5-input-value-state-message-icon\" name=\"${ifDefined(context._valueStateMessageInputIcon)}\">${scopeTag(\"ui5-icon\", tags, suffix)}>${ context.shouldDisplayDefaultValueStateMessage ? block18(context, tags, suffix) : block19(context, tags, suffix) }
${scopeTag(\"ui5-popover\", tags, suffix)}>` : html`${ context.shouldDisplayDefaultValueStateMessage ? block18(context, tags, suffix) : block19(context, tags, suffix) }
`;\nconst block18 = (context, tags, suffix) => html`${ifDefined(context.valueStateText)}`;\nconst block19 = (context, tags, suffix) => html`${ repeat(context.valueStateMessageText, (item, index) => item._id || index, (item, index) => block20(item, index, context, tags, suffix)) }`;\nconst block20 = (item, index, context, tags, suffix) => html`${ifDefined(item)}`;\n\n\nexport default block0;","const escapeReg = /[[\\]{}()*+?.\\\\^$|]/g;\n\nconst escapeRegExp = str => {\n\treturn str.replace(escapeReg, \"\\\\$&\");\n};\n\nconst StartsWithPerTerm = (value, items, propName) => {\n\tconst reg = new RegExp(`(^|\\\\s)${escapeRegExp(value.toLowerCase())}.*`, \"g\");\n\n\treturn items.filter(item => {\n\t\tconst text = item[propName];\n\n\t\treg.lastIndex = 0;\n\n\t\treturn reg.test(text.toLowerCase());\n\t});\n};\n\nconst StartsWith = (value, items, propName) => items.filter(item => item[propName].toLowerCase().startsWith(value.toLowerCase()));\nconst Contains = (value, items, propName) => items.filter(item => item[propName].toLowerCase().includes(value.toLowerCase()));\nconst None = (_, items) => items;\n\nexport {\n\tStartsWithPerTerm,\n\tStartsWith,\n\tContains,\n\tNone,\n};\n","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Input.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}[input-icon]{color:var(--_ui5_input_icon_color);cursor:pointer;outline:none;padding:var(--_ui5_input_icon_padding);border-inline-start:var(--_ui5_input_icon_border);min-width:1rem;min-height:1rem;border-radius:var(--_ui5_input_icon_border_radius)}[input-icon][pressed]{background:var(--_ui5_input_icon_pressed_bg);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:active{background-color:var(--sapButton_Active_Background);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:not([pressed]):not(:active):hover{background:var(--_ui5_input_icon_hover_bg);box-shadow:var(--_ui5_input_icon_box_shadow)}[input-icon]:hover{border-inline-start:var(--_ui5_select_hover_icon_left_border);box-shadow:var(--_ui5_input_icon_box_shadow)}:host(:not([hidden])){display:inline-block}:host{width:var(--_ui5_input_width);min-width:var(--_ui5_input_width);height:var(--_ui5_input_height);color:var(--sapField_TextColor);font-size:var(--sapFontSize);font-family:\\\"72override\\\",var(--sapFontFamily);font-style:normal;border:var(--_ui5-input-border);border-radius:var(--_ui5_input_border_radius);box-sizing:border-box;line-height:normal;letter-spacing:normal;word-spacing:normal;text-align:start;transition:var(--_ui5_input_transition);background:var(--sapField_BackgroundStyle);background-color:var(--_ui5_input_background_color)}:host([focused]){border-color:var(--_ui5_input_focused_border_color);background-color:var(--sapField_Focus_Background)}.ui5-input-focusable-element{position:relative}:host([focused]) .ui5-input-focusable-element:after{content:var(--ui5_input_focus_pseudo_element_content);position:absolute;pointer-events:none;z-index:2;border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--_ui5_input_focus_outline_color);border-radius:var(--_ui5_input_focus_border_radius);top:var(--_ui5_input_focus_offset);bottom:var(--_ui5_input_focus_offset);left:var(--_ui5_input_focus_offset);right:var(--_ui5_input_focus_offset)}.ui5-input-root:before{content:\\\"\\\";position:absolute;width:calc(100% - 2px);left:1px;bottom:-2px;border-bottom-left-radius:8px;border-bottom-right-radius:8px;height:var(--_ui5_input_bottom_border_height);transition:var(--_ui5_input_transition);background-color:var(--_ui5_input_bottom_border_color)}.ui5-input-root{width:100%;height:100%;position:relative;background:transparent;display:inline-block;outline:none;box-sizing:border-box;color:inherit;transition:border-color .2s ease-in-out;border-radius:var(--_ui5_input_border_radius);overflow:hidden}:host([disabled]){opacity:var(--_ui5_input_disabled_opacity);cursor:default;pointer-events:none;background-color:var(--_ui5-input_disabled_background);border-color:var(--_ui5_input_disabled_border_color)}:host([disabled]) .ui5-input-root:before,:host([readonly]) .ui5-input-root:before{content:none}[inner-input]{background:transparent;color:inherit;border:none;font-style:inherit;-webkit-appearance:none;-moz-appearance:textfield;padding:var(--_ui5_input_inner_padding);box-sizing:border-box;min-width:inherit;width:100%;text-overflow:ellipsis;flex:1;outline:none;font-size:inherit;font-family:inherit;line-height:inherit;letter-spacing:inherit;word-spacing:inherit;text-align:inherit}[inner-input][inner-input-with-icon]{padding:var(--_ui5_input_inner_padding_with_icon)}.ui5-input-value-state-icon{height:100%;display:var(--_ui5-input-value-state-icon-display);align-items:center}.ui5-input-value-state-icon>svg{margin-right:8px}[inner-input]::selection{background:var(--sapSelectedColor);color:var(--sapContent_ContrastTextColor)}:host([disabled]) [inner-input]::-webkit-input-placeholder{visibility:hidden}:host([readonly]) [inner-input]::-webkit-input-placeholder{visibility:hidden}:host([disabled]) [inner-input]::-moz-placeholder{visibility:hidden}:host([readonly]) [inner-input]::-moz-placeholder{visibility:hidden}[inner-input]::-webkit-input-placeholder{font-weight:400;font-style:var(--_ui5_input_placeholder_style);color:var(--_ui5_input_placeholder_color);padding-right:.125rem}[inner-input]::-moz-placeholder{font-weight:400;font-style:var(--_ui5_input_placeholder_style);color:var(--_ui5_input_placeholder_color);padding-right:.125rem}:host([value-state=Error]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5-input_error_placeholder_color);font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Error]) [inner-input]::-moz-placeholder{color:var(--_ui5-input_error_placeholder_color);font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Warning]) [inner-input]::-webkit-input-placeholder{font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Warning]) [inner-input]::-moz-placeholder{font-weight:var(--_ui5_input_value_state_error_warning_placeholder_font_weight)}:host([value-state=Success]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Success]) [inner-input]::-moz-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Information]) [inner-input]::-webkit-input-placeholder{color:var(--_ui5_input_placeholder_color)}:host([value-state=Information]) [inner-input]::-moz-placeholder{color:var(--_ui5_input_placeholder_color)}.ui5-input-content{height:100%;box-sizing:border-box;display:flex;flex-direction:row;justify-content:flex-end;overflow:hidden;outline:none;background:transparent;color:inherit;border-radius:var(--_ui5_input_border_radius)}:host([readonly]){border-color:var(--_ui5_input_readonly_border_color);background:var(--sapField_ReadOnly_BackgroundStyle);background-color:var(--_ui5_input_readonly_background)}:host(:not([value-state]):not([readonly]):hover),:host([value-state=None]:not([readonly]):hover){border:var(--_ui5_input_hover_border);border-color:var(--_ui5_input_focused_border_color);box-shadow:var(--_ui5_input_hover_box_shadow);background:var(--sapField_Hover_BackgroundStyle);background-color:var(--sapField_Hover_Background)}:host(:not([value-state]):not([readonly])[focused]:hover),:host([value-state=None]:not([readonly])[focused]:hover){box-shadow:none}:host([focused]) .ui5-input-root:before{content:none}:host(:not([readonly]):not([disabled])[value-state]:not([value-state=None])){border-width:var(--_ui5_input_state_border_width)}:host([value-state=Error]) [inner-input],:host([value-state=Warning]) [inner-input]{font-style:var(--_ui5_input_error_warning_font_style);text-indent:var(--_ui5_input_error_warning_text_indent)}:host([value-state=Error]) [inner-input]{font-weight:var(--_ui5_input_error_font_weight)}:host([value-state=Warning]) [inner-input]{font-weight:var(--_ui5_input_warning_font_weight)}:host([value-state=Error]:not([readonly]):not([disabled])){background:var(--sapField_InvalidBackgroundStyle);background-color:var(--sapField_InvalidBackground);border-color:var(--_ui5_input_value_state_error_border_color)}:host([value-state=Error][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_error_background);border-color:var(--_ui5_input_focused_value_state_error_border_color)}:host([value-state=Error][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_error_focus_outline_color)}:host([value-state=Error]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5-input-value-state-error-border-botom-color)}:host([value-state=Error]:not([readonly]):not([focused]):hover){background-color:var(--_ui5_input_value_state_error_hover_background);box-shadow:var(--_ui5_input_value_state_error_hover_box_shadow)}:host([value-state=Error]:not([readonly]):not([disabled])),:host([value-state=Information]:not([readonly]):not([disabled])),:host([value-state=Warning]:not([readonly]):not([disabled])){border-style:var(--_ui5_input_error_warning_border_style)}:host([value-state=Warning]:not([readonly]):not([disabled])){background:var(--sapField_WarningBackgroundStyle);background-color:var(--sapField_WarningBackground);border-color:var(--_ui5_input_value_state_warning_border_color)}:host([value-state=Warning][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_warning_background);border-color:var(--_ui5_input_focused_value_state_warning_border_color)}:host([value-state=Warning][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_warning_focus_outline_color)}:host([value-state=Warning]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_state_warning_border_botom_color)}:host([value-state=Warning]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_warning_hover_box_shadow)}:host([value-state=Success]:not([readonly]):not([disabled])){background:var(--sapField_SuccessBackgroundStyle);background-color:var(--sapField_SuccessBackground);border-color:var(--_ui5_input_value_state_success_border_color);border-width:var(--_ui5_input_value_state_success_border_width)}:host([value-state=Success][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_success_background);border-color:var(--_ui5_input_focused_value_state_success_border_color)}:host([value-state=Success][focused]:not([readonly])) .ui5-input-focusable-element:after{border-color:var(--_ui5_input_focused_value_state_success_focus_outline_color)}:host([value-state=Success]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_state_success_border_botom_color)}:host([value-state=Success]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_success_hover_box_shadow)}:host([value-state=Information]:not([readonly]):not([disabled])){background:var(--sapField_InformationBackgroundStyle);background-color:var(--sapField_InformationBackground);border-color:var(--_ui5_input_value_state_information_border_color);border-width:var(--_ui5_input_information_border_width)}:host([value-state=Information][focused]:not([readonly])){background-color:var(--_ui5_input_focused_value_state_information_background);border-color:var(--_ui5_input_focused_value_state_information_border_color)}:host([value-state=Information]:not([readonly])) .ui5-input-root:before{background-color:var(--_ui5_input_value_success_information_border_botom_color)}:host([value-state=Information]:not([readonly]):not([focused]):hover){background-color:var(--sapField_Hover_Background);box-shadow:var(--_ui5_input_value_state_information_hover_box_shadow)}.ui5-input-icon-root{min-width:var(--_ui5_input_icon_min_width);height:100%;display:flex;justify-content:center;align-items:center}::slotted([ui5-icon][slot=icon]){align-self:start;padding:var(--_ui5_input_custom_icon_padding)}:host([value-state=Error]) [input-icon],:host([value-state=Warning]) [input-icon]{padding:var(--_ui5_input_error_warning_icon_padding)}:host([value-state=Information]) [input-icon]{padding:var(--_ui5_input_information_icon_padding)}:host([value-state=Error]) ::slotted([input-icon][ui5-icon]),:host([value-state=Error]) ::slotted([ui5-icon][slot=icon]),:host([value-state=Warning]) ::slotted([ui5-icon][slot=icon]){padding:var(--_ui5_input_error_warning_custom_icon_padding)}:host([value-state=Information]) ::slotted([ui5-icon][slot=icon]){padding:var(--_ui5_input_information_custom_icon_padding)}:host([value-state=Error]) [input-icon]:active,:host([value-state=Error]) [input-icon][pressed]{box-shadow:var(--_ui5_input_error_icon_box_shadow);color:var(--_ui5_input_icon_error_pressed_color)}:host([value-state=Error]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_error_icon_box_shadow)}:host([value-state=Warning]) [input-icon]:active,:host([value-state=Warning]) [input-icon][pressed]{box-shadow:var(--_ui5_input_warning_icon_box_shadow);color:var(--_ui5_input_icon_warning_pressed_color)}:host([value-state=Warning]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_warning_icon_box_shadow)}:host([value-state=Information]) [input-icon]:active,:host([value-state=Information]) [input-icon][pressed]{box-shadow:var(--_ui5_input_information_icon_box_shadow);color:var(--_ui5_input_icon_information_pressed_color)}:host([value-state=Information]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_information_icon_box_shadow)}:host([value-state=Success]) [input-icon]:active,:host([value-state=Success]) [input-icon][pressed]{box-shadow:var(--_ui5_input_success_icon_box_shadow);color:var(--_ui5_input_icon_success_pressed_color)}:host([value-state=Success]) [input-icon]:not([pressed]):not(:active):hover{box-shadow:var(--_ui5_input_success_icon_box_shadow)}[inner-input]::-webkit-inner-spin-button,[inner-input]::-webkit-outer-spin-button{-webkit-appearance:inherit;margin:inherit}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/Suggestions.css\",content:\".ui5-suggestions-popover{box-shadow:var(--sapContent_Shadow1)}.ui5-suggestions-popover::part(content),.ui5-suggestions-popover::part(header){padding:0}.ui5-suggestions-popover::part(footer){padding:0 1rem}.ui5-suggestions-popover [ui5-li-suggestion-item],.ui5-suggestions-popover [ui5-li]{height:var(--_ui5_list_item_dropdown_base_height)}\"}","import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport {\n\tisPhone,\n\tisSafari,\n\tisAndroid,\n} from \"@ui5/webcomponents-base/dist/Device.js\";\nimport ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport {\n\tisUp,\n\tisDown,\n\tisSpace,\n\tisEnter,\n\tisBackSpace,\n\tisDelete,\n\tisEscape,\n\tisTabNext,\n\tisPageUp,\n\tisPageDown,\n\tisHome,\n\tisEnd,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport Integer from \"@ui5/webcomponents-base/dist/types/Integer.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport { getCaretPosition, setCaretPosition } from \"@ui5/webcomponents-base/dist/util/Caret.js\";\nimport getActiveElement from \"@ui5/webcomponents-base/dist/util/getActiveElement.js\";\nimport \"@ui5/webcomponents-icons/dist/decline.js\";\nimport \"@ui5/webcomponents-icons/dist/not-editable.js\";\nimport \"@ui5/webcomponents-icons/dist/error.js\";\nimport \"@ui5/webcomponents-icons/dist/alert.js\";\nimport \"@ui5/webcomponents-icons/dist/sys-enter-2.js\";\nimport \"@ui5/webcomponents-icons/dist/information.js\";\nimport InputType from \"./types/InputType.js\";\nimport Popover from \"./Popover.js\";\nimport Icon from \"./Icon.js\";\n// Templates\nimport InputTemplate from \"./generated/templates/InputTemplate.lit.js\";\nimport InputPopoverTemplate from \"./generated/templates/InputPopoverTemplate.lit.js\";\nimport * as Filters from \"./Filters.js\";\n\nimport {\n\tVALUE_STATE_SUCCESS,\n\tVALUE_STATE_INFORMATION,\n\tVALUE_STATE_ERROR,\n\tVALUE_STATE_WARNING,\n\tVALUE_STATE_TYPE_SUCCESS,\n\tVALUE_STATE_TYPE_INFORMATION,\n\tVALUE_STATE_TYPE_ERROR,\n\tVALUE_STATE_TYPE_WARNING,\n\tINPUT_SUGGESTIONS,\n\tINPUT_SUGGESTIONS_TITLE,\n\tINPUT_SUGGESTIONS_ONE_HIT,\n\tINPUT_SUGGESTIONS_MORE_HITS,\n\tINPUT_SUGGESTIONS_NO_HIT,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport styles from \"./generated/themes/Input.css.js\";\nimport ResponsivePopoverCommonCss from \"./generated/themes/ResponsivePopoverCommon.css.js\";\nimport ValueStateMessageCss from \"./generated/themes/ValueStateMessage.css.js\";\nimport SuggestionsCss from \"./generated/themes/Suggestions.css.js\";\n\nconst rgxFloat = new RegExp(/(\\+|-)?\\d+(\\.|,)\\d+/);\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-input\",\n\tlanguageAware: true,\n\tmanagedSlots: true,\n\tslots: /** @lends sap.ui.webcomponents.main.Input.prototype */ {\n\n\t\t/**\n\t\t * Defines the icon to be displayed in the component.\n\t\t *\n\t\t * @type {sap.ui.webcomponents.main.IIcon[]}\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\ticon: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * Defines the suggestion items.\n\t\t *
\n\t\t * Example:\n\t\t *
\n\t\t * <ui5-input show-suggestions>
\n\t\t * <ui5-suggestion-item text=\"Item #1\"></ui5-suggestion-item>
\n\t\t * <ui5-suggestion-item text=\"Item #2\"></ui5-suggestion-item>
\n\t\t * </ui5-input>\n\t\t *
\n\t\t * \n\t\t * \n\t\t * \n\t\t * \n\t\t * \n\t\t * \n\t\t * \n\t\t * \n\t\t *
\n\t\t * Note: The suggestions would be displayed only if the showSuggestions
\n\t\t * property is set to true
.\n\t\t *
\n\t\t * Note: The <ui5-suggestion-item>
and <ui5-suggestion-group-item>
are recommended to be used as suggestion items.\n\t\t *
\n\t\t * Note: Importing the Input Suggestions Support feature:\n\t\t *
\n\t\t * import \"@ui5/webcomponents/dist/features/InputSuggestions.js\";
\n\t\t *
\n\t\t * automatically imports the <ui5-suggestion-item>
and <ui5-suggestion-group-item>
for your convenience.\n\t\t *\n\t\t * @type {sap.ui.webcomponents.main.IInputSuggestionItem[]}\n\t\t * @slot suggestionItems\n\t\t * @public\n\t\t */\n\t\t\"default\": {\n\t\t\tpropertyName: \"suggestionItems\",\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * The slot is used for native input
HTML element to enable form submit,\n\t\t * when name
property is set.\n\t\t * @type {HTMLElement[]}\n\t\t * @private\n\t\t */\n\t\tformSupport: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state message that will be displayed as pop up under the component.\n\t\t *
\n\t\t *\n\t\t * Note: If not specified, a default text (in the respective language) will be displayed.\n\t\t *
\n\t\t * Note: The valueStateMessage
would be displayed,\n\t\t * when the component is in Information
, Warning
or Error
value state.\n\t\t *
\n\t\t * Note: If the component has suggestionItems
,\n\t\t * the valueStateMessage
would be displayed as part of the same popover, if used on desktop, or dialog - on phone.\n\t\t * @type {HTMLElement[]}\n\t\t * @since 1.0.0-rc.6\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\tvalueStateMessage: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\tproperties: /** @lends sap.ui.webcomponents.main.Input.prototype */ {\n\n\t\t/**\n\t\t * Defines whether the component is in disabled state.\n\t\t *
\n\t\t * Note: A disabled component is completely noninteractive.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines if characters within the suggestions are to be highlighted\n\t\t * in case the input value matches parts of the suggestions text.\n\t\t *
\n\t\t * Note: takes effect when showSuggestions
is set to true
\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @private\n\t\t * @sicne 1.0.0-rc.8\n\t\t */\n\t\thighlight: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines a short hint intended to aid the user with data entry when the\n\t\t * component has no value.\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is read-only.\n\t\t *
\n\t\t * Note: A read-only component is not editable,\n\t\t * but still provides visual feedback upon user interaction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\treadonly: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is required.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.3\n\t\t */\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the value will be autcompleted to match an item\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.4.0\n\t\t */\n\t\tnoTypeahead: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the HTML type of the component.\n\t\t * Available options are: Text
, Email
,\n\t\t * Number
, Password
, Tel
, and URL
.\n\t\t *
\n\t\t * Notes:\n\t\t * \n\t\t * - The particular effect of this property differs depending on the browser\n\t\t * and the current language settings, especially for type
Number
. \n\t\t * - The property is mostly intended to be used with touch devices\n\t\t * that use different soft keyboard layouts depending on the given input type.
\n\t\t *
\n\t\t *\n\t\t * @type {InputType}\n\t\t * @defaultvalue \"Text\"\n\t\t * @public\n\t\t */\n\t\ttype: {\n\t\t\ttype: InputType,\n\t\t\tdefaultValue: InputType.Text,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value of the component.\n\t\t *
\n\t\t * Note: The property is updated upon typing.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
\n\t\t * Error
\n\t\t * Warning
\n\t\t * Success
\n\t\t * Information
\n\t\t *
\n\t\t *\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tvalueState: {\n\t\t\ttype: ValueState,\n\t\t\tdefaultValue: ValueState.None,\n\t\t},\n\n\t\t/**\n\t\t * Determines the name with which the component will be submitted in an HTML form.\n\t\t *\n\t\t *
\n\t\t * Important: For the name
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t *
\n\t\t * Note: When set, a native input
HTML element\n\t\t * will be created inside the component so that it can be submitted as\n\t\t * part of an HTML form. Do not use this property unless you need to submit a form.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component should show suggestions, if such are present.\n\t\t *
\n\t\t * Note: You need to import the InputSuggestions
module\n\t\t * from \"@ui5/webcomponents/dist/features/InputSuggestions.js\"
to enable this functionality.\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tshowSuggestions: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Sets the maximum number of characters available in the input field.\n\t\t *
\n\t\t * Note: This property is not compatible with the ui5-input type InputType.Number. If the ui5-input type is set to Number, the maxlength value is ignored.\n\t\t * @type {Integer}\n\t\t * @since 1.0.0-rc.5\n\t\t * @public\n\t\t */\n\t\tmaxlength: {\n\t\t\ttype: Integer,\n\t\t},\n\n\t\t/**\n\t\t * Defines the accessible ARIA name of the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Receives id(or many ids) of the elements that label the input.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the clear icon of the input will be shown.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.2.0\n\t\t */\n\t\tshowClearIcon: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the clear icon is visible.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @private\n\t\t * @since 1.2.0\n\t\t */\n\t\teffectiveShowClearIcon: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tfocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\topenOnMobile: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether to manually show the suggestions popover\n\t\t * @private\n\t\t */\n\t\t_forceOpen: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Indicates whether the visual focus is on the value state header\n\t\t * @private\n\t\t */\n\t\t_isValueStateFocused: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t_input: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t_inputAccInfo: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t_nativeInputAttributes: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t_inputWidth: {\n\t\t\ttype: Integer,\n\t\t},\n\n\t\t_listWidth: {\n\t\t\ttype: Integer,\n\t\t},\n\n\t\t_isPopoverOpen: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t_inputIconFocused: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\t},\n\tevents: /** @lends sap.ui.webcomponents.main.Input.prototype */ {\n\t\t/**\n\t\t * Fired when the input operation has finished by pressing Enter or on focusout.\n\t\t *\n\t\t * @event\n\t\t * @public\n\t\t */\n\t\tchange: {},\n\n\t\t/**\n\t\t * Fired when the value of the component changes at each keystroke,\n\t\t * and when a suggestion item has been selected.\n\t\t *\n\t\t * @event\n\t\t * @public\n\t\t */\n\t\tinput: {},\n\n\t\t/**\n\t\t * Fired when a suggestion item, that is displayed in the suggestion popup, is selected.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.Input#suggestion-item-select\n\t\t * @param {HTMLElement} item The selected item.\n\t\t * @public\n\t\t */\n\t\t\"suggestion-item-select\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the user navigates to a suggestion item via the ARROW keys,\n\t\t * as a preview, before the final selection.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.Input#suggestion-item-preview\n\t\t * @param {HTMLElement} item The previewed suggestion item.\n\t\t * @param {HTMLElement} targetRef The DOM ref of the suggestion item.\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\t\"suggestion-item-preview\": {\n\t\t\tdetail: {\n\t\t\t\titem: { type: HTMLElement },\n\t\t\t\ttargetRef: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the user scrolls the suggestion popover.\n\t\t *\n\t\t * @event sap.ui.webcomponents.main.Input#suggestion-scroll\n\t\t * @param {Integer} scrollTop The current scroll position.\n\t\t * @param {HTMLElement} scrollContainer The scroll container.\n\t\t * @protected\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\t\"suggestion-scroll\": {\n\t\t\tdetail: {\n\t\t\t\tscrollTop: { type: Integer },\n\t\t\t\tscrollContainer: { type: HTMLElement },\n\t\t\t},\n\t\t},\n\t},\n};\n\n/**\n * @class\n * \n *\n * The ui5-input
component allows the user to enter and edit text or numeric values in one line.\n *
\n * Additionally, you can provide suggestionItems
,\n * that are displayed in a popover right under the input.\n *
\n * The text field can be editable or read-only (readonly
property),\n * and it can be enabled or disabled (disabled
property).\n * To visualize semantic states, such as \"error\" or \"warning\", the valueState
property is provided.\n * When the user makes changes to the text, the change event is fired,\n * which enables you to react on any text change.\n *
\n * Note: If you are using the ui5-input
as a single npm module,\n * don't forget to import the InputSuggestions
module from\n * \"@ui5/webcomponents/dist/features/InputSuggestions.js\"\n * to enable the suggestions functionality.\n *\n * Keyboard Handling
\n * The ui5-input
provides the following keyboard shortcuts:\n *
\n *\n * \n * - [ESC] - Closes the suggestion list, if open. If closed or not enabled, cancels changes and reverts to the value which the Input field had when it got the focus.
\n * - [ENTER] or [RETURN] - If suggestion list is open takes over the current matching item and closes it. If value state or group header is focused, does nothing.
\n * - [DOWN] - Focuses the next matching item in the suggestion list.
\n * - [UP] - Focuses the previous matching item in the suggestion list.
\n * - [HOME] - If focus is in the text input, moves caret before the first character. If focus is in the list, highlights the first item and updates the input accordingly.
\n * - [END] - If focus is in the text input, moves caret after the last character. If focus is in the list, highlights the last item and updates the input accordingly.
\n * - [PAGEUP] - If focus is in the list, moves highlight up by page size (10 items by default). If focus is in the input, does nothing.
\n * - [PAGEDOWN] - If focus is in the list, moves highlight down by page size (10 items by default). If focus is in the input, does nothing.
\n *
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/Input.js\";
\n *
\n * import \"@ui5/webcomponents/dist/features/InputSuggestions.js\";
(optional - for input suggestions support)\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.Input\n * @extends sap.ui.webcomponents.base.UI5Element\n * @tagname ui5-input\n * @appenddocs SuggestionItem SuggestionGroupItem\n * @implements sap.ui.webcomponents.main.IInput\n * @public\n */\nclass Input 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 InputTemplate;\n\t}\n\n\tstatic get staticAreaTemplate() {\n\t\treturn InputPopoverTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn styles;\n\t}\n\n\tstatic get staticAreaStyles() {\n\t\treturn [ResponsivePopoverCommonCss, ValueStateMessageCss, SuggestionsCss];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\t// Indicates if there is selected suggestionItem.\n\t\tthis.hasSuggestionItemSelected = false;\n\n\t\t// Represents the value before user moves selection from suggestion item to another\n\t\t// and its value is updated after each move.\n\t\t// Note: Used to register and fire \"input\" event upon [SPACE] or [ENTER].\n\t\t// Note: The property \"value\" is updated upon selection move and can`t be used.\n\t\tthis.valueBeforeItemSelection = \"\";\n\n\t\t// Represents the value before user moves selection between the suggestion items\n\t\t// and its value remains the same when the user navigates up or down the list.\n\t\t// Note: Used to cancel selection upon [ESC].\n\t\tthis.valueBeforeItemPreview = \"\";\n\n\t\t// Indicates if the user selection has been canceled with [ESC].\n\t\tthis.suggestionSelectionCanceled = false;\n\n\t\t// Indicates if the change event has already been fired\n\t\tthis._changeFiredValue = null;\n\n\t\t// tracks the value between focus in and focus out to detect that change event should be fired.\n\t\tthis.previousValue = undefined;\n\n\t\t// Indicates, if the component is rendering for first time.\n\t\tthis.firstRendering = true;\n\n\t\t// The value that should be highlited.\n\t\tthis.highlightValue = \"\";\n\n\t\t// The last value confirmed by the user with \"ENTER\"\n\t\tthis.lastConfirmedValue = \"\";\n\n\t\t// The value that the user is typed in the input\n\t\tthis.valueBeforeAutoComplete = \"\";\n\n\t\t// Indicates, if the user pressed the BACKSPACE key.\n\t\tthis._backspaceKeyDown = false;\n\n\t\t// Indicates, if the user is typing. Gets reset once popup is closed\n\t\tthis.isTyping = false;\n\n\t\t// all sementic events\n\t\tthis.EVENT_CHANGE = \"change\";\n\t\tthis.EVENT_INPUT = \"input\";\n\t\tthis.EVENT_SUGGESTION_ITEM_SELECT = \"suggestion-item-select\";\n\n\t\t// all user interactions\n\t\tthis.ACTION_ENTER = \"enter\";\n\t\tthis.ACTION_USER_INPUT = \"input\";\n\n\t\t// Suggestions array initialization\n\t\tthis.suggestionsTexts = [];\n\n\t\tthis._handleResizeBound = this._handleResize.bind(this);\n\t}\n\n\tonEnterDOM() {\n\t\tResizeHandler.register(this, this._handleResizeBound);\n\t}\n\n\tonExitDOM() {\n\t\tResizeHandler.deregister(this, this._handleResizeBound);\n\t}\n\n\tonBeforeRendering() {\n\t\tif (this.showSuggestions) {\n\t\t\tthis.enableSuggestions();\n\t\t\tthis.suggestionsTexts = this.Suggestions.defaultSlotProperties(this.highlightValue);\n\t\t}\n\n\t\tthis.effectiveShowClearIcon = (this.showClearIcon && !!this.value && !this.readonly && !this.disabled);\n\n\t\tthis.FormSupport = getFeature(\"FormSupport\");\n\t\tconst hasItems = this.suggestionItems.length;\n\t\tconst hasValue = !!this.value;\n\t\tconst isFocused = this.shadowRoot.querySelector(\"input\") === getActiveElement();\n\n\t\tif (this._isPhone) {\n\t\t\tthis.open = this.openOnMobile;\n\t\t} else if (this._forceOpen) {\n\t\t\tthis.open = true;\n\t\t} else {\n\t\t\tthis.open = hasValue && hasItems && isFocused && this.isTyping;\n\t\t}\n\n\t\tif (this.FormSupport) {\n\t\t\tthis.FormSupport.syncNativeHiddenInput(this);\n\t\t} else if (this.name) {\n\t\t\tconsole.warn(`In order for the \"name\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\n\t\tconst value = this.value;\n\t\tconst innerInput = this.getInputDOMRefSync();\n\n\t\tif (!innerInput || !value) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst autoCompletedChars = innerInput.selectionEnd - innerInput.selectionStart;\n\n\t\t// Typehead causes issues on Android devices, so we disable it for now\n\t\t// If there is already a selection the autocomplete has already been performed\n\t\tif (this._shouldAutocomplete && !isAndroid() && !autoCompletedChars && !this._isKeyNavigation) {\n\t\t\tconst item = this._getFirstMatchingItem(value);\n\n\t\t\t// Keep the original typed in text intact\n\t\t\tthis.valueBeforeAutoComplete += value.slice(this.valueBeforeAutoComplete.length, value.length);\n\t\t\tthis._handleTypeAhead(item, value);\n\t\t}\n\t}\n\n\tasync onAfterRendering() {\n\t\tif (this.Suggestions && this.showSuggestions) {\n\t\t\tthis.Suggestions.toggle(this.open, {\n\t\t\t\tpreventFocusRestore: true,\n\t\t\t});\n\n\t\t\tthis._listWidth = await this.Suggestions._getListWidth();\n\t\t}\n\n\t\tif (this.shouldDisplayOnlyValueStateMessage) {\n\t\t\tthis.openPopover();\n\t\t} else {\n\t\t\tthis.closePopover();\n\t\t}\n\t}\n\n\t_onkeydown(event) {\n\t\tthis._isKeyNavigation = true;\n\t\tthis._shouldAutocomplete = !this.noTypeahead && !(isBackSpace(event) || isDelete(event) || isEscape(event));\n\n\t\tif (isUp(event)) {\n\t\t\treturn this._handleUp(event);\n\t\t}\n\n\t\tif (isDown(event)) {\n\t\t\treturn this._handleDown(event);\n\t\t}\n\n\t\tif (isSpace(event)) {\n\t\t\treturn this._handleSpace(event);\n\t\t}\n\n\t\tif (isTabNext(event)) {\n\t\t\treturn this._handleTab(event);\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\treturn this._handleEnter(event);\n\t\t}\n\n\t\tif (isPageUp(event)) {\n\t\t\treturn this._handlePageUp(event);\n\t\t}\n\n\t\tif (isPageDown(event)) {\n\t\t\treturn this._handlePageDown(event);\n\t\t}\n\n\t\tif (isHome(event)) {\n\t\t\treturn this._handleHome(event);\n\t\t}\n\n\t\tif (isEnd(event)) {\n\t\t\treturn this._handleEnd(event);\n\t\t}\n\n\t\tif (isEscape(event)) {\n\t\t\treturn this._handleEscape(event);\n\t\t}\n\n\t\tif (isBackSpace(event)) {\n\t\t\tthis._backspaceKeyDown = true;\n\t\t\tthis._selectedText = window.getSelection().toString();\n\t\t}\n\n\t\tif (this.showSuggestions) {\n\t\t\tthis._clearPopoverFocusAndSelection();\n\t\t}\n\n\t\tthis._keyDown = true;\n\t\tthis._isKeyNavigation = false;\n\t}\n\n\t_onkeyup(event) {\n\t\tthis._keyDown = false;\n\t\tthis._backspaceKeyDown = false;\n\t}\n\n\t/* Event handling */\n\t_handleUp(event) {\n\t\tif (this.Suggestions && this.Suggestions.isOpened()) {\n\t\t\tthis.Suggestions.onUp(event);\n\t\t}\n\t}\n\n\t_handleDown(event) {\n\t\tif (this.Suggestions && this.Suggestions.isOpened()) {\n\t\t\tthis.Suggestions.onDown(event);\n\t\t}\n\t}\n\n\t_handleSpace(event) {\n\t\tif (this.Suggestions) {\n\t\t\tthis.Suggestions.onSpace(event);\n\t\t}\n\t}\n\n\t_handleTab(event) {\n\t\tif (this.Suggestions && (this.previousValue !== this.value)) {\n\t\t\tthis.Suggestions.onTab(event);\n\t\t}\n\t}\n\n\t_handleEnter(event) {\n\t\tconst itemPressed = !!(this.Suggestions && this.Suggestions.onEnter(event));\n\t\tconst innerInput = this.getInputDOMRefSync();\n\t\t// Check for autocompleted item\n\t\tconst matchingItem = this.suggestionItems.find(item => {\n\t\t\treturn (item.text && item.text === this.value) || (item.textContent === this.value);\n\t\t});\n\n\t\tif (matchingItem) {\n\t\t\tconst itemText = matchingItem.text ? matchingItem.text : matchingItem.textContent;\n\n\t\t\tthis.getInputDOMRefSync().setSelectionRange(itemText.length, itemText.length);\n\t\t\tif (!itemPressed) {\n\t\t\t\tthis.selectSuggestion(matchingItem, true);\n\t\t\t\tthis.open = false;\n\t\t\t}\n\t\t}\n\n\t\tif (this._isPhone && !this.suggestionItems.length) {\n\t\t\tinnerInput.setSelectionRange(this.value.length, this.value.length);\n\t\t}\n\n\t\tif (!itemPressed) {\n\t\t\tthis.fireEventByAction(this.ACTION_ENTER, event);\n\t\t\tthis.lastConfirmedValue = this.value;\n\n\t\t\tif (this.FormSupport) {\n\t\t\t\tthis.FormSupport.triggerFormSubmit(this);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focused = true;\n\t}\n\n\t_handlePageUp(event) {\n\t\tif (this._isSuggestionsFocused) {\n\t\t\tthis.Suggestions.onPageUp(event);\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_handlePageDown(event) {\n\t\tif (this._isSuggestionsFocused) {\n\t\t\tthis.Suggestions.onPageDown(event);\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t_handleHome(event) {\n\t\tif (this._isSuggestionsFocused) {\n\t\t\tthis.Suggestions.onHome(event);\n\t\t}\n\t}\n\n\t_handleEnd(event) {\n\t\tif (this._isSuggestionsFocused) {\n\t\t\tthis.Suggestions.onEnd(event);\n\t\t}\n\t}\n\n\t_handleEscape() {\n\t\tconst hasSuggestions = this.showSuggestions && !!this.Suggestions;\n\t\tconst isOpen = hasSuggestions && this.open;\n\t\tconst innerInput = this.getInputDOMRefSync();\n\t\tconst isAutoCompleted = innerInput.selectionEnd - innerInput.selectionStart > 0;\n\n\t\tthis.isTyping = false;\n\n\t\tif (!isOpen) {\n\t\t\tthis.value = this.lastConfirmedValue ? this.lastConfirmedValue : this.previousValue;\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasSuggestions && isOpen && this.Suggestions._isItemOnTarget()) {\n\t\t\t// Restore the value.\n\t\t\tthis.value = this.valueBeforeAutoComplete || this.valueBeforeItemPreview;\n\n\t\t\t// Mark that the selection has been canceled, so the popover can close\n\t\t\t// and not reopen, due to receiving focus.\n\t\t\tthis.suggestionSelectionCanceled = true;\n\t\t\tthis.focused = true;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (isAutoCompleted) {\n\t\t\tthis.value = this.valueBeforeAutoComplete;\n\t\t}\n\n\t\tif (this._isValueStateFocused) {\n\t\t\tthis._isValueStateFocused = false;\n\t\t\tthis.focused = true;\n\t\t}\n\t}\n\n\tasync _onfocusin(event) {\n\t\tawait this.getInputDOMRef();\n\n\t\tthis.valueBeforeAutoComplete = \"\";\n\t\tthis.focused = true; // invalidating property\n\t\tthis.previousValue = this.value;\n\t\tthis.valueBeforeItemPreview = this.value;\n\n\t\tthis._inputIconFocused = event.target && event.target === this.querySelector(\"[ui5-icon]\");\n\t}\n\n\t_onfocusout(event) {\n\t\tconst focusedOutToSuggestions = this.Suggestions && event.relatedTarget && event.relatedTarget.shadowRoot && event.relatedTarget.shadowRoot.contains(this.Suggestions.responsivePopover);\n\t\tconst focusedOutToValueStateMessage = event.relatedTarget && event.relatedTarget.shadowRoot && event.relatedTarget.shadowRoot.querySelector(\".ui5-valuestatemessage-root\");\n\n\t\tif (this.showClearIcon && !this.effectiveShowClearIcon) {\n\t\t\tthis._clearIconClicked = false;\n\t\t\tthis._handleChange();\n\t\t}\n\n\t\t// if focusout is triggered by pressing on suggestion item or value state message popover, skip invalidation, because re-rendering\n\t\t// will happen before \"itemPress\" event, which will make item \"active\" state not visualized\n\t\tif (focusedOutToSuggestions || focusedOutToValueStateMessage) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\n\t\tconst toBeFocused = event.relatedTarget;\n\n\t\tif (toBeFocused && toBeFocused.classList.contains(this._id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.open = false;\n\t\tthis._clearPopoverFocusAndSelection();\n\n\t\tthis.previousValue = \"\";\n\t\tthis.lastConfirmedValue = \"\";\n\t\tthis.focused = false; // invalidating property\n\t\tthis.isTyping = false;\n\t\tthis._forceOpen = false;\n\t}\n\n\t_clearPopoverFocusAndSelection() {\n\t\tif (!this.showSuggestions || !this.Suggestions) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isValueStateFocused = false;\n\t\tthis.hasSuggestionItemSelected = false;\n\n\t\tthis.Suggestions._deselectItems();\n\t\tthis.Suggestions._clearItemFocus();\n\t}\n\n\t_click(event) {\n\t\tif (isPhone() && !this.readonly && this.Suggestions) {\n\t\t\tthis.blur();\n\t\t\tthis.openOnMobile = true;\n\t\t}\n\t}\n\n\t_handleChange() {\n\t\tif (this._clearIconClicked) {\n\t\t\tthis._clearIconClicked = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._changeFiredValue !== this.getInputDOMRefSync().value) {\n\t\t\tthis._changeFiredValue = this.getInputDOMRefSync().value;\n\t\t\tthis.fireEvent(this.EVENT_CHANGE);\n\t\t}\n\t}\n\n\t_clear() {\n\t\tthis.value = \"\";\n\t\tthis.fireEvent(this.EVENT_INPUT);\n\t\tif (!this._isPhone) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t_iconMouseDown() {\n\t\tthis._clearIconClicked = true;\n\t}\n\n\t_scroll(event) {\n\t\tconst detail = event.detail;\n\t\tthis.fireEvent(\"suggestion-scroll\", {\n\t\t\tscrollTop: detail.scrollTop,\n\t\t\tscrollContainer: detail.targetRef,\n\t\t});\n\t}\n\n\t_handleInput(event) {\n\t\tconst inputDomRef = this.getInputDOMRefSync();\n\t\tconst emptyValueFiredOnNumberInput = this.value && this.isTypeNumber && !inputDomRef.value;\n\t\tconst eventType = event.inputType || event.detail.inputType;\n\n\t\tthis._shouldAutocomplete = eventType !== \"deleteContentBackward\" && !this.noTypeahead;\n\t\tthis.suggestionSelectionCanceled = false;\n\n\t\tif (emptyValueFiredOnNumberInput && !this._backspaceKeyDown) {\n\t\t\t// For input with type=\"Number\", if the delimiter is entered second time,\n\t\t\t// the inner input is firing event with empty value\n\t\t\treturn;\n\t\t}\n\n\t\tif (emptyValueFiredOnNumberInput && this._backspaceKeyDown) {\n\t\t\t// Issue: when the user removes the character(s) after the delimeter of numeric Input,\n\t\t\t// the native input is firing event with an empty value and we have to manually handle this case,\n\t\t\t// otherwise the entire input will be cleared as we sync the \"value\".\n\n\t\t\t// There are tree scenarios:\n\t\t\t// Example: type \"123.4\" and press BACKSPACE - the native input is firing event with empty value.\n\t\t\t// Example: type \"123.456\", select/mark \"456\" and press BACKSPACE - the native input is firing event with empty value.\n\t\t\t// Example: type \"123.456\", select/mark \"123.456\" and press BACKSPACE - the native input is firing event with empty value,\n\t\t\t// but this time that's really the case.\n\n\t\t\t// Perform manual handling in case of floating number\n\t\t\t// and if the user did not select the entire input value\n\t\t\tif (this._selectedText.indexOf(\",\") > -1) {\n\t\t\t\tthis._selectedText = this._selectedText.replace(\",\", \".\");\n\t\t\t}\n\n\t\t\tif (rgxFloat.test(this.value) && this._selectedText !== this.value) {\n\t\t\t\tconst newValue = this.removeFractionalPart(this.value);\n\n\t\t\t\t// update state\n\t\t\t\tthis.value = newValue;\n\t\t\t\tthis.highlightValue = newValue;\n\t\t\t\tthis.valueBeforeItemPreview = newValue;\n\n\t\t\t\t// fire events\n\t\t\t\tthis.fireEvent(this.EVENT_INPUT, { inputType: event.inputType });\n\t\t\t\tthis.fireEvent(\"value-changed\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (event.target === inputDomRef) {\n\t\t\tthis.focused = true;\n\n\t\t\t// stop the native event, as the semantic \"input\" would be fired.\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.fireEventByAction(this.ACTION_USER_INPUT, event);\n\n\t\tthis.hasSuggestionItemSelected = false;\n\t\tthis._isValueStateFocused = false;\n\n\t\tif (this.Suggestions) {\n\t\t\tthis.Suggestions.updateSelectedItemPosition(null);\n\t\t}\n\n\t\tthis.isTyping = true;\n\t}\n\n\t_startsWithMatchingItems(str) {\n\t\tconst textProp = this.suggestionItems[0].text ? \"text\" : \"textContent\";\n\t\treturn Filters.StartsWith(str, this.suggestionItems, textProp);\n\t}\n\n\t_getFirstMatchingItem(current) {\n\t\tif (!this.suggestionItems.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst matchingItems = this._startsWithMatchingItems(current).filter(item => !item.groupItem);\n\n\t\tif (matchingItems.length) {\n\t\t\treturn matchingItems[0];\n\t\t}\n\t}\n\n\t_handleTypeAhead(item, filterValue) {\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = item.text ? item.text : item.textContent || \"\";\n\t\tconst innerInput = this.getInputDOMRefSync();\n\n\t\tfilterValue = filterValue || \"\";\n\t\tthis.value = value;\n\n\t\tinnerInput.value = value;\n\t\tsetTimeout(() => {\n\t\t\tinnerInput.setSelectionRange(filterValue.length, value.length);\n\t\t}, 0);\n\n\t\tthis._shouldAutocomplete = false;\n\t}\n\n\t_handleResize() {\n\t\tthis._inputWidth = this.offsetWidth;\n\t}\n\n\t_closeRespPopover(preventFocusRestore) {\n\t\tthis.Suggestions.close(preventFocusRestore);\n\t}\n\n\tasync _afterOpenPopover() {\n\t\t// Set initial focus to the native input\n\t\tif (isPhone()) {\n\t\t\t(await this.getInputDOMRef()).focus();\n\t\t}\n\t}\n\n\t_afterClosePopover() {\n\t\tthis.announceSelectedItem();\n\n\t\t// close device's keyboard and prevent further typing\n\t\tif (isPhone()) {\n\t\t\tthis.blur();\n\t\t\tthis.focused = false;\n\t\t}\n\n\t\tthis.openOnMobile = false;\n\t\tthis.open = false;\n\t\tthis._forceOpen = false;\n\t}\n\n\t/**\n\t * Checks if the value state popover is open.\n\t * @returns {boolean} true if the value state popover is open, false otherwise\n\t */\n\tisValueStateOpened() {\n\t\treturn !!this._isPopoverOpen;\n\t}\n\n\tasync openPopover() {\n\t\tconst popover = await this._getPopover();\n\n\t\tif (popover) {\n\t\t\tthis._isPopoverOpen = true;\n\t\t\tpopover.showAt(this);\n\t\t}\n\t}\n\n\tasync closePopover() {\n\t\tconst popover = await this._getPopover();\n\n\t\tpopover && popover.close();\n\t}\n\n\tasync _getPopover() {\n\t\tconst staticAreaItem = await this.getStaticAreaItemDomRef();\n\t\treturn staticAreaItem && staticAreaItem.querySelector(\"[ui5-popover]\");\n\t}\n\n\t/**\n\t * Manually opens the suggestions popover, assuming suggestions are enabled. Items must be preloaded for it to open.\n\t * @since 1.3.0\n\t * @public\n\t */\n\topenPicker() {\n\t\tif (!this.suggestionItems.length || this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._forceOpen = true;\n\t}\n\n\tenableSuggestions() {\n\t\tif (this.Suggestions) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst Suggestions = getFeature(\"InputSuggestions\");\n\n\t\tif (Suggestions) {\n\t\t\tthis.Suggestions = new Suggestions(this, \"suggestionItems\", true);\n\t\t} else {\n\t\t\tthrow new Error(`You have to import \"@ui5/webcomponents/dist/features/InputSuggestions.js\" module to use ui5-input suggestions`);\n\t\t}\n\t}\n\n\tselectSuggestion(item, keyboardUsed) {\n\t\tif (item.group) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemText = item.text || item.textContent; // keep textContent for compatibility\n\t\tconst fireInput = keyboardUsed\n\t\t\t? this.valueBeforeItemSelection !== itemText : this.valueBeforeAutoComplete !== itemText;\n\n\t\tthis.hasSuggestionItemSelected = true;\n\n\t\tif (fireInput) {\n\t\t\tthis.value = itemText;\n\t\t\tthis.valueBeforeItemSelection = itemText;\n\t\t\tthis.lastConfirmedValue = itemText;\n\t\t\tthis.getInputDOMRefSync().value = itemText;\n\t\t\tthis.fireEvent(this.EVENT_INPUT);\n\t\t\tthis._handleChange();\n\t\t}\n\n\t\tthis.valueBeforeItemPreview = \"\";\n\t\tthis.suggestionSelectionCanceled = false;\n\n\t\tthis.fireEvent(this.EVENT_SUGGESTION_ITEM_SELECT, { item });\n\n\t\tthis.isTyping = false;\n\t\tthis.openOnMobile = false;\n\t\tthis._forceOpen = false;\n\t}\n\n\tpreviewSuggestion(item) {\n\t\tthis.valueBeforeItemSelection = this.value;\n\t\tthis.updateValueOnPreview(item);\n\t\tthis.announceSelectedItem();\n\t\tthis._previewItem = item;\n\t}\n\n\t/**\n\t * Updates the input value on item preview.\n\t * @param {Object} item The item that is on preview\n\t */\n\tupdateValueOnPreview(item) {\n\t\tconst noPreview = item.type === \"Inactive\" || item.group;\n\t\tconst innerInput = this.getInputDOMRefSync();\n\t\tconst itemValue = noPreview ? this.valueBeforeItemPreview : (item.effectiveTitle || item.textContent);\n\n\t\tthis.value = itemValue;\n\t\tinnerInput.value = itemValue;\n\t\tinnerInput.setSelectionRange(this.valueBeforeAutoComplete.length, this.value.length);\n\t}\n\n\t/**\n\t * The suggestion item on preview.\n\t * @type { sap.ui.webcomponents.main.IInputSuggestionItem }\n\t * @readonly\n\t * @public\n\t */\n\tget previewItem() {\n\t\tif (!this._previewItem) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.getSuggestionByListItem(this._previewItem);\n\t}\n\n\tasync fireEventByAction(action, event) {\n\t\tawait this.getInputDOMRef();\n\n\t\tif (this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst inputValue = await this.getInputValue();\n\t\tconst isUserInput = action === this.ACTION_USER_INPUT;\n\n\t\tconst input = await this.getInputDOMRef();\n\t\tconst cursorPosition = input.selectionStart;\n\n\t\tthis.value = inputValue;\n\t\tthis.highlightValue = inputValue;\n\t\tthis.valueBeforeItemPreview = inputValue;\n\n\t\tif (isSafari()) {\n\t\t\t// When setting the value by hand, Safari moves the cursor when typing in the middle of the text (See #1761)\n\t\t\tsetTimeout(() => {\n\t\t\t\tinput.selectionStart = cursorPosition;\n\t\t\t\tinput.selectionEnd = cursorPosition;\n\t\t\t}, 0);\n\t\t}\n\n\t\tif (isUserInput) { // input\n\t\t\tthis.fireEvent(this.EVENT_INPUT, { inputType: event.inputType });\n\t\t\t// Angular two way data binding\n\t\t\tthis.fireEvent(\"value-changed\");\n\t\t}\n\t}\n\n\tasync getInputValue() {\n\t\tconst domRef = this.getDomRef();\n\n\t\tif (domRef) {\n\t\t\treturn (await this.getInputDOMRef()).value;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tasync getInputDOMRef() {\n\t\tif (isPhone() && this.Suggestions) {\n\t\t\tawait this.Suggestions._getSuggestionPopover();\n\t\t\treturn this.Suggestions && this.Suggestions.responsivePopover.querySelector(\".ui5-input-inner-phone\");\n\t\t}\n\n\t\treturn this.nativeInput;\n\t}\n\n\tgetInputDOMRefSync() {\n\t\tif (isPhone() && this.Suggestions && this.Suggestions.responsivePopover) {\n\t\t\treturn this.Suggestions.responsivePopover.querySelector(\".ui5-input-inner-phone\").shadowRoot.querySelector(\"input\");\n\t\t}\n\n\t\treturn this.nativeInput;\n\t}\n\n\t/**\n\t * Returns a reference to the native input element\n\t * @protected\n\t */\n\tget nativeInput() {\n\t\treturn this.getDomRef() && this.getDomRef().querySelector(`input`);\n\t}\n\n\tget nativeInputWidth() {\n\t\treturn this.nativeInput && this.nativeInput.offsetWidth;\n\t}\n\n\tgetLabelableElementId() {\n\t\treturn this.getInputId();\n\t}\n\n\tgetSuggestionByListItem(item) {\n\t\tconst key = parseInt(item.getAttribute(\"data-ui5-key\"));\n\t\treturn this.suggestionItems[key];\n\t}\n\n\t/**\n\t * Returns if the suggestions popover is scrollable.\n\t * The method returns Promise
that resolves to true,\n\t * if the popup is scrollable and false otherwise.\n\t * @returns {Promise}\n\t */\n\tisSuggestionsScrollable() {\n\t\tif (!this.Suggestions) {\n\t\t\treturn Promise.resolve(false);\n\t\t}\n\n\t\treturn this.Suggestions._isScrollable();\n\t}\n\n\tgetInputId() {\n\t\treturn `${this._id}-inner`;\n\t}\n\n\t/* Suggestions interface */\n\tonItemFocused() {}\n\n\tonItemMouseOver(event) {\n\t\tconst item = event.target;\n\t\tconst suggestion = this.getSuggestionByListItem(item);\n\t\tsuggestion && suggestion.fireEvent(\"mouseover\", {\n\t\t\titem: suggestion,\n\t\t\ttargetRef: item,\n\t\t});\n\t}\n\n\tonItemMouseOut(event) {\n\t\tconst item = event.target;\n\t\tconst suggestion = this.getSuggestionByListItem(item);\n\t\tsuggestion && suggestion.fireEvent(\"mouseout\", {\n\t\t\titem: suggestion,\n\t\t\ttargetRef: item,\n\t\t});\n\t}\n\n\tonItemMouseDown(event) {\n\t\tevent.preventDefault();\n\t}\n\n\tonItemSelected(item, keyboardUsed) {\n\t\tthis.selectSuggestion(item, keyboardUsed);\n\t}\n\n\tonItemPreviewed(item) {\n\t\tthis.previewSuggestion(item);\n\t\tthis.fireEvent(\"suggestion-item-preview\", {\n\t\t\titem: this.getSuggestionByListItem(item),\n\t\t\ttargetRef: item,\n\t\t});\n\t}\n\n\tonOpen() {}\n\n\tonClose() {}\n\n\tget valueStateTypeMappings() {\n\t\treturn {\n\t\t\t\"Success\": Input.i18nBundle.getText(VALUE_STATE_TYPE_SUCCESS),\n\t\t\t\"Information\": Input.i18nBundle.getText(VALUE_STATE_TYPE_INFORMATION),\n\t\t\t\"Error\": Input.i18nBundle.getText(VALUE_STATE_TYPE_ERROR),\n\t\t\t\"Warning\": Input.i18nBundle.getText(VALUE_STATE_TYPE_WARNING),\n\t\t};\n\t}\n\n\tvalueStateTextMappings() {\n\t\treturn {\n\t\t\t\"Success\": Input.i18nBundle.getText(VALUE_STATE_SUCCESS),\n\t\t\t\"Information\": Input.i18nBundle.getText(VALUE_STATE_INFORMATION),\n\t\t\t\"Error\": Input.i18nBundle.getText(VALUE_STATE_ERROR),\n\t\t\t\"Warning\": Input.i18nBundle.getText(VALUE_STATE_WARNING),\n\t\t};\n\t}\n\n\tannounceSelectedItem() {\n\t\tconst invisibleText = this.shadowRoot.querySelector(`#${this._id}-selectionText`);\n\n\t\tif (this.Suggestions && this.Suggestions._isItemOnTarget()) {\n\t\t\tinvisibleText.textContent = this.itemSelectionAnnounce;\n\t\t} else {\n\t\t\tinvisibleText.textContent = \"\";\n\t\t}\n\t}\n\n\tget _readonly() {\n\t\treturn this.readonly && !this.disabled;\n\t}\n\n\tget _headerTitleText() {\n\t\treturn Input.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);\n\t}\n\n\tget inputType() {\n\t\treturn this.type.toLowerCase();\n\t}\n\n\tget isTypeNumber() {\n\t\treturn this.type === InputType.Number;\n\t}\n\n\tget suggestionsTextId() {\n\t\treturn this.showSuggestions ? `${this._id}-suggestionsText` : \"\";\n\t}\n\n\tget valueStateTextId() {\n\t\treturn this.hasValueState ? `${this._id}-valueStateDesc` : \"\";\n\t}\n\n\tget accInfo() {\n\t\tconst ariaHasPopupDefault = this.showSuggestions ? \"true\" : undefined;\n\t\tconst ariaAutoCompleteDefault = this.showSuggestions ? \"list\" : undefined;\n\t\tconst ariaDescribedBy = this._inputAccInfo.ariaDescribedBy ? `${this.suggestionsTextId} ${this.valueStateTextId} ${this._inputAccInfo.ariaDescribedBy}`.trim() : `${this.suggestionsTextId} ${this.valueStateTextId}`.trim();\n\n\t\treturn {\n\t\t\t\"input\": {\n\t\t\t\t\"ariaRoledescription\": this._inputAccInfo && (this._inputAccInfo.ariaRoledescription || undefined),\n\t\t\t\t\"ariaDescribedBy\": ariaDescribedBy || undefined,\n\t\t\t\t\"ariaInvalid\": this.valueState === ValueState.Error ? \"true\" : undefined,\n\t\t\t\t\"ariaHasPopup\": this._inputAccInfo.ariaHasPopup ? this._inputAccInfo.ariaHasPopup : ariaHasPopupDefault,\n\t\t\t\t\"ariaAutoComplete\": this._inputAccInfo.ariaAutoComplete ? this._inputAccInfo.ariaAutoComplete : ariaAutoCompleteDefault,\n\t\t\t\t\"role\": this._inputAccInfo && this._inputAccInfo.role,\n\t\t\t\t\"ariaControls\": this._inputAccInfo && this._inputAccInfo.ariaControls,\n\t\t\t\t\"ariaExpanded\": this._inputAccInfo && this._inputAccInfo.ariaExpanded,\n\t\t\t\t\"ariaDescription\": this._inputAccInfo && this._inputAccInfo.ariaDescription,\n\t\t\t\t\"ariaLabel\": (this._inputAccInfo && this._inputAccInfo.ariaLabel) || getEffectiveAriaLabelText(this),\n\t\t\t},\n\t\t};\n\t}\n\n\tget nativeInputAttributes() {\n\t\treturn {\n\t\t\t\"min\": this.isTypeNumber ? this._nativeInputAttributes.min : undefined,\n\t\t\t\"max\": this.isTypeNumber ? this._nativeInputAttributes.max : undefined,\n\t\t\t\"step\": this.isTypeNumber ? (this._nativeInputAttributes.step || \"any\") : undefined,\n\t\t};\n\t}\n\n\tget ariaValueStateHiddenText() {\n\t\tif (!this.hasValueState) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.shouldDisplayDefaultValueStateMessage) {\n\t\t\treturn `${this.valueStateTypeMappings[this.valueState]} ${this.valueStateText}`;\n\t\t}\n\n\t\treturn `${this.valueStateTypeMappings[this.valueState]}`.concat(\" \", this.valueStateMessageText.map(el => el.textContent).join(\" \"));\n\t}\n\n\tget itemSelectionAnnounce() {\n\t\treturn this.Suggestions ? this.Suggestions.itemSelectionAnnounce : undefined;\n\t}\n\n\tget classes() {\n\t\treturn {\n\t\t\tpopover: {\n\t\t\t\t\"ui5-suggestions-popover\": !this.isPhone && this.showSuggestions,\n\t\t\t\t\"ui5-suggestions-popover-with-value-state-header\": !this.isPhone && this.showSuggestions && this.hasValueStateMessage,\n\t\t\t},\n\t\t\tpopoverValueState: {\n\t\t\t\t\"ui5-valuestatemessage-root\": true,\n\t\t\t\t\"ui5-valuestatemessage-header\": true,\n\t\t\t\t\"ui5-valuestatemessage--success\": this.valueState === ValueState.Success,\n\t\t\t\t\"ui5-valuestatemessage--error\": this.valueState === ValueState.Error,\n\t\t\t\t\"ui5-valuestatemessage--warning\": this.valueState === ValueState.Warning,\n\t\t\t\t\"ui5-valuestatemessage--information\": this.valueState === ValueState.Information,\n\t\t\t},\n\t\t};\n\t}\n\n\tget styles() {\n\t\tconst remSizeIxPx = parseInt(getComputedStyle(document.documentElement).fontSize);\n\n\t\tconst stylesObject = {\n\t\t\tpopoverHeader: {\n\t\t\t\t\"max-width\": `${this._inputWidth}px`,\n\t\t\t},\n\t\t\tsuggestionPopoverHeader: {\n\t\t\t\t\"display\": this._listWidth === 0 ? \"none\" : \"inline-block\",\n\t\t\t\t\"width\": `${this._listWidth}px`,\n\t\t\t},\n\t\t\tsuggestionsPopover: {\n\t\t\t\t\"min-width\": `${this._inputWidth}px`,\n\t\t\t\t\"max-width\": (this._inputWidth / remSizeIxPx) > 40 ? `${this._inputWidth}px` : \"40rem\",\n\t\t\t},\n\t\t\tinnerInput: {},\n\t\t};\n\n\t\tif (this.nativeInputWidth < 48) {\n\t\t\tstylesObject.innerInput.padding = \"0\";\n\t\t}\n\n\t\treturn stylesObject;\n\t}\n\n\tget suggestionSeparators() {\n\t\treturn \"None\";\n\t}\n\n\tget valueStateMessageText() {\n\t\treturn this.getSlottedNodes(\"valueStateMessage\").map(el => el.cloneNode(true));\n\t}\n\n\tget shouldDisplayOnlyValueStateMessage() {\n\t\treturn this.hasValueStateMessage && !this.readonly && !this.open && this.focused;\n\t}\n\n\tget shouldDisplayDefaultValueStateMessage() {\n\t\treturn !this.valueStateMessage.length && this.hasValueStateMessage;\n\t}\n\n\tget hasValueState() {\n\t\treturn this.valueState !== ValueState.None;\n\t}\n\n\tget hasValueStateMessage() {\n\t\treturn this.hasValueState && this.valueState !== ValueState.Success\n\t\t\t&& (!this._inputIconFocused // Handles the cases when valueStateMessage is forwarded (from datepicker e.g.)\n\t\t\t|| (this._isPhone && this.Suggestions)); // Handles Input with suggestions on mobile\n\t}\n\n\tget valueStateText() {\n\t\treturn this.valueStateTextMappings()[this.valueState];\n\t}\n\n\tget suggestionsText() {\n\t\treturn Input.i18nBundle.getText(INPUT_SUGGESTIONS);\n\t}\n\n\tget availableSuggestionsCount() {\n\t\tif (this.showSuggestions && (this.value || this.Suggestions.isOpened())) {\n\t\t\tswitch (this.suggestionsTexts.length) {\n\t\t\tcase 0:\n\t\t\t\treturn Input.i18nBundle.getText(INPUT_SUGGESTIONS_NO_HIT);\n\n\t\t\tcase 1:\n\t\t\t\treturn Input.i18nBundle.getText(INPUT_SUGGESTIONS_ONE_HIT);\n\n\t\t\tdefault:\n\t\t\t\treturn Input.i18nBundle.getText(INPUT_SUGGESTIONS_MORE_HITS, this.suggestionsTexts.length);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget step() {\n\t\treturn this.isTypeNumber ? \"any\" : undefined;\n\t}\n\n\tget _isPhone() {\n\t\treturn isPhone();\n\t}\n\n\tget _isSuggestionsFocused() {\n\t\treturn !this.focused && this.Suggestions && this.Suggestions.isOpened();\n\t}\n\n\t/**\n\t * Returns the placeholder value.\n\t * @protected\n\t */\n\tget _placeholder() {\n\t\treturn this.placeholder;\n\t}\n\n\t/**\n\t * This method is relevant for sap_horizon theme only\n\t */\n\tget _valueStateInputIcon() {\n\t\tconst iconPerValueState = {\n\t\t\tError: ``,\n\t\t\tWarning: ``,\n\t\t\tSuccess: ``,\n\t\t\tInformation: ``,\n\t\t};\n\n\t\tconst result = `\n\t\t\n\t\t`;\n\n\t\treturn this.valueState !== ValueState.None ? result : \"\";\n\t}\n\n\tget _valueStatePopoverHorizontalAlign() {\n\t\treturn this.effectiveDir !== \"rtl\" ? \"Left\" : \"Right\";\n\t}\n\n\t/**\n\t * This method is relevant for sap_horizon theme only\n\t */\n\tget _valueStateMessageInputIcon() {\n\t\tconst iconPerValueState = {\n\t\t\tError: \"error\",\n\t\t\tWarning: \"alert\",\n\t\t\tSuccess: \"sys-enter-2\",\n\t\t\tInformation: \"information\",\n\t\t};\n\n\t\treturn this.valueState !== ValueState.None ? iconPerValueState[this.valueState] : \"\";\n\t}\n\n\t/**\n\t * Returns the caret position inside the native input\n\t * @protected\n\t */\n\tgetCaretPosition() {\n\t\treturn getCaretPosition(this.nativeInput);\n\t}\n\n\t/**\n\t * Sets the caret to a certain position inside the native input\n\t * @protected\n\t * @param pos\n\t */\n\tsetCaretPosition(pos) {\n\t\tsetCaretPosition(this.nativeInput, pos);\n\t}\n\n\t/**\n\t * Removes the fractional part of floating-point number.\n\t * @param {string} value the numeric value of Input of type \"Number\"\n\t */\n\tremoveFractionalPart(value) {\n\t\tif (value.includes(\".\")) {\n\t\t\treturn value.slice(0, value.indexOf(\".\"));\n\t\t}\n\t\tif (value.includes(\",\")) {\n\t\t\treturn value.slice(0, value.indexOf(\",\"));\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tstatic get dependencies() {\n\t\tconst Suggestions = getFeature(\"InputSuggestions\");\n\n\t\treturn [Popover, Icon].concat(Suggestions ? Suggestions.dependencies : []);\n\t}\n\n\tstatic async onDefine() {\n\t\tconst Suggestions = getFeature(\"InputSuggestions\");\n\n\t\t[Input.i18nBundle] = await Promise.all([\n\t\t\tgetI18nBundle(\"@ui5/webcomponents\"),\n\t\t\tSuggestions ? Suggestions.init() : Promise.resolve(),\n\t\t]);\n\t}\n}\n\nInput.define();\n\nexport default Input;\n","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-input\", tags, suffix)} id=\"${ifDefined(context._id)}-inner\" class=\"ui5-date-picker-input\" placeholder=\"${ifDefined(context._placeholder)}\" type=\"${ifDefined(context.type)}\" value=\"${ifDefined(context.value)}\" ?disabled=\"${context.disabled}\" ?required=\"${context.required}\" ?readonly=\"${context.readonly}\" value-state=\"${ifDefined(context.valueState)}\" data-sap-focus-ref ._inputAccInfo =\"${ifDefined(context.accInfo)}\" @ui5-change=\"${ifDefined(context._onInputChange)}\" @ui5-input=\"${ifDefined(context._onInputInput)}\" @ui5-submit=\"${ifDefined(context._onInputSubmit)}\" @keydown=\"${context._onkeydown}\">${ context.valueStateMessage.length ? block1(context, tags, suffix) : undefined }${ !context.readonly ? block2(context, tags, suffix) : undefined }${scopeTag(\"ui5-input\", tags, suffix)}>
` : html`${ context.valueStateMessage.length ? block1(context, tags, suffix) : undefined }${ !context.readonly ? block2(context, tags, suffix) : undefined }
`;\nconst block1 = (context, tags, suffix) => html``;\nconst block2 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-icon\", tags, suffix)} slot=\"icon\" name=\"${ifDefined(context.openIconName)}\" tabindex=\"-1\" accessible-name=\"${ifDefined(context.openIconTitle)}\" accessible-role=\"button\" aria-hidden=\"${ifDefined(context._ariaHidden)}\" show-tooltip @click=\"${context.togglePicker}\" input-icon ?pressed=\"${context._isPickerOpen}\">${scopeTag(\"ui5-icon\", tags, suffix)}>` : html``;\n\n\nexport default block0;","/* eslint no-unused-vars: 0 */\nimport { html, svg, repeat, classMap, styleMap, ifDefined, unsafeHTML, scopeTag } from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\n\nconst block0 = (context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-responsive-popover\", tags, suffix)} id=\"${ifDefined(context._id)}-responsive-popover\" allow-target-overlap placement-type=\"Bottom\" horizontal-align=\"Left\" hide-arrow ?_hide-header=${ifDefined(context._shouldHideHeader)} @keydown=\"${context._onkeydown}\" @ui5-after-close=\"${ifDefined(context.onResponsivePopoverAfterClose)}\">${ context.showHeader ? block1(context, tags, suffix) : undefined }<${scopeTag(\"ui5-calendar\", tags, suffix)} id=\"${ifDefined(context._id)}-calendar\" primary-calendar-type=\"${ifDefined(context._primaryCalendarType)}\" secondary-calendar-type=\"${ifDefined(context.secondaryCalendarType)}\" format-pattern=\"${ifDefined(context._formatPattern)}\" timestamp=\"${ifDefined(context._calendarTimestamp)}\" .selectionMode=\"${ifDefined(context._calendarSelectionMode)}\" .minDate=\"${ifDefined(context.minDate)}\" .maxDate=\"${ifDefined(context.maxDate)}\" @ui5-selected-dates-change=\"${ifDefined(context.onSelectedDatesChange)}\" @ui5-show-month-press=\"${ifDefined(context.onHeaderShowMonthPress)}\" @ui5-show-year-press=\"${ifDefined(context.onHeaderShowYearPress)}\" ?hide-week-numbers=\"${context.hideWeekNumbers}\" ._currentPicker=\"${ifDefined(context._calendarCurrentPicker)}\">${ repeat(context._calendarSelectedDates, (item, index) => item._id || index, (item, index) => block2(item, index, context, tags, suffix)) }${scopeTag(\"ui5-calendar\", tags, suffix)}>${ context.showFooter ? block3(context, tags, suffix) : undefined }${scopeTag(\"ui5-responsive-popover\", tags, suffix)}> ` : html`${ context.showHeader ? block1(context, tags, suffix) : undefined }${ repeat(context._calendarSelectedDates, (item, index) => item._id || index, (item, index) => block2(item, index, context, tags, suffix)) }${ context.showFooter ? block3(context, tags, suffix) : undefined } `;\nconst block1 = (context, tags, suffix) => suffix ? html`` : html``;\nconst block2 = (item, index, context, tags, suffix) => suffix ? html`<${scopeTag(\"ui5-date\", tags, suffix)} value=\"${ifDefined(item)}\">${scopeTag(\"ui5-date\", tags, suffix)}>` : html``;\nconst block3 = (context, tags, suffix) => html``;\n\n\nexport default block0;","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/DatePicker.css\",content:\".ui5-hidden-text{position:absolute;clip:rect(1px,1px,1px,1px);user-select:none;left:-1000px;top:-1000px;pointer-events:none;font-size:0}[input-icon]{color:var(--_ui5_input_icon_color);cursor:pointer;outline:none;padding:var(--_ui5_input_icon_padding);border-inline-start:var(--_ui5_input_icon_border);min-width:1rem;min-height:1rem;border-radius:var(--_ui5_input_icon_border_radius)}[input-icon][pressed]{background:var(--_ui5_input_icon_pressed_bg);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:active{background-color:var(--sapButton_Active_Background);box-shadow:var(--_ui5_input_icon_box_shadow);border-inline-start:var(--_ui5_select_hover_icon_left_border);color:var(--_ui5_input_icon_pressed_color)}[input-icon]:not([pressed]):not(:active):hover{background:var(--_ui5_input_icon_hover_bg);box-shadow:var(--_ui5_input_icon_box_shadow)}[input-icon]:hover{border-inline-start:var(--_ui5_select_hover_icon_left_border);box-shadow:var(--_ui5_input_icon_box_shadow)}:host(:not([hidden])){display:inline-block;line-height:normal;letter-spacing:normal;word-spacing:normal}:host{color:var(--sapField_TextColor);background-color:var(--sapField_Background);border-radius:var(--_ui5-datepicker_border_radius)}:host([value-state=Error]):not([disabled]):not([readonly]){background-color:var(--sapField_InvalidBackground)}:host(:not([disabled]):not([readonly]):active){background:var(--_ui5-datepicker-hover-background)}:host(:not([disabled]):not([readonly]):hover){background:var(--_ui5-datepicker-hover-background)}:host .ui5-date-picker-input{width:100%;min-width:12.5625rem;color:inherit;background-color:inherit;line-height:inherit;letter-spacing:inherit;word-spacing:inherit}:host(:not([disabled]):not([readonly])) .ui5-date-picker-input[focused]{background-color:var(--_ui5-datepicker-hover-background)}[slot=icon]{border-top-right-radius:var(--_ui5-datepicker_icon_border_radius);border-bottom-right-radius:var(--_ui5-datepicker_icon_border_radius)}\"}","import { registerThemePropertiesLoader } from \"@ui5/webcomponents-base/dist/asset-registries/Themes.js\";\n\nimport defaultThemeBase from \"@ui5/webcomponents-theming/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js\";\nimport defaultTheme from \"./sap_fiori_3/parameters-bundle.css.js\";\n\nregisterThemePropertiesLoader(\"@ui5/webcomponents-theming\", \"sap_fiori_3\", () => defaultThemeBase);\nregisterThemePropertiesLoader(\"@ui5/webcomponents\", \"sap_fiori_3\", () => defaultTheme);\nexport default {packageName:\"@ui5/webcomponents\",fileName:\"themes/DatePickerPopover.css\",content:\"[ui5-calendar]{width:100%;display:flex;justify-content:center}[ui5-responsive-popover]::part(content){padding:0}\"}","import { getFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport CalendarDate from \"@ui5/webcomponents-localization/dist/dates/CalendarDate.js\";\nimport modifyDateBy from \"@ui5/webcomponents-localization/dist/dates/modifyDateBy.js\";\nimport getRoundedTimestamp from \"@ui5/webcomponents-localization/dist/dates/getRoundedTimestamp.js\";\nimport getTodayUTCTimestamp from \"@ui5/webcomponents-localization/dist/dates/getTodayUTCTimestamp.js\";\nimport ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport { getEffectiveAriaLabelText } from \"@ui5/webcomponents-base/dist/util/AriaLabelHelper.js\";\nimport {\n\tisPageUp,\n\tisPageDown,\n\tisPageUpShift,\n\tisPageDownShift,\n\tisPageUpShiftCtrl,\n\tisPageDownShiftCtrl,\n\tisShow,\n\tisF4,\n\tisEnter,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport { isPhone, isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport \"@ui5/webcomponents-icons/dist/appointment-2.js\";\nimport \"@ui5/webcomponents-icons/dist/decline.js\";\nimport HasPopup from \"./types/HasPopup.js\";\nimport { DATEPICKER_OPEN_ICON_TITLE, DATEPICKER_DATE_DESCRIPTION, INPUT_SUGGESTIONS_TITLE } from \"./generated/i18n/i18n-defaults.js\";\nimport DateComponentBase from \"./DateComponentBase.js\";\nimport Icon from \"./Icon.js\";\nimport Button from \"./Button.js\";\nimport ResponsivePopover from \"./ResponsivePopover.js\";\nimport Calendar from \"./Calendar.js\";\nimport * as CalendarDateComponent from \"./CalendarDate.js\";\nimport Input from \"./Input.js\";\nimport InputType from \"./types/InputType.js\";\nimport DatePickerTemplate from \"./generated/templates/DatePickerTemplate.lit.js\";\nimport DatePickerPopoverTemplate from \"./generated/templates/DatePickerPopoverTemplate.lit.js\";\n\n// default calendar for bundling\nimport \"@ui5/webcomponents-localization/dist/features/calendar/Gregorian.js\";\n\n// Styles\nimport datePickerCss from \"./generated/themes/DatePicker.css.js\";\nimport datePickerPopoverCss from \"./generated/themes/DatePickerPopover.css.js\";\nimport ResponsivePopoverCommonCss from \"./generated/themes/ResponsivePopoverCommon.css.js\";\n\n/**\n * @public\n */\nconst metadata = {\n\ttag: \"ui5-date-picker\",\n\taltTag: \"ui5-datepicker\",\n\tmanagedSlots: true,\n\tproperties: /** @lends sap.ui.webcomponents.main.DatePicker.prototype */ {\n\t\t/**\n\t\t * Defines a formatted date value.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the value state of the component.\n\t\t *
\n\t\t * Available options are:\n\t\t * \n\t\t * None
\n\t\t * Error
\n\t\t * Warning
\n\t\t * Success
\n\t\t * Information
\n\t\t *
\n\t\t *\n\t\t * @type {ValueState}\n\t\t * @defaultvalue \"None\"\n\t\t * @public\n\t\t */\n\t\tvalueState: {\n\t\t\ttype: ValueState,\n\t\t\tdefaultValue: ValueState.None,\n\t\t},\n\n\t\t/**\n\t\t * Defines whether the component is required.\n\t\t *\n\t\t * @since 1.0.0-rc.9\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component is displayed as disabled.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Determines whether the component is displayed as read-only.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t */\n\t\treadonly: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines a short hint, intended to aid the user with data entry when the\n\t\t * component has no value.\n\t\t *\n\t\t *
\n\t\t * Note: When no placeholder is set, the format pattern is displayed as a placeholder.\n\t\t * Passing an empty string as the value of this property will make the component appear empty - without placeholder or format pattern.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue undefined\n\t\t * @public\n\t\t */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Determines the name with which the component will be submitted in an HTML form.\n\t\t *\n\t\t *
\n\t\t * Important: For the name
property to have effect, you must add the following import to your project:\n\t\t * import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";
\n\t\t *\n\t\t *
\n\t\t * Note: When set, a native input
HTML element\n\t\t * will be created inside the component so that it can be submitted as\n\t\t * part of an HTML form. Do not use this property unless you need to submit a form.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Defines the visibility of the week numbers column.\n\t\t *
\n\t\t *\n\t\t * Note: For calendars other than Gregorian,\n\t\t * the week numbers are not displayed regardless of what is set.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @defaultvalue false\n\t\t * @public\n\t\t * @since 1.0.0-rc.8\n\t\t */\n\t\thideWeekNumbers: {\n\t\t\ttype: Boolean,\n\t\t},\n\n\t\t/**\n\t\t * Defines the aria-label attribute for the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleName: {\n\t\t\ttype: String,\n\t\t},\n\n\t\t/**\n\t\t * Receives id(or many ids) of the elements that label the component.\n\t\t *\n\t\t * @type {string}\n\t\t * @defaultvalue \"\"\n\t\t * @public\n\t\t * @since 1.0.0-rc.15\n\t\t */\n\t\taccessibleNameRef: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\n\t\t_isPickerOpen: {\n\t\t\ttype: Boolean,\n\t\t\tnoAttribute: true,\n\t\t},\n\n\t\t_respPopoverConfig: {\n\t\t\ttype: Object,\n\t\t},\n\n\t\t_calendarCurrentPicker: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"day\",\n\t\t},\n\t},\n\n\tslots: /** @lends sap.ui.webcomponents.main.DatePicker.prototype */ {\n\t\t/**\n\t\t * Defines the value state message that will be displayed as pop up under the component.\n\t\t *
\n\t\t *\n\t\t * Note: If not specified, a default text (in the respective language) will be displayed.\n\t\t *
\n\t\t * Note: The valueStateMessage
would be displayed,\n\t\t * when the component is in Information
, Warning
or Error
value state.\n\t\t * @type {HTMLElement}\n\t\t * @since 1.0.0-rc.7\n\t\t * @slot\n\t\t * @public\n\t\t */\n\t\tvalueStateMessage: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\n\t\t/**\n\t\t * The slot is used to render native input
HTML element within Light DOM to enable form submit,\n\t\t * when name
property is set.\n\t\t * @type {HTMLElement[]}\n\t\t * @slot\n\t\t * @private\n\t\t */\n\t\tformSupport: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t},\n\n\tevents: /** @lends sap.ui.webcomponents.main.DatePicker.prototype */ {\n\n\t\t/**\n\t\t * Fired when the input operation has finished by pressing Enter or on focusout.\n\t\t *\n\t\t * @event\n\t\t * @allowPreventDefault\n\t\t * @public\n\t\t * @param {string} value The submitted value.\n\t\t * @param {boolean} valid Indicator if the value is in correct format pattern and in valid range.\n\t\t*/\n\t\tchange: {\n\t\t\tdetail: {\n\t\t\t\tvalue: {\n\t\t\t\t\ttype: String,\n\t\t\t\t},\n\t\t\t\tvalid: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Fired when the value of the component is changed at each key stroke.\n\t\t *\n\t\t * @event\n\t\t * @allowPreventDefault\n\t\t * @public\n\t\t * @param {string} value The submitted value.\n\t\t * @param {boolean} valid Indicator if the value is in correct format pattern and in valid range.\n\t\t*/\n\t\tinput: {\n\t\t\tdetail: {\n\t\t\t\tvalue: {\n\t\t\t\t\ttype: String,\n\t\t\t\t},\n\t\t\t\tvalid: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n};\n\n/**\n * @class\n *\n * \n *\n * The ui5-date-picker
component provides an input field with assigned calendar which opens on user action.\n * The ui5-date-picker
allows users to select a localized date using touch,\n * mouse, or keyboard input. It consists of two parts: the date input field and the\n * date picker.\n *\n * Usage
\n *\n * The user can enter a date by:\n * \n * - Using the calendar that opens in a popup
\n * - Typing it in directly in the input field
\n *
\n *
\n * When the user makes an entry and presses the enter key, the calendar shows the corresponding date.\n * When the user directly triggers the calendar display, the actual date is displayed.\n *\n * Formatting
\n *\n * If a date is entered by typing it into\n * the input field, it must fit to the used date format.\n *
\n * Supported format options are pattern-based on Unicode LDML Date Format notation.\n * For more information, see UTS #35: Unicode Locale Data Markup Language.\n *
\n * For example, if the format-pattern
is \"yyyy-MM-dd\",\n * a valid value string is \"2015-07-30\" and the same is displayed in the input.\n *\n * Keyboard Handling
\n * The ui5-date-picker
provides advanced keyboard handling.\n * If the ui5-date-picker
is focused,\n * you can open or close the drop-down by pressing F4
, ALT+UP
or ALT+DOWN
keys.\n * Once the drop-down is opened, you can use the UP
, DOWN
, LEFT
, RIGHT
arrow keys\n * to navigate through the dates and select one by pressing the Space
or Enter
keys. Moreover you can\n * use TAB to reach the buttons for changing month and year.\n *
\n *\n * If the ui5-date-picker
input field is focused and its corresponding picker dialog is not opened,\n * then users can increment or decrement the date referenced by dateValue
property\n * by using the following shortcuts:\n *
\n * \n * - [PAGEDOWN] - Decrements the corresponding day of the month by one
\n * - [SHIFT] + [PAGEDOWN] - Decrements the corresponding month by one
\n * - [SHIFT] + [CTRL] + [PAGEDOWN] - Decrements the corresponding year by one
\n * - [PAGEUP] - Increments the corresponding day of the month by one
\n * - [SHIFT] + [PAGEUP] - Increments the corresponding month by one
\n * - [SHIFT] + [CTRL] + [PAGEUP] - Increments the corresponding year by one
\n *
\n *\n * Calendar types
\n * The component supports several calendar types - Gregorian, Buddhist, Islamic, Japanese and Persian.\n * By default the Gregorian Calendar is used. In order to use the Buddhist, Islamic, Japanese or Persian calendar,\n * you need to set the primaryCalendarType
property and import one or more of the following modules:\n *
\n *\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Buddhist.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Islamic.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Japanese.js\";
\n *
\n * import \"@ui5/webcomponents-localization/dist/features/calendar/Persian.js\";
\n *
\n *\n * Or, you can use the global configuration and set the calendarType
key:\n *
\n * <script data-id=\"sap-ui-config\" type=\"application/json\">\n * {\n *\t\"calendarType\": \"Japanese\"\n * }\n * </script>
\n *\n * ES6 Module Import
\n *\n * import \"@ui5/webcomponents/dist/DatePicker\";
\n *\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.main.DatePicker\n * @extends DateComponentBase\n * @tagname ui5-date-picker\n * @public\n */\nclass DatePicker extends DateComponentBase {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get template() {\n\t\treturn DatePickerTemplate;\n\t}\n\n\tstatic get staticAreaTemplate() {\n\t\treturn DatePickerPopoverTemplate;\n\t}\n\n\tstatic get styles() {\n\t\treturn datePickerCss;\n\t}\n\n\tstatic get staticAreaStyles() {\n\t\treturn [ResponsivePopoverCommonCss, datePickerPopoverCss];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.FormSupport = undefined;\n\t}\n\n\t/**\n\t * @protected\n\t */\n\tonResponsivePopoverAfterClose() {\n\t\tthis._isPickerOpen = false;\n\t\tif (isPhone()) {\n\t\t\tthis.blur(); // close device's keyboard and prevent further typing\n\t\t} else {\n\t\t\tthis._getInput().focus();\n\t\t}\n\t}\n\n\tonBeforeRendering() {\n\t\tthis.FormSupport = getFeature(\"FormSupport\");\n\n\t\t[\"minDate\", \"maxDate\"].forEach(prop => {\n\t\t\tif (this[prop] && !this.isValid(this[prop])) {\n\t\t\t\tconsole.warn(`Invalid value for property \"${prop}\": ${this[prop]} is not compatible with the configured format pattern: \"${this._displayFormat}\"`); // eslint-disable-line\n\t\t\t}\n\t\t});\n\n\t\tconst FormSupport = getFeature(\"FormSupport\");\n\t\tif (FormSupport) {\n\t\t\tFormSupport.syncNativeHiddenInput(this);\n\t\t} else if (this.name) {\n\t\t\tconsole.warn(`In order for the \"name\" property to have effect, you should also: import \"@ui5/webcomponents/dist/features/InputElementsFormSupport.js\";`); // eslint-disable-line\n\t\t}\n\n\t\tthis.value = this.normalizeValue(this.value) || this.value;\n\t\tthis.liveValue = this.value;\n\t}\n\n\t/**\n\t * Override in derivatives to change calendar selection mode\n\t * @returns {string}\n\t * @protected\n\t */\n\tget _calendarSelectionMode() {\n\t\treturn \"Single\";\n\t}\n\n\t/**\n\t * Used to provide a timestamp to the Calendar (to focus it to a relevant date when open) based on the component's state\n\t * Override in derivatives to provide the calendar a timestamp based on their properties\n\t * By default focus the calendar on the selected date if set, or the current day otherwise\n\t * @protected\n\t */\n\tget _calendarTimestamp() {\n\t\tif (this.value && this._checkValueValidity(this.value)) {\n\t\t\tconst millisecondsUTC = this.dateValueUTC.getTime();\n\t\t\treturn getRoundedTimestamp(millisecondsUTC);\n\t\t}\n\n\t\treturn getTodayUTCTimestamp(this._primaryCalendarType);\n\t}\n\n\t/**\n\t * Used to provide selectedDates to the calendar based on the component's state\n\t * Override in derivatives to provide different rules for setting the calendar's selected dates\n\t * @protected\n\t */\n\tget _calendarSelectedDates() {\n\t\tif (this.value && this._checkValueValidity(this.value)) {\n\t\t\treturn [this.value];\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t_onkeydown(event) {\n\t\tif (isShow(event)) {\n\t\t\tevent.preventDefault(); // Prevent scroll on Alt/Option + Arrow Up/Down\n\t\t\tif (this.isOpen()) {\n\t\t\t\tif (!isF4(event)) {\n\t\t\t\t\tthis._toggleAndFocusInput();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._toggleAndFocusInput();\n\t\t\t}\n\t\t}\n\n\t\tif (this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isEnter(event)) {\n\t\t\tif (this.FormSupport) {\n\t\t\t\tthis.FormSupport.triggerFormSubmit(this);\n\t\t\t}\n\t\t} else if (isPageUpShiftCtrl(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(1, \"year\");\n\t\t} else if (isPageUpShift(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(1, \"month\");\n\t\t} else if (isPageUp(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(1, \"day\");\n\t\t} else if (isPageDownShiftCtrl(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(-1, \"year\");\n\t\t} else if (isPageDownShift(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(-1, \"month\");\n\t\t} else if (isPageDown(event)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._modifyDateValue(-1, \"day\");\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param amount\n\t * @param unit\n\t * @protected\n\t */\n\t_modifyDateValue(amount, unit) {\n\t\tif (!this.dateValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst modifiedDate = modifyDateBy(CalendarDate.fromLocalJSDate(this.dateValue), amount, unit, this._minDate, this._maxDate);\n\t\tconst newValue = this.formatValue(modifiedDate.toUTCJSDate());\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\t}\n\n\t_updateValueAndFireEvents(value, normalizeValue, events, updateValue = true) {\n\t\tconst valid = this._checkValueValidity(value);\n\n\t\tif (valid && normalizeValue) {\n\t\t\tvalue = this.normalizeValue(value); // transform valid values (in any format) to the correct format\n\t\t}\n\n\t\tlet executeEvent = true;\n\t\tthis.liveValue = value;\n\n\t\tevents.forEach(event => {\n\t\t\tif (!this.fireEvent(event, { value, valid }, true)) {\n\t\t\t\texecuteEvent = false;\n\t\t\t}\n\t\t});\n\n\t\tif (!executeEvent) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (updateValue) {\n\t\t\tthis._getInput().getInputDOMRef().then(innnerInput => {\n\t\t\t\tinnnerInput.value = value;\n\t\t\t});\n\t\t\tthis.value = value;\n\t\t\tthis._updateValueState(); // Change the value state to Error/None, but only if needed\n\t\t}\n\t}\n\n\t_updateValueState() {\n\t\tconst isValid = this._checkValueValidity(this.value);\n\t\tif (!isValid) { // If not valid - always set Error regardless of the current value state\n\t\t\tthis.valueState = ValueState.Error;\n\t\t} else if (isValid && this.valueState === ValueState.Error) { // However if valid, change only Error (but not the others) to None\n\t\t\tthis.valueState = ValueState.None;\n\t\t}\n\t}\n\n\t_toggleAndFocusInput() {\n\t\tthis.togglePicker();\n\t\tthis._getInput().focus();\n\t}\n\n\t_getInput() {\n\t\treturn this.shadowRoot.querySelector(\"[ui5-input]\");\n\t}\n\n\t/**\n\t * The ui5-input \"submit\" event handler - fire change event when the user presses enter\n\t * @protected\n\t */\n\t_onInputSubmit(event) {}\n\n\t/**\n\t * The ui5-input \"change\" event handler - fire change event when the user focuses out of the input\n\t * @protected\n\t */\n\t_onInputChange(event) {\n\t\tthis._updateValueAndFireEvents(event.target.value, true, [\"change\", \"value-changed\"]);\n\t}\n\n\t/**\n\t * The ui5-input \"input\" event handler - fire input even when the user types\n\t * @protected\n\t */\n\tasync _onInputInput(event) {\n\t\tthis._updateValueAndFireEvents(event.target.value, false, [\"input\"], false);\n\t}\n\n\t/**\n\t * @protected\n\t */\n\t_checkValueValidity(value) {\n\t\tif (value === \"\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn this.isValid(value) && this.isInValidRange(value);\n\t}\n\n\t_click(event) {\n\t\tif (isPhone()) {\n\t\t\tthis.responsivePopover.showAt(this);\n\t\t\tevent.preventDefault(); // prevent immediate selection of any item\n\t\t}\n\t}\n\n\t/**\n\t * Checks if a value is valid against the current date format of the DatePicker.\n\t * @param {string} value A value to be tested against the current date format\n\t * @returns {boolean}\n\t * @public\n\t */\n\tisValid(value = \"\") {\n\t\tif (value === \"\") {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn !!this.getFormat().parse(value);\n\t}\n\n\t/**\n\t * Checks if a date is between the minimum and maximum date.\n\t * @param {string} value A value to be checked\n\t * @returns {boolean}\n\t * @public\n\t */\n\tisInValidRange(value = \"\") {\n\t\tif (value === \"\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst calendarDate = this._getCalendarDateFromString(value);\n\t\treturn calendarDate.valueOf() >= this._minDate.valueOf() && calendarDate.valueOf() <= this._maxDate.valueOf();\n\t}\n\n\t/**\n\t * The parser understands many formats, but we need one format\n\t * @protected\n\t */\n\tnormalizeValue(value) {\n\t\tif (value === \"\") {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn this.getFormat().format(this.getFormat().parse(value, true), true); // it is important to both parse and format the date as UTC\n\t}\n\n\tget _displayFormat() {\n\t\treturn this.getFormat().oFormatOptions.pattern;\n\t}\n\n\t/**\n\t * @protected\n\t */\n\tget _placeholder() {\n\t\treturn this.placeholder !== undefined ? this.placeholder : this._displayFormat;\n\t}\n\n\tget _headerTitleText() {\n\t\treturn DatePicker.i18nBundle.getText(INPUT_SUGGESTIONS_TITLE);\n\t}\n\n\tget phone() {\n\t\treturn isPhone();\n\t}\n\n\tget showHeader() {\n\t\treturn this.phone;\n\t}\n\n\tget showFooter() {\n\t\treturn this.phone;\n\t}\n\n\tget accInfo() {\n\t\treturn {\n\t\t\t\"ariaRoledescription\": this.dateAriaDescription,\n\t\t\t\"ariaHasPopup\": HasPopup.Grid,\n\t\t\t\"ariaAutoComplete\": \"none\",\n\t\t\t\"ariaRequired\": this.required,\n\t\t\t\"ariaLabel\": getEffectiveAriaLabelText(this),\n\t\t};\n\t}\n\n\tget openIconTitle() {\n\t\treturn DatePicker.i18nBundle.getText(DATEPICKER_OPEN_ICON_TITLE);\n\t}\n\n\tget openIconName() {\n\t\treturn \"appointment-2\";\n\t}\n\n\tget dateAriaDescription() {\n\t\treturn DatePicker.i18nBundle.getText(DATEPICKER_DATE_DESCRIPTION);\n\t}\n\n\t/**\n\t * Defines whether the dialog on mobile should have header\n\t * @private\n\t */\n\tget _shouldHideHeader() {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Defines whether the value help icon is hidden\n\t * @private\n\t */\n\tget _ariaHidden() {\n\t\treturn isDesktop();\n\t}\n\n\tasync _respPopover() {\n\t\tconst staticAreaItem = await this.getStaticAreaItemDomRef();\n\t\treturn staticAreaItem.querySelector(\"[ui5-responsive-popover]\");\n\t}\n\n\t_canOpenPicker() {\n\t\treturn !this.disabled && !this.readonly;\n\t}\n\n\t/**\n\t * The user selected a new date in the calendar\n\t * @param event\n\t * @protected\n\t */\n\tonSelectedDatesChange(event) {\n\t\tevent.preventDefault();\n\t\tconst newValue = event.detail.values && event.detail.values[0];\n\t\tthis._updateValueAndFireEvents(newValue, true, [\"change\", \"value-changed\"]);\n\n\t\tthis.closePicker();\n\t}\n\n\t/**\n\t * The user clicked the \"month\" button in the header\n\t */\n\tonHeaderShowMonthPress() {\n\t\tthis._calendarCurrentPicker = \"month\";\n\t}\n\n\t/**\n\t * The user clicked the \"year\" button in the header\n\t */\n\tonHeaderShowYearPress() {\n\t\tthis._calendarCurrentPicker = \"year\";\n\t}\n\n\t/**\n\t * Formats a Java Script date object into a string representing a locale date\n\t * according to the formatPattern
property of the DatePicker instance\n\t * @param {object} date A Java Script date object to be formatted as string\n\t * @returns {string} The date as string\n\t * @public\n\t */\n\tformatValue(date) {\n\t\treturn this.getFormat().format(date);\n\t}\n\n\t/**\n\t * Closes the picker.\n\t * @public\n\t */\n\tclosePicker() {\n\t\tthis.responsivePopover.close();\n\t}\n\n\t/**\n\t * Opens the picker.\n\t * @public\n\t * @async\n\t * @returns {Promise} Resolves when the picker is open\n\t */\n\tasync openPicker() {\n\t\tthis._isPickerOpen = true;\n\t\tthis._calendarCurrentPicker = \"day\";\n\t\tthis.responsivePopover = await this._respPopover();\n\n\t\tthis.responsivePopover.showAt(this);\n\t}\n\n\ttogglePicker() {\n\t\tif (this.isOpen()) {\n\t\t\tthis.closePicker();\n\t\t} else if (this._canOpenPicker()) {\n\t\t\tthis.openPicker();\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the picker is open.\n\t * @returns {boolean} true if the picker is open, false otherwise\n\t * @public\n\t */\n\tisOpen() {\n\t\treturn !!this._isPickerOpen;\n\t}\n\n\t/**\n\t * Currently selected date represented as a Local JavaScript Date instance.\n\t *\n\t * @readonly\n\t * @type { Date }\n\t * @public\n\t */\n\tget dateValue() {\n\t\treturn this.liveValue ? this.getFormat().parse(this.liveValue) : this.getFormat().parse(this.value);\n\t}\n\n\tget dateValueUTC() {\n\t\treturn this.liveValue ? this.getFormat().parse(this.liveValue, true) : this.getFormat().parse(this.value);\n\t}\n\n\tget styles() {\n\t\treturn {\n\t\t\tmain: {\n\t\t\t\twidth: \"100%\",\n\t\t\t},\n\t\t};\n\t}\n\n\tget type() {\n\t\treturn InputType.Text;\n\t}\n\n\tstatic get dependencies() {\n\t\treturn [\n\t\t\tIcon,\n\t\t\tResponsivePopover,\n\t\t\tCalendar,\n\t\t\tCalendarDateComponent.default,\n\t\t\tInput,\n\t\t\tButton,\n\t\t];\n\t}\n}\n\nDatePicker.define();\n\nexport default DatePicker;\n","/**\n * @module ol/ImageState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=ImageState.js.map","/**\n * @module ol/util\n */\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n return /** @type {?} */ ((function () {\n throw new Error('Unimplemented abstract method.');\n })());\n}\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nvar uidCounter_ = 0;\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport var VERSION = '6.15.1';\n//# sourceMappingURL=util.js.map","/**\n * @module ol/size\n */\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n }\n else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n }\n else {\n opt_size[0] = size;\n opt_size[1] = size;\n }\n return opt_size;\n }\n}\n//# sourceMappingURL=size.js.map","/**\n * @module ol/style/Image\n */\nimport { abstract } from '../util.js';\nimport { toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {number} opacity Opacity.\n * @property {boolean} rotateWithView If the image should get rotated with the view.\n * @property {number} rotation Rotation.\n * @property {number|import(\"../size.js\").Size} scale Scale.\n * @property {Array} displacement Displacement.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} declutterMode Declutter mode: `declutter`, `obstacle`, 'none */\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nvar ImageStyle = /** @class */ (function () {\n /**\n * @param {Options} options Options.\n */\n function ImageStyle(options) {\n /**\n * @private\n * @type {number}\n */\n this.opacity_ = options.opacity;\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ = options.rotateWithView;\n /**\n * @private\n * @type {number}\n */\n this.rotation_ = options.rotation;\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.scale_ = options.scale;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale);\n /**\n * @private\n * @type {Array}\n */\n this.displacement_ = options.displacement;\n /**\n * @private\n * @type {\"declutter\"|\"obstacle\"|\"none\"|undefined}\n */\n this.declutterMode_ = options.declutterMode;\n }\n /**\n * Clones the style.\n * @return {ImageStyle} The cloned style.\n * @api\n */\n ImageStyle.prototype.clone = function () {\n var scale = this.getScale();\n return new ImageStyle({\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n };\n /**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\n ImageStyle.prototype.getOpacity = function () {\n return this.opacity_;\n };\n /**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\n ImageStyle.prototype.getRotateWithView = function () {\n return this.rotateWithView_;\n };\n /**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\n ImageStyle.prototype.getRotation = function () {\n return this.rotation_;\n };\n /**\n * Get the symbolizer scale.\n * @return {number|import(\"../size.js\").Size} Scale.\n * @api\n */\n ImageStyle.prototype.getScale = function () {\n return this.scale_;\n };\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n ImageStyle.prototype.getScaleArray = function () {\n return this.scaleArray_;\n };\n /**\n * Get the displacement of the shape\n * @return {Array} Shape's center displacement\n * @api\n */\n ImageStyle.prototype.getDisplacement = function () {\n return this.displacement_;\n };\n /**\n * Get the declutter mode of the shape\n * @return {\"declutter\"|\"obstacle\"|\"none\"|undefined} Shape's declutter mode\n * @api\n */\n ImageStyle.prototype.getDeclutterMode = function () {\n return this.declutterMode_;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array} Anchor.\n */\n ImageStyle.prototype.getAnchor = function () {\n return abstract();\n };\n /**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getImage = function (pixelRatio) {\n return abstract();\n };\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getHitDetectionImage = function () {\n return abstract();\n };\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n ImageStyle.prototype.getPixelRatio = function (pixelRatio) {\n return 1;\n };\n /**\n * @abstract\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n ImageStyle.prototype.getImageState = function () {\n return abstract();\n };\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Image size.\n */\n ImageStyle.prototype.getImageSize = function () {\n return abstract();\n };\n /**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array} Origin.\n */\n ImageStyle.prototype.getOrigin = function () {\n return abstract();\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {import(\"../size.js\").Size} Size.\n */\n ImageStyle.prototype.getSize = function () {\n return abstract();\n };\n /**\n * Set the displacement.\n *\n * @param {Array} displacement Displacement.\n * @api\n */\n ImageStyle.prototype.setDisplacement = function (displacement) {\n this.displacement_ = displacement;\n };\n /**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\n ImageStyle.prototype.setOpacity = function (opacity) {\n this.opacity_ = opacity;\n };\n /**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n ImageStyle.prototype.setRotateWithView = function (rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n };\n /**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\n ImageStyle.prototype.setRotation = function (rotation) {\n this.rotation_ = rotation;\n };\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size} scale Scale.\n * @api\n */\n ImageStyle.prototype.setScale = function (scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale);\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.listenImageChange = function (listener) {\n abstract();\n };\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n ImageStyle.prototype.load = function () {\n abstract();\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.unlistenImageChange = function (listener) {\n abstract();\n };\n return ImageStyle;\n}());\nexport default ImageStyle;\n//# sourceMappingURL=Image.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/AssertionError\n */\nimport { VERSION } from './util.js';\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nvar AssertionError = /** @class */ (function (_super) {\n __extends(AssertionError, _super);\n /**\n * @param {number} code Error code.\n */\n function AssertionError(code) {\n var _this = this;\n var path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n var message = 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n _this = _super.call(this, message) || this;\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n _this.code = code;\n /**\n * @type {string}\n */\n _this.name = 'AssertionError';\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n _this.message = message;\n return _this;\n }\n return AssertionError;\n}(Error));\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n//# sourceMappingURL=asserts.js.map","/**\n * @module ol/math\n */\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport var cosh = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n }\n else {\n // … else, use the reference implementation of MDN:\n cosh = function (x) {\n var y = /** @type {Math} */ (Math).exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n})();\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport var log2 = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var log2;\n if ('log2' in Math) {\n // The environment supports the native Math.log2 function, use it…\n log2 = Math.log2;\n }\n else {\n // … else, use the reference implementation of MDN:\n log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n }\n return log2;\n})();\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n }\n else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n var n = mat.length;\n for (var i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n var maxRow = i;\n var maxEl = Math.abs(mat[i][i]);\n for (var r = i + 1; r < n; r++) {\n var absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n // Swap max row with i-th (current) row\n var tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (var j = i + 1; j < n; j++) {\n var coef = -mat[j][i] / mat[i][i];\n for (var k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n }\n else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n // Solve Ax=b for upper triangular matrix A (mat)\n var x = new Array(n);\n for (var l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (var m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n}\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n var factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n//# sourceMappingURL=math.js.map","/**\n * @module ol/color\n */\nimport { assert } from './asserts.js';\nimport { clamp } from './math.js';\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nvar HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nvar NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n }\n else {\n return toString(color);\n }\n}\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n var el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n var rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n }\n else {\n return '';\n }\n}\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport var fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n /**\n * @const\n * @type {number}\n */\n var MAX_CACHE_SIZE = 1024;\n /**\n * @type {Object}\n */\n var cache = {};\n /**\n * @type {number}\n */\n var cacheSize = 0;\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n var color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n }\n else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n var i = 0;\n for (var key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n });\n})();\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n }\n else {\n return fromString(color);\n }\n}\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n var r, g, b, a, color;\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n var n = s.length - 1; // number of hex digits\n var d = // number of digits per channel\n void 0; // number of digits per channel\n if (n <= 4) {\n d = 1;\n }\n else {\n d = 2;\n }\n var hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n }\n else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n }\n else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n }\n else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n }\n else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n var r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n var g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n var b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n var a = color[3] === undefined ? 1 : Math.round(color[3] * 100) / 100;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0);\n}\n//# sourceMappingURL=color.js.map","/**\n * @module ol/colorlike\n */\nimport { toString } from './color.js';\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n }\n else {\n return color;\n }\n}\n//# sourceMappingURL=colorlike.js.map","/**\n * @module ol/has\n */\nvar ua = typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport var FIREFOX = ua.indexOf('firefox') !== -1;\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport var SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n/**\n * https://bugs.webkit.org/show_bug.cgi?id=237906\n * @type {boolean}\n */\nexport var SAFARI_BUG_237906 = SAFARI &&\n !!(ua.indexOf('version/15.4') >= 0 ||\n ua.match(/cpu (os|iphone os) 15_4 like mac os x/));\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport var WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport var MAC = ua.indexOf('macintosh') !== -1;\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport var DEVICE_PIXEL_RATIO = typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport var WORKER_OFFSCREEN_CANVAS = typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport var IMAGE_DECODE = typeof Image !== 'undefined' && Image.prototype.decode;\n/**\n * @type {boolean}\n */\nexport var PASSIVE_EVENT_LISTENERS = (function () {\n var passive = false;\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n }\n catch (error) {\n // passive not supported\n }\n return passive;\n})();\n//# sourceMappingURL=has.js.map","import { WORKER_OFFSCREEN_CANVAS } from './has.js';\n/**\n * @module ol/dom\n */\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [opt_width] Canvas width.\n * @param {number} [opt_height] Canvas height.\n * @param {Array} [opt_canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [opt_Context2DSettings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height, opt_canvasPool, opt_Context2DSettings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n var canvas;\n if (opt_canvasPool && opt_canvasPool.length) {\n canvas = opt_canvasPool.shift();\n }\n else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(opt_width || 300, opt_height || 300);\n }\n else {\n canvas = document.createElement('canvas');\n }\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d', opt_Context2DSettings));\n}\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D} context Context.\n */\nexport function releaseCanvas(context) {\n var canvas = context.canvas;\n canvas.width = 1;\n canvas.height = 1;\n context.clearRect(0, 0, 1, 1);\n}\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n return width;\n}\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n var height = element.offsetHeight;\n var style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n return height;\n}\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n var parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n/**\n * @param {Node} node The node to remove.\n * @return {Node|null} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n var oldChildren = node.childNodes;\n for (var i = 0; true; ++i) {\n var oldChild = oldChildren[i];\n var newChild = children[i];\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/events/Event\n */\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nvar BaseEvent = /** @class */ (function () {\n /**\n * @param {string} type Type.\n */\n function BaseEvent(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n BaseEvent.prototype.preventDefault = function () {\n this.defaultPrevented = true;\n };\n /**\n * Stop event propagation.\n * @api\n */\n BaseEvent.prototype.stopPropagation = function () {\n this.propagationStopped = true;\n };\n return BaseEvent;\n}());\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\nexport default BaseEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/ObjectEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n/**\n * @typedef {'propertychange'} Types\n */\n//# sourceMappingURL=ObjectEventType.js.map","/**\n * @module ol/Disposable\n */\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nvar Disposable = /** @class */ (function () {\n function Disposable() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n /**\n * Clean up.\n */\n Disposable.prototype.dispose = function () {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n };\n /**\n * Extension point for disposable objects.\n * @protected\n */\n Disposable.prototype.disposeInternal = function () { };\n return Disposable;\n}());\nexport default Disposable;\n//# sourceMappingURL=Disposable.js.map","/**\n * @module ol/array\n */\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [opt_comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n var mid, cmp;\n var comparator = opt_comparator || numberSafeCompareFunction;\n var low = 0;\n var high = haystack.length;\n var found = false;\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n }\n else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n /* Key not found. */\n return found ? low : ~low;\n}\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n var n = arr.length;\n if (arr[0] <= target) {\n return 0;\n }\n else if (target <= arr[n - 1]) {\n return n - 1;\n }\n else {\n var i = void 0;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n }\n else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n }\n else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n else if (arr[i] < target) {\n if (typeof direction === 'function') {\n if (direction(target, arr[i - 1], arr[i]) > 0) {\n return i - 1;\n }\n else {\n return i;\n }\n }\n else if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n var tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n var extension = Array.isArray(data) ? data : [data];\n var length = extension.length;\n for (var i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n var i = arr.indexOf(obj);\n var found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n/**\n * @param {Array} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n var length = arr.length >>> 0;\n var value;\n for (var i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n var len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (var i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n var length = arr.length;\n var tmp = Array(arr.length);\n var i;\n for (i = 0; i < length; i++) {\n tmp[i] = { index: i, value: arr[i] };\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n var index;\n var found = !arr.every(function (el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [opt_func] Comparison function.\n * @param {boolean} [opt_strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n var compare = opt_func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n var res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (opt_strict && res === 0));\n });\n}\n//# sourceMappingURL=array.js.map","/**\n * @module ol/functions\n */\nimport { equals as arrayEquals } from './array.js';\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() { }\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n var called = false;\n /** @type {ReturnType} */\n var lastResult;\n /** @type {Array} */\n var lastArgs;\n var lastThis;\n return function () {\n var nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n var value;\n try {\n value = getter();\n }\n catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n//# sourceMappingURL=functions.js.map","/**\n * @module ol/obj\n */\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport var assign = typeof Object.assign === 'function'\n ? Object.assign\n : function (target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n var output = Object(target);\n for (var i = 1, ii = arguments.length; i < ii; ++i) {\n var source = arguments[i];\n if (source !== undefined && source !== null) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (var property in object) {\n delete object[property];\n }\n}\n/**\n * Polyfill for Object.values(). Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} object The object from which to get the values.\n * @return {!Array} The property values.\n * @template K,V\n */\nexport var getValues = typeof Object.values === 'function'\n ? Object.values\n : function (object) {\n var values = [];\n for (var property in object) {\n values.push(object[property]);\n }\n return values;\n };\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n var property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n//# sourceMappingURL=obj.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport { VOID } from '../functions.js';\nimport { clear } from '../obj.js';\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nvar Target = /** @class */ (function (_super) {\n __extends(Target, _super);\n /**\n * @param {*} [opt_target] Default event target for dispatched events.\n */\n function Target(opt_target) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {*}\n */\n _this.eventTarget_ = opt_target;\n /**\n * @private\n * @type {Object}\n */\n _this.pendingRemovals_ = null;\n /**\n * @private\n * @type {Object}\n */\n _this.dispatching_ = null;\n /**\n * @private\n * @type {Object>}\n */\n _this.listeners_ = null;\n return _this;\n }\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.addEventListener = function (type, listener) {\n if (!type || !listener) {\n return;\n }\n var listeners = this.listeners_ || (this.listeners_ = {});\n var listenersForType = listeners[type] || (listeners[type] = []);\n if (listenersForType.indexOf(listener) === -1) {\n listenersForType.push(listener);\n }\n };\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n Target.prototype.dispatchEvent = function (event) {\n var isString = typeof event === 'string';\n var type = isString ? event : event.type;\n var listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n var evt = isString ? new Event(event) : /** @type {Event} */ (event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n var dispatching = this.dispatching_ || (this.dispatching_ = {});\n var pendingRemovals = this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n var propagate;\n for (var i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (listeners[i]).handleEvent(evt);\n }\n else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (listeners[i]).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n var pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n };\n /**\n * Clean up.\n */\n Target.prototype.disposeInternal = function () {\n this.listeners_ && clear(this.listeners_);\n };\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n Target.prototype.getListeners = function (type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n };\n /**\n * @param {string} [opt_type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n Target.prototype.hasListener = function (opt_type) {\n if (!this.listeners_) {\n return false;\n }\n return opt_type\n ? opt_type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n };\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.removeEventListener = function (type, listener) {\n var listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n var index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n }\n else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n };\n return Target;\n}(Disposable));\nexport default Target;\n//# sourceMappingURL=Target.js.map","/**\n * @module ol/events/EventType\n */\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/events\n */\nimport { clear } from './obj.js';\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [opt_once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n if (opt_this && opt_this !== target) {\n listener = listener.bind(opt_this);\n }\n if (opt_once) {\n var originalListener_1 = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener_1.apply(this, arguments);\n };\n }\n var eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n//# sourceMappingURL=events.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { listen, listenOnce, unlistenByKey } from './events.js';\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nvar Observable = /** @class */ (function (_super) {\n __extends(Observable, _super);\n function Observable() {\n var _this = _super.call(this) || this;\n _this.on =\n /** @type {ObservableOnSignature} */ (_this.onInternal);\n _this.once =\n /** @type {ObservableOnSignature} */ (_this.onceInternal);\n _this.un = /** @type {ObservableOnSignature} */ (_this.unInternal);\n /**\n * @private\n * @type {number}\n */\n _this.revision_ = 0;\n return _this;\n }\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n Observable.prototype.changed = function () {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n Observable.prototype.getRevision = function () {\n return this.revision_;\n };\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n Observable.prototype.onInternal = function (type, listener) {\n if (Array.isArray(type)) {\n var len = type.length;\n var keys = new Array(len);\n for (var i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n }\n else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n };\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n Observable.prototype.onceInternal = function (type, listener) {\n var key;\n if (Array.isArray(type)) {\n var len = type.length;\n key = new Array(len);\n for (var i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n }\n else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n };\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n Observable.prototype.unInternal = function (type, listener) {\n var key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n }\n else if (Array.isArray(type)) {\n for (var i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n }\n else {\n this.removeEventListener(type, listener);\n }\n };\n return Observable;\n}(EventTarget));\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (var i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n }\n else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\nexport default Observable;\n//# sourceMappingURL=Observable.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport { assign, isEmpty } from './obj.js';\nimport { getUid } from './util.js';\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nvar ObjectEvent = /** @class */ (function (_super) {\n __extends(ObjectEvent, _super);\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n function ObjectEvent(type, key, oldValue) {\n var _this = _super.call(this, type) || this;\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n _this.key = key;\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n _this.oldValue = oldValue;\n return _this;\n }\n return ObjectEvent;\n}(Event));\nexport { ObjectEvent };\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nvar BaseObject = /** @class */ (function (_super) {\n __extends(BaseObject, _super);\n /**\n * @param {Object} [opt_values] An object with key-value pairs.\n */\n function BaseObject(opt_values) {\n var _this = _super.call(this) || this;\n /***\n * @type {ObjectOnSignature}\n */\n _this.on;\n /***\n * @type {ObjectOnSignature}\n */\n _this.once;\n /***\n * @type {ObjectOnSignature}\n */\n _this.un;\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(_this);\n /**\n * @private\n * @type {Object}\n */\n _this.values_ = null;\n if (opt_values !== undefined) {\n _this.setProperties(opt_values);\n }\n return _this;\n }\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n BaseObject.prototype.get = function (key) {\n var value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n };\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n BaseObject.prototype.getKeys = function () {\n return (this.values_ && Object.keys(this.values_)) || [];\n };\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n BaseObject.prototype.getProperties = function () {\n return (this.values_ && assign({}, this.values_)) || {};\n };\n /**\n * @return {boolean} The object has properties.\n */\n BaseObject.prototype.hasProperties = function () {\n return !!this.values_;\n };\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n BaseObject.prototype.notify = function (key, oldValue) {\n var eventType;\n eventType = \"change:\".concat(key);\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = ObjectEventType.PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n };\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n BaseObject.prototype.addChangeListener = function (key, listener) {\n this.addEventListener(\"change:\".concat(key), listener);\n };\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n BaseObject.prototype.removeChangeListener = function (key, listener) {\n this.removeEventListener(\"change:\".concat(key), listener);\n };\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n BaseObject.prototype.set = function (key, value, opt_silent) {\n var values = this.values_ || (this.values_ = {});\n if (opt_silent) {\n values[key] = value;\n }\n else {\n var oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n };\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n BaseObject.prototype.setProperties = function (values, opt_silent) {\n for (var key in values) {\n this.set(key, values[key], opt_silent);\n }\n };\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n BaseObject.prototype.applyProperties = function (source) {\n if (!source.values_) {\n return;\n }\n assign(this.values_ || (this.values_ = {}), source.values_);\n };\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [opt_silent] Unset without triggering an event.\n * @api\n */\n BaseObject.prototype.unset = function (key, opt_silent) {\n if (this.values_ && key in this.values_) {\n var oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n };\n return BaseObject;\n}(Observable));\nexport default BaseObject;\n//# sourceMappingURL=Object.js.map","/**\n * @module ol/css\n */\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_HIDDEN = 'ol-hidden';\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_SELECTABLE = 'ol-selectable';\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSELECTABLE = 'ol-unselectable';\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSUPPORTED = 'ol-unsupported';\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_CONTROL = 'ol-control';\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_COLLAPSED = 'ol-collapsed';\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nvar fontRegEx = new RegExp([\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n].join(''), 'i');\nvar fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport var getFontParameters = function (fontSpec) {\n var match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n var style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (var i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n var value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n//# sourceMappingURL=css.js.map","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../has.js';\nimport { clear } from '../obj.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { getFontParameters } from '../css.js';\n/**\n * @typedef {'Circle' | 'Image' | 'LineString' | 'Polygon' | 'Text' | 'Default'} BuilderType\n */\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array} contextInstructions ContextInstructions.\n */\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n */\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {string} [textAlign] TextAlign.\n * @property {string} [justify] Justify.\n * @property {string} textBaseline TextBaseline.\n * @property {string} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array} [padding] Padding.\n */\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array} coordinates The array of all coordinates.\n * @property {!Object} [textStates] The text states (decluttering).\n * @property {!Object} [fillStates] The fill states (decluttering).\n * @property {!Object} [strokeStates] The stroke states (decluttering).\n */\n/**\n * @typedef {Object} DeclutterImageWithText\n */\n/**\n * @const\n * @type {string}\n */\nexport var defaultFont = '10px sans-serif';\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultFillStyle = '#000';\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport var defaultLineCap = 'round';\n/**\n * @const\n * @type {Array}\n */\nexport var defaultLineDash = [];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineDashOffset = 0;\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport var defaultLineJoin = 'round';\n/**\n * @const\n * @type {number}\n */\nexport var defaultMiterLimit = 10;\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultStrokeStyle = '#000';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextAlign = 'center';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextBaseline = 'middle';\n/**\n * @const\n * @type {Array}\n */\nexport var defaultPadding = [0, 0, 0, 0];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineWidth = 1;\n/**\n * @type {BaseObject}\n */\nexport var checkedFonts = new BaseObject();\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache~LRUCache#setSize cache.setSize()}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport var labelCache = new EventTarget();\nlabelCache.setSize = function () {\n console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar measureContext = null;\n/**\n * @type {string}\n */\nvar measureFont;\n/**\n * @type {!Object}\n */\nexport var textHeights = {};\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport var registerFont = (function () {\n var retries = 100;\n var size = '32px ';\n var referenceFonts = ['monospace', 'serif'];\n var len = referenceFonts.length;\n var text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n var interval, referenceWidth;\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n var available = true;\n for (var i = 0; i < len; ++i) {\n var referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(fontStyle + ' ' + fontWeight + ' ' + size + referenceFont, text);\n if (fontFamily != referenceFont) {\n var width = measureTextWidth(fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont, text);\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n function check() {\n var done = true;\n var fonts = checkedFonts.getKeys();\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n }\n else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n return function (fontSpec) {\n var font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n var families = font.families;\n for (var i = 0, ii = families.length; i < ii; ++i) {\n var family = families[i];\n var key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport var measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n var measureElement;\n return function (fontSpec) {\n var height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n var font = getFontParameters(fontSpec);\n var metrics = measureText(fontSpec, 'Žg');\n var lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n }\n else {\n if (!measureElement) {\n measureElement = document.createElement('div');\n measureElement.innerHTML = 'M';\n measureElement.style.minHeight = '0';\n measureElement.style.maxHeight = 'none';\n measureElement.style.height = 'auto';\n measureElement.style.padding = '0';\n measureElement.style.border = 'none';\n measureElement.style.position = 'absolute';\n measureElement.style.display = 'block';\n measureElement.style.left = '-99999px';\n }\n measureElement.style.font = fontSpec;\n document.body.appendChild(measureElement);\n height = measureElement.offsetHeight;\n document.body.removeChild(measureElement);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n var width = text\n .split('\\n')\n .reduce(function (prev, curr) { return Math.max(prev, measureTextWidth(font, curr)); }, 0);\n cache[text] = width;\n return width;\n}\n/**\n * @param {TextState} baseStyle Base style.\n * @param {Array} chunks Text chunks to measure.\n * @return {{width: number, height: number, widths: Array, heights: Array, lineWidths: Array}}} Text metrics.\n */\nexport function getTextDimensions(baseStyle, chunks) {\n var widths = [];\n var heights = [];\n var lineWidths = [];\n var width = 0;\n var lineWidth = 0;\n var height = 0;\n var lineHeight = 0;\n for (var i = 0, ii = chunks.length; i <= ii; i += 2) {\n var text = chunks[i];\n if (text === '\\n' || i === ii) {\n width = Math.max(width, lineWidth);\n lineWidths.push(lineWidth);\n lineWidth = 0;\n height += lineHeight;\n continue;\n }\n var font = chunks[i + 1] || baseStyle.font;\n var currentWidth = measureTextWidth(font, text);\n widths.push(currentWidth);\n lineWidth += currentWidth;\n var currentHeight = measureTextHeight(font);\n heights.push(currentHeight);\n lineHeight = Math.max(lineHeight, currentHeight);\n }\n return { width: width, height: height, widths: widths, heights: heights, lineWidths: lineWidths };\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(context, transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) {\n context.save();\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n if ( /** @type {*} */(labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n }\n else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, 0, 0, w, h);\n }\n else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale[0], h * scale[1]);\n }\n context.restore();\n}\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n var contextInstructions = label.contextInstructions;\n for (var i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(context, contextInstructions[i + 1]);\n }\n else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n//# sourceMappingURL=canvas.js.map","/**\n * @module ol/style/RegularShape\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { asColorLike } from '../colorlike.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { defaultFillStyle, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../render/canvas.js';\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] First radius of a star. Ignored if radius is set.\n * @property {number} [radius2] Second radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.\n * @property {Array} [displacement=[0,0]] Displacement of the shape\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} miterLimit MiterLimit.\n */\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nvar RegularShape = /** @class */ (function (_super) {\n __extends(RegularShape, _super);\n /**\n * @param {Options} options Options.\n */\n function RegularShape(options) {\n var _this = this;\n /**\n * @type {boolean}\n */\n var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n _this = _super.call(this, {\n opacity: 1,\n rotateWithView: rotateWithView,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n scale: options.scale !== undefined ? options.scale : 1,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n }) || this;\n /**\n * @private\n * @type {Object}\n */\n _this.canvas_ = undefined;\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n _this.hitDetectionCanvas_ = null;\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n _this.fill_ = options.fill !== undefined ? options.fill : null;\n /**\n * @private\n * @type {Array}\n */\n _this.origin_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.points_ = options.points;\n /**\n * @protected\n * @type {number}\n */\n _this.radius_ =\n options.radius !== undefined ? options.radius : options.radius1;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.radius2_ = options.radius2;\n /**\n * @private\n * @type {number}\n */\n _this.angle_ = options.angle !== undefined ? options.angle : 0;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n _this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.size_ = null;\n /**\n * @private\n * @type {RenderOptions}\n */\n _this.renderOptions_ = null;\n _this.render();\n return _this;\n }\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n */\n RegularShape.prototype.clone = function () {\n var scale = this.getScale();\n var style = new RegularShape({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n points: this.getPoints(),\n radius: this.getRadius(),\n radius2: this.getRadius2(),\n angle: this.getAngle(),\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n RegularShape.prototype.getAnchor = function () {\n var size = this.size_;\n if (!size) {\n return null;\n }\n var displacement = this.getDisplacement();\n return [size[0] / 2 - displacement[0], size[1] / 2 + displacement[1]];\n };\n /**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\n RegularShape.prototype.getAngle = function () {\n return this.angle_;\n };\n /**\n * Get the fill style for the shape.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n RegularShape.prototype.getFill = function () {\n return this.fill_;\n };\n /**\n * Set the fill style.\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n RegularShape.prototype.setFill = function (fill) {\n this.fill_ = fill;\n this.render();\n };\n /**\n * @return {HTMLCanvasElement} Image element.\n */\n RegularShape.prototype.getHitDetectionImage = function () {\n if (!this.hitDetectionCanvas_) {\n this.createHitDetectionCanvas_(this.renderOptions_);\n }\n return this.hitDetectionCanvas_;\n };\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n RegularShape.prototype.getImage = function (pixelRatio) {\n var image = this.canvas_[pixelRatio];\n if (!image) {\n var renderOptions = this.renderOptions_;\n var context = createCanvasContext2D(renderOptions.size * pixelRatio, renderOptions.size * pixelRatio);\n this.draw_(renderOptions, context, pixelRatio);\n image = context.canvas;\n this.canvas_[pixelRatio] = image;\n }\n return image;\n };\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n RegularShape.prototype.getPixelRatio = function (pixelRatio) {\n return pixelRatio;\n };\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n RegularShape.prototype.getImageSize = function () {\n return this.size_;\n };\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n RegularShape.prototype.getImageState = function () {\n return ImageState.LOADED;\n };\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n RegularShape.prototype.getOrigin = function () {\n return this.origin_;\n };\n /**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\n RegularShape.prototype.getPoints = function () {\n return this.points_;\n };\n /**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\n RegularShape.prototype.getRadius = function () {\n return this.radius_;\n };\n /**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\n RegularShape.prototype.getRadius2 = function () {\n return this.radius2_;\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @return {import(\"../size.js\").Size} Size.\n * @api\n */\n RegularShape.prototype.getSize = function () {\n return this.size_;\n };\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n RegularShape.prototype.getStroke = function () {\n return this.stroke_;\n };\n /**\n * Set the stroke style.\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n RegularShape.prototype.setStroke = function (stroke) {\n this.stroke_ = stroke;\n this.render();\n };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.listenImageChange = function (listener) { };\n /**\n * Load not yet loaded URI.\n */\n RegularShape.prototype.load = function () { };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.unlistenImageChange = function (listener) { };\n /**\n * Calculate additional canvas size needed for the miter.\n * @param {string} lineJoin Line join\n * @param {number} strokeWidth Stroke width\n * @param {number} miterLimit Miter limit\n * @return {number} Additional canvas size needed\n * @private\n */\n RegularShape.prototype.calculateLineJoinSize_ = function (lineJoin, strokeWidth, miterLimit) {\n if (strokeWidth === 0 ||\n this.points_ === Infinity ||\n (lineJoin !== 'bevel' && lineJoin !== 'miter')) {\n return strokeWidth;\n }\n // m | ^\n // i | |\\ .\n // t >| #\\\n // e | |\\ \\ .\n // r \\s\\\n // | \\t\\ . .\n // \\r\\ . .\n // | \\o\\ . . . . .\n // e \\k\\ . . . .\n // | \\e\\ . . . . .\n // d \\ \\ . . . .\n // | _ _a_ _\\# . . .\n // r1 / ` . .\n // | . .\n // b / . .\n // | . .\n // / r2 . .\n // | . .\n // / . .\n // |α . .\n // / . .\n // ° center\n var r1 = this.radius_;\n var r2 = this.radius2_ === undefined ? r1 : this.radius2_;\n if (r1 < r2) {\n var tmp = r1;\n r1 = r2;\n r2 = tmp;\n }\n var points = this.radius2_ === undefined ? this.points_ : this.points_ * 2;\n var alpha = (2 * Math.PI) / points;\n var a = r2 * Math.sin(alpha);\n var b = Math.sqrt(r2 * r2 - a * a);\n var d = r1 - b;\n var e = Math.sqrt(a * a + d * d);\n var miterRatio = e / a;\n if (lineJoin === 'miter' && miterRatio <= miterLimit) {\n return miterRatio * strokeWidth;\n }\n // Calculate the distnce from center to the stroke corner where\n // it was cut short because of the miter limit.\n // l\n // ----+---- <= distance from center to here is maxr\n // /####|k ##\\\n // /#####^#####\\\n // /#### /+\\# s #\\\n // /### h/+++\\# t #\\\n // /### t/+++++\\# r #\\\n // /### a/+++++++\\# o #\\\n // /### p/++ fill +\\# k #\\\n ///#### /+++++^+++++\\# e #\\\n //#####/+++++/+\\+++++\\#####\\\n var k = strokeWidth / 2 / miterRatio;\n var l = (strokeWidth / 2) * (d / e);\n var maxr = Math.sqrt((r1 + k) * (r1 + k) + l * l);\n var bevelAdd = maxr - r1;\n if (this.radius2_ === undefined || lineJoin === 'bevel') {\n return bevelAdd * 2;\n }\n // If outer miter is over the miter limit the inner miter may reach through the\n // center and be longer than the bevel, same calculation as above but swap r1 / r2.\n var aa = r1 * Math.sin(alpha);\n var bb = Math.sqrt(r1 * r1 - aa * aa);\n var dd = r2 - bb;\n var ee = Math.sqrt(aa * aa + dd * dd);\n var innerMiterRatio = ee / aa;\n if (innerMiterRatio <= miterLimit) {\n var innerLength = (innerMiterRatio * strokeWidth) / 2 - r2 - r1;\n return 2 * Math.max(bevelAdd, innerLength);\n }\n return bevelAdd * 2;\n };\n /**\n * @return {RenderOptions} The render options\n * @protected\n */\n RegularShape.prototype.createRenderOptions = function () {\n var lineJoin = defaultLineJoin;\n var miterLimit = 0;\n var lineDash = null;\n var lineDashOffset = 0;\n var strokeStyle;\n var strokeWidth = 0;\n if (this.stroke_) {\n strokeStyle = this.stroke_.getColor();\n if (strokeStyle === null) {\n strokeStyle = defaultStrokeStyle;\n }\n strokeStyle = asColorLike(strokeStyle);\n strokeWidth = this.stroke_.getWidth();\n if (strokeWidth === undefined) {\n strokeWidth = defaultLineWidth;\n }\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset();\n lineJoin = this.stroke_.getLineJoin();\n if (lineJoin === undefined) {\n lineJoin = defaultLineJoin;\n }\n miterLimit = this.stroke_.getMiterLimit();\n if (miterLimit === undefined) {\n miterLimit = defaultMiterLimit;\n }\n }\n var add = this.calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit);\n var maxRadius = Math.max(this.radius_, this.radius2_ || 0);\n var size = Math.ceil(2 * maxRadius + add);\n return {\n strokeStyle: strokeStyle,\n strokeWidth: strokeWidth,\n size: size,\n lineDash: lineDash,\n lineDashOffset: lineDashOffset,\n lineJoin: lineJoin,\n miterLimit: miterLimit,\n };\n };\n /**\n * @protected\n */\n RegularShape.prototype.render = function () {\n this.renderOptions_ = this.createRenderOptions();\n var size = this.renderOptions_.size;\n this.canvas_ = {};\n this.size_ = [size, size];\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} pixelRatio The pixel ratio.\n */\n RegularShape.prototype.draw_ = function (renderOptions, context, pixelRatio) {\n context.scale(pixelRatio, pixelRatio);\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n this.createPath_(context);\n if (this.fill_) {\n var color = this.fill_.getColor();\n if (color === null) {\n color = defaultFillStyle;\n }\n context.fillStyle = asColorLike(color);\n context.fill();\n }\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (context.setLineDash && renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n */\n RegularShape.prototype.createHitDetectionCanvas_ = function (renderOptions) {\n if (this.fill_) {\n var color = this.fill_.getColor();\n // determine if fill is transparent (or pattern or gradient)\n var opacity = 0;\n if (typeof color === 'string') {\n color = asArray(color);\n }\n if (color === null) {\n opacity = 1;\n }\n else if (Array.isArray(color)) {\n opacity = color.length === 4 ? color[3] : 1;\n }\n if (opacity === 0) {\n // if a transparent fill style is set, create an extra hit-detection image\n // with a default fill style\n var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n this.hitDetectionCanvas_ = context.canvas;\n this.drawHitDetectionCanvas_(renderOptions, context);\n }\n }\n if (!this.hitDetectionCanvas_) {\n this.hitDetectionCanvas_ = this.getImage(1);\n }\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context The context to draw in.\n */\n RegularShape.prototype.createPath_ = function (context) {\n var points = this.points_;\n var radius = this.radius_;\n if (points === Infinity) {\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n }\n else {\n var radius2 = this.radius2_ === undefined ? radius : this.radius2_;\n if (this.radius2_ !== undefined) {\n points *= 2;\n }\n var startAngle = this.angle_ - Math.PI / 2;\n var step = (2 * Math.PI) / points;\n for (var i = 0; i < points; i++) {\n var angle0 = startAngle + i * step;\n var radiusC = i % 2 === 0 ? radius : radius2;\n context.lineTo(radiusC * Math.cos(angle0), radiusC * Math.sin(angle0));\n }\n context.closePath();\n }\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n */\n RegularShape.prototype.drawHitDetectionCanvas_ = function (renderOptions, context) {\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n this.createPath_(context);\n context.fillStyle = defaultFillStyle;\n context.fill();\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n };\n return RegularShape;\n}(ImageStyle));\nexport default RegularShape;\n//# sourceMappingURL=RegularShape.js.map","/**\n * @module ol/style/Circle\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport RegularShape from './RegularShape.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nvar CircleStyle = /** @class */ (function (_super) {\n __extends(CircleStyle, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function CircleStyle(opt_options) {\n var options = opt_options ? opt_options : {};\n return _super.call(this, {\n points: Infinity,\n fill: options.fill,\n radius: options.radius,\n stroke: options.stroke,\n scale: options.scale !== undefined ? options.scale : 1,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n rotateWithView: options.rotateWithView !== undefined ? options.rotateWithView : false,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n }) || this;\n }\n /**\n * Clones the style.\n * @return {CircleStyle} The cloned style.\n * @api\n */\n CircleStyle.prototype.clone = function () {\n var scale = this.getScale();\n var style = new CircleStyle({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n radius: this.getRadius(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\n CircleStyle.prototype.setRadius = function (radius) {\n this.radius_ = radius;\n this.render();\n };\n return CircleStyle;\n}(RegularShape));\nexport default CircleStyle;\n//# sourceMappingURL=Circle.js.map","/**\n * @module ol/style/Fill\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nvar Fill = /** @class */ (function () {\n /**\n * @param {Options} [opt_options] Options.\n */\n function Fill(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n }\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {Fill} The cloned style.\n * @api\n */\n Fill.prototype.clone = function () {\n var color = this.getColor();\n return new Fill({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n });\n };\n /**\n * Get the fill color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} Color.\n * @api\n */\n Fill.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} color Color.\n * @api\n */\n Fill.prototype.setColor = function (color) {\n this.color_ = color;\n };\n return Fill;\n}());\nexport default Fill;\n//# sourceMappingURL=Fill.js.map","/**\n * @module ol/style/Stroke\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array} [lineDash] Line dash pattern. Default is `null` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nvar Stroke = /** @class */ (function () {\n /**\n * @param {Options} [opt_options] Options.\n */\n function Stroke(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n /**\n * @private\n * @type {CanvasLineCap|undefined}\n */\n this.lineCap_ = options.lineCap;\n /**\n * @private\n * @type {Array}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n /**\n * @private\n * @type {CanvasLineJoin|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n }\n /**\n * Clones the style.\n * @return {Stroke} The cloned style.\n * @api\n */\n Stroke.prototype.clone = function () {\n var color = this.getColor();\n return new Stroke({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth(),\n });\n };\n /**\n * Get the stroke color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n Stroke.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Get the line cap type for the stroke.\n * @return {CanvasLineCap|undefined} Line cap.\n * @api\n */\n Stroke.prototype.getLineCap = function () {\n return this.lineCap_;\n };\n /**\n * Get the line dash style for the stroke.\n * @return {Array} Line dash.\n * @api\n */\n Stroke.prototype.getLineDash = function () {\n return this.lineDash_;\n };\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n Stroke.prototype.getLineDashOffset = function () {\n return this.lineDashOffset_;\n };\n /**\n * Get the line join type for the stroke.\n * @return {CanvasLineJoin|undefined} Line join.\n * @api\n */\n Stroke.prototype.getLineJoin = function () {\n return this.lineJoin_;\n };\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n Stroke.prototype.getMiterLimit = function () {\n return this.miterLimit_;\n };\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n Stroke.prototype.getWidth = function () {\n return this.width_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n Stroke.prototype.setColor = function (color) {\n this.color_ = color;\n };\n /**\n * Set the line cap.\n *\n * @param {CanvasLineCap|undefined} lineCap Line cap.\n * @api\n */\n Stroke.prototype.setLineCap = function (lineCap) {\n this.lineCap_ = lineCap;\n };\n /**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array} lineDash Line dash.\n * @api\n */\n Stroke.prototype.setLineDash = function (lineDash) {\n this.lineDash_ = lineDash;\n };\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n Stroke.prototype.setLineDashOffset = function (lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n };\n /**\n * Set the line join.\n *\n * @param {CanvasLineJoin|undefined} lineJoin Line join.\n * @api\n */\n Stroke.prototype.setLineJoin = function (lineJoin) {\n this.lineJoin_ = lineJoin;\n };\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n Stroke.prototype.setMiterLimit = function (miterLimit) {\n this.miterLimit_ = miterLimit;\n };\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n Stroke.prototype.setWidth = function (width) {\n this.width_ = width;\n };\n return Stroke;\n}());\nexport default Stroke;\n//# sourceMappingURL=Stroke.js.map","/**\n * @module ol/style/Style\n */\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport Stroke from './Stroke.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/Feature~Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style~Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array