{ "version": 3, "sources": ["last-icon.js"], "sourcesContent": ["const CACHE = {};\r\nconst DEBUG = (window.LastIcon && window.LastIcon.debug) || false;\r\nconst PRELOAD = window.LastIconPreload || {};\r\nconst FIX_FILL = [\"material\", \"boxicons\", \"fontawesome\", \"eos\", \"phosphor\"];\r\nconst FIX_STROKE = [\"iconpark\"];\r\nconst FIX_VIEWBOX = [\"boxicons\"];\r\nconst REPLACE_NAME = (window.LastIcon && window.LastIcon.replaceName) || {};\r\nconst ALIASES = Object.assign(\r\n {\r\n bs: \"bootstrap\",\r\n bx: \"boxicons\",\r\n cs: \"cssgg\",\r\n gg: \"cssgg\",\r\n tb: \"tabler\",\r\n fa: \"fontawesome\",\r\n st: \"supertiny\",\r\n mi: \"material\",\r\n em: \"emojicc\",\r\n fl: \"flags\",\r\n in: \"iconoir\",\r\n eo: \"eos\",\r\n ft: \"feather\",\r\n ip: \"iconpark\",\r\n ph: \"phosphor\",\r\n },\r\n (window.LastIcon && window.LastIcon.aliases) || {}\r\n);\r\nconst ENABLE_ICONS = (window.LastIcon && window.LastIcon.fonts) || [];\r\nconst FONT_ICONS = {\r\n material: {\r\n class: \"material-icons-{type}\",\r\n types: {\r\n baseline: \"\",\r\n twotone: \"two-tone\",\r\n },\r\n },\r\n boxicons: {\r\n class: \"bx {prefix}-{icon}\",\r\n },\r\n bootstrap: {\r\n class: \"bi-{icon}\",\r\n },\r\n fontawesome: {\r\n class: \"{prefix} fa-{icon}\",\r\n },\r\n iconoir: {\r\n class: \"iconoir-{icon}\",\r\n },\r\n eos: {\r\n class: \"eos-icons-{type}\",\r\n types: {\r\n solid: \"\",\r\n },\r\n },\r\n // Note: duotone not supported yet\r\n phosphor: {\r\n class: \"ph-{icon}-{type}\",\r\n types: {\r\n solid: \"\",\r\n },\r\n },\r\n};\r\nconst VIEWBOXES = Object.assign(\r\n {\r\n boxicons: 24,\r\n },\r\n (window.LastIcon && window.LastIcon.viewboxes) || {}\r\n);\r\nconst TYPES = Object.assign(\r\n {\r\n boxicons: \"solid\",\r\n fontawesome: \"solid\",\r\n material: \"baseline\",\r\n flags: \"4x3\",\r\n eos: \"solid\",\r\n phosphor: \"regular\",\r\n },\r\n (window.LastIcon && window.LastIcon.types) || {}\r\n);\r\nconst PREFIXES = Object.assign(\r\n {\r\n boxicons: {\r\n solid: \"bxs\",\r\n regular: \"bx\",\r\n logos: \"bxl\",\r\n },\r\n fontawesome: {\r\n solid: \"fas\",\r\n regular: \"far\",\r\n light: \"fal\",\r\n duotone: \"fad\",\r\n brands: \"fab\",\r\n },\r\n },\r\n (window.LastIcon && window.LastIcon.prefixes) || {}\r\n);\r\nconst DEFAULT_SET = (window.LastIcon && window.LastIcon.defaultSet) || \"tabler\";\r\nconst DEFAULT_STROKE = (window.LastIcon && window.LastIcon.defaultStroke) || 2;\r\nconst PATHS = Object.assign(\r\n {\r\n bootstrap: \"https://cdn.jsdelivr.net/npm/bootstrap-icons@1/icons/{icon}.svg\",\r\n // type: solid, regular, logos\r\n boxicons: \"https://cdn.jsdelivr.net/npm/boxicons@2/svg/{type}/{prefix}-{icon}.svg\",\r\n cssgg: \"https://cdn.jsdelivr.net/npm/css.gg@2/icons/svg/{icon}.svg\",\r\n tabler: \"https://cdn.jsdelivr.net/npm/@tabler/icons@1/icons/{icon}.svg\",\r\n // type: solid, regular, brands, light, duotone\r\n fontawesome: \"https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/svgs/{type}/{icon}.svg\",\r\n bytesize: \"https://cdn.jsdelivr.net/npm/bytesize-icons@1/dist/icons/{icon}.svg\",\r\n supertiny: \"https://cdn.jsdelivr.net/npm/super-tiny-icons@0.4/images/svg/{icon}.svg\",\r\n // type: baseline, outline, round, sharp, twotone\r\n material: \"https://cdn.jsdelivr.net/npm/@material-icons/svg@1/svg/{icon}/{type}.svg\",\r\n // type : 4x3 or 1x1\r\n flags: \"https://cdn.jsdelivr.net/npm/flag-svg-collection@1/flags/{type}/{icon}.svg\",\r\n emojicc: \"https://cdn.jsdelivr.net/npm/emoji-cc@1/svg/{icon}.svg\",\r\n iconoir: \"https://cdn.jsdelivr.net/gh/lucaburgio/iconoir/icons/{icon}.svg\",\r\n // type: solid, outlined, animated\r\n eos: \"https://cdn.jsdelivr.net/gh/lekoala/eos-icons-mirror/{type}/{icon}.svg\",\r\n feather: \"https://cdn.jsdelivr.net/npm/feather-icons@4/dist/icons/{icon}.svg\",\r\n // type: 33 types ! see website\r\n iconpark: \"https://cdn.jsdelivr.net/gh/bytedance/IconPark/source/{type}/{icon}.svg\",\r\n // type: bold, duotone, fill, light, regular, thin\r\n phosphor: \"https://cdn.jsdelivr.net/gh/phosphor-icons/phosphor-icons@1/assets/{type}/{icon}-{type}.svg\",\r\n },\r\n (window.LastIcon && window.LastIcon.paths) || {}\r\n);\r\n\r\nclass LastIcon extends HTMLElement {\r\n static log(message) {\r\n if (!DEBUG) {\r\n return;\r\n }\r\n console.log(\"[l-i] \" + message);\r\n }\r\n\r\n /**\r\n * @param {string} iconName\r\n * @param {string} iconSet\r\n * @param {string} iconType\r\n * @return {Promise}\r\n */\r\n static getIconSvg(iconName, iconSet, iconType) {\r\n let iconUrl = PATHS[iconSet];\r\n let cacheKey = iconSet + \"-\" + iconName;\r\n if (iconType) {\r\n cacheKey += \"-\" + iconType;\r\n }\r\n if (PRELOAD[cacheKey]) {\r\n LastIcon.log(\"Fetching \" + cacheKey + \" from preloaded cache\");\r\n return PRELOAD[cacheKey];\r\n }\r\n if (!iconUrl) {\r\n return new Promise(() => {\r\n console.error(`Icon set ${iconSet} does not exists`);\r\n });\r\n }\r\n\r\n iconUrl = LastIcon.replacePlaceholders(iconUrl, iconName, iconSet, iconType);\r\n\r\n // If we have it in cache\r\n if (iconUrl && CACHE[cacheKey]) {\r\n LastIcon.log(\"Fetching \" + cacheKey + \" from cache\");\r\n return CACHE[cacheKey];\r\n }\r\n\r\n // Or resolve\r\n LastIcon.log(\"Fetching \" + cacheKey + \" from url \" + iconUrl);\r\n CACHE[cacheKey] = fetch(iconUrl).then(function (response) {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n throw Error(response.status);\r\n });\r\n return CACHE[cacheKey];\r\n }\r\n\r\n /**\r\n * @param {string} value\r\n * @param {string} iconName\r\n * @param {string} iconSet\r\n * @param {string} iconType\r\n * @return {string}\r\n */\r\n static replacePlaceholders(value, iconName, iconSet, iconType) {\r\n let iconPrefix = (PREFIXES[iconSet] && PREFIXES[iconSet][iconType]) || null;\r\n value = value.replace(\"{icon}\", iconName);\r\n if (iconType) {\r\n value = value.replaceAll(\"{type}\", iconType);\r\n } else {\r\n // Maybe we want to remove the type like in material icons\r\n value = value.replace(\"-{type}\", \"\");\r\n }\r\n if (iconPrefix) {\r\n value = value.replace(\"{prefix}\", iconPrefix);\r\n }\r\n return value;\r\n }\r\n\r\n /**\r\n * @param {object} inst\r\n * @param {string} iconName\r\n * @param {string} iconSet\r\n * @param {string} iconType\r\n */\r\n static refreshIcon(inst, iconName, iconSet, iconType) {\r\n if (REPLACE_NAME[iconName]) {\r\n iconName = REPLACE_NAME[iconName];\r\n }\r\n if (ENABLE_ICONS.includes(iconSet)) {\r\n LastIcon.log(\"Using font for \" + iconName);\r\n let iconClass = FONT_ICONS[iconSet][\"class\"];\r\n let nameAsClass = iconClass.includes(\"{icon}\");\r\n let fontType = iconType;\r\n if (FONT_ICONS[iconSet][\"types\"] && iconType in FONT_ICONS[iconSet][\"types\"]) {\r\n fontType = FONT_ICONS[iconSet][\"types\"][iconType];\r\n }\r\n iconClass = LastIcon.replacePlaceholders(iconClass, iconName, iconSet, fontType);\r\n if (nameAsClass) {\r\n inst.innerHTML = '';\r\n } else {\r\n inst.innerHTML = '' + iconName + \"\";\r\n }\r\n return;\r\n }\r\n LastIcon.getIconSvg(iconName, iconSet, iconType)\r\n .then((iconData) => {\r\n // Strip class attribute as it may be affected by css\r\n if (iconData.includes(\"class=\")) {\r\n iconData = iconData.replace(/ class=\"([a-z- ]*)\"/g, \"\");\r\n }\r\n if (inst.stroke || FIX_STROKE.includes(inst.set)) {\r\n iconData = iconData.replace(/stroke-width=\"([0-9]*)\"/g, 'stroke-width=\"' + inst.stroke + '\"');\r\n }\r\n if (FIX_FILL.includes(inst.set)) {\r\n iconData = iconData.replace(/(/, '$1 fill=\"currentColor\">');\r\n }\r\n if (FIX_VIEWBOX.includes(inst.set) && !iconData.includes(\"viewBox\")) {\r\n const size = VIEWBOXES[iconSet] || 24;\r\n iconData = iconData.replace(/(/, '$1 viewBox=\"0 0 ' + size + \" \" + size + '\">');\r\n }\r\n if (inst.defaultHTML) {\r\n iconData = iconData.replace(\"\", inst.defaultHTML + \"\");\r\n }\r\n inst.innerHTML = iconData;\r\n })\r\n .catch((error) => {\r\n inst.innerHTML = \"\u26A0\uFE0F\";\r\n console.error(`Failed to load icon ${iconName} (error ${error})`);\r\n });\r\n }\r\n\r\n get type() {\r\n return this.getAttribute(\"type\") || TYPES[this.set];\r\n }\r\n\r\n get set() {\r\n let v = this.getAttribute(\"set\") || DEFAULT_SET;\r\n if (ALIASES[v]) {\r\n v = ALIASES[v];\r\n }\r\n return v;\r\n }\r\n\r\n get stroke() {\r\n let v = this.getAttribute(\"stroke\");\r\n if (!v && this.set == \"tabler\") {\r\n v = DEFAULT_STROKE;\r\n }\r\n return v;\r\n }\r\n\r\n static get observedAttributes() {\r\n return [\"name\"];\r\n }\r\n\r\n connectedCallback() {\r\n // innerHTML is not available because not parsed yet\r\n setTimeout(() => {\r\n this.defaultHTML = this.innerHTML;\r\n this.attributeChangedCallback(\"name\", null, this.getAttribute(\"name\"));\r\n });\r\n }\r\n\r\n attributeChangedCallback(attr, oldVal, newVal) {\r\n if (!this.isConnected || attr !== \"name\") {\r\n return;\r\n }\r\n this.innerHTML = \"\";\r\n if (this.hasAttribute(\"size\")) {\r\n this.style.setProperty(\"--size\", this.getAttribute(\"size\") + \"px\");\r\n }\r\n if (newVal) {\r\n LastIcon.refreshIcon(this, newVal, this.set, this.type);\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define(\"l-i\", LastIcon);\r\n"], "mappings": "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", "names": [] }