import { warnOnce } from '@unocss/core'; function encodeSVGforURL(svg) { return svg.replace(/"/g, "'").replace(/%/g, "%25").replace(/#/g, "%23").replace(//g, "%3E").replace(/\s+/g, " "); } function encodeSvgForCss(svg) { let useSvg = svg.startsWith("") ? svg.replace("", "") : svg; if (!useSvg.includes(" xmlns:xlink=") && useSvg.includes(" xlink:")) { useSvg = useSvg.replace( " { let collection = ""; let name = ""; let svg; iconLoader = iconLoader || await lookupIconLoader(options); const usedProps = {}; if (body.includes(":")) { [collection, name] = body.split(":"); svg = await iconLoader(collection, name, { ...loaderOptions, usedProps }); } else { const parts = body.split(/-/g); for (let i = COLLECTION_NAME_PARTS_MAX; i >= 1; i--) { collection = parts.slice(0, i).join("-"); name = parts.slice(i).join("-"); svg = await iconLoader(collection, name, { ...loaderOptions, usedProps }); if (svg) break; } } if (!svg) { if (warn) warnOnce(`failed to load icon "${full}"`); return; } const url = `url("data:image/svg+xml;utf8,${encodeSvgForCss(svg)}")`; if (_mode === "auto") _mode = svg.includes("currentColor") ? "mask" : "bg"; if (_mode === "mask") { return { "--un-icon": url, "-webkit-mask": "var(--un-icon) no-repeat", "mask": "var(--un-icon) no-repeat", "-webkit-mask-size": "100% 100%", "mask-size": "100% 100%", "background-color": "currentColor", "color": "inherit", ...usedProps }; } else { return { "background": `${url} no-repeat`, "background-size": "100% 100%", "background-color": "transparent", ...usedProps }; } }, { layer, prefix } ]] }; }; } function combineLoaders(loaders) { return async (...args) => { for (const loader of loaders) { const result = await loader(...args); if (result) return result; } }; } export { combineLoaders, createPresetIcons };