1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434 |
- import {
- __spreadValues,
- init_define_APP_INFO
- } from "./chunk-XY75H3MP.js";
- // dep:@iconify_iconify
- init_define_APP_INFO();
- // node_modules/@iconify/iconify/dist/iconify.mjs
- init_define_APP_INFO();
- var matchName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
- var iconDefaults = Object.freeze({
- left: 0,
- top: 0,
- width: 16,
- height: 16,
- rotate: 0,
- vFlip: false,
- hFlip: false
- });
- function fullIcon(data) {
- return __spreadValues(__spreadValues({}, iconDefaults), data);
- }
- function mergeIconData(icon, alias) {
- const result = __spreadValues({}, icon);
- for (const key in iconDefaults) {
- const prop = key;
- if (alias[prop] !== void 0) {
- const value = alias[prop];
- if (result[prop] === void 0) {
- result[prop] = value;
- continue;
- }
- switch (prop) {
- case "rotate":
- result[prop] = (result[prop] + value) % 4;
- break;
- case "hFlip":
- case "vFlip":
- result[prop] = value !== result[prop];
- break;
- default:
- result[prop] = value;
- }
- }
- }
- return result;
- }
- function getIconData$1(data, name, full = false) {
- function getIcon2(name2, iteration) {
- if (data.icons[name2] !== void 0) {
- return Object.assign({}, data.icons[name2]);
- }
- if (iteration > 5) {
- return null;
- }
- const aliases = data.aliases;
- if (aliases && aliases[name2] !== void 0) {
- const item = aliases[name2];
- const result2 = getIcon2(item.parent, iteration + 1);
- if (result2) {
- return mergeIconData(result2, item);
- }
- return result2;
- }
- const chars = data.chars;
- if (!iteration && chars && chars[name2] !== void 0) {
- return getIcon2(chars[name2], iteration + 1);
- }
- return null;
- }
- const result = getIcon2(name, 0);
- if (result) {
- for (const key in iconDefaults) {
- if (result[key] === void 0 && data[key] !== void 0) {
- result[key] = data[key];
- }
- }
- }
- return result && full ? fullIcon(result) : result;
- }
- function isVariation(item) {
- for (const key in iconDefaults) {
- if (item[key] !== void 0) {
- return true;
- }
- }
- return false;
- }
- function parseIconSet(data, callback2, options) {
- options = options || {};
- const names = [];
- if (typeof data !== "object" || typeof data.icons !== "object") {
- return names;
- }
- if (data.not_found instanceof Array) {
- data.not_found.forEach((name) => {
- callback2(name, null);
- names.push(name);
- });
- }
- const icons = data.icons;
- Object.keys(icons).forEach((name) => {
- const iconData = getIconData$1(data, name, true);
- if (iconData) {
- callback2(name, iconData);
- names.push(name);
- }
- });
- const parseAliases = options.aliases || "all";
- if (parseAliases !== "none" && typeof data.aliases === "object") {
- const aliases = data.aliases;
- Object.keys(aliases).forEach((name) => {
- if (parseAliases === "variations" && isVariation(aliases[name])) {
- return;
- }
- const iconData = getIconData$1(data, name, true);
- if (iconData) {
- callback2(name, iconData);
- names.push(name);
- }
- });
- }
- return names;
- }
- var optionalProperties = {
- provider: "string",
- aliases: "object",
- not_found: "object"
- };
- for (const prop in iconDefaults) {
- optionalProperties[prop] = typeof iconDefaults[prop];
- }
- function quicklyValidateIconSet(obj) {
- if (typeof obj !== "object" || obj === null) {
- return null;
- }
- const data = obj;
- if (typeof data.prefix !== "string" || !obj.icons || typeof obj.icons !== "object") {
- return null;
- }
- for (const prop in optionalProperties) {
- if (obj[prop] !== void 0 && typeof obj[prop] !== optionalProperties[prop]) {
- return null;
- }
- }
- const icons = data.icons;
- for (const name in icons) {
- const icon = icons[name];
- if (!name.match(matchName) || typeof icon.body !== "string") {
- return null;
- }
- for (const prop in iconDefaults) {
- if (icon[prop] !== void 0 && typeof icon[prop] !== typeof iconDefaults[prop]) {
- return null;
- }
- }
- }
- const aliases = data.aliases;
- if (aliases) {
- for (const name in aliases) {
- const icon = aliases[name];
- const parent = icon.parent;
- if (!name.match(matchName) || typeof parent !== "string" || !icons[parent] && !aliases[parent]) {
- return null;
- }
- for (const prop in iconDefaults) {
- if (icon[prop] !== void 0 && typeof icon[prop] !== typeof iconDefaults[prop]) {
- return null;
- }
- }
- }
- }
- return data;
- }
- var stringToIcon = (value, validate, allowSimpleName, provider = "") => {
- const colonSeparated = value.split(":");
- if (value.slice(0, 1) === "@") {
- if (colonSeparated.length < 2 || colonSeparated.length > 3) {
- return null;
- }
- provider = colonSeparated.shift().slice(1);
- }
- if (colonSeparated.length > 3 || !colonSeparated.length) {
- return null;
- }
- if (colonSeparated.length > 1) {
- const name2 = colonSeparated.pop();
- const prefix = colonSeparated.pop();
- const result = {
- provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
- prefix,
- name: name2
- };
- return validate && !validateIcon(result) ? null : result;
- }
- const name = colonSeparated[0];
- const dashSeparated = name.split("-");
- if (dashSeparated.length > 1) {
- const result = {
- provider,
- prefix: dashSeparated.shift(),
- name: dashSeparated.join("-")
- };
- return validate && !validateIcon(result) ? null : result;
- }
- if (allowSimpleName && provider === "") {
- const result = {
- provider,
- prefix: "",
- name
- };
- return validate && !validateIcon(result, allowSimpleName) ? null : result;
- }
- return null;
- };
- var validateIcon = (icon, allowSimpleName) => {
- if (!icon) {
- return false;
- }
- return !!((icon.provider === "" || icon.provider.match(matchName)) && (allowSimpleName && icon.prefix === "" || icon.prefix.match(matchName)) && icon.name.match(matchName));
- };
- var storageVersion = 1;
- var storage$1 = /* @__PURE__ */ Object.create(null);
- try {
- const w = window || self;
- if (w && w._iconifyStorage.version === storageVersion) {
- storage$1 = w._iconifyStorage.storage;
- }
- } catch (err) {
- }
- function shareStorage() {
- try {
- const w = window || self;
- if (w && !w._iconifyStorage) {
- w._iconifyStorage = {
- version: storageVersion,
- storage: storage$1
- };
- }
- } catch (err) {
- }
- }
- function newStorage(provider, prefix) {
- return {
- provider,
- prefix,
- icons: /* @__PURE__ */ Object.create(null),
- missing: /* @__PURE__ */ Object.create(null)
- };
- }
- function getStorage(provider, prefix) {
- if (storage$1[provider] === void 0) {
- storage$1[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerStorage = storage$1[provider];
- if (providerStorage[prefix] === void 0) {
- providerStorage[prefix] = newStorage(provider, prefix);
- }
- return providerStorage[prefix];
- }
- function addIconSet(storage2, data) {
- if (!quicklyValidateIconSet(data)) {
- return [];
- }
- const t = Date.now();
- return parseIconSet(data, (name, icon) => {
- if (icon) {
- storage2.icons[name] = icon;
- } else {
- storage2.missing[name] = t;
- }
- });
- }
- function addIconToStorage(storage2, name, icon) {
- try {
- if (typeof icon.body === "string") {
- storage2.icons[name] = Object.freeze(fullIcon(icon));
- return true;
- }
- } catch (err) {
- }
- return false;
- }
- function getIconFromStorage(storage2, name) {
- const value = storage2.icons[name];
- return value === void 0 ? null : value;
- }
- function listIcons(provider, prefix) {
- let allIcons = [];
- let providers;
- if (typeof provider === "string") {
- providers = [provider];
- } else {
- providers = Object.keys(storage$1);
- }
- providers.forEach((provider2) => {
- let prefixes;
- if (typeof provider2 === "string" && typeof prefix === "string") {
- prefixes = [prefix];
- } else {
- prefixes = storage$1[provider2] === void 0 ? [] : Object.keys(storage$1[provider2]);
- }
- prefixes.forEach((prefix2) => {
- const storage2 = getStorage(provider2, prefix2);
- const icons = Object.keys(storage2.icons).map((name) => (provider2 !== "" ? "@" + provider2 + ":" : "") + prefix2 + ":" + name);
- allIcons = allIcons.concat(icons);
- });
- });
- return allIcons;
- }
- var simpleNames = false;
- function allowSimpleNames(allow) {
- if (typeof allow === "boolean") {
- simpleNames = allow;
- }
- return simpleNames;
- }
- function getIconData(name) {
- const icon = typeof name === "string" ? stringToIcon(name, true, simpleNames) : name;
- return icon ? getIconFromStorage(getStorage(icon.provider, icon.prefix), icon.name) : null;
- }
- function addIcon(name, data) {
- const icon = stringToIcon(name, true, simpleNames);
- if (!icon) {
- return false;
- }
- const storage2 = getStorage(icon.provider, icon.prefix);
- return addIconToStorage(storage2, icon.name, data);
- }
- function addCollection(data, provider) {
- if (typeof data !== "object") {
- return false;
- }
- if (typeof provider !== "string") {
- provider = typeof data.provider === "string" ? data.provider : "";
- }
- if (simpleNames && provider === "" && (typeof data.prefix !== "string" || data.prefix === "")) {
- let added = false;
- if (quicklyValidateIconSet(data)) {
- data.prefix = "";
- parseIconSet(data, (name, icon) => {
- if (icon && addIcon(name, icon)) {
- added = true;
- }
- });
- }
- return added;
- }
- if (typeof data.prefix !== "string" || !validateIcon({
- provider,
- prefix: data.prefix,
- name: "a"
- })) {
- return false;
- }
- const storage2 = getStorage(provider, data.prefix);
- return !!addIconSet(storage2, data);
- }
- function iconExists(name) {
- return getIconData(name) !== null;
- }
- function getIcon(name) {
- const result = getIconData(name);
- return result ? __spreadValues({}, result) : null;
- }
- var defaults = Object.freeze({
- inline: false,
- width: null,
- height: null,
- hAlign: "center",
- vAlign: "middle",
- slice: false,
- hFlip: false,
- vFlip: false,
- rotate: 0
- });
- function mergeCustomisations(defaults2, item) {
- const result = {};
- for (const key in defaults2) {
- const attr = key;
- result[attr] = defaults2[attr];
- if (item[attr] === void 0) {
- continue;
- }
- const value = item[attr];
- switch (attr) {
- case "inline":
- case "slice":
- if (typeof value === "boolean") {
- result[attr] = value;
- }
- break;
- case "hFlip":
- case "vFlip":
- if (value === true) {
- result[attr] = !result[attr];
- }
- break;
- case "hAlign":
- case "vAlign":
- if (typeof value === "string" && value !== "") {
- result[attr] = value;
- }
- break;
- case "width":
- case "height":
- if (typeof value === "string" && value !== "" || typeof value === "number" && value || value === null) {
- result[attr] = value;
- }
- break;
- case "rotate":
- if (typeof value === "number") {
- result[attr] += value;
- }
- break;
- }
- }
- return result;
- }
- var unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;
- var unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
- function calculateSize(size, ratio, precision) {
- if (ratio === 1) {
- return size;
- }
- precision = precision === void 0 ? 100 : precision;
- if (typeof size === "number") {
- return Math.ceil(size * ratio * precision) / precision;
- }
- if (typeof size !== "string") {
- return size;
- }
- const oldParts = size.split(unitsSplit);
- if (oldParts === null || !oldParts.length) {
- return size;
- }
- const newParts = [];
- let code = oldParts.shift();
- let isNumber = unitsTest.test(code);
- while (true) {
- if (isNumber) {
- const num = parseFloat(code);
- if (isNaN(num)) {
- newParts.push(code);
- } else {
- newParts.push(Math.ceil(num * ratio * precision) / precision);
- }
- } else {
- newParts.push(code);
- }
- code = oldParts.shift();
- if (code === void 0) {
- return newParts.join("");
- }
- isNumber = !isNumber;
- }
- }
- function preserveAspectRatio(props) {
- let result = "";
- switch (props.hAlign) {
- case "left":
- result += "xMin";
- break;
- case "right":
- result += "xMax";
- break;
- default:
- result += "xMid";
- }
- switch (props.vAlign) {
- case "top":
- result += "YMin";
- break;
- case "bottom":
- result += "YMax";
- break;
- default:
- result += "YMid";
- }
- result += props.slice ? " slice" : " meet";
- return result;
- }
- function iconToSVG(icon, customisations) {
- const box = {
- left: icon.left,
- top: icon.top,
- width: icon.width,
- height: icon.height
- };
- let body = icon.body;
- [icon, customisations].forEach((props) => {
- const transformations = [];
- const hFlip = props.hFlip;
- const vFlip = props.vFlip;
- let rotation = props.rotate;
- if (hFlip) {
- if (vFlip) {
- rotation += 2;
- } else {
- transformations.push("translate(" + (box.width + box.left).toString() + " " + (0 - box.top).toString() + ")");
- transformations.push("scale(-1 1)");
- box.top = box.left = 0;
- }
- } else if (vFlip) {
- transformations.push("translate(" + (0 - box.left).toString() + " " + (box.height + box.top).toString() + ")");
- transformations.push("scale(1 -1)");
- box.top = box.left = 0;
- }
- let tempValue;
- if (rotation < 0) {
- rotation -= Math.floor(rotation / 4) * 4;
- }
- rotation = rotation % 4;
- switch (rotation) {
- case 1:
- tempValue = box.height / 2 + box.top;
- transformations.unshift("rotate(90 " + tempValue.toString() + " " + tempValue.toString() + ")");
- break;
- case 2:
- transformations.unshift("rotate(180 " + (box.width / 2 + box.left).toString() + " " + (box.height / 2 + box.top).toString() + ")");
- break;
- case 3:
- tempValue = box.width / 2 + box.left;
- transformations.unshift("rotate(-90 " + tempValue.toString() + " " + tempValue.toString() + ")");
- break;
- }
- if (rotation % 2 === 1) {
- if (box.left !== 0 || box.top !== 0) {
- tempValue = box.left;
- box.left = box.top;
- box.top = tempValue;
- }
- if (box.width !== box.height) {
- tempValue = box.width;
- box.width = box.height;
- box.height = tempValue;
- }
- }
- if (transformations.length) {
- body = '<g transform="' + transformations.join(" ") + '">' + body + "</g>";
- }
- });
- let width, height;
- if (customisations.width === null && customisations.height === null) {
- height = "1em";
- width = calculateSize(height, box.width / box.height);
- } else if (customisations.width !== null && customisations.height !== null) {
- width = customisations.width;
- height = customisations.height;
- } else if (customisations.height !== null) {
- height = customisations.height;
- width = calculateSize(height, box.width / box.height);
- } else {
- width = customisations.width;
- height = calculateSize(width, box.height / box.width);
- }
- if (width === "auto") {
- width = box.width;
- }
- if (height === "auto") {
- height = box.height;
- }
- width = typeof width === "string" ? width : width.toString() + "";
- height = typeof height === "string" ? height : height.toString() + "";
- const result = {
- attributes: {
- width,
- height,
- preserveAspectRatio: preserveAspectRatio(customisations),
- viewBox: box.left.toString() + " " + box.top.toString() + " " + box.width.toString() + " " + box.height.toString()
- },
- body
- };
- if (customisations.inline) {
- result.inline = true;
- }
- return result;
- }
- function buildIcon(icon, customisations) {
- return iconToSVG(fullIcon(icon), customisations ? mergeCustomisations(defaults, customisations) : defaults);
- }
- var regex = /\sid="(\S+)"/g;
- var randomPrefix = "IconifyId" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);
- var counter = 0;
- function replaceIDs(body, prefix = randomPrefix) {
- const ids = [];
- let match;
- while (match = regex.exec(body)) {
- ids.push(match[1]);
- }
- if (!ids.length) {
- return body;
- }
- ids.forEach((id) => {
- const newID = typeof prefix === "function" ? prefix(id) : prefix + (counter++).toString();
- const escapedID = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
- body = body.replace(new RegExp('([#;"])(' + escapedID + ')([")]|\\.[a-z])', "g"), "$1" + newID + "$3");
- });
- return body;
- }
- var cacheVersion = "iconify2";
- var cachePrefix = "iconify";
- var countKey = cachePrefix + "-count";
- var versionKey = cachePrefix + "-version";
- var hour = 36e5;
- var cacheExpiration = 168;
- var config = {
- local: true,
- session: true
- };
- var loaded = false;
- var count = {
- local: 0,
- session: 0
- };
- var emptyList = {
- local: [],
- session: []
- };
- var _window = typeof window === "undefined" ? {} : window;
- function getGlobal(key) {
- const attr = key + "Storage";
- try {
- if (_window && _window[attr] && typeof _window[attr].length === "number") {
- return _window[attr];
- }
- } catch (err) {
- }
- config[key] = false;
- return null;
- }
- function setCount(storage2, key, value) {
- try {
- storage2.setItem(countKey, value.toString());
- count[key] = value;
- return true;
- } catch (err) {
- return false;
- }
- }
- function getCount(storage2) {
- const count2 = storage2.getItem(countKey);
- if (count2) {
- const total = parseInt(count2);
- return total ? total : 0;
- }
- return 0;
- }
- function initCache(storage2, key) {
- try {
- storage2.setItem(versionKey, cacheVersion);
- } catch (err) {
- }
- setCount(storage2, key, 0);
- }
- function destroyCache(storage2) {
- try {
- const total = getCount(storage2);
- for (let i = 0; i < total; i++) {
- storage2.removeItem(cachePrefix + i.toString());
- }
- } catch (err) {
- }
- }
- var loadCache = () => {
- if (loaded) {
- return;
- }
- loaded = true;
- const minTime = Math.floor(Date.now() / hour) - cacheExpiration;
- function load(key) {
- const func = getGlobal(key);
- if (!func) {
- return;
- }
- const getItem = (index) => {
- const name = cachePrefix + index.toString();
- const item = func.getItem(name);
- if (typeof item !== "string") {
- return false;
- }
- let valid = true;
- try {
- const data = JSON.parse(item);
- if (typeof data !== "object" || typeof data.cached !== "number" || data.cached < minTime || typeof data.provider !== "string" || typeof data.data !== "object" || typeof data.data.prefix !== "string") {
- valid = false;
- } else {
- const provider = data.provider;
- const prefix = data.data.prefix;
- const storage2 = getStorage(provider, prefix);
- valid = addIconSet(storage2, data.data).length > 0;
- }
- } catch (err) {
- valid = false;
- }
- if (!valid) {
- func.removeItem(name);
- }
- return valid;
- };
- try {
- const version = func.getItem(versionKey);
- if (version !== cacheVersion) {
- if (version) {
- destroyCache(func);
- }
- initCache(func, key);
- return;
- }
- let total = getCount(func);
- for (let i = total - 1; i >= 0; i--) {
- if (!getItem(i)) {
- if (i === total - 1) {
- total--;
- } else {
- emptyList[key].push(i);
- }
- }
- }
- setCount(func, key, total);
- } catch (err) {
- }
- }
- for (const key in config) {
- load(key);
- }
- };
- var storeCache = (provider, data) => {
- if (!loaded) {
- loadCache();
- }
- function store(key) {
- if (!config[key]) {
- return false;
- }
- const func = getGlobal(key);
- if (!func) {
- return false;
- }
- let index = emptyList[key].shift();
- if (index === void 0) {
- index = count[key];
- if (!setCount(func, key, index + 1)) {
- return false;
- }
- }
- try {
- const item = {
- cached: Math.floor(Date.now() / hour),
- provider,
- data
- };
- func.setItem(cachePrefix + index.toString(), JSON.stringify(item));
- } catch (err) {
- return false;
- }
- return true;
- }
- if (!Object.keys(data.icons).length) {
- return;
- }
- if (data.not_found) {
- data = Object.assign({}, data);
- delete data.not_found;
- }
- if (!store("local")) {
- store("session");
- }
- };
- var cache = {};
- function toggleBrowserCache(storage2, value) {
- switch (storage2) {
- case "local":
- case "session":
- config[storage2] = value;
- break;
- case "all":
- for (const key in config) {
- config[key] = value;
- }
- break;
- }
- }
- var storage = /* @__PURE__ */ Object.create(null);
- function setAPIModule(provider, item) {
- storage[provider] = item;
- }
- function getAPIModule(provider) {
- return storage[provider] || storage[""];
- }
- function createAPIConfig(source) {
- let resources;
- if (typeof source.resources === "string") {
- resources = [source.resources];
- } else {
- resources = source.resources;
- if (!(resources instanceof Array) || !resources.length) {
- return null;
- }
- }
- const result = {
- resources,
- path: source.path === void 0 ? "/" : source.path,
- maxURL: source.maxURL ? source.maxURL : 500,
- rotate: source.rotate ? source.rotate : 750,
- timeout: source.timeout ? source.timeout : 5e3,
- random: source.random === true,
- index: source.index ? source.index : 0,
- dataAfterTimeout: source.dataAfterTimeout !== false
- };
- return result;
- }
- var configStorage = /* @__PURE__ */ Object.create(null);
- var fallBackAPISources = [
- "https://api.simplesvg.com",
- "https://api.unisvg.com"
- ];
- var fallBackAPI = [];
- while (fallBackAPISources.length > 0) {
- if (fallBackAPISources.length === 1) {
- fallBackAPI.push(fallBackAPISources.shift());
- } else {
- if (Math.random() > 0.5) {
- fallBackAPI.push(fallBackAPISources.shift());
- } else {
- fallBackAPI.push(fallBackAPISources.pop());
- }
- }
- }
- configStorage[""] = createAPIConfig({
- resources: ["https://api.iconify.design"].concat(fallBackAPI)
- });
- function addAPIProvider(provider, customConfig) {
- const config2 = createAPIConfig(customConfig);
- if (config2 === null) {
- return false;
- }
- configStorage[provider] = config2;
- return true;
- }
- function getAPIConfig(provider) {
- return configStorage[provider];
- }
- function listAPIProviders() {
- return Object.keys(configStorage);
- }
- var mergeParams = (base, params) => {
- let result = base, hasParams = result.indexOf("?") !== -1;
- function paramToString(value) {
- switch (typeof value) {
- case "boolean":
- return value ? "true" : "false";
- case "number":
- return encodeURIComponent(value);
- case "string":
- return encodeURIComponent(value);
- default:
- throw new Error("Invalid parameter");
- }
- }
- Object.keys(params).forEach((key) => {
- let value;
- try {
- value = paramToString(params[key]);
- } catch (err) {
- return;
- }
- result += (hasParams ? "&" : "?") + encodeURIComponent(key) + "=" + value;
- hasParams = true;
- });
- return result;
- };
- var maxLengthCache = {};
- var pathCache = {};
- var detectFetch = () => {
- let callback2;
- try {
- callback2 = fetch;
- if (typeof callback2 === "function") {
- return callback2;
- }
- } catch (err) {
- }
- return null;
- };
- var fetchModule = detectFetch();
- function setFetch(fetch2) {
- fetchModule = fetch2;
- }
- function getFetch() {
- return fetchModule;
- }
- function calculateMaxLength(provider, prefix) {
- const config2 = getAPIConfig(provider);
- if (!config2) {
- return 0;
- }
- let result;
- if (!config2.maxURL) {
- result = 0;
- } else {
- let maxHostLength = 0;
- config2.resources.forEach((item) => {
- const host = item;
- maxHostLength = Math.max(maxHostLength, host.length);
- });
- const url = mergeParams(prefix + ".json", {
- icons: ""
- });
- result = config2.maxURL - maxHostLength - config2.path.length - url.length;
- }
- const cacheKey = provider + ":" + prefix;
- pathCache[provider] = config2.path;
- maxLengthCache[cacheKey] = result;
- return result;
- }
- function shouldAbort(status) {
- return status === 404;
- }
- var prepare = (provider, prefix, icons) => {
- const results = [];
- let maxLength = maxLengthCache[prefix];
- if (maxLength === void 0) {
- maxLength = calculateMaxLength(provider, prefix);
- }
- const type = "icons";
- let item = {
- type,
- provider,
- prefix,
- icons: []
- };
- let length = 0;
- icons.forEach((name, index) => {
- length += name.length + 1;
- if (length >= maxLength && index > 0) {
- results.push(item);
- item = {
- type,
- provider,
- prefix,
- icons: []
- };
- length = name.length;
- }
- item.icons.push(name);
- });
- results.push(item);
- return results;
- };
- function getPath(provider) {
- if (typeof provider === "string") {
- if (pathCache[provider] === void 0) {
- const config2 = getAPIConfig(provider);
- if (!config2) {
- return "/";
- }
- pathCache[provider] = config2.path;
- }
- return pathCache[provider];
- }
- return "/";
- }
- var send = (host, params, callback2) => {
- if (!fetchModule) {
- callback2("abort", 424);
- return;
- }
- let path = getPath(params.provider);
- switch (params.type) {
- case "icons": {
- const prefix = params.prefix;
- const icons = params.icons;
- const iconsList = icons.join(",");
- path += mergeParams(prefix + ".json", {
- icons: iconsList
- });
- break;
- }
- case "custom": {
- const uri = params.uri;
- path += uri.slice(0, 1) === "/" ? uri.slice(1) : uri;
- break;
- }
- default:
- callback2("abort", 400);
- return;
- }
- let defaultError = 503;
- fetchModule(host + path).then((response) => {
- const status = response.status;
- if (status !== 200) {
- setTimeout(() => {
- callback2(shouldAbort(status) ? "abort" : "next", status);
- });
- return;
- }
- defaultError = 501;
- return response.json();
- }).then((data) => {
- if (typeof data !== "object" || data === null) {
- setTimeout(() => {
- callback2("next", defaultError);
- });
- return;
- }
- setTimeout(() => {
- callback2("success", data);
- });
- }).catch(() => {
- callback2("next", defaultError);
- });
- };
- var fetchAPIModule = {
- prepare,
- send
- };
- function sortIcons(icons) {
- const result = {
- loaded: [],
- missing: [],
- pending: []
- };
- const storage2 = /* @__PURE__ */ Object.create(null);
- icons.sort((a, b) => {
- if (a.provider !== b.provider) {
- return a.provider.localeCompare(b.provider);
- }
- if (a.prefix !== b.prefix) {
- return a.prefix.localeCompare(b.prefix);
- }
- return a.name.localeCompare(b.name);
- });
- let lastIcon = {
- provider: "",
- prefix: "",
- name: ""
- };
- icons.forEach((icon) => {
- if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {
- return;
- }
- lastIcon = icon;
- const provider = icon.provider;
- const prefix = icon.prefix;
- const name = icon.name;
- if (storage2[provider] === void 0) {
- storage2[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerStorage = storage2[provider];
- if (providerStorage[prefix] === void 0) {
- providerStorage[prefix] = getStorage(provider, prefix);
- }
- const localStorage = providerStorage[prefix];
- let list;
- if (localStorage.icons[name] !== void 0) {
- list = result.loaded;
- } else if (prefix === "" || localStorage.missing[name] !== void 0) {
- list = result.missing;
- } else {
- list = result.pending;
- }
- const item = {
- provider,
- prefix,
- name
- };
- list.push(item);
- });
- return result;
- }
- var callbacks = /* @__PURE__ */ Object.create(null);
- var pendingUpdates = /* @__PURE__ */ Object.create(null);
- function removeCallback(sources, id) {
- sources.forEach((source) => {
- const provider = source.provider;
- if (callbacks[provider] === void 0) {
- return;
- }
- const providerCallbacks = callbacks[provider];
- const prefix = source.prefix;
- const items = providerCallbacks[prefix];
- if (items) {
- providerCallbacks[prefix] = items.filter((row) => row.id !== id);
- }
- });
- }
- function updateCallbacks(provider, prefix) {
- if (pendingUpdates[provider] === void 0) {
- pendingUpdates[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerPendingUpdates = pendingUpdates[provider];
- if (!providerPendingUpdates[prefix]) {
- providerPendingUpdates[prefix] = true;
- setTimeout(() => {
- providerPendingUpdates[prefix] = false;
- if (callbacks[provider] === void 0 || callbacks[provider][prefix] === void 0) {
- return;
- }
- const items = callbacks[provider][prefix].slice(0);
- if (!items.length) {
- return;
- }
- const storage2 = getStorage(provider, prefix);
- let hasPending = false;
- items.forEach((item) => {
- const icons = item.icons;
- const oldLength = icons.pending.length;
- icons.pending = icons.pending.filter((icon) => {
- if (icon.prefix !== prefix) {
- return true;
- }
- const name = icon.name;
- if (storage2.icons[name] !== void 0) {
- icons.loaded.push({
- provider,
- prefix,
- name
- });
- } else if (storage2.missing[name] !== void 0) {
- icons.missing.push({
- provider,
- prefix,
- name
- });
- } else {
- hasPending = true;
- return true;
- }
- return false;
- });
- if (icons.pending.length !== oldLength) {
- if (!hasPending) {
- removeCallback([
- {
- provider,
- prefix
- }
- ], item.id);
- }
- item.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);
- }
- });
- });
- }
- }
- var idCounter = 0;
- function storeCallback(callback2, icons, pendingSources) {
- const id = idCounter++;
- const abort = removeCallback.bind(null, pendingSources, id);
- if (!icons.pending.length) {
- return abort;
- }
- const item = {
- id,
- icons,
- callback: callback2,
- abort
- };
- pendingSources.forEach((source) => {
- const provider = source.provider;
- const prefix = source.prefix;
- if (callbacks[provider] === void 0) {
- callbacks[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerCallbacks = callbacks[provider];
- if (providerCallbacks[prefix] === void 0) {
- providerCallbacks[prefix] = [];
- }
- providerCallbacks[prefix].push(item);
- });
- return abort;
- }
- function listToIcons(list, validate = true, simpleNames2 = false) {
- const result = [];
- list.forEach((item) => {
- const icon = typeof item === "string" ? stringToIcon(item, false, simpleNames2) : item;
- if (!validate || validateIcon(icon, simpleNames2)) {
- result.push({
- provider: icon.provider,
- prefix: icon.prefix,
- name: icon.name
- });
- }
- });
- return result;
- }
- var defaultConfig = {
- resources: [],
- index: 0,
- timeout: 2e3,
- rotate: 750,
- random: false,
- dataAfterTimeout: false
- };
- function sendQuery(config2, payload, query, done) {
- const resourcesCount = config2.resources.length;
- const startIndex = config2.random ? Math.floor(Math.random() * resourcesCount) : config2.index;
- let resources;
- if (config2.random) {
- let list = config2.resources.slice(0);
- resources = [];
- while (list.length > 1) {
- const nextIndex = Math.floor(Math.random() * list.length);
- resources.push(list[nextIndex]);
- list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));
- }
- resources = resources.concat(list);
- } else {
- resources = config2.resources.slice(startIndex).concat(config2.resources.slice(0, startIndex));
- }
- const startTime = Date.now();
- let status = "pending";
- let queriesSent = 0;
- let lastError;
- let timer = null;
- let queue = [];
- let doneCallbacks = [];
- if (typeof done === "function") {
- doneCallbacks.push(done);
- }
- function resetTimer() {
- if (timer) {
- clearTimeout(timer);
- timer = null;
- }
- }
- function abort() {
- if (status === "pending") {
- status = "aborted";
- }
- resetTimer();
- queue.forEach((item) => {
- if (item.status === "pending") {
- item.status = "aborted";
- }
- });
- queue = [];
- }
- function subscribe(callback2, overwrite) {
- if (overwrite) {
- doneCallbacks = [];
- }
- if (typeof callback2 === "function") {
- doneCallbacks.push(callback2);
- }
- }
- function getQueryStatus() {
- return {
- startTime,
- payload,
- status,
- queriesSent,
- queriesPending: queue.length,
- subscribe,
- abort
- };
- }
- function failQuery() {
- status = "failed";
- doneCallbacks.forEach((callback2) => {
- callback2(void 0, lastError);
- });
- }
- function clearQueue() {
- queue.forEach((item) => {
- if (item.status === "pending") {
- item.status = "aborted";
- }
- });
- queue = [];
- }
- function moduleResponse(item, response, data) {
- const isError = response !== "success";
- queue = queue.filter((queued) => queued !== item);
- switch (status) {
- case "pending":
- break;
- case "failed":
- if (isError || !config2.dataAfterTimeout) {
- return;
- }
- break;
- default:
- return;
- }
- if (response === "abort") {
- lastError = data;
- failQuery();
- return;
- }
- if (isError) {
- lastError = data;
- if (!queue.length) {
- if (!resources.length) {
- failQuery();
- } else {
- execNext();
- }
- }
- return;
- }
- resetTimer();
- clearQueue();
- if (!config2.random) {
- const index = config2.resources.indexOf(item.resource);
- if (index !== -1 && index !== config2.index) {
- config2.index = index;
- }
- }
- status = "completed";
- doneCallbacks.forEach((callback2) => {
- callback2(data);
- });
- }
- function execNext() {
- if (status !== "pending") {
- return;
- }
- resetTimer();
- const resource = resources.shift();
- if (resource === void 0) {
- if (queue.length) {
- timer = setTimeout(() => {
- resetTimer();
- if (status === "pending") {
- clearQueue();
- failQuery();
- }
- }, config2.timeout);
- return;
- }
- failQuery();
- return;
- }
- const item = {
- status: "pending",
- resource,
- callback: (status2, data) => {
- moduleResponse(item, status2, data);
- }
- };
- queue.push(item);
- queriesSent++;
- timer = setTimeout(execNext, config2.rotate);
- query(resource, payload, item.callback);
- }
- setTimeout(execNext);
- return getQueryStatus;
- }
- function setConfig(config2) {
- if (typeof config2 !== "object" || typeof config2.resources !== "object" || !(config2.resources instanceof Array) || !config2.resources.length) {
- throw new Error("Invalid Reduncancy configuration");
- }
- const newConfig = /* @__PURE__ */ Object.create(null);
- let key;
- for (key in defaultConfig) {
- if (config2[key] !== void 0) {
- newConfig[key] = config2[key];
- } else {
- newConfig[key] = defaultConfig[key];
- }
- }
- return newConfig;
- }
- function initRedundancy(cfg) {
- const config2 = setConfig(cfg);
- let queries = [];
- function cleanup() {
- queries = queries.filter((item) => item().status === "pending");
- }
- function query(payload, queryCallback, doneCallback) {
- const query2 = sendQuery(config2, payload, queryCallback, (data, error) => {
- cleanup();
- if (doneCallback) {
- doneCallback(data, error);
- }
- });
- queries.push(query2);
- return query2;
- }
- function find(callback2) {
- const result = queries.find((value) => {
- return callback2(value);
- });
- return result !== void 0 ? result : null;
- }
- const instance = {
- query,
- find,
- setIndex: (index) => {
- config2.index = index;
- },
- getIndex: () => config2.index,
- cleanup
- };
- return instance;
- }
- function emptyCallback$1() {
- }
- var redundancyCache = /* @__PURE__ */ Object.create(null);
- function getRedundancyCache(provider) {
- if (redundancyCache[provider] === void 0) {
- const config2 = getAPIConfig(provider);
- if (!config2) {
- return;
- }
- const redundancy = initRedundancy(config2);
- const cachedReundancy = {
- config: config2,
- redundancy
- };
- redundancyCache[provider] = cachedReundancy;
- }
- return redundancyCache[provider];
- }
- function sendAPIQuery(target, query, callback2) {
- let redundancy;
- let send2;
- if (typeof target === "string") {
- const api = getAPIModule(target);
- if (!api) {
- callback2(void 0, 424);
- return emptyCallback$1;
- }
- send2 = api.send;
- const cached = getRedundancyCache(target);
- if (cached) {
- redundancy = cached.redundancy;
- }
- } else {
- const config2 = createAPIConfig(target);
- if (config2) {
- redundancy = initRedundancy(config2);
- const moduleKey = target.resources ? target.resources[0] : "";
- const api = getAPIModule(moduleKey);
- if (api) {
- send2 = api.send;
- }
- }
- }
- if (!redundancy || !send2) {
- callback2(void 0, 424);
- return emptyCallback$1;
- }
- return redundancy.query(query, send2, callback2)().abort;
- }
- function emptyCallback() {
- }
- var pendingIcons = /* @__PURE__ */ Object.create(null);
- var iconsToLoad = /* @__PURE__ */ Object.create(null);
- var loaderFlags = /* @__PURE__ */ Object.create(null);
- var queueFlags = /* @__PURE__ */ Object.create(null);
- function loadedNewIcons(provider, prefix) {
- if (loaderFlags[provider] === void 0) {
- loaderFlags[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerLoaderFlags = loaderFlags[provider];
- if (!providerLoaderFlags[prefix]) {
- providerLoaderFlags[prefix] = true;
- setTimeout(() => {
- providerLoaderFlags[prefix] = false;
- updateCallbacks(provider, prefix);
- });
- }
- }
- var errorsCache = /* @__PURE__ */ Object.create(null);
- function loadNewIcons(provider, prefix, icons) {
- function err() {
- const key = (provider === "" ? "" : "@" + provider + ":") + prefix;
- const time = Math.floor(Date.now() / 6e4);
- if (errorsCache[key] < time) {
- errorsCache[key] = time;
- console.error('Unable to retrieve icons for "' + key + '" because API is not configured properly.');
- }
- }
- if (iconsToLoad[provider] === void 0) {
- iconsToLoad[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerIconsToLoad = iconsToLoad[provider];
- if (queueFlags[provider] === void 0) {
- queueFlags[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerQueueFlags = queueFlags[provider];
- if (pendingIcons[provider] === void 0) {
- pendingIcons[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerPendingIcons = pendingIcons[provider];
- if (providerIconsToLoad[prefix] === void 0) {
- providerIconsToLoad[prefix] = icons;
- } else {
- providerIconsToLoad[prefix] = providerIconsToLoad[prefix].concat(icons).sort();
- }
- if (!providerQueueFlags[prefix]) {
- providerQueueFlags[prefix] = true;
- setTimeout(() => {
- providerQueueFlags[prefix] = false;
- const icons2 = providerIconsToLoad[prefix];
- delete providerIconsToLoad[prefix];
- const api = getAPIModule(provider);
- if (!api) {
- err();
- return;
- }
- const params = api.prepare(provider, prefix, icons2);
- params.forEach((item) => {
- sendAPIQuery(provider, item, (data, error) => {
- const storage2 = getStorage(provider, prefix);
- if (typeof data !== "object") {
- if (error !== 404) {
- return;
- }
- const t = Date.now();
- item.icons.forEach((name) => {
- storage2.missing[name] = t;
- });
- } else {
- try {
- const parsed = addIconSet(storage2, data);
- if (!parsed.length) {
- return;
- }
- const pending = providerPendingIcons[prefix];
- parsed.forEach((name) => {
- delete pending[name];
- });
- if (cache.store) {
- cache.store(provider, data);
- }
- } catch (err2) {
- console.error(err2);
- }
- }
- loadedNewIcons(provider, prefix);
- });
- });
- });
- }
- }
- var isPending = (icon) => {
- const provider = icon.provider;
- const prefix = icon.prefix;
- return pendingIcons[provider] && pendingIcons[provider][prefix] && pendingIcons[provider][prefix][icon.name] !== void 0;
- };
- var loadIcons = (icons, callback2) => {
- const cleanedIcons = listToIcons(icons, true, allowSimpleNames());
- const sortedIcons = sortIcons(cleanedIcons);
- if (!sortedIcons.pending.length) {
- let callCallback = true;
- if (callback2) {
- setTimeout(() => {
- if (callCallback) {
- callback2(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);
- }
- });
- }
- return () => {
- callCallback = false;
- };
- }
- const newIcons = /* @__PURE__ */ Object.create(null);
- const sources = [];
- let lastProvider, lastPrefix;
- sortedIcons.pending.forEach((icon) => {
- const provider = icon.provider;
- const prefix = icon.prefix;
- if (prefix === lastPrefix && provider === lastProvider) {
- return;
- }
- lastProvider = provider;
- lastPrefix = prefix;
- sources.push({
- provider,
- prefix
- });
- if (pendingIcons[provider] === void 0) {
- pendingIcons[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerPendingIcons = pendingIcons[provider];
- if (providerPendingIcons[prefix] === void 0) {
- providerPendingIcons[prefix] = /* @__PURE__ */ Object.create(null);
- }
- if (newIcons[provider] === void 0) {
- newIcons[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerNewIcons = newIcons[provider];
- if (providerNewIcons[prefix] === void 0) {
- providerNewIcons[prefix] = [];
- }
- });
- const time = Date.now();
- sortedIcons.pending.forEach((icon) => {
- const provider = icon.provider;
- const prefix = icon.prefix;
- const name = icon.name;
- const pendingQueue = pendingIcons[provider][prefix];
- if (pendingQueue[name] === void 0) {
- pendingQueue[name] = time;
- newIcons[provider][prefix].push(name);
- }
- });
- sources.forEach((source) => {
- const provider = source.provider;
- const prefix = source.prefix;
- if (newIcons[provider][prefix].length) {
- loadNewIcons(provider, prefix, newIcons[provider][prefix]);
- }
- });
- return callback2 ? storeCallback(callback2, sortedIcons, sources) : emptyCallback;
- };
- var loadIcon = (icon) => {
- return new Promise((fulfill, reject) => {
- const iconObj = typeof icon === "string" ? stringToIcon(icon) : icon;
- loadIcons([iconObj || icon], (loaded2) => {
- if (loaded2.length && iconObj) {
- const storage2 = getStorage(iconObj.provider, iconObj.prefix);
- const data = getIconFromStorage(storage2, iconObj.name);
- if (data) {
- fulfill(data);
- return;
- }
- }
- reject(icon);
- });
- });
- };
- var elementFinderProperty = "iconifyFinder" + Date.now();
- var elementDataProperty = "iconifyData" + Date.now();
- function renderIconInPlaceholder(placeholder, customisations, iconData, returnString) {
- let span;
- try {
- span = document.createElement("span");
- } catch (err) {
- return returnString ? "" : null;
- }
- const data = iconToSVG(iconData, mergeCustomisations(defaults, customisations));
- const placeholderElement = placeholder.element;
- const finder2 = placeholder.finder;
- const name = placeholder.name;
- const placeholderClassName = placeholderElement ? placeholderElement.getAttribute("class") : "";
- const filteredClassList = finder2 ? finder2.classFilter(placeholderClassName ? placeholderClassName.split(/\s+/) : []) : [];
- const className = "iconify iconify--" + name.prefix + (name.provider === "" ? "" : " iconify--" + name.provider) + (filteredClassList.length ? " " + filteredClassList.join(" ") : "");
- const html = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="' + className + '">' + replaceIDs(data.body) + "</svg>";
- span.innerHTML = html;
- const svg = span.childNodes[0];
- const svgStyle = svg.style;
- const svgAttributes = data.attributes;
- Object.keys(svgAttributes).forEach((attr) => {
- svg.setAttribute(attr, svgAttributes[attr]);
- });
- if (data.inline) {
- svgStyle.verticalAlign = "-0.125em";
- }
- if (placeholderElement) {
- const placeholderAttributes = placeholderElement.attributes;
- for (let i = 0; i < placeholderAttributes.length; i++) {
- const item = placeholderAttributes.item(i);
- if (item) {
- const name2 = item.name;
- if (name2 !== "class" && name2 !== "style" && svgAttributes[name2] === void 0) {
- try {
- svg.setAttribute(name2, item.value);
- } catch (err) {
- }
- }
- }
- }
- const placeholderStyle = placeholderElement.style;
- for (let i = 0; i < placeholderStyle.length; i++) {
- const attr = placeholderStyle[i];
- svgStyle[attr] = placeholderStyle[attr];
- }
- }
- if (finder2) {
- const elementData = {
- name,
- status: "loaded",
- customisations
- };
- svg[elementDataProperty] = elementData;
- svg[elementFinderProperty] = finder2;
- }
- const result = returnString ? span.innerHTML : svg;
- if (placeholderElement && placeholderElement.parentNode) {
- placeholderElement.parentNode.replaceChild(svg, placeholderElement);
- } else {
- span.removeChild(svg);
- }
- return result;
- }
- var nodes = [];
- function findRootNode(node) {
- for (let i = 0; i < nodes.length; i++) {
- const item = nodes[i];
- const root = typeof item.node === "function" ? item.node() : item.node;
- if (root === node) {
- return item;
- }
- }
- }
- function addRootNode(root, autoRemove = false) {
- let node = findRootNode(root);
- if (node) {
- if (node.temporary) {
- node.temporary = autoRemove;
- }
- return node;
- }
- node = {
- node: root,
- temporary: autoRemove
- };
- nodes.push(node);
- return node;
- }
- function addBodyNode() {
- if (document.documentElement) {
- return addRootNode(document.documentElement);
- }
- nodes.push({
- node: () => {
- return document.documentElement;
- }
- });
- }
- function removeRootNode(root) {
- nodes = nodes.filter((node) => {
- const element = typeof node.node === "function" ? node.node() : node.node;
- return root !== element;
- });
- }
- function listRootNodes() {
- return nodes;
- }
- function onReady(callback2) {
- const doc = document;
- if (doc.readyState === "complete" || doc.readyState !== "loading" && !doc.documentElement.doScroll) {
- callback2();
- } else {
- doc.addEventListener("DOMContentLoaded", callback2);
- window.addEventListener("load", callback2);
- }
- }
- var callback = null;
- var observerParams = {
- childList: true,
- subtree: true,
- attributes: true
- };
- function queueScan(node) {
- if (!node.observer) {
- return;
- }
- const observer = node.observer;
- if (!observer.pendingScan) {
- observer.pendingScan = setTimeout(() => {
- delete observer.pendingScan;
- if (callback) {
- callback(node);
- }
- });
- }
- }
- function checkMutations(node, mutations) {
- if (!node.observer) {
- return;
- }
- const observer = node.observer;
- if (!observer.pendingScan) {
- for (let i = 0; i < mutations.length; i++) {
- const item = mutations[i];
- if (item.addedNodes && item.addedNodes.length > 0 || item.type === "attributes" && item.target[elementFinderProperty] !== void 0) {
- if (!observer.paused) {
- queueScan(node);
- }
- return;
- }
- }
- }
- }
- function continueObserving(node, root) {
- node.observer.instance.observe(root, observerParams);
- }
- function startObserver(node) {
- let observer = node.observer;
- if (observer && observer.instance) {
- return;
- }
- const root = typeof node.node === "function" ? node.node() : node.node;
- if (!root) {
- return;
- }
- if (!observer) {
- observer = {
- paused: 0
- };
- node.observer = observer;
- }
- observer.instance = new MutationObserver(checkMutations.bind(null, node));
- continueObserving(node, root);
- if (!observer.paused) {
- queueScan(node);
- }
- }
- function startObservers() {
- listRootNodes().forEach(startObserver);
- }
- function stopObserver(node) {
- if (!node.observer) {
- return;
- }
- const observer = node.observer;
- if (observer.pendingScan) {
- clearTimeout(observer.pendingScan);
- delete observer.pendingScan;
- }
- if (observer.instance) {
- observer.instance.disconnect();
- delete observer.instance;
- }
- }
- function initObserver(cb) {
- const isRestart = callback !== null;
- if (callback !== cb) {
- callback = cb;
- if (isRestart) {
- listRootNodes().forEach(stopObserver);
- }
- }
- if (isRestart) {
- startObservers();
- return;
- }
- onReady(startObservers);
- }
- function pauseObservingNode(node) {
- (node ? [node] : listRootNodes()).forEach((node2) => {
- if (!node2.observer) {
- node2.observer = {
- paused: 1
- };
- return;
- }
- const observer = node2.observer;
- observer.paused++;
- if (observer.paused > 1 || !observer.instance) {
- return;
- }
- const instance = observer.instance;
- instance.disconnect();
- });
- }
- function pauseObserver(root) {
- if (root) {
- const node = findRootNode(root);
- if (node) {
- pauseObservingNode(node);
- }
- } else {
- pauseObservingNode();
- }
- }
- function resumeObservingNode(observer) {
- (observer ? [observer] : listRootNodes()).forEach((node) => {
- if (!node.observer) {
- startObserver(node);
- return;
- }
- const observer2 = node.observer;
- if (observer2.paused) {
- observer2.paused--;
- if (!observer2.paused) {
- const root = typeof node.node === "function" ? node.node() : node.node;
- if (!root) {
- return;
- } else if (observer2.instance) {
- continueObserving(node, root);
- } else {
- startObserver(node);
- }
- }
- }
- });
- }
- function resumeObserver(root) {
- if (root) {
- const node = findRootNode(root);
- if (node) {
- resumeObservingNode(node);
- }
- } else {
- resumeObservingNode();
- }
- }
- function observe(root, autoRemove = false) {
- const node = addRootNode(root, autoRemove);
- startObserver(node);
- return node;
- }
- function stopObserving(root) {
- const node = findRootNode(root);
- if (node) {
- stopObserver(node);
- removeRootNode(root);
- }
- }
- var finders = [];
- function addFinder(finder2) {
- if (finders.indexOf(finder2) === -1) {
- finders.push(finder2);
- }
- }
- function cleanIconName(name) {
- if (typeof name === "string") {
- name = stringToIcon(name);
- }
- return name === null || !validateIcon(name) ? null : name;
- }
- function compareCustomisations(list1, list2) {
- const keys1 = Object.keys(list1);
- const keys2 = Object.keys(list2);
- if (keys1.length !== keys2.length) {
- return false;
- }
- for (let i = 0; i < keys1.length; i++) {
- const key = keys1[i];
- if (list2[key] !== list1[key]) {
- return false;
- }
- }
- return true;
- }
- function findPlaceholders(root) {
- const results = [];
- finders.forEach((finder2) => {
- const elements2 = finder2.find(root);
- Array.prototype.forEach.call(elements2, (item) => {
- const element = item;
- if (element[elementFinderProperty] !== void 0 && element[elementFinderProperty] !== finder2) {
- return;
- }
- const name = cleanIconName(finder2.name(element));
- if (name === null) {
- return;
- }
- element[elementFinderProperty] = finder2;
- const placeholder = {
- element,
- finder: finder2,
- name
- };
- results.push(placeholder);
- });
- });
- const elements = root.querySelectorAll("svg.iconify");
- Array.prototype.forEach.call(elements, (item) => {
- const element = item;
- const finder2 = element[elementFinderProperty];
- const data = element[elementDataProperty];
- if (!finder2 || !data) {
- return;
- }
- const name = cleanIconName(finder2.name(element));
- if (name === null) {
- return;
- }
- let updated = false;
- let customisations;
- if (name.prefix !== data.name.prefix || name.name !== data.name.name) {
- updated = true;
- } else {
- customisations = finder2.customisations(element);
- if (!compareCustomisations(data.customisations, customisations)) {
- updated = true;
- }
- }
- if (updated) {
- const placeholder = {
- element,
- finder: finder2,
- name,
- customisations
- };
- results.push(placeholder);
- }
- });
- return results;
- }
- var scanQueued = false;
- function checkPendingIcons() {
- if (!scanQueued) {
- scanQueued = true;
- setTimeout(() => {
- if (scanQueued) {
- scanQueued = false;
- scanDOM();
- }
- });
- }
- }
- var compareIcons = (icon1, icon2) => {
- return icon1 !== null && icon2 !== null && icon1.name === icon2.name && icon1.prefix === icon2.prefix;
- };
- function scanElement(root) {
- const node = findRootNode(root);
- if (!node) {
- scanDOM({
- node: root,
- temporary: true
- }, true);
- } else {
- scanDOM(node);
- }
- }
- function scanDOM(node, addTempNode = false) {
- scanQueued = false;
- const iconsToLoad2 = /* @__PURE__ */ Object.create(null);
- (node ? [node] : listRootNodes()).forEach((node2) => {
- const root = typeof node2.node === "function" ? node2.node() : node2.node;
- if (!root || !root.querySelectorAll) {
- return;
- }
- let hasPlaceholders = false;
- let paused = false;
- findPlaceholders(root).forEach((item) => {
- const element = item.element;
- const iconName = item.name;
- const provider = iconName.provider;
- const prefix = iconName.prefix;
- const name = iconName.name;
- let data = element[elementDataProperty];
- if (data !== void 0 && compareIcons(data.name, iconName)) {
- switch (data.status) {
- case "missing":
- return;
- case "loading":
- if (isPending({
- provider,
- prefix,
- name
- })) {
- hasPlaceholders = true;
- return;
- }
- }
- }
- const storage2 = getStorage(provider, prefix);
- if (storage2.icons[name] !== void 0) {
- if (!paused && node2.observer) {
- pauseObservingNode(node2);
- paused = true;
- }
- const customisations = item.customisations !== void 0 ? item.customisations : item.finder.customisations(element);
- renderIconInPlaceholder(item, customisations, getIconFromStorage(storage2, name));
- return;
- }
- if (storage2.missing[name]) {
- data = {
- name: iconName,
- status: "missing",
- customisations: {}
- };
- element[elementDataProperty] = data;
- return;
- }
- if (!isPending({ provider, prefix, name })) {
- if (iconsToLoad2[provider] === void 0) {
- iconsToLoad2[provider] = /* @__PURE__ */ Object.create(null);
- }
- const providerIconsToLoad = iconsToLoad2[provider];
- if (providerIconsToLoad[prefix] === void 0) {
- providerIconsToLoad[prefix] = /* @__PURE__ */ Object.create(null);
- }
- providerIconsToLoad[prefix][name] = true;
- }
- data = {
- name: iconName,
- status: "loading",
- customisations: {}
- };
- element[elementDataProperty] = data;
- hasPlaceholders = true;
- });
- if (node2.temporary && !hasPlaceholders) {
- stopObserving(root);
- } else if (addTempNode && hasPlaceholders) {
- observe(root, true);
- } else if (paused && node2.observer) {
- resumeObservingNode(node2);
- }
- });
- Object.keys(iconsToLoad2).forEach((provider) => {
- const providerIconsToLoad = iconsToLoad2[provider];
- Object.keys(providerIconsToLoad).forEach((prefix) => {
- loadIcons(Object.keys(providerIconsToLoad[prefix]).map((name) => {
- const icon = {
- provider,
- prefix,
- name
- };
- return icon;
- }), checkPendingIcons);
- });
- });
- }
- function rotateFromString(value, defaultValue = 0) {
- const units = value.replace(/^-?[0-9.]*/, "");
- function cleanup(value2) {
- while (value2 < 0) {
- value2 += 4;
- }
- return value2 % 4;
- }
- if (units === "") {
- const num = parseInt(value);
- return isNaN(num) ? 0 : cleanup(num);
- } else if (units !== value) {
- let split = 0;
- switch (units) {
- case "%":
- split = 25;
- break;
- case "deg":
- split = 90;
- }
- if (split) {
- let num = parseFloat(value.slice(0, value.length - units.length));
- if (isNaN(num)) {
- return 0;
- }
- num = num / split;
- return num % 1 === 0 ? cleanup(num) : 0;
- }
- }
- return defaultValue;
- }
- var separator = /[\s,]+/;
- function flipFromString(custom, flip) {
- flip.split(separator).forEach((str) => {
- const value = str.trim();
- switch (value) {
- case "horizontal":
- custom.hFlip = true;
- break;
- case "vertical":
- custom.vFlip = true;
- break;
- }
- });
- }
- function alignmentFromString(custom, align) {
- align.split(separator).forEach((str) => {
- const value = str.trim();
- switch (value) {
- case "left":
- case "center":
- case "right":
- custom.hAlign = value;
- break;
- case "top":
- case "middle":
- case "bottom":
- custom.vAlign = value;
- break;
- case "slice":
- case "crop":
- custom.slice = true;
- break;
- case "meet":
- custom.slice = false;
- }
- });
- }
- function hasAttribute(element, key) {
- return element.hasAttribute(key);
- }
- function getAttribute(element, key) {
- return element.getAttribute(key);
- }
- function getBooleanAttribute(element, key) {
- const value = element.getAttribute(key);
- if (value === key || value === "true") {
- return true;
- }
- if (value === "" || value === "false") {
- return false;
- }
- return null;
- }
- var booleanAttributes = [
- "inline",
- "hFlip",
- "vFlip"
- ];
- var stringAttributes = [
- "width",
- "height"
- ];
- var mainClass = "iconify";
- var inlineClass = "iconify-inline";
- var selector = "i." + mainClass + ", span." + mainClass + ", i." + inlineClass + ", span." + inlineClass;
- var finder = {
- find: (root) => root.querySelectorAll(selector),
- name: (element) => {
- if (hasAttribute(element, "data-icon")) {
- return getAttribute(element, "data-icon");
- }
- return null;
- },
- customisations: (element, defaultValues = {
- inline: false
- }) => {
- const result = defaultValues;
- const className = element.getAttribute("class");
- const classList = className ? className.split(/\s+/) : [];
- if (classList.indexOf(inlineClass) !== -1) {
- result.inline = true;
- }
- if (hasAttribute(element, "data-rotate")) {
- const value = rotateFromString(getAttribute(element, "data-rotate"));
- if (value) {
- result.rotate = value;
- }
- }
- if (hasAttribute(element, "data-flip")) {
- flipFromString(result, getAttribute(element, "data-flip"));
- }
- if (hasAttribute(element, "data-align")) {
- alignmentFromString(result, getAttribute(element, "data-align"));
- }
- booleanAttributes.forEach((attr) => {
- if (hasAttribute(element, "data-" + attr)) {
- const value = getBooleanAttribute(element, "data-" + attr);
- if (typeof value === "boolean") {
- result[attr] = value;
- }
- }
- });
- stringAttributes.forEach((attr) => {
- if (hasAttribute(element, "data-" + attr)) {
- const value = getAttribute(element, "data-" + attr);
- if (value !== "") {
- result[attr] = value;
- }
- }
- });
- return result;
- },
- classFilter: (classList) => {
- const result = [];
- classList.forEach((className) => {
- if (className !== "iconify" && className !== "" && className.slice(0, 9) !== "iconify--") {
- result.push(className);
- }
- });
- return result;
- }
- };
- function generateIcon(name, customisations, returnString) {
- const iconData = getIconData(name);
- if (!iconData) {
- return null;
- }
- const iconName = stringToIcon(name);
- const changes = mergeCustomisations(defaults, typeof customisations === "object" ? customisations : {});
- return renderIconInPlaceholder({
- name: iconName
- }, changes, iconData, returnString);
- }
- function getVersion() {
- return "2.2.1";
- }
- function renderSVG(name, customisations) {
- return generateIcon(name, customisations, false);
- }
- function renderHTML(name, customisations) {
- return generateIcon(name, customisations, true);
- }
- function renderIcon(name, customisations) {
- const iconData = getIconData(name);
- if (!iconData) {
- return null;
- }
- const changes = mergeCustomisations(defaults, typeof customisations === "object" ? customisations : {});
- return iconToSVG(iconData, changes);
- }
- function scan(root) {
- if (root) {
- scanElement(root);
- } else {
- scanDOM();
- }
- }
- if (typeof document !== "undefined" && typeof window !== "undefined") {
- addBodyNode();
- addFinder(finder);
- const _window2 = window;
- if (_window2.IconifyPreload !== void 0) {
- const preload = _window2.IconifyPreload;
- const err = "Invalid IconifyPreload syntax.";
- if (typeof preload === "object" && preload !== null) {
- (preload instanceof Array ? preload : [preload]).forEach((item) => {
- try {
- if (typeof item !== "object" || item === null || item instanceof Array || typeof item.icons !== "object" || typeof item.prefix !== "string" || !addCollection(item)) {
- console.error(err);
- }
- } catch (e) {
- console.error(err);
- }
- });
- }
- }
- setTimeout(() => {
- initObserver(scanDOM);
- scanDOM();
- });
- }
- function enableCache(storage2, enable) {
- toggleBrowserCache(storage2, enable !== false);
- }
- function disableCache(storage2) {
- toggleBrowserCache(storage2, true);
- }
- setAPIModule("", fetchAPIModule);
- if (typeof document !== "undefined" && typeof window !== "undefined") {
- cache.store = storeCache;
- loadCache();
- const _window2 = window;
- if (_window2.IconifyProviders !== void 0) {
- const providers = _window2.IconifyProviders;
- if (typeof providers === "object" && providers !== null) {
- for (const key in providers) {
- const err = "IconifyProviders[" + key + "] is invalid.";
- try {
- const value = providers[key];
- if (typeof value !== "object" || !value || value.resources === void 0) {
- continue;
- }
- if (!addAPIProvider(key, value)) {
- console.error(err);
- }
- } catch (e) {
- console.error(err);
- }
- }
- }
- }
- }
- var _api = {
- getAPIConfig,
- setAPIModule,
- sendAPIQuery,
- setFetch,
- getFetch,
- listAPIProviders,
- mergeParams
- };
- var Iconify = {
- _api,
- addAPIProvider,
- loadIcons,
- loadIcon,
- iconExists,
- getIcon,
- listIcons,
- addIcon,
- addCollection,
- shareStorage,
- replaceIDs,
- calculateSize,
- buildIcon,
- getVersion,
- renderSVG,
- renderHTML,
- renderIcon,
- scan,
- observe,
- stopObserving,
- pauseObserver,
- resumeObserver,
- enableCache,
- disableCache
- };
- try {
- if (self.Iconify === void 0) {
- self.Iconify = Iconify;
- }
- } catch (err) {
- }
- // dep:@iconify_iconify
- var iconify_iconify_default = Iconify;
- export {
- _api,
- addAPIProvider,
- addCollection,
- addIcon,
- buildIcon,
- calculateSize,
- iconify_iconify_default as default,
- disableCache,
- enableCache,
- getIcon,
- getVersion,
- iconExists,
- listIcons,
- loadIcon,
- loadIcons,
- observe,
- pauseObserver,
- renderHTML,
- renderIcon,
- renderSVG,
- replaceIDs,
- resumeObserver,
- scan,
- shareStorage,
- stopObserving
- };
- /**
- * (c) Iconify
- *
- * For the full copyright and license information, please view the license.txt or license.gpl.txt
- * files at https://github.com/iconify/iconify
- *
- * Licensed under Apache 2.0 or GPL 2.0 at your option.
- * If derivative product is not compatible with one of licenses, you can pick one of licenses.
- *
- * @license Apache 2.0
- * @license GPL 2.0
- * @version 2.2.1
- */
- //# sourceMappingURL=@iconify_iconify.js.map
|