{"version":3,"names":["LocalStorageItem","constructor","key","value","this","LocalStorageWorker","isLocalStorageSupported","_isLocalStorageSupported","window","console","warn","add","item","localStorage","setItem","getAllItems","list","Array","i","length","getItem","push","getAllKeys","getAllValues","get","remove","removeItem","clear","joinPath","args","map","part","trim","replace","filter","x","join","SvgLoader","VERSION","getSvgVersion","SVG_CDN","ICON_CDN_URL","METADATA_URL","localStorageWorker","svgVersion","metaTag","document","querySelector","getAttribute","Error","e","ICON_VERSION","requestSvg","svgName","svgType","url","getSvgUrl","svgKey","getSvgKey","request","requestsCache","fetch","then","async","response","ok","svgContent","text","set","requestSvgSizes","stringFormat","toString","sizesKey","getSizesKey","sizes","getSvg","getSvgMetadata","sizesStr","sizesParsed","JSON","parse","requestedIconSize","iconSize","width","parseInt","height","getAllSvgNames","Object","keys","iconNameWithoutExtension","substr","lastIndexOf","Map","SvgType"],"sources":["src/utils/local-storage-helper.ts","src/utils/join-path.ts","src/common/svg-loader.ts","src/common/svg-type.ts"],"sourcesContent":["export class LocalStorageItem {\n constructor(public key: string, public value: string) {}\n}\n\nexport class LocalStorageWorker {\n private _isLocalStorageSupported: boolean;\n\n /**\n * True if the browser supports localStorage, false otherwise.\n */\n public get isLocalStorageSupported(): boolean {\n return this._isLocalStorageSupported;\n }\n\n constructor() {\n this._isLocalStorageSupported = typeof window[\"localStorage\"] != \"undefined\" && window[\"localStorage\"] != null;\n if (!this._isLocalStorageSupported) {\n console.warn(\"Local Storage not supported by browser.\");\n }\n }\n\n /**\n * Adds a value to localStorage\n */\n add(key: string, item: string) {\n if (this.isLocalStorageSupported) {\n localStorage.setItem(key, item);\n }\n }\n\n /**\n * Gets all items from localStorage\n */\n getAllItems(): Array {\n var list = new Array();\n\n for (var i = 0; i < localStorage.length; i++) {\n var key = localStorage.key(i);\n var value = localStorage.getItem(key);\n\n list.push(new LocalStorageItem(key, value));\n }\n\n return list;\n }\n\n /**\n * Gets all keys from localStorage\n */\n getAllKeys(): Array {\n var list = new Array();\n\n for (var i = 0; i < localStorage.length; i++) {\n var key = localStorage.key(i);\n list.push(key);\n }\n\n return list;\n }\n\n /**\n * Gets all values from localStorage\n */\n getAllValues(): Array {\n var list = new Array();\n\n for (var i = 0; i < localStorage.length; i++) {\n var key = localStorage.key(i);\n var value = localStorage.getItem(key);\n\n list.push(value);\n }\n\n return list;\n }\n\n /**\n * Get a particular item by key from localStorage\n */\n get(key: string): string {\n if (this._isLocalStorageSupported) {\n var item = localStorage.getItem(key);\n return item;\n } else {\n return null;\n }\n }\n\n /**\n * Removes the item with the given key from localStorage\n */\n remove(key: string) {\n if (this._isLocalStorageSupported) {\n localStorage.removeItem(key);\n }\n }\n\n /**\n * Clears the localStorage and removes all items from it\n */\n clear() {\n if (this._isLocalStorageSupported) {\n localStorage.clear();\n }\n }\n}\n","export const joinPath = (...args: string[]) => {\n return args\n .map((part, i) => {\n if (i === 0) {\n return part.trim().replace(/[\\/]*$/g, \"\");\n } else {\n return part.trim().replace(/(^[\\/]*|[\\/]*$)/g, \"\");\n }\n })\n .filter((x) => x.length)\n .join(\"/\");\n};\n","import { LocalStorageWorker } from \"../utils/local-storage-helper\";\nimport { joinPath } from \"../utils/join-path\";\nimport { stringFormat } from \"../utils/string-format\";\nimport { SvgType } from \"./svg-type\";\nimport { SvgMetadata } from \"./svg-metadata\";\nimport { ICON_CDN_URL, ICON_VERSION } from \"../constants/global-constants\";\n\n/**\n * Use this loader to receive SVGs like icons or pictograms from the eon-ui-icons CDN.\n * Requests are cached in JS and SVG content/metadata is stored in the LocalStorage of the browser.\n * This way, every icon will only get loaded exactly once per session.\n */\nexport class SvgLoader {\n // TODO: Move this to a config file\n // private VERSION = \"x.x.x\";\n // to Update the eon-ui-CDN-Version you must change the meta-tag \n // AND line 44, inside the catch-block to define the backup-version, if the website dont present the meta-tag.\n // to update inside the Storybook go to .storybook/preview-head.html!\n private VERSION = this.getSvgVersion();\n private SVG_CDN = `${ICON_CDN_URL}/${this.VERSION}/`;\n private METADATA_URL = \"metadata/{0}-sizes.json\";\n\n /**\n * Map consists of the url and the promise to the URL\n */\n private static requestsCache = new Map>();\n private localStorageWorker: LocalStorageWorker;\n\n constructor() {\n this.localStorageWorker = new LocalStorageWorker();\n }\n\n /** this function returns the Version of the CDN Version\n * Either by meta tag or hard coded\n * This is the required tag: \n * @private\n */\n\n private getSvgVersion(): string {\n let svgVersion;\n let metaTag = document.querySelector('meta[name=\"eon-ui-icons-version\"]') !== null;\n try {\n if (metaTag) {\n svgVersion = document.querySelector('meta[name=\"eon-ui-icons-version\"]').getAttribute(\"content\");\n } else {\n throw new Error(\"Meta-tag not found\");\n }\n } catch (e) {\n svgVersion = ICON_VERSION;\n }\n return svgVersion;\n }\n\n /**\n * Creates or returns a cached request for the given SVG.\n * When this promise is resolved, you can safely access the svg content using the synchronous method getSvg().\n * @param svgName The name of the svg without file extension. E.g. 'add'\n * @param svgType The type of svg to request\n */\n requestSvg(svgName: string, svgType: SvgType): Promise {\n const url = this.getSvgUrl(svgName, svgType);\n const svgKey = this.getSvgKey(svgName, svgType);\n\n // see if we already have a request for this url\n let request = SvgLoader.requestsCache.get(url);\n if (!request) {\n request = fetch(url).then(async (response: Response) => {\n if (!response.ok) {\n this.localStorageWorker.remove(svgKey);\n throw new Error(`Unable to fetch SVG ${svgType} '${svgName}'.`);\n }\n const svgContent = await response.text();\n this.localStorageWorker.add(svgKey, svgContent);\n });\n // cache the request\n SvgLoader.requestsCache.set(url, request);\n }\n return request;\n }\n\n /**\n * Creates or returns a cached request for metadata of the given SVG type.\n * When this promise is resolved, you can safely access the metadata using the synchronous methods getSvgMetadata() and getAllSvgNames().\n * @param svgType The type of icon to request\n */\n requestSvgSizes(svgType: SvgType): Promise {\n const url = this.SVG_CDN + stringFormat(this.METADATA_URL, svgType.toString());\n const sizesKey = this.getSizesKey(svgType);\n\n // see if we already have a request for this url\n let request = SvgLoader.requestsCache.get(url);\n\n if (!request) {\n request = fetch(url).then(async (response: Response) => {\n if (!response.ok) {\n this.localStorageWorker.remove(sizesKey);\n throw new Error(`Unable to fetch sizes metadata for SVG type '${svgType}'.`);\n }\n const sizes = await response.text();\n this.localStorageWorker.add(sizesKey, sizes);\n });\n }\n return request;\n }\n\n /**\n * Returns the SVG content for the given SVG as string. This is the tag and can be used in JSX directly.\n * @param svgName The name of the svg without file extension. E.g. 'add'\n * @param svgType The type of svg to request\n */\n getSvg(svgName: string, svgType: SvgType): string {\n const svgKey = this.getSvgKey(svgName, svgType);\n return this.localStorageWorker.get(svgKey);\n }\n\n /**\n * Returns the metadata for the given SVG type.\n * @param svgName The name of the svg without file extension. E.g. 'add'\n * @param svgType The type of svg to request\n */\n getSvgMetadata(svgName: string, svgType: SvgType): SvgMetadata {\n const sizesKey = this.getSizesKey(svgType);\n const sizesStr: string = this.localStorageWorker.get(sizesKey);\n if (!sizesStr) {\n return null;\n }\n const sizesParsed = JSON.parse(sizesStr);\n const requestedIconSize = sizesParsed[svgName];\n let iconSize: SvgMetadata = null;\n if (requestedIconSize != null) {\n iconSize = {\n width: parseInt(requestedIconSize.width, 10),\n height: parseInt(requestedIconSize.height, 10)\n };\n }\n return iconSize;\n }\n\n /**\n * Returns the names of all available SVGs of the given type.\n * @param svgType The type of svg to request\n */\n getAllSvgNames(svgType: SvgType): string[] {\n const sizesKey = this.getSizesKey(svgType);\n const sizesStr: string = this.localStorageWorker.get(sizesKey);\n if (!sizesStr) {\n return null;\n }\n const sizesParsed = JSON.parse(sizesStr);\n return [...Object.keys(sizesParsed)];\n }\n\n private getSvgUrl(svgName: string, svgType: SvgType) {\n const iconNameWithoutExtension = (svgName = svgName.substr(0, svgName.lastIndexOf(\".\")) || svgName);\n const url = joinPath(this.SVG_CDN, `${svgType.toString()}s`, `${iconNameWithoutExtension}.svg`);\n return url;\n }\n\n /**\n * Returns the generated SvgKey. The SvgKey contains Information of: name, time and CDN Version.\n * @param svgName The name of the svg without file extension. E.g. 'add'\n * @param svgType The type of svg to request\n */\n private getSvgKey(svgName: string, svgType: SvgType) {\n return `${svgType.toString()}-${this.VERSION}-${svgName}`;\n }\n\n private getSizesKey(svgType: SvgType) {\n return `${svgType.toString()}-sizes-${this.VERSION}`;\n }\n}\n","/**\n * All available types of SVGs present in the eon-ui-icons repository.\n */\nexport enum SvgType {\n ICON = \"icon\",\n PICTOGRAM = \"pictogram\"\n}\n"],"mappings":"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"}