{"version":3,"sources":["jsdelivr-header.js","/npm/unifont@0.7.4/dist/index.mjs"],"names":[],"mappings":"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","file":"/npm/unifont@0.7.4/dist/index.mjs","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/unifont@0.7.4/dist/index.mjs\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { t as __exportAll } from \"./chunk-DQk6qfdC.mjs\";\nimport { hash } from \"ohash\";\nimport { findAll, generate, parse } from \"css-tree\";\nimport { ofetch } from \"ofetch\";\n\n//#region src/css/parse.ts\nconst extractableKeyMap = {\n\t\"src\": \"src\",\n\t\"font-display\": \"display\",\n\t\"font-weight\": \"weight\",\n\t\"font-style\": \"style\",\n\t\"font-feature-settings\": \"featureSettings\",\n\t\"font-variation-settings\": \"variationSettings\",\n\t\"unicode-range\": \"unicodeRange\"\n};\nconst formatPriorityList = Object.values({\n\twoff2: \"woff2\",\n\twoff: \"woff\",\n\totf: \"opentype\",\n\tttf: \"truetype\",\n\teot: \"embedded-opentype\",\n\tsvg: \"svg\"\n});\nfunction extractFontFaceData(css, family) {\n\tconst fontFaces = [];\n\tfor (const node of findAll(parse(css), (node) => node.type === \"Atrule\" && node.name === \"font-face\")) {\n\t\t/* v8 ignore next 3 */\n\t\tif (node.type !== \"Atrule\" || node.name !== \"font-face\") continue;\n\t\tif (family) {\n\t\t\tif (!node.block?.children.some((child) => {\n\t\t\t\tif (child.type !== \"Declaration\" || child.property !== \"font-family\") return false;\n\t\t\t\tconst value = extractCSSValue(child);\n\t\t\t\tconst slug = family.toLowerCase();\n\t\t\t\tif (typeof value === \"string\" && value.toLowerCase() === slug) return true;\n\t\t\t\tif (Array.isArray(value) && value.length > 0 && value.some((v) => v.toLowerCase() === slug)) return true;\n\t\t\t\treturn false;\n\t\t\t})) continue;\n\t\t}\n\t\tconst data = {};\n\t\tfor (const child of node.block?.children || []) if (child.type === \"Declaration\" && child.property in extractableKeyMap) {\n\t\t\tconst value = extractCSSValue(child);\n\t\t\tdata[extractableKeyMap[child.property]] = [\"src\", \"unicode-range\"].includes(child.property) && !Array.isArray(value) ? [value] : value;\n\t\t}\n\t\tif (!data.src) continue;\n\t\tfontFaces.push(data);\n\t}\n\treturn mergeFontSources(fontFaces);\n}\nfunction processRawValue(value) {\n\treturn value.split(\",\").map((v) => v.trim().replace(/^(?<quote>['\"])(.*)\\k<quote>$/, \"$2\"));\n}\nfunction extractCSSValue(node) {\n\tif (node.value.type === \"Raw\") return processRawValue(node.value.value);\n\tconst values = [];\n\tlet buffer = \"\";\n\tfor (const child of node.value.children) {\n\t\tif (child.type === \"Function\") {\n\t\t\tif (child.name === \"local\" && child.children.first?.type === \"String\") values.push({ name: child.children.first.value });\n\t\t\tif (child.name === \"format\") {\n\t\t\t\tif (child.children.first?.type === \"String\") values.at(-1).format = child.children.first.value;\n\t\t\t\telse if (child.children.first?.type === \"Identifier\") values.at(-1).format = child.children.first.name;\n\t\t\t}\n\t\t\tif (child.name === \"tech\") {\n\t\t\t\tif (child.children.first?.type === \"String\") values.at(-1).tech = child.children.first.value;\n\t\t\t\telse if (child.children.first?.type === \"Identifier\") values.at(-1).tech = child.children.first.name;\n\t\t\t}\n\t\t}\n\t\tif (child.type === \"Url\") values.push({ url: child.value });\n\t\tif (child.type === \"Identifier\") buffer = buffer ? `${buffer} ${child.name}` : child.name;\n\t\tif (child.type === \"String\") values.push(child.value);\n\t\tif (child.type === \"Dimension\") {\n\t\t\tconst dimensionValue = child.value + child.unit;\n\t\t\tbuffer = buffer ? `${buffer} ${dimensionValue}` : dimensionValue;\n\t\t}\n\t\tif (child.type === \"Operator\" && child.value === \",\" && buffer) {\n\t\t\tvalues.push(buffer);\n\t\t\tbuffer = \"\";\n\t\t}\n\t\tif (child.type === \"UnicodeRange\") values.push(child.value);\n\t\tif (child.type === \"Number\") values.push(Number(child.value));\n\t}\n\tif (buffer) values.push(buffer);\n\tif (values.length === 1) return values[0];\n\treturn values;\n}\nfunction mergeFontSources(data) {\n\tconst mergedData = [];\n\tfor (const face of data) {\n\t\tconst keys = Object.keys(face).filter((k) => k !== \"src\");\n\t\tconst existing = mergedData.find((f) => Object.keys(f).length === keys.length + 1 && keys.every((key) => f[key]?.toString() === face[key]?.toString()));\n\t\tif (existing) {\n\t\t\tfor (const s of face.src) if (existing.src.every((src) => \"url\" in src ? !(\"url\" in s) || s.url !== src.url : !(\"name\" in s) || s.name !== src.name)) existing.src.push(s);\n\t\t} else mergedData.push(face);\n\t}\n\tfor (const face of mergedData) face.src.sort((a, b) => {\n\t\treturn (\"format\" in a ? formatPriorityList.indexOf(a.format || \"woff2\") : -2) - (\"format\" in b ? formatPriorityList.indexOf(b.format || \"woff2\") : -2);\n\t});\n\treturn mergedData;\n}\n\n//#endregion\n//#region src/fetch.ts\nfunction mini$fetch(url, options) {\n\tconst retries = options?.retries ?? 3;\n\tconst retryDelay = options?.retryDelay ?? 1e3;\n\treturn ofetch(url, {\n\t\tbaseURL: options?.baseURL,\n\t\tquery: options?.query,\n\t\tresponseType: options?.responseType ?? \"text\",\n\t\theaders: options?.headers,\n\t\tretry: false\n\t}).catch((err) => {\n\t\tif (retries <= 0) throw err;\n\t\tconsole.warn(`Could not fetch from \\`${(options?.baseURL ?? \"\") + url}\\`. Will retry in \\`${retryDelay}ms\\`. \\`${retries}\\` retries left.`);\n\t\treturn new Promise((resolve) => setTimeout(resolve, retryDelay)).then(() => mini$fetch(url, {\n\t\t\t...options,\n\t\t\tretries: retries - 1\n\t\t}));\n\t});\n}\nconst $fetch = Object.assign(mini$fetch, { create: (defaults) => (url, options) => mini$fetch(url, {\n\t...defaults,\n\t...options\n}) });\n\n//#endregion\n//#region src/utils.ts\nfunction defineFontProvider(name, provider) {\n\treturn ((options) => Object.assign(provider.bind(null, options || {}), {\n\t\t_name: name,\n\t\t_options: options\n\t}));\n}\nfunction prepareWeights({ inputWeights, weights, hasVariableWeights }) {\n\tconst collectedWeights = [];\n\tfor (const weight of inputWeights) {\n\t\tif (weight.includes(\" \")) {\n\t\t\tif (hasVariableWeights) {\n\t\t\t\tcollectedWeights.push(weight);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [min, max] = weight.split(\" \");\n\t\t\tcollectedWeights.push(...weights.filter((_w) => {\n\t\t\t\tconst w = Number(_w);\n\t\t\t\treturn w >= Number(min) && w <= Number(max);\n\t\t\t}).map((w) => String(w)));\n\t\t\tcontinue;\n\t\t}\n\t\tif (weights.includes(weight)) collectedWeights.push(weight);\n\t}\n\treturn [...new Set(collectedWeights)].map((weight) => ({\n\t\tweight,\n\t\tvariable: weight.includes(\" \")\n\t}));\n}\nfunction splitCssIntoSubsets(input) {\n\tconst data = [];\n\tconst comments = [];\n\tconst nodes = findAll(parse(input, {\n\t\tpositions: true,\n\t\tonComment(value, loc) {\n\t\t\tcomments.push({\n\t\t\t\tvalue: value.trim(),\n\t\t\t\tendLine: loc.end.line\n\t\t\t});\n\t\t}\n\t}), (node) => node.type === \"Atrule\" && node.name === \"font-face\");\n\tif (comments.length === 0) return [{\n\t\tsubset: null,\n\t\tcss: input\n\t}];\n\tfor (const node of nodes) {\n\t\tconst comment = comments.filter((comment) => comment.endLine < node.loc.start.line).at(-1);\n\t\tdata.push({\n\t\t\tsubset: comment?.value ?? null,\n\t\t\tcss: generate(node)\n\t\t});\n\t}\n\treturn data;\n}\nconst formatMap = {\n\twoff2: \"woff2\",\n\twoff: \"woff\",\n\totf: \"opentype\",\n\tttf: \"truetype\",\n\teot: \"embedded-opentype\"\n};\n/** Maps variation format strings (e.g. 'woff2-variations') to their base CSS format name (e.g. 'woff2') */\nconst variationFormatMap = {\n\t\"woff2-variations\": \"woff2\",\n\t\"woff-variations\": \"woff\",\n\t\"opentype-variations\": \"opentype\",\n\t\"truetype-variations\": \"truetype\"\n};\nfunction computeIdFromSource(source) {\n\treturn \"name\" in source ? source.name : source.url;\n}\nfunction cleanFontFaces(fonts, _formats) {\n\tconst formats = _formats.map((format) => formatMap[format]);\n\tconst result = [];\n\tconst hashToIndex = /* @__PURE__ */ new Map();\n\tfor (const { src: _src, meta, ...font } of fonts) {\n\t\tconst key = hash(font);\n\t\tconst index = hashToIndex.get(key);\n\t\tconst src = _src.map((source) => \"name\" in source ? source : {\n\t\t\t...source,\n\t\t\t...source.format ? { format: formatMap[source.format] ?? source.format } : {}\n\t\t}).filter((source) => {\n\t\t\tif (\"name\" in source) return true;\n\t\t\tif (!source.format) return true;\n\t\t\tif (formats.includes(source.format)) return true;\n\t\t\tconst baseFormat = variationFormatMap[source.format];\n\t\t\treturn !!baseFormat && formats.includes(baseFormat);\n\t\t});\n\t\tif (src.length === 0) continue;\n\t\tif (index === void 0) {\n\t\t\thashToIndex.set(key, result.push({\n\t\t\t\t...font,\n\t\t\t\t...meta ? { meta } : {},\n\t\t\t\tsrc\n\t\t\t}) - 1);\n\t\t\tcontinue;\n\t\t}\n\t\tconst existing = result[index];\n\t\tconst ids = new Set(existing.src.map((source) => computeIdFromSource(source)));\n\t\texisting.src.push(...src.filter((source) => {\n\t\t\tconst id = computeIdFromSource(source);\n\t\t\treturn !ids.has(id) && ids.add(id);\n\t\t}));\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/providers/adobe.ts\nconst fontCSSAPI = $fetch.create({ baseURL: \"https://use.typekit.net\" });\nasync function getAdobeFontMeta(id) {\n\tconst { kit } = await $fetch(`https://typekit.com/api/v1/json/kits/${id}/published`, { responseType: \"json\" });\n\treturn kit;\n}\nconst KIT_REFRESH_TIMEOUT = 300 * 1e3;\nvar adobe_default = defineFontProvider(\"adobe\", async (options, ctx) => {\n\tif (!options.id) return;\n\tconst familyMap = /* @__PURE__ */ new Map();\n\tconst notFoundFamilies = /* @__PURE__ */ new Set();\n\tconst fonts = { kits: [] };\n\tlet lastRefreshKitTime;\n\tlet fetchKitsPromise;\n\tconst kits = typeof options.id === \"string\" ? [options.id] : options.id;\n\tawait fetchKits();\n\tasync function fetchKits(bypassCache = false) {\n\t\tfamilyMap.clear();\n\t\tnotFoundFamilies.clear();\n\t\tfonts.kits = [];\n\t\tawait Promise.all(kits.map(async (id) => {\n\t\t\tlet meta;\n\t\t\tconst key = `adobe:meta-${id}.json`;\n\t\t\tif (bypassCache) {\n\t\t\t\tmeta = await getAdobeFontMeta(id);\n\t\t\t\tawait ctx.storage.setItem(key, meta);\n\t\t\t} else meta = await ctx.storage.getItem(key, () => getAdobeFontMeta(id));\n\t\t\tif (!meta) throw new TypeError(\"No font metadata found in adobe response.\");\n\t\t\tfonts.kits.push(meta);\n\t\t\tfor (const family of meta.families) familyMap.set(family.name, family.id);\n\t\t}));\n\t}\n\tasync function getFontDetails(family, options) {\n\t\toptions.weights = options.weights.map(String);\n\t\tfor (const kit of fonts.kits) {\n\t\t\tconst font = kit.families.find((f) => f.name === family);\n\t\t\tif (!font) continue;\n\t\t\tconst weights = prepareWeights({\n\t\t\t\tinputWeights: options.weights,\n\t\t\t\thasVariableWeights: false,\n\t\t\t\tweights: font.variations.map((v) => `${v.slice(-1)}00`)\n\t\t\t}).map((w) => w.weight);\n\t\t\tconst styles = [];\n\t\t\tfor (const style of font.variations) {\n\t\t\t\tif (style.includes(\"i\") && !options.styles.includes(\"italic\")) continue;\n\t\t\t\tif (!weights.includes(String(`${style.slice(-1)}00`))) continue;\n\t\t\t\tstyles.push(style);\n\t\t\t}\n\t\t\tif (styles.length === 0) continue;\n\t\t\treturn extractFontFaceData(await fontCSSAPI(`/${kit.id}.css`), font.css_names[0] ?? family.toLowerCase().split(\" \").join(\"-\")).filter((font) => {\n\t\t\t\tconst [lowerWeight, upperWeight] = Array.isArray(font.weight) ? font.weight : [0, 0];\n\t\t\t\treturn (!options.styles || !font.style || options.styles.includes(font.style)) && (!weights || !font.weight || Array.isArray(font.weight) ? weights.some((weight) => Number(weight) <= upperWeight || Number(weight) >= lowerWeight) : weights.includes(String(font.weight)));\n\t\t\t});\n\t\t}\n\t\treturn [];\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn [...familyMap.keys()];\n\t\t},\n\t\tasync resolveFont(family, options) {\n\t\t\tif (notFoundFamilies.has(family)) return;\n\t\t\tif (!familyMap.has(family)) if (fetchKitsPromise) await fetchKitsPromise;\n\t\t\telse {\n\t\t\t\tconst lastRefetch = lastRefreshKitTime || 0;\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - lastRefetch > KIT_REFRESH_TIMEOUT) {\n\t\t\t\t\tlastRefreshKitTime = now;\n\t\t\t\t\tfetchKitsPromise = fetchKits(true).finally(() => {\n\t\t\t\t\t\tfetchKitsPromise = void 0;\n\t\t\t\t\t});\n\t\t\t\t\tawait fetchKitsPromise;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!familyMap.has(family)) {\n\t\t\t\tnotFoundFamilies.add(family);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn { fonts: await ctx.storage.getItem(`adobe:${family}-${hash(options)}-data.json`, () => getFontDetails(family, options)) };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers/bunny.ts\nconst fontAPI$2 = $fetch.create({ baseURL: \"https://fonts.bunny.net\" });\nvar bunny_default = defineFontProvider(\"bunny\", async (_options, ctx) => {\n\tconst familyMap = /* @__PURE__ */ new Map();\n\tconst fonts = await ctx.storage.getItem(\"bunny:meta.json\", () => fontAPI$2(\"/list\", { responseType: \"json\" }));\n\tfor (const [id, family] of Object.entries(fonts)) familyMap.set(family.familyName, id);\n\tasync function getFontDetails(family, options) {\n\t\tconst id = familyMap.get(family);\n\t\tconst font = fonts[id];\n\t\tconst weights = prepareWeights({\n\t\t\tinputWeights: options.weights,\n\t\t\thasVariableWeights: false,\n\t\t\tweights: font.weights.map(String)\n\t\t});\n\t\tconst styleMap = {\n\t\t\titalic: \"i\",\n\t\t\toblique: \"i\",\n\t\t\tnormal: \"\"\n\t\t};\n\t\tconst styles = new Set(options.styles.map((i) => styleMap[i]));\n\t\tif (weights.length === 0 || styles.size === 0) return [];\n\t\tconst css = await fontAPI$2(\"/css\", { query: { family: `${id}:${weights.flatMap((w) => [...styles].map((s) => `${w.weight}${s}`)).join(\",\")}` } });\n\t\tconst resolvedFontFaceData = [];\n\t\tconst groups = splitCssIntoSubsets(css).filter((group) => group.subset ? options.subsets.includes(group.subset) : true);\n\t\tfor (const group of groups) {\n\t\t\tconst data = extractFontFaceData(group.css);\n\t\t\tdata.map((f) => {\n\t\t\t\tf.meta ??= {};\n\t\t\t\tif (group.subset) f.meta.subset = group.subset;\n\t\t\t\treturn f;\n\t\t\t});\n\t\t\tresolvedFontFaceData.push(...data);\n\t\t}\n\t\treturn cleanFontFaces(resolvedFontFaceData, options.formats);\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn [...familyMap.keys()];\n\t\t},\n\t\tasync resolveFont(fontFamily, defaults) {\n\t\t\tif (!familyMap.has(fontFamily)) return;\n\t\t\treturn { fonts: await ctx.storage.getItem(`bunny:${fontFamily}-${hash(defaults)}-data.json`, () => getFontDetails(fontFamily, defaults)) };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers/fontshare.ts\nconst fontAPI$1 = $fetch.create({ baseURL: \"https://api.fontshare.com/v2\" });\nvar fontshare_default = defineFontProvider(\"fontshare\", async (_options, ctx) => {\n\tconst fontshareFamilies = /* @__PURE__ */ new Set();\n\tconst fonts = await ctx.storage.getItem(\"fontshare:meta.json\", async () => {\n\t\tconst fonts = [];\n\t\tlet offset = 0;\n\t\tlet chunk;\n\t\tdo {\n\t\t\tchunk = await fontAPI$1(\"/fonts\", {\n\t\t\t\tresponseType: \"json\",\n\t\t\t\tquery: {\n\t\t\t\t\toffset,\n\t\t\t\t\tlimit: 100\n\t\t\t\t}\n\t\t\t});\n\t\t\tfonts.push(...chunk.fonts);\n\t\t\toffset++;\n\t\t} while (chunk.has_more);\n\t\treturn fonts;\n\t});\n\tfor (const font of fonts) fontshareFamilies.add(font.name);\n\tasync function getFontDetails(family, options) {\n\t\tconst font = fonts.find((f) => f.name === family);\n\t\tconst numbers = [];\n\t\tconst weights = prepareWeights({\n\t\t\tinputWeights: options.weights,\n\t\t\thasVariableWeights: false,\n\t\t\tweights: font.styles.map((s) => String(s.weight.weight))\n\t\t}).map((w) => w.weight);\n\t\tfor (const style of font.styles) {\n\t\t\tif (style.is_italic && !options.styles.includes(\"italic\")) continue;\n\t\t\tif (!style.is_italic && !options.styles.includes(\"normal\")) continue;\n\t\t\tif (!weights.includes(String(style.weight.weight))) continue;\n\t\t\tnumbers.push(style.weight.number);\n\t\t}\n\t\tif (numbers.length === 0) return [];\n\t\treturn cleanFontFaces(extractFontFaceData(await fontAPI$1(`/css?f[]=${`${font.slug}@${numbers.join(\",\")}`}`)), options.formats);\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn [...fontshareFamilies];\n\t\t},\n\t\tasync resolveFont(fontFamily, defaults) {\n\t\t\tif (!fontshareFamilies.has(fontFamily)) return;\n\t\t\treturn { fonts: await ctx.storage.getItem(`fontshare:${fontFamily}-${hash(defaults)}-data.json`, () => getFontDetails(fontFamily, defaults)) };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers/fontsource.ts\nconst fontAPI = $fetch.create({ baseURL: \"https://api.fontsource.org/v1\" });\nvar fontsource_default = defineFontProvider(\"fontsource\", async (_options, ctx) => {\n\tconst fonts = await ctx.storage.getItem(\"fontsource:meta.json\", () => fontAPI(\"/fonts\", { responseType: \"json\" }));\n\tconst familyMap = /* @__PURE__ */ new Map();\n\tfor (const meta of fonts) familyMap.set(meta.family, meta);\n\tasync function getFontDetails(family, options) {\n\t\tconst font = familyMap.get(family);\n\t\tconst weights = prepareWeights({\n\t\t\tinputWeights: options.weights,\n\t\t\thasVariableWeights: font.variable,\n\t\t\tweights: font.weights.map(String)\n\t\t});\n\t\tconst styles = options.styles.filter((style) => font.styles.includes(style));\n\t\tconst subsets = options.subsets ? options.subsets.filter((subset) => font.subsets.includes(subset)) : [font.defSubset];\n\t\tif (weights.length === 0 || styles.length === 0) return [];\n\t\tconst fontDetail = await fontAPI(`/fonts/${font.id}`, { responseType: \"json\" });\n\t\tconst fontFaceData = [];\n\t\tfor (const subset of subsets) for (const style of styles) for (const { weight, variable } of weights) {\n\t\t\tif (variable) {\n\t\t\t\ttry {\n\t\t\t\t\tconst variableAxes = await ctx.storage.getItem(`fontsource:${font.family}-axes.json`, () => fontAPI(`/variable/${font.id}`, { responseType: \"json\" }));\n\t\t\t\t\tif (variableAxes && variableAxes.axes.wght) fontFaceData.push({\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t\tweight: [Number(variableAxes.axes.wght.min), Number(variableAxes.axes.wght.max)],\n\t\t\t\t\t\tsrc: [{\n\t\t\t\t\t\t\turl: `https://cdn.jsdelivr.net/fontsource/fonts/${font.id}:vf@latest/${subset}-wght-${style}.woff2`,\n\t\t\t\t\t\t\tformat: \"woff2\"\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tunicodeRange: fontDetail.unicodeRange[subset]?.split(\",\"),\n\t\t\t\t\t\tmeta: { subset }\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\tconsole.error(`Could not download variable axes metadata for \\`${font.family}\\` from \\`fontsource\\`. \\`unifont\\` will not be able to inject variable axes for ${font.family}.`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst variantUrl = fontDetail.variants[weight][style][subset].url;\n\t\t\tfontFaceData.push({\n\t\t\t\tstyle,\n\t\t\t\tweight,\n\t\t\t\tsrc: Object.entries(variantUrl).map(([format, url]) => ({\n\t\t\t\t\turl,\n\t\t\t\t\tformat\n\t\t\t\t})),\n\t\t\t\tunicodeRange: fontDetail.unicodeRange[subset]?.split(\",\"),\n\t\t\t\tmeta: { subset }\n\t\t\t});\n\t\t}\n\t\treturn cleanFontFaces(fontFaceData, options.formats);\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn [...familyMap.keys()];\n\t\t},\n\t\tasync resolveFont(fontFamily, options) {\n\t\t\tif (!familyMap.has(fontFamily)) return;\n\t\t\treturn { fonts: await ctx.storage.getItem(`fontsource:${fontFamily}-${hash(options)}-data.json`, () => getFontDetails(fontFamily, options)) };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers/google.ts\nconst userAgents = {\n\teot: \"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)\",\n\tttf: \"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",\n\twoff: \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0\",\n\twoff2: \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\"\n};\nvar google_default = defineFontProvider(\"google\", async (providerOptions, ctx) => {\n\tconst googleFonts = await ctx.storage.getItem(\"google:meta.json\", () => $fetch(\"https://fonts.google.com/metadata/fonts\", { responseType: \"json\" }).then((r) => r.familyMetadataList));\n\tconst styleMap = {\n\t\titalic: \"1\",\n\t\toblique: \"1\",\n\t\tnormal: \"0\"\n\t};\n\tasync function getFontDetails(family, options) {\n\t\tconst font = googleFonts.find((font) => font.family === family);\n\t\tconst styles = [...new Set(options.styles.map((i) => styleMap[i]))].sort();\n\t\tconst glyphs = (options.options?.experimental?.glyphs ?? providerOptions.experimental?.glyphs?.[family])?.join(\"\");\n\t\tconst weights = prepareWeights({\n\t\t\tinputWeights: options.weights,\n\t\t\thasVariableWeights: font.axes.some((a) => a.tag === \"wght\"),\n\t\t\tweights: Object.keys(font.fonts)\n\t\t}).map((v) => v.variable ? {\n\t\t\tweight: v.weight.replace(\" \", \"..\"),\n\t\t\tvariable: v.variable\n\t\t} : v);\n\t\tif (weights.length === 0 || styles.length === 0) return [];\n\t\tconst resolvedAxes = [];\n\t\tlet resolvedVariants = [];\n\t\tconst variableAxis = options.options?.experimental?.variableAxis ?? providerOptions.experimental?.variableAxis?.[family];\n\t\tconst candidateAxes = [\n\t\t\t\"wght\",\n\t\t\t\"ital\",\n\t\t\t...Object.keys(variableAxis ?? {})\n\t\t].sort(googleFlavoredSorting);\n\t\tfor (const axis of candidateAxes) {\n\t\t\tconst axisValue = {\n\t\t\t\twght: weights.map((v) => v.weight),\n\t\t\t\tital: styles\n\t\t\t}[axis] ?? variableAxis[axis].map((v) => Array.isArray(v) ? `${v[0]}..${v[1]}` : v);\n\t\t\tif (resolvedVariants.length === 0) resolvedVariants = axisValue;\n\t\t\telse resolvedVariants = resolvedVariants.flatMap((v) => [...axisValue].map((o) => [v, o].join(\",\"))).sort();\n\t\t\tresolvedAxes.push(axis);\n\t\t}\n\t\tlet priority = 0;\n\t\tconst resolvedFontFaceData = [];\n\t\tfor (const format of options.formats) {\n\t\t\tconst userAgent = userAgents[format];\n\t\t\tif (!userAgent) continue;\n\t\t\tconst groups = splitCssIntoSubsets(await $fetch(\"/css2\", {\n\t\t\t\tbaseURL: \"https://fonts.googleapis.com\",\n\t\t\t\theaders: { \"user-agent\": userAgent },\n\t\t\t\tquery: {\n\t\t\t\t\tfamily: `${family}:${resolvedAxes.join(\",\")}@${resolvedVariants.join(\";\")}`,\n\t\t\t\t\t...glyphs && { text: glyphs }\n\t\t\t\t}\n\t\t\t})).filter((group) => group.subset ? options.subsets.includes(group.subset) : true);\n\t\t\tfor (const group of groups) {\n\t\t\t\tconst data = extractFontFaceData(group.css);\n\t\t\t\tdata.map((f) => {\n\t\t\t\t\tf.meta ??= {};\n\t\t\t\t\tf.meta.priority = priority;\n\t\t\t\t\tif (group.subset) f.meta.subset = group.subset;\n\t\t\t\t\treturn f;\n\t\t\t\t});\n\t\t\t\tresolvedFontFaceData.push(...data);\n\t\t\t}\n\t\t\tpriority++;\n\t\t}\n\t\treturn cleanFontFaces(resolvedFontFaceData, options.formats);\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn googleFonts.map((font) => font.family);\n\t\t},\n\t\tasync resolveFont(fontFamily, options) {\n\t\t\tif (!googleFonts.some((font) => font.family === fontFamily)) return;\n\t\t\treturn { fonts: await ctx.storage.getItem(`google:${fontFamily}-${hash(options)}-data.json`, () => getFontDetails(fontFamily, options)) };\n\t\t}\n\t};\n});\nfunction googleFlavoredSorting(a, b) {\n\tconst isALowercase = a.charAt(0) === a.charAt(0).toLowerCase();\n\tconst isBLowercase = b.charAt(0) === b.charAt(0).toLowerCase();\n\tif (isALowercase !== isBLowercase) return Number(isBLowercase) - Number(isALowercase);\n\telse return a.localeCompare(b);\n}\n\n//#endregion\n//#region src/providers/googleicons.ts\nvar googleicons_default = defineFontProvider(\"googleicons\", async (providerOptions, ctx) => {\n\tconst googleIcons = await ctx.storage.getItem(\"googleicons:meta.json\", async () => {\n\t\tconst data = await $fetch(\"https://fonts.google.com/metadata/icons?key=material_symbols&incomplete=true\");\n\t\treturn JSON.parse(data.substring(data.indexOf(\"\\n\") + 1)).families;\n\t});\n\tasync function getFontDetails(family, options) {\n\t\tconst iconNames = (options.options?.experimental?.glyphs ?? providerOptions.experimental?.glyphs?.[family])?.join(\"\");\n\t\tlet css = \"\";\n\t\tfor (const format of options.formats) {\n\t\t\tconst userAgent = userAgents[format];\n\t\t\tif (!userAgent) continue;\n\t\t\tif (family.includes(\"Icons\")) css += await $fetch(\"/icon\", {\n\t\t\t\tbaseURL: \"https://fonts.googleapis.com\",\n\t\t\t\theaders: { \"user-agent\": userAgent },\n\t\t\t\tquery: { family }\n\t\t\t});\n\t\t\telse css += await $fetch(\"/css2\", {\n\t\t\t\tbaseURL: \"https://fonts.googleapis.com\",\n\t\t\t\theaders: { \"user-agent\": userAgent },\n\t\t\t\tquery: {\n\t\t\t\t\tfamily: `${family}:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200`,\n\t\t\t\t\t...iconNames && { icon_names: iconNames }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn cleanFontFaces(extractFontFaceData(css), options.formats);\n\t}\n\treturn {\n\t\tlistFonts() {\n\t\t\treturn googleIcons;\n\t\t},\n\t\tasync resolveFont(fontFamily, options) {\n\t\t\tif (!googleIcons.includes(fontFamily)) return;\n\t\t\treturn { fonts: await ctx.storage.getItem(`googleicons:${fontFamily}-${hash(options)}-data.json`, () => getFontDetails(fontFamily, options)) };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers/npm.ts\nconst DEFAULT_CDN = \"https://cdn.jsdelivr.net/npm\";\nconst KNOWN_FONT_PACKAGES = [\n\t{\n\t\tmatch: /^@fontsource-variable\\//,\n\t\tfamily: (pkg) => {\n\t\t\treturn `${slugToFamily(pkg.replace(\"@fontsource-variable/\", \"\"))} Variable`;\n\t\t}\n\t},\n\t{\n\t\tmatch: /^@fontsource\\//,\n\t\tfamily: (pkg) => {\n\t\t\treturn slugToFamily(pkg.replace(\"@fontsource/\", \"\"));\n\t\t}\n\t},\n\t{\n\t\tmatch: /^cal-sans$/,\n\t\tfamily: () => \"Cal Sans\"\n\t}\n];\n/** Convert a slug like \"geist-sans\" to \"Geist Sans\" */\nfunction slugToFamily(slug) {\n\treturn slug.split(\"-\").map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(\" \");\n}\n/** Convert a family name like \"Geist Sans\" to a fontsource slug \"geist-sans\" */\nfunction familyToSlug(family) {\n\treturn family.toLowerCase().replace(/\\s+/g, \"-\");\n}\n/**\n* Guess the npm package name and CSS file for a font family that wasn't\n* found in the auto-detected packages. Uses fontsource conventions as fallback.\n*/\nfunction guessPackageForFamily(family) {\n\tif (family.endsWith(\" Variable\")) return {\n\t\tpkgName: `@fontsource-variable/${familyToSlug(family.replace(/ Variable$/, \"\"))}`,\n\t\tfile: \"index.css\"\n\t};\n\treturn {\n\t\tpkgName: `@fontsource/${familyToSlug(family)}`,\n\t\tfile: \"index.css\"\n\t};\n}\nvar npm_default = defineFontProvider(\"npm\", (providerOptions, ctx) => {\n\tconst cdn = providerOptions.cdn || DEFAULT_CDN;\n\tconst remote = providerOptions.remote ?? true;\n\tconst npmFetch = $fetch.create({ baseURL: cdn });\n\tconst readFile = providerOptions.readFile;\n\tconst root = providerOptions.root || \".\";\n\tlet detectedFonts;\n\tlet detectedFontsHash;\n\tasync function getDetectedFonts() {\n\t\tif (!readFile) return detectedFonts ??= /* @__PURE__ */ new Map();\n\t\tlet pkgJsonContent;\n\t\ttry {\n\t\t\tpkgJsonContent = await readFile(`${root}/package.json`);\n\t\t} catch {\n\t\t\treturn detectedFonts ??= /* @__PURE__ */ new Map();\n\t\t}\n\t\tif (!pkgJsonContent) return detectedFonts ??= /* @__PURE__ */ new Map();\n\t\tconst contentHash = hash(pkgJsonContent);\n\t\tif (detectedFonts && detectedFontsHash === contentHash) return detectedFonts;\n\t\tdetectedFontsHash = contentHash;\n\t\tdetectedFonts = /* @__PURE__ */ new Map();\n\t\ttry {\n\t\t\tconst pkgJson = JSON.parse(pkgJsonContent);\n\t\t\tconst allDeps = {\n\t\t\t\t...pkgJson.dependencies,\n\t\t\t\t...pkgJson.devDependencies\n\t\t\t};\n\t\t\tfor (const depName of Object.keys(allDeps)) for (const pattern of KNOWN_FONT_PACKAGES) if (pattern.match.test(depName)) {\n\t\t\t\tconst family = pattern.family(depName);\n\t\t\t\tdetectedFonts.set(family.toLowerCase(), {\n\t\t\t\t\tfamily,\n\t\t\t\t\tpkgName: depName,\n\t\t\t\t\tfile: pattern.file || \"index.css\"\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {}\n\t\treturn detectedFonts;\n\t}\n\tfunction resolveUrlsToAbsolute(fontFaces, baseUrl) {\n\t\tfor (const face of fontFaces) if (Array.isArray(face.src)) face.src = face.src.map((src) => {\n\t\t\tif (\"url\" in src) {\n\t\t\t\tconst url = src.url;\n\t\t\t\tif (url.startsWith(\"http\") || url.startsWith(\"data:\") || url.startsWith(\"//\")) return src;\n\t\t\t\treturn {\n\t\t\t\t\t...src,\n\t\t\t\t\turl: new URL(url, baseUrl).href\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn src;\n\t\t});\n\t}\n\tasync function resolveFromLocal(pkgName, cssFile, family, formats) {\n\t\tif (!readFile) return null;\n\t\tconst css = await readFile(`${root}/node_modules/${pkgName}/${cssFile}`).catch(() => null);\n\t\tif (!css) return null;\n\t\tconst fontFaces = extractFontFaceData(css, family);\n\t\tif (fontFaces.length === 0) return null;\n\t\tlet version = \"latest\";\n\t\ttry {\n\t\t\tconst localPkgJson = await readFile(`${root}/node_modules/${pkgName}/package.json`);\n\t\t\tif (localPkgJson) {\n\t\t\t\tconst parsed = JSON.parse(localPkgJson);\n\t\t\t\tif (parsed.version) version = parsed.version;\n\t\t\t}\n\t\t} catch {}\n\t\tresolveUrlsToAbsolute(fontFaces, `${cdn}/${pkgName}@${version}/`);\n\t\treturn cleanFontFaces(fontFaces, formats);\n\t}\n\tasync function resolveFromCdn(pkgName, pkgVersion, cssFile, family, formats) {\n\t\tlet css;\n\t\ttry {\n\t\t\tcss = await npmFetch(`${pkgName}@${pkgVersion}/${cssFile}`);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t\tif (!css) return null;\n\t\tconst fontFaces = extractFontFaceData(css, family);\n\t\tresolveUrlsToAbsolute(fontFaces, `${cdn}/${pkgName}@${pkgVersion}/`);\n\t\treturn cleanFontFaces(fontFaces, formats);\n\t}\n\treturn {\n\t\tasync listFonts() {\n\t\t\tconst fonts = await getDetectedFonts();\n\t\t\tif (fonts.size === 0) return;\n\t\t\treturn [...fonts.values()].map((f) => f.family);\n\t\t},\n\t\tasync resolveFont(family, options) {\n\t\t\tconst familyOptions = options.options || {};\n\t\t\tlet pkgName;\n\t\t\tlet cssFile;\n\t\t\tlet pkgVersion;\n\t\t\tif (familyOptions.package) {\n\t\t\t\tpkgName = familyOptions.package;\n\t\t\t\tcssFile = familyOptions.file || \"index.css\";\n\t\t\t\tpkgVersion = familyOptions.version || \"latest\";\n\t\t\t} else {\n\t\t\t\tconst detected = (await getDetectedFonts()).get(family.toLowerCase());\n\t\t\t\tif (detected) {\n\t\t\t\t\tpkgName = detected.pkgName;\n\t\t\t\t\tcssFile = familyOptions.file || detected.file;\n\t\t\t\t\tpkgVersion = familyOptions.version || \"latest\";\n\t\t\t\t} else {\n\t\t\t\t\tconst guessed = guessPackageForFamily(family);\n\t\t\t\t\tpkgName = guessed.pkgName;\n\t\t\t\t\tcssFile = familyOptions.file || guessed.file;\n\t\t\t\t\tpkgVersion = familyOptions.version || \"latest\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst key = `npm:${pkgName}/${cssFile}-${hash(options)}`;\n\t\t\tconst fonts = await ctx.storage.getItem(key, async () => {\n\t\t\t\tconst localResult = await resolveFromLocal(pkgName, cssFile, family, options.formats);\n\t\t\t\tif (localResult) return localResult;\n\t\t\t\tif (!remote) return null;\n\t\t\t\treturn await resolveFromCdn(pkgName, pkgVersion, cssFile, family, options.formats);\n\t\t\t});\n\t\t\tif (!fonts) return;\n\t\t\treturn { fonts };\n\t\t}\n\t};\n});\n\n//#endregion\n//#region src/providers.ts\nvar providers_exports = /* @__PURE__ */ __exportAll({\n\tadobe: () => adobe_default,\n\tbunny: () => bunny_default,\n\tfontshare: () => fontshare_default,\n\tfontsource: () => fontsource_default,\n\tgoogle: () => google_default,\n\tgoogleicons: () => googleicons_default,\n\tnpm: () => npm_default\n});\n\n//#endregion\n//#region package.json\nvar version = \"0.7.4\";\n\n//#endregion\n//#region src/cache.ts\nfunction memoryStorage() {\n\tconst cache = /* @__PURE__ */ new Map();\n\treturn {\n\t\tgetItem(key) {\n\t\t\treturn cache.get(key);\n\t\t},\n\t\tsetItem(key, value) {\n\t\t\tcache.set(key, value);\n\t\t}\n\t};\n}\nconst ONE_WEEK = 1e3 * 60 * 60 * 24 * 7;\nfunction createAsyncStorage(storage, options = {}) {\n\tconst prefix = options?.cachedBy?.length ? `${createCacheKey(...options.cachedBy)}:` : \"\";\n\tconst resolveKey = (key) => `${prefix}${key}`;\n\treturn {\n\t\tasync getItem(key, init) {\n\t\t\tconst resolvedKey = resolveKey(key);\n\t\t\tconst now = Date.now();\n\t\t\tconst res = await storage.getItem(resolvedKey);\n\t\t\tif (res && res.expires > now && res.version === version) return res.data;\n\t\t\tif (!init) return null;\n\t\t\tconst data = await init();\n\t\t\tawait storage.setItem(resolvedKey, {\n\t\t\t\texpires: now + ONE_WEEK,\n\t\t\t\tversion,\n\t\t\t\tdata\n\t\t\t});\n\t\t\treturn data;\n\t\t},\n\t\tasync setItem(key, data) {\n\t\t\tawait storage.setItem(resolveKey(key), {\n\t\t\t\texpires: Date.now() + ONE_WEEK,\n\t\t\t\tversion,\n\t\t\t\tdata\n\t\t\t});\n\t\t}\n\t};\n}\nfunction createCacheKey(...fragments) {\n\treturn fragments.map((f) => {\n\t\treturn sanitize(typeof f === \"string\" ? f : hash(f));\n\t}).join(\":\");\n}\nfunction sanitize(input) {\n\tif (!input) return \"\";\n\treturn input.replace(/[^\\w.-]/g, \"_\");\n}\n\n//#endregion\n//#region src/unifont.ts\nconst defaultResolveOptions = {\n\tweights: [\"400\"],\n\tstyles: [\"normal\", \"italic\"],\n\tsubsets: [\n\t\t\"cyrillic-ext\",\n\t\t\"cyrillic\",\n\t\t\"greek-ext\",\n\t\t\"greek\",\n\t\t\"vietnamese\",\n\t\t\"latin-ext\",\n\t\t\"latin\"\n\t],\n\tformats: [\"woff2\"]\n};\nasync function createUnifont(providers, unifontOptions) {\n\tconst stack = {};\n\tconst storage = unifontOptions?.storage ?? memoryStorage();\n\tfor (const provider of providers) stack[provider._name] = void 0;\n\tawait Promise.all(providers.map(async (provider) => {\n\t\tconst context = { storage: createAsyncStorage(storage, { cachedBy: [provider._name, provider._options] }) };\n\t\ttry {\n\t\t\tconst initializedProvider = await provider(context);\n\t\t\tif (initializedProvider) stack[provider._name] = initializedProvider;\n\t\t} catch (cause) {\n\t\t\tconst message = `Could not initialize provider \\`${provider._name}\\`. \\`unifont\\` will not be able to process fonts provided by this provider.`;\n\t\t\tif (unifontOptions?.throwOnError) throw new Error(message, { cause });\n\t\t\tconsole.error(message, cause);\n\t\t}\n\t\tif (!stack[provider._name]?.resolveFont) delete stack[provider._name];\n\t}));\n\tconst allProviders = Object.keys(stack);\n\tasync function resolveFont(fontFamily, options = {}, providers = allProviders) {\n\t\tconst mergedOptions = {\n\t\t\t...defaultResolveOptions,\n\t\t\t...options\n\t\t};\n\t\tfor (const id of providers) {\n\t\t\tconst provider = stack[id];\n\t\t\ttry {\n\t\t\t\tconst result = await provider?.resolveFont(fontFamily, {\n\t\t\t\t\t...mergedOptions,\n\t\t\t\t\toptions: mergedOptions.options?.[id]\n\t\t\t\t});\n\t\t\t\tif (result) return {\n\t\t\t\t\tprovider: id,\n\t\t\t\t\t...result\n\t\t\t\t};\n\t\t\t} catch (cause) {\n\t\t\t\tconst message = `Could not resolve font face for \\`${fontFamily}\\` from \\`${id}\\` provider.`;\n\t\t\t\tif (unifontOptions?.throwOnError) throw new Error(message, { cause });\n\t\t\t\tconsole.error(message, cause);\n\t\t\t}\n\t\t}\n\t\treturn { fonts: [] };\n\t}\n\tasync function listFonts(providers = allProviders) {\n\t\tlet names;\n\t\tfor (const id of providers) {\n\t\t\tconst provider = stack[id];\n\t\t\ttry {\n\t\t\t\tconst result = await provider?.listFonts?.();\n\t\t\t\tif (result) {\n\t\t\t\t\tnames ??= [];\n\t\t\t\t\tnames.push(...result);\n\t\t\t\t}\n\t\t\t} catch (cause) {\n\t\t\t\tconst message = `Could not list names from \\`${id}\\` provider.`;\n\t\t\t\tif (unifontOptions?.throwOnError) throw new Error(message, { cause });\n\t\t\t\tconsole.error(message, cause);\n\t\t\t}\n\t\t}\n\t\treturn names;\n\t}\n\treturn {\n\t\tresolveFont,\n\t\tlistFonts\n\t};\n}\n\n//#endregion\nexport { createUnifont, defaultResolveOptions, defineFontProvider, providers_exports as providers };"]}