{"version":3,"file":"main.mjs","sources":["../src/headings.ts","../../../node_modules/.pnpm/slug@11.0.1/node_modules/slug/slug.js","../src/components.ts","../src/logs.ts","../src/errors.ts","../src/files.ts","../src/partials.ts","../src/escape.ts","../src/render.ts","../src/main.ts","../src/schema.ts"],"sourcesContent":["import Markdoc from \"@markdoc/markdoc\";\nimport type { RenderableTreeNode, Schema } from \"@markdoc/markdoc\";\n\nimport type { MarkdocSvelteConfig, SluggerType } from \"./types.ts\";\n\nexport interface Heading {\n  /**\n   * The heading level (1-6)\n   */\n  level: number;\n  /**\n   * The heading text content\n   */\n  title: string;\n  /**\n   * The heading id attribute\n   */\n  id?: string;\n}\n\nconst isBasicHeading = (tagName: string) => tagName.match(/^h\\d$/);\n\nconst getTextContent = (children: RenderableTreeNode[]): string => {\n  return children.reduce((text: string, child): string => {\n    if (typeof child === \"string\" || typeof child === \"number\") {\n      return text + child;\n    } else if (typeof child === \"object\" && Markdoc.Tag.isTag(child)) {\n      return text + getTextContent(child.children);\n    }\n    return text;\n  }, \"\");\n};\n\nconst getSlug = (\n  sluggifier: SluggerType,\n  attributes: Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n  children: RenderableTreeNode[],\n): string => {\n  if (attributes.id && typeof attributes.id === \"string\") {\n    return attributes.id;\n  }\n  return sluggifier(getTextContent(children));\n};\n\nexport interface HeadingsObject {\n  headings: Heading[];\n  node: RenderableTreeNode;\n}\n\n/**\n * Recursively collects all heading nodes from tree\n * after transform (to resolve variables and the like)\n * @param topNode - The top-level renderable tree node of the document\n * @param sluggifier - The function to create an ID if not present\n * @returns Array of heading objects with title, level, and other attributes and nodes without extraneous attributes\n */\nexport function collectHeadings(\n  topNode: RenderableTreeNode,\n  sluggifier: SluggerType,\n): HeadingsObject {\n  // If document empty, don't continue\n  if (!Markdoc.Tag.isTag(topNode)) return { headings: [], node: topNode };\n  if (!topNode?.children) return { headings: [], node: topNode };\n\n  return topNode.children.reduce(\n    (acc, child, index) => {\n      // If not a tag, don't continue\n      if (!Markdoc.Tag.isTag(child)) return acc;\n      const headingList = acc.headings;\n\n      // Only process tags marked as needing it\n      if (\n        child.attributes?.__collectHeading === true &&\n        typeof child.attributes?.level === \"number\"\n      ) {\n        const { __collectHeading, level, ...otherChildAttributes } =\n          child.attributes;\n        headingList.push({\n          level,\n          title: getTextContent(child.children),\n          id: getSlug(sluggifier, child.attributes, child.children),\n        });\n        const newChild = {\n          ...child,\n          attributes: {\n            ...otherChildAttributes,\n            ...(isBasicHeading(child.name) ? {} : { level }),\n          },\n        };\n\n        const updatedChildren = [...acc.node.children];\n        updatedChildren[index] = newChild;\n        return {\n          headings: headingList,\n          node: { ...acc.node, children: updatedChildren },\n        };\n      }\n      return acc;\n    },\n    {\n      headings: [] as Heading[],\n      node: topNode,\n    },\n  );\n}\n\nexport const heading: Schema = {\n  children: [\"inline\"],\n  attributes: {\n    id: { type: String },\n    level: { type: Number, required: true, default: 1 },\n  },\n  transform(node, config: MarkdocSvelteConfig) {\n    const { level, ...attributes } = node.transformAttributes(config);\n    const children = node.transformChildren(config);\n\n    const slug = config.headingSlugger\n      ? getSlug(config.headingSlugger, node.attributes, children)\n      : getTextContent(children);\n\n    const render = config.nodes?.heading?.render ?? `h${level}`;\n\n    /**\n     * Pass level along and manually mark the tag\n     * as being a heading to collect.\n     */\n    const tagProps = {\n      ...attributes,\n      id: slug,\n      __collectHeading: true,\n      level: level as number,\n    };\n\n    return new Markdoc.Tag(render, tagProps, children);\n  },\n};\n","/* global btoa */\nlet base64\n\nif (typeof window !== 'undefined') {\n  if (window.btoa) {\n    base64 = function (input) {\n      return btoa(unescape(encodeURIComponent(input)))\n    }\n  } else {\n    // Polyfill for environments that don't have btoa or Buffer class (notably, React Native).\n    // Based on https://github.com/davidchambers/Base64.js/blob/a121f75bb10c8dd5d557886c4b1069b31258d230/base64.js\n    base64 = function (input) {\n      const str = unescape(encodeURIComponent(input + ''))\n      let output = ''\n      for (\n        let block, charCode, idx = 0, map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n        str.charAt(idx | 0) || (map = '=', idx % 1);\n        output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n      ) {\n        charCode = str.charCodeAt(idx += 3 / 4)\n        // This is a coherence check. The result of unescape(encodeURIComponent()) should always be\n        // characters with code points that fit into two bytes.\n        /* c8 ignore next 3 */\n        if (charCode > 0xFF) {\n          throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\")\n        }\n        block = block << 8 | charCode\n      }\n      return output\n    }\n  }\n} else {\n  base64 = function (input) {\n    return Buffer.from(input).toString('base64')\n  }\n}\n\nfunction slug (string, opts) {\n  let result = slugify(string, opts)\n  const fallback = opts && opts.fallback !== undefined ? opts.fallback : slug.defaults.fallback\n  // If output is an empty string, try slug for base64 of string.\n  if (fallback === true && result === '') {\n    result = slugify(base64(string), opts)\n  }\n  return result\n}\n\nconst locales = {\n  // http://www.eki.ee/wgrs/rom1_bg.pdf\n  bg: { Й: 'Y', й: 'y', X: 'H', x: 'h', Ц: 'Ts', ц: 'ts', Щ: 'Sht', щ: 'sht', Ъ: 'A', ъ: 'a', Ь: 'Y', ь: 'y' },\n  // Need a reference URL for German, although this is pretty well-known.\n  de: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue' },\n  // Need a reference URL for Serbian.\n  sr: { đ: 'dj', Đ: 'DJ' },\n  // https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/864314/ROMANIZATION_OF_UKRAINIAN.pdf\n  uk: { И: 'Y', и: 'y', Й: 'Y', й: 'y', Ц: 'Ts', ц: 'ts', Х: 'Kh', х: 'kh', Щ: 'Shch', щ: 'shch', Г: 'H', г: 'h' }\n}\n\nlet defaultLocale = {}\n\nfunction slugify (string, opts) {\n  if (typeof string !== 'string') {\n    throw new Error('slug() requires a string argument, received ' + typeof string)\n  }\n  if (!string.isWellFormed()) {\n    throw new Error('slug() received a malformed string with lone surrogates')\n  }\n  if (typeof opts === 'string') { opts = { replacement: opts } }\n  opts = opts ? Object.assign({}, opts) : {}\n  opts.mode = opts.mode || slug.defaults.mode\n  const defaults = slug.defaults.modes[opts.mode]\n  const keys = ['replacement', 'multicharmap', 'charmap', 'remove', 'lower', 'trim']\n  for (let key, i = 0, l = keys.length; i < l; i++) {\n    key = keys[i]\n    opts[key] = (key in opts) ? opts[key] : defaults[key]\n  }\n  const localeMap = locales[opts.locale] || defaultLocale\n\n  let lengths = []\n  for (const key in opts.multicharmap) {\n    if (!Object.prototype.hasOwnProperty.call(opts.multicharmap, key)) { continue }\n\n    const len = key.length\n    if (lengths.indexOf(len) === -1) { lengths.push(len) }\n  }\n\n  // We want to match the longest string if there are multiple matches, so\n  // sort lengths in descending order.\n  lengths = lengths.sort(function (a, b) { return b - a })\n\n  const disallowedChars = opts.mode === 'rfc3986' ? /[^\\w\\s\\-.~]/ : /[^A-Za-z0-9\\s]/\n\n  let result = ''\n  for (let char, i = 0, l = string.length; i < l; i++) {\n    char = string[i]\n    let matchedMultichar = false\n    for (let j = 0; j < lengths.length; j++) {\n      const len = lengths[j]\n      const str = string.substr(i, len)\n      if (opts.multicharmap[str]) {\n        i += len - 1\n        char = opts.multicharmap[str]\n        matchedMultichar = true\n        break\n      }\n    }\n    if (!matchedMultichar) {\n      if (localeMap[char]) {\n        char = localeMap[char]\n      } else if (opts.charmap[char]) {\n        char = opts.charmap[char].replace(opts.replacement, ' ')\n      } else if (char.includes(opts.replacement)) {\n        // preserve the replacement character in case it is excluded by disallowedChars\n        char = char.replace(opts.replacement, ' ')\n      } else {\n        char = char.replace(disallowedChars, '')\n      }\n    }\n    result += char\n  }\n\n  if (opts.remove) {\n    result = result.replace(opts.remove, '')\n  }\n  if (opts.trim) {\n    result = result.trim()\n  }\n  result = result.replace(/\\s+/g, opts.replacement) // convert spaces\n  if (opts.lower) {\n    result = result.toLowerCase()\n  }\n  return result\n}\n\nconst initialMulticharmap = {\n  // multibyte devanagari characters (hindi, sanskrit, etc.)\n  फ़: 'Fi',\n  ग़: 'Ghi',\n  ख़: 'Khi',\n  क़: 'Qi',\n  ड़: 'ugDha',\n  ढ़: 'ugDhha',\n  य़: 'Yi',\n  ज़: 'Za',\n  // hebrew\n  // Refs: http://www.eki.ee/wgrs/rom1_he.pdf\n  // Refs: https://en.wikipedia.org/wiki/Niqqud\n  בִי: 'i',\n  בֵ: 'e',\n  בֵי: 'e',\n  בֶ: 'e',\n  בַ: 'a',\n  בָ: 'a',\n  בֹ: 'o',\n  וֹ: 'o',\n  בֻ: 'u',\n  וּ: 'u',\n  בּ: 'b',\n  כּ: 'k',\n  ךּ: 'k',\n  פּ: 'p',\n  שׁ: 'sh',\n  שׂ: 's',\n  בְ: 'e',\n  חֱ: 'e',\n  חֲ: 'a',\n  חֳ: 'o',\n  בִ: 'i'\n}\n\n// https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/urlify.js\nconst initialCharmap = {\n  // latin\n  À: 'A',\n  Á: 'A',\n  Â: 'A',\n  Ã: 'A',\n  Ä: 'A',\n  Å: 'A',\n  Æ: 'AE',\n  Ç: 'C',\n  È: 'E',\n  É: 'E',\n  Ê: 'E',\n  Ë: 'E',\n  Ì: 'I',\n  Í: 'I',\n  Î: 'I',\n  Ï: 'I',\n  Ð: 'D',\n  Ñ: 'N',\n  Ò: 'O',\n  Ó: 'O',\n  Ô: 'O',\n  Õ: 'O',\n  Ö: 'O',\n  Ő: 'O',\n  Ø: 'O',\n  Ō: 'O',\n  Ù: 'U',\n  Ú: 'U',\n  Û: 'U',\n  Ü: 'U',\n  Ű: 'U',\n  Ý: 'Y',\n  Þ: 'TH',\n  ß: 'ss',\n  à: 'a',\n  á: 'a',\n  â: 'a',\n  ã: 'a',\n  ä: 'a',\n  å: 'a',\n  æ: 'ae',\n  ç: 'c',\n  è: 'e',\n  é: 'e',\n  ê: 'e',\n  ë: 'e',\n  ì: 'i',\n  í: 'i',\n  î: 'i',\n  ï: 'i',\n  ð: 'd',\n  ñ: 'n',\n  ò: 'o',\n  ó: 'o',\n  ô: 'o',\n  õ: 'o',\n  ö: 'o',\n  ő: 'o',\n  ø: 'o',\n  ō: 'o',\n  Œ: 'OE',\n  œ: 'oe',\n  ù: 'u',\n  ú: 'u',\n  û: 'u',\n  ü: 'u',\n  ű: 'u',\n  ý: 'y',\n  þ: 'th',\n  ÿ: 'y',\n  ẞ: 'SS',\n  // greek\n  α: 'a',\n  β: 'b',\n  γ: 'g',\n  δ: 'd',\n  ε: 'e',\n  ζ: 'z',\n  η: 'h',\n  θ: 'th',\n  ι: 'i',\n  κ: 'k',\n  λ: 'l',\n  μ: 'm',\n  ν: 'n',\n  ξ: '3',\n  ο: 'o',\n  π: 'p',\n  ρ: 'r',\n  σ: 's',\n  τ: 't',\n  υ: 'y',\n  φ: 'f',\n  χ: 'x',\n  ψ: 'ps',\n  ω: 'w',\n  ά: 'a',\n  έ: 'e',\n  ί: 'i',\n  ό: 'o',\n  ύ: 'y',\n  ή: 'h',\n  ώ: 'w',\n  ς: 's',\n  ϊ: 'i',\n  ΰ: 'y',\n  ϋ: 'y',\n  ΐ: 'i',\n  Α: 'A',\n  Β: 'B',\n  Γ: 'G',\n  Δ: 'D',\n  Ε: 'E',\n  Ζ: 'Z',\n  Η: 'H',\n  Θ: 'Th',\n  Ι: 'I',\n  Κ: 'K',\n  Λ: 'L',\n  Μ: 'M',\n  Ν: 'N',\n  Ξ: '3',\n  Ο: 'O',\n  Π: 'P',\n  Ρ: 'R',\n  Σ: 'S',\n  Τ: 'T',\n  Υ: 'Y',\n  Φ: 'F',\n  Χ: 'X',\n  Ψ: 'PS',\n  Ω: 'W',\n  Ά: 'A',\n  Έ: 'E',\n  Ί: 'I',\n  Ό: 'O',\n  Ύ: 'Y',\n  Ή: 'H',\n  Ώ: 'W',\n  Ϊ: 'I',\n  Ϋ: 'Y',\n  // turkish\n  ş: 's',\n  Ş: 'S',\n  ı: 'i',\n  İ: 'I',\n  ğ: 'g',\n  Ğ: 'G',\n  // russian\n  а: 'a',\n  б: 'b',\n  в: 'v',\n  г: 'g',\n  д: 'd',\n  е: 'e',\n  ё: 'yo',\n  ж: 'zh',\n  з: 'z',\n  и: 'i',\n  й: 'j',\n  к: 'k',\n  л: 'l',\n  м: 'm',\n  н: 'n',\n  о: 'o',\n  п: 'p',\n  р: 'r',\n  с: 's',\n  т: 't',\n  у: 'u',\n  ф: 'f',\n  х: 'h',\n  ц: 'c',\n  ч: 'ch',\n  ш: 'sh',\n  щ: 'sh',\n  ъ: 'u',\n  ы: 'y',\n  ь: '',\n  э: 'e',\n  ю: 'yu',\n  я: 'ya',\n  А: 'A',\n  Б: 'B',\n  В: 'V',\n  Г: 'G',\n  Д: 'D',\n  Е: 'E',\n  Ё: 'Yo',\n  Ж: 'Zh',\n  З: 'Z',\n  И: 'I',\n  Й: 'J',\n  К: 'K',\n  Л: 'L',\n  М: 'M',\n  Н: 'N',\n  О: 'O',\n  П: 'P',\n  Р: 'R',\n  С: 'S',\n  Т: 'T',\n  У: 'U',\n  Ф: 'F',\n  Х: 'H',\n  Ц: 'C',\n  Ч: 'Ch',\n  Ш: 'Sh',\n  Щ: 'Sh',\n  Ъ: 'U',\n  Ы: 'Y',\n  Ь: '',\n  Э: 'E',\n  Ю: 'Yu',\n  Я: 'Ya',\n  // ukranian\n  Є: 'Ye',\n  І: 'I',\n  Ї: 'Yi',\n  Ґ: 'G',\n  є: 'ye',\n  і: 'i',\n  ї: 'yi',\n  ґ: 'g',\n  // czech\n  č: 'c',\n  ď: 'd',\n  ě: 'e',\n  ň: 'n',\n  ř: 'r',\n  š: 's',\n  ť: 't',\n  ů: 'u',\n  ž: 'z',\n  Č: 'C',\n  Ď: 'D',\n  Ě: 'E',\n  Ň: 'N',\n  Ř: 'R',\n  Š: 'S',\n  Ť: 'T',\n  Ů: 'U',\n  Ž: 'Z',\n  // slovak\n  ľ: 'l',\n  ĺ: 'l',\n  ŕ: 'r',\n  Ľ: 'L',\n  Ĺ: 'L',\n  Ŕ: 'R',\n  // polish\n  ą: 'a',\n  ć: 'c',\n  ę: 'e',\n  ł: 'l',\n  ń: 'n',\n  ś: 's',\n  ź: 'z',\n  ż: 'z',\n  Ą: 'A',\n  Ć: 'C',\n  Ę: 'E',\n  Ł: 'L',\n  Ń: 'N',\n  Ś: 'S',\n  Ź: 'Z',\n  Ż: 'Z',\n  // latvian\n  ā: 'a',\n  ē: 'e',\n  ģ: 'g',\n  ī: 'i',\n  ķ: 'k',\n  ļ: 'l',\n  ņ: 'n',\n  ū: 'u',\n  Ā: 'A',\n  Ē: 'E',\n  Ģ: 'G',\n  Ī: 'I',\n  Ķ: 'K',\n  Ļ: 'L',\n  Ņ: 'N',\n  Ū: 'U',\n  // arabic\n  أ: 'a',\n  إ: 'i',\n  ب: 'b',\n  ت: 't',\n  ث: 'th',\n  ج: 'g',\n  ح: 'h',\n  خ: 'kh',\n  د: 'd',\n  ذ: 'th',\n  ر: 'r',\n  ز: 'z',\n  س: 's',\n  ش: 'sh',\n  ص: 's',\n  ض: 'd',\n  ط: 't',\n  ظ: 'th',\n  ع: 'aa',\n  غ: 'gh',\n  ف: 'f',\n  ق: 'k',\n  ك: 'k',\n  ل: 'l',\n  م: 'm',\n  ن: 'n',\n  ه: 'h',\n  و: 'o',\n  ي: 'y',\n  ء: 'aa',\n  ة: 'a',\n  // farsi\n  آ: 'a',\n  ا: 'a',\n  پ: 'p',\n  ژ: 'zh',\n  گ: 'g',\n  چ: 'ch',\n  ک: 'k',\n  ی: 'i',\n  // lithuanian\n  ė: 'e',\n  į: 'i',\n  ų: 'u',\n  Ė: 'E',\n  Į: 'I',\n  Ų: 'U',\n  // romanian\n  ț: 't',\n  Ț: 'T',\n  ţ: 't',\n  Ţ: 'T',\n  ș: 's',\n  Ș: 'S',\n  ă: 'a',\n  Ă: 'A',\n  // vietnamese\n  Ạ: 'A',\n  Ả: 'A',\n  Ầ: 'A',\n  Ấ: 'A',\n  Ậ: 'A',\n  Ẩ: 'A',\n  Ẫ: 'A',\n  Ằ: 'A',\n  Ắ: 'A',\n  Ặ: 'A',\n  Ẳ: 'A',\n  Ẵ: 'A',\n  Ẹ: 'E',\n  Ẻ: 'E',\n  Ẽ: 'E',\n  Ề: 'E',\n  Ế: 'E',\n  Ệ: 'E',\n  Ể: 'E',\n  Ễ: 'E',\n  Ị: 'I',\n  Ỉ: 'I',\n  Ĩ: 'I',\n  Ọ: 'O',\n  Ỏ: 'O',\n  Ồ: 'O',\n  Ố: 'O',\n  Ộ: 'O',\n  Ổ: 'O',\n  Ỗ: 'O',\n  Ơ: 'O',\n  Ờ: 'O',\n  Ớ: 'O',\n  Ợ: 'O',\n  Ở: 'O',\n  Ỡ: 'O',\n  Ụ: 'U',\n  Ủ: 'U',\n  Ũ: 'U',\n  Ư: 'U',\n  Ừ: 'U',\n  Ứ: 'U',\n  Ự: 'U',\n  Ử: 'U',\n  Ữ: 'U',\n  Ỳ: 'Y',\n  Ỵ: 'Y',\n  Ỷ: 'Y',\n  Ỹ: 'Y',\n  Đ: 'D',\n  ạ: 'a',\n  ả: 'a',\n  ầ: 'a',\n  ấ: 'a',\n  ậ: 'a',\n  ẩ: 'a',\n  ẫ: 'a',\n  ằ: 'a',\n  ắ: 'a',\n  ặ: 'a',\n  ẳ: 'a',\n  ẵ: 'a',\n  ẹ: 'e',\n  ẻ: 'e',\n  ẽ: 'e',\n  ề: 'e',\n  ế: 'e',\n  ệ: 'e',\n  ể: 'e',\n  ễ: 'e',\n  ị: 'i',\n  ỉ: 'i',\n  ĩ: 'i',\n  ọ: 'o',\n  ỏ: 'o',\n  ồ: 'o',\n  ố: 'o',\n  ộ: 'o',\n  ổ: 'o',\n  ỗ: 'o',\n  ơ: 'o',\n  ờ: 'o',\n  ớ: 'o',\n  ợ: 'o',\n  ở: 'o',\n  ỡ: 'o',\n  ụ: 'u',\n  ủ: 'u',\n  ũ: 'u',\n  ư: 'u',\n  ừ: 'u',\n  ứ: 'u',\n  ự: 'u',\n  ử: 'u',\n  ữ: 'u',\n  ỳ: 'y',\n  ỵ: 'y',\n  ỷ: 'y',\n  ỹ: 'y',\n  đ: 'd',\n  // kazakh\n  Ә: 'AE',\n  ә: 'ae',\n  Ғ: 'GH',\n  ғ: 'gh',\n  Қ: 'KH',\n  қ: 'kh',\n  Ң: 'NG',\n  ң: 'ng',\n  Ү: 'UE',\n  ү: 'ue',\n  Ұ: 'U',\n  ұ: 'u',\n  Һ: 'H',\n  һ: 'h',\n  Ө: 'OE',\n  ө: 'oe',\n  // serbian\n  ђ: 'dj',\n  ј: 'j',\n  љ: 'lj',\n  њ: 'nj',\n  ћ: 'c',\n  џ: 'dz',\n  Ђ: 'Dj',\n  Ј: 'j',\n  Љ: 'Lj',\n  Њ: 'Nj',\n  Ћ: 'C',\n  Џ: 'Dz',\n  ǌ: 'nj',\n  ǉ: 'lj',\n  ǋ: 'NJ',\n  ǈ: 'LJ',\n  // hindi\n  अ: 'a',\n  आ: 'aa',\n  ए: 'e',\n  ई: 'ii',\n  ऍ: 'ei',\n  ऎ: 'ae',\n  ऐ: 'ai',\n  इ: 'i',\n  ओ: 'o',\n  ऑ: 'oi',\n  ऒ: 'oii',\n  ऊ: 'uu',\n  औ: 'ou',\n  उ: 'u',\n  ब: 'B',\n  भ: 'Bha',\n  च: 'Ca',\n  छ: 'Chha',\n  ड: 'Da',\n  ढ: 'Dha',\n  फ: 'Fa',\n  ग: 'Ga',\n  घ: 'Gha',\n  ग़: 'Ghi',\n  ह: 'Ha',\n  ज: 'Ja',\n  झ: 'Jha',\n  क: 'Ka',\n  ख: 'Kha',\n  ख़: 'Khi',\n  ल: 'L',\n  ळ: 'Li',\n  ऌ: 'Li',\n  ऴ: 'Lii',\n  ॡ: 'Lii',\n  म: 'Ma',\n  न: 'Na',\n  ङ: 'Na',\n  ञ: 'Nia',\n  ण: 'Nae',\n  ऩ: 'Ni',\n  ॐ: 'oms',\n  प: 'Pa',\n  क़: 'Qi',\n  र: 'Ra',\n  ऋ: 'Ri',\n  ॠ: 'Ri',\n  ऱ: 'Ri',\n  स: 'Sa',\n  श: 'Sha',\n  ष: 'Shha',\n  ट: 'Ta',\n  त: 'Ta',\n  ठ: 'Tha',\n  द: 'Tha',\n  थ: 'Tha',\n  ध: 'Thha',\n  ड़: 'ugDha',\n  ढ़: 'ugDhha',\n  व: 'Va',\n  य: 'Ya',\n  य़: 'Yi',\n  ज़: 'Za',\n  // azerbaijani\n  ə: 'e',\n  Ə: 'E',\n  // georgian\n  ა: 'a',\n  ბ: 'b',\n  გ: 'g',\n  დ: 'd',\n  ე: 'e',\n  ვ: 'v',\n  ზ: 'z',\n  თ: 't',\n  ი: 'i',\n  კ: 'k',\n  ლ: 'l',\n  მ: 'm',\n  ნ: 'n',\n  ო: 'o',\n  პ: 'p',\n  ჟ: 'zh',\n  რ: 'r',\n  ს: 's',\n  ტ: 't',\n  უ: 'u',\n  ფ: 'p',\n  ქ: 'k',\n  ღ: 'gh',\n  ყ: 'q',\n  შ: 'sh',\n  ჩ: 'ch',\n  ც: 'ts',\n  ძ: 'dz',\n  წ: 'ts',\n  ჭ: 'ch',\n  ხ: 'kh',\n  ჯ: 'j',\n  ჰ: 'h',\n  // hebrew\n  ב: 'v',\n  גּ: 'g',\n  ג: 'g',\n  ד: 'd',\n  דּ: 'd',\n  ה: 'h',\n  ו: 'v',\n  ז: 'z',\n  ח: 'h',\n  ט: 't',\n  י: 'y',\n  כ: 'kh',\n  ך: 'kh',\n  ל: 'l',\n  מ: 'm',\n  ם: 'm',\n  נ: 'n',\n  ן: 'n',\n  ס: 's',\n  פ: 'f',\n  ף: 'f',\n  ץ: 'ts',\n  צ: 'ts',\n  ק: 'k',\n  ר: 'r',\n  תּ: 't',\n  ת: 't'\n}\n\nslug.charmap = Object.assign({}, initialCharmap)\nslug.multicharmap = Object.assign({}, initialMulticharmap)\nslug.defaults = {\n  charmap: slug.charmap,\n  mode: 'pretty',\n  modes: {\n    rfc3986: {\n      replacement: '-',\n      remove: null,\n      lower: true,\n      charmap: slug.charmap,\n      multicharmap: slug.multicharmap,\n      trim: true\n    },\n    pretty: {\n      replacement: '-',\n      remove: null,\n      lower: true,\n      charmap: slug.charmap,\n      multicharmap: slug.multicharmap,\n      trim: true\n    }\n  },\n  multicharmap: slug.multicharmap,\n  fallback: true\n}\n\nslug.reset = function () {\n  slug.defaults.modes.rfc3986.charmap = slug.defaults.modes.pretty.charmap = slug.charmap = slug.defaults.charmap = Object.assign({}, initialCharmap)\n  slug.defaults.modes.rfc3986.multicharmap = slug.defaults.modes.pretty.multicharmap = slug.multicharmap = slug.defaults.multicharmap = Object.assign({}, initialMulticharmap)\n  defaultLocale = ''\n}\n\nslug.extend = function (customMap) {\n  const keys = Object.keys(customMap)\n  const multi = {}\n  const single = {}\n  for (let i = 0; i < keys.length; i++) {\n    if (keys[i].length > 1) {\n      multi[keys[i]] = customMap[keys[i]]\n    } else {\n      single[keys[i]] = customMap[keys[i]]\n    }\n  }\n  Object.assign(slug.charmap, single)\n  Object.assign(slug.multicharmap, multi)\n}\n\nslug.setLocale = function (locale) {\n  defaultLocale = locales[locale] || {}\n}\n\nexport default slug\n","import type { RenderableTreeNode } from \"@markdoc/markdoc\";\nimport { normalizePath } from \"vite\";\n\n/**\n * Traverses the Markdoc RenderableTreeNode AST to find all Svelte component names\n * that are actively used. It identifies components by their name starting with an\n * uppercase letter, as per convention, assuming Markdoc.transform has already\n * resolved these names from the schema's 'render' attributes.\n *\n * @param node - The RenderableTreeNode to traverse.\n * @returns A Set of unique Svelte component names used in the tree.\n */\nexport const extractUsedSvelteComponents = (\n  node: RenderableTreeNode | null | undefined,\n): Set<string> => {\n  const usedComponents = new Set<string>();\n\n  const traverse = (currentNode: RenderableTreeNode | null | undefined) => {\n    // If current node can't be a component, skip it\n    if (\n      !currentNode ||\n      typeof currentNode === \"string\" ||\n      typeof currentNode === \"number\" ||\n      typeof currentNode === \"boolean\"\n    )\n      return;\n\n    // Recursively work through children of arrays until get to objects\n    if (Array.isArray(currentNode)) {\n      for (const child of currentNode) {\n        traverse(child);\n      }\n      return;\n    }\n\n    // Check if this RenderableTreeNode object itself represents a Svelte component.\n    // 'currentNode.name' here is the name of the component/tag to be rendered.\n    // Convention: if node.name starts with an uppercase letter, it's a Svelte component.\n    if (\n      currentNode.name &&\n      typeof currentNode.name === \"string\" &&\n      /\\p{Lu}/u.test(currentNode.name)\n    ) {\n      usedComponents.add(currentNode.name);\n    }\n\n    // Recursively process children.\n    if (currentNode.children && Array.isArray(currentNode.children)) {\n      for (const child of currentNode.children) {\n        traverse(child as RenderableTreeNode | null | undefined);\n      }\n    }\n  };\n\n  traverse(node);\n  return usedComponents;\n};\n\n/**\n * Generates Svelte import statements for a given set of Svelte component names.\n *\n * @param usedSvelteComponentNames - A Set of Svelte component names that need import statements.\n * @param componentDirPath - The directory path where Svelte components are located.\n *                           This can be any path format that Svelte/SvelteKit supports.\n * @returns A string containing all generated Svelte import statements.\n */\nexport const getComponentImports = (\n  usedSvelteComponentNames: Set<string>,\n  componentDirPath: string,\n): string => {\n  let importStatements = \"\";\n  for (const componentName of usedSvelteComponentNames) {\n    // Use Vite's normalizePath for proper cross-platform path handling\n    const componentPath = normalizePath(\n      `${componentDirPath}/${componentName}.svelte`,\n    );\n\n    // Generate the import statement\n    importStatements += `\\timport ${componentName} from '${componentPath}';\\n`;\n  }\n  return importStatements;\n};\n","const projectName = \"markdoc-svelte\";\n\nconst log = {\n  debug: (message: string) => {\n    console.debug(`[${projectName}] DEBUG: ${message}`);\n  },\n  info: (message: string) => {\n    console.info(`[${projectName}] INFO: ${message}`);\n  },\n  log: (message: string) => {\n    console.log(`[${projectName}] LOG: ${message}`);\n  },\n  warn: (message: string) => {\n    console.warn(`[${projectName}] WARNING: ${message}`);\n  },\n  // Log formal Errors and others too\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  error: (message: string, error?: any) => {\n    if (error) {\n      console.error(`[${projectName}] ERROR: ${message}`, error);\n    } else {\n      console.error(`[${projectName}] ERROR: ${message}`);\n    }\n  },\n};\n\nexport default log;\n","import type { ValidateError } from \"@markdoc/markdoc\";\n\nimport log from \"./logs.ts\";\nimport type { ValidationLevel } from \"./types.ts\";\n\n/**\n * Map Markdoc error levels to a numeric value for comparison, higher number means more severe\n * Set breaking level to throw Error based on validation level\n */\nconst errorLevelsMap = new Map<ValidateError[\"error\"][\"level\"], number>([\n  [\"debug\", 0],\n  [\"info\", 1],\n  [\"warning\", 2],\n  [\"error\", 3],\n  [\"critical\", 4],\n]);\n\n/**\n * Handles Markdoc validation errors.\n * Logs non-breaking errors and throws an error if breaking errors are found\n * based on the configured validation level.\n *\n * @param errors - The array of validation errors from Markdoc.validate.\n * @param validationLevel - The configured level at which to throw an error.\n * @param filename - The name of the file being processed (for logging).\n * @throws Error if any errors are at or above the specified validationLevel.\n */\nexport function handleValidationErrors(\n  errors: ValidateError[],\n  validationLevel: ValidationLevel,\n  filename: string,\n): void {\n  if (!errors || errors.length === 0) {\n    return; // No errors to handle\n  }\n\n  // Input is controlled, so it can't be null\n  const breakingLevel = errorLevelsMap.get(validationLevel)!;\n\n  const breakingErrors: ValidateError[] = [];\n\n  for (const error of errors) {\n    const errorLevel = error.error.level;\n    const errorLevelValue = errorLevelsMap.get(errorLevel);\n\n    if (errorLevelValue !== undefined && errorLevelValue >= breakingLevel) {\n      breakingErrors.push(error);\n    }\n  }\n\n  // Throw if breaking errors exist\n  if (breakingErrors.length > 0) {\n    const summary = `Markdoc validation failed in ${filename}. Found ${breakingErrors.length} error${breakingErrors.length > 1 ? \"s\" : \"\"} at or above configured level \"${validationLevel}\".`;\n\n    log.error(summary);\n\n    // Create a more readable list of breaking errors for the message\n    const detailedErrorMessage = breakingErrors\n      .map((error) => {\n        const { type, lines, error: errorDetails } = error;\n        const startLine = lines[0];\n        const endLine = lines[1];\n        const locString = `${filename}:${startLine}${startLine !== endLine ? `-${endLine}` : \"\"}`;\n        return `${errorDetails.level.toUpperCase()} (${type}): ${errorDetails.message} at ${locString}`;\n      })\n      .join(\"\\n\");\n\n    const errorMessage = `${summary}\\n\\n${detailedErrorMessage}\\n\\n`;\n    log.error(errorMessage);\n\n    throw new Error(errorMessage);\n  }\n}\n","import FS from \"fs\";\nimport Path from \"path\";\n\nimport { normalizePath } from \"vite\";\n\nimport log from \"./logs.ts\";\n\n/**\n * Converts a path starting with \"/\" to a project-relative path starting with \"./\".\n *\n * @param path The path that might start with \"/\"\n * @returns The path converted to be project-relative if it started with \"/\"\n */\nexport const makePathProjectRelative = (path: string): string => {\n  if (path.startsWith(\"/\")) {\n    return \".\" + path; // Convert \"/markdoc\" to \"./markdoc\"\n  }\n  return path;\n};\n\n// Helper to normalize path separators using Vite's normalizePath\nexport const normalizeAbsolutePath = (absolutePath: string): string => {\n  // Ensure the input is treated as absolute before normalizing\n  const resolvedPath = Path.resolve(absolutePath);\n  return normalizePath(resolvedPath);\n};\n\n/**\n * Finds the first directory that exists from a list of potential paths.\n * @param potentialPaths An array of relative or absolute paths to check.\n * @returns The absolute, normalized path of the first directory found, or null if none exist.\n */\nexport const findFirstDirectory = (potentialPaths: string[]): string | null => {\n  for (let relativeOrAbsolutePath of potentialPaths) {\n    relativeOrAbsolutePath = makePathProjectRelative(relativeOrAbsolutePath);\n\n    // Resolve the path to ensure it's absolute for existsSync check\n    const potentialAbsolutePath = Path.resolve(relativeOrAbsolutePath);\n    if (FS.existsSync(potentialAbsolutePath)) {\n      // Check if it's actually a directory\n      try {\n        const stats = FS.statSync(potentialAbsolutePath);\n        if (stats.isDirectory()) {\n          // Normalize the path for consistency before returning\n          return normalizeAbsolutePath(potentialAbsolutePath);\n        }\n      } catch (e) {\n        // Ignore errors like permission issues, treat as non-existent\n        log.error(\n          `Error checking stats for '${potentialAbsolutePath}', skipping.`,\n          e,\n        );\n      }\n    }\n  }\n  return null; // No existing directory found\n};\n","import FS from \"fs\";\nimport Path from \"path\";\n\nimport type { Config } from \"@markdoc/markdoc\";\nimport Markdoc from \"@markdoc/markdoc\";\n\nimport log from \"./logs.ts\";\n\n/**\n * Loads Markdoc partials from a specified directory.\n *\n * @param directory - The absolute, normalized path to the directory containing partial files.\n * @param extensions - An array of file extensions (e.g., ['.mdoc', '.md']) to consider as partials.\n * @param isExplicit - A boolean indicating if `directory` was set explicitly by the user. (default: false)\n * @returns An object with two properties:\n * - config: The loaded Markdoc partials configuration (or null if none found).\n * - deps: An array of absolute file paths as dependencies for Svelte preprocessor.\n */\nconst loadPartials = (\n  directory: string,\n  extensions: string[],\n  isExplicit: boolean = false,\n): {\n  config: Config[\"partials\"] | null;\n  deps: string[];\n} => {\n  let config: Config[\"partials\"] | null = null;\n  const deps: string[] = [];\n  let partialsLoaded = false; // Flag to track partials load status\n\n  // Resolve path to directory\n  const dir = isExplicit ? directory : Path.resolve(directory, \"partials\");\n\n  // Check if directory exists\n  const dirExists = FS.existsSync(dir);\n  if (!dirExists) {\n    // If passed a directory path, warn that it wasn't found\n    if (isExplicit)\n      log.warn(\n        `Specified \"partialsDirectory\" option '${directory}' not found.`,\n      );\n    return { config: config, deps: deps };\n  }\n\n  // Directory exists, try loading and parsing files incrementally\n  try {\n    const files = FS.readdirSync(dir);\n    for (const file of files) {\n      const path = Path.posix.join(dir, file);\n      const ext = Path.extname(file);\n      // Check for valid file and extension\n      try {\n        const stats = FS.statSync(path);\n\n        // Ignore if not valid\n        if (!stats.isFile() || !extensions.includes(ext)) {\n          continue;\n        }\n      } catch (e) {\n        log.error(`Error reading '${path}', skipping.`, e);\n        continue;\n      }\n      // Parse valid files as Markdoc\n      try {\n        const content = FS.readFileSync(path, \"utf8\");\n        if (!config) config = {};\n        config[file] = Markdoc.parse(content);\n        deps.push(path);\n        partialsLoaded = true;\n      } catch (e) {\n        log.error(`Error parsing partial file '${path}':`, e);\n      }\n    }\n  } catch (e) {\n    log.error(`Error reading partials directory '${directory}':`, e);\n    return { config, deps: [...new Set(deps)] };\n  }\n\n  // Provide feedback if folder exists but no valid files were loaded\n  if (dirExists && !partialsLoaded) {\n    const message = `Partials directory '${dir}' found, but no valid partial files (with the extensions ${extensions.join(\", \")}) were loaded. Check for errors.`;\n    // Warn if explicitly provided a path\n    if (isExplicit) {\n      log.warn(message);\n    } else {\n      log.info(message + \" This may be intentional.\");\n    }\n  }\n\n  return { config, deps: [...new Set(deps)] };\n};\n\nexport default loadPartials;\n","// From Markdown-it Utils EscapeHtml\n// https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs\n\nconst HTML_SVELTE_ESCAPE_TEST_RE = /[&<>\"{}]/;\nconst HTML_SVELTE_ESCAPE_REPLACE_RE = /[&<>\"{}]/g;\n\nconst HTML_SVELTE_REPLACEMENTS = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"{\": \"&lcub;\", // Escape '{' for Svelte\n  \"}\": \"&rcub;\", // Escape '}' for Svelte\n};\n\nconst replaceUnsafeChar = (match: string): string => {\n  const key = match as keyof typeof HTML_SVELTE_REPLACEMENTS;\n  return HTML_SVELTE_REPLACEMENTS[key] ?? match;\n};\n\n/**\n * Escapes characters unsafe for HTML attributes and text content.\n * Also escapes '{' and '}' characters using HTML entities\n * to prevent Svelte from interpreting them as template syntax.\n *\n * @param str The string to escape.\n * @returns The escaped string.\n */\nexport const escapeHtml = (str: string): string => {\n  // Ensure input is a string, handle null/undefined gracefully\n  if (HTML_SVELTE_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_SVELTE_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n};\n","import type {\n  RenderableTreeNode,\n  RenderableTreeNodes,\n  Scalar,\n} from \"@markdoc/markdoc\";\n\nimport { escapeHtml } from \"./escape.ts\";\n\n// Elements with no closing tag\n// https://html.spec.whatwg.org/#void-elements\nconst voidElements = new Set([\n  \"area\",\n  \"base\",\n  \"br\",\n  \"col\",\n  \"embed\",\n  \"hr\",\n  \"img\",\n  \"input\",\n  \"link\",\n  \"meta\",\n  \"source\",\n  \"track\",\n  \"wbr\",\n]);\n\n/**\n * Escapes children content for code and pre blocks.\n * If content is a string, escapes Markdoc brackets.\n * If it is an array, converts each child to a string, removes all new lines,\n * applies Markdoc bracket escaping, and joins them back into a string.\n * For other types, returns an empty string.\n */\nconst escapeChildrenToString = (\n  content: string | RenderableTreeNode[] | { [key: string]: Scalar },\n): string => {\n  if (typeof content === \"string\") {\n    return escapeHtml(content);\n  }\n  if (Array.isArray(content)) {\n    const processedChildren = content.map((child) => {\n      // eslint-disable-next-line @typescript-eslint/no-base-to-string\n      const childString = child?.toString() || \"\";\n      const noNewlines = childString.replace(/\\n/g, \"\");\n      const escaped = escapeHtml(noNewlines);\n      return escaped;\n    });\n    return processedChildren.join(\"\\n\");\n  }\n  return \"\";\n};\n\n/**\n * Renders a Markdoc node tree into an HTML string.\n */\nconst render = (node: RenderableTreeNodes): string => {\n  // Strings don't require any further processing.\n  if (typeof node === \"string\") return node;\n\n  // If node is an array, join the rendered children.\n  if (Array.isArray(node)) return node.map(render).join(\"\");\n\n  // Fallback for null or non-objects.\n  if (node === null || typeof node !== \"object\") return \"\";\n\n  // Destructure properties.\n  const { name, attributes, children = [] } = node;\n\n  // If there’s no tag name, directly render the children.\n  if (!name) return render(children);\n\n  // Ensure the tag name is a string.\n  // eslint-disable-next-line @typescript-eslint/no-base-to-string\n  const tagName = String(name);\n  // Process tag attributes and escape their values.\n  const attributesList = Object.entries(attributes ?? {}).reduce(\n    (accumulator, [key, value]) =>\n      accumulator + ` ${key}=\"${escapeHtml(String(value))}\"`,\n    \"\",\n  );\n  const openingTag = `<${tagName}${attributesList}`;\n\n  // For void (self‑closing) elements.\n  if (voidElements.has(tagName)) return `${openingTag} />`;\n\n  // If children is a number or boolean, return an empty content element.\n  if (typeof children === \"number\" || typeof children === \"boolean\")\n    return `${openingTag}></${tagName}>`;\n\n  // Process children.\n  if (children && (Array.isArray(children) ? children.length : true)) {\n    // Code elements don't need further processing\n    // Just escape characters Svelte brackets\n    if (tagName === \"code\") {\n      return `${openingTag}>${escapeChildrenToString(children)}</${tagName}>`;\n    }\n    // Pre elements are like code elements, just with an extra added tag\n    if (tagName === \"pre\") {\n      return `${openingTag}><code>${escapeChildrenToString(children)}</code></${tagName}>`;\n    }\n    // Other elements need their children recursively rendered\n    return `${openingTag}>${render(children)}</${tagName}>`;\n  }\n\n  // Fallback for no children.\n  return `${openingTag}></${tagName}>`;\n};\n\nexport default render;\n","import { basename, extname } from \"path\";\n\nimport Markdoc from \"@markdoc/markdoc\";\nimport type { ParserArgs } from \"@markdoc/markdoc\";\nimport slug from \"slug\";\nimport type { PreprocessorGroup } from \"svelte/compiler\";\nimport YAML from \"yaml\";\n\nimport {\n  getComponentImports,\n  extractUsedSvelteComponents,\n} from \"./components.ts\";\nimport { handleValidationErrors } from \"./errors.ts\";\nimport { findFirstDirectory, makePathProjectRelative } from \"./files.ts\";\nimport { collectHeadings, heading, type HeadingsObject } from \"./headings.ts\";\nimport log from \"./logs.ts\";\nimport loadPartials from \"./partials.ts\";\nimport render from \"./render.ts\";\nimport loadSchemas from \"./schema.ts\";\nimport type { MarkdocSvelteConfig, Options } from \"./types.ts\";\n\nconst validOptionKeys: (keyof Options)[] = [\n  \"comments\",\n  \"components\",\n  \"extensions\",\n  \"functions\",\n  \"headingIds\",\n  \"layout\",\n  \"linkify\",\n  \"nodes\",\n  \"partials\",\n  \"schema\",\n  \"tags\",\n  \"typographer\",\n  \"validationLevel\",\n  \"variables\",\n];\n\n/**\n * Creates a Svelte preprocessor for Markdoc files\n * @param {Options} options - Configuration options for the Markdoc preprocessor\n * @returns {PreprocessorGroup} A Svelte preprocessor for Markdoc files\n */\nexport const markdocPreprocess = (options: Options = {}): PreprocessorGroup => {\n  // Warn about invalid options\n  for (const key in options) {\n    if (!validOptionKeys.includes(key as keyof Options)) {\n      log.warn(\n        `Invalid option \"${key}\" provided and ignored. Check the documentation for valid options.`,\n      );\n    }\n  }\n\n  // Set defaults\n  const extensions =\n    options.extensions && options.extensions.length > 0\n      ? options.extensions\n      : [\".mdoc\", \".md\"];\n  const schemaPaths = options.schema\n    ? [makePathProjectRelative(options.schema)]\n    : [\"./markdoc\", \"./src/markdoc\"];\n  const nodes = options.nodes;\n  const tags = options.tags;\n  const variables = options.variables;\n  const functions = options.functions;\n  const partialsPath = options.partials\n    ? makePathProjectRelative(options.partials)\n    : undefined;\n  const componentsPath = options.components || \"$lib/components\";\n  const layoutPath = options.layout;\n  const allowComments = options.comments ?? true;\n  const processHeadings = options.headingIds ?? false;\n  // Use custom slugger if provided, or fallback to default\n  const headingSlugger =\n    typeof processHeadings === \"function\" ? processHeadings : slug;\n  const linkify = options.linkify ?? false;\n  const typographer = options.typographer ?? false;\n  const validationLevel = options.validationLevel || \"error\";\n\n  return {\n    name: \"markdoc-svelte\",\n    markup: async ({ content, filename }) => {\n      const debugLogs: string[] = [];\n      // Check if file is a Markdoc file\n      if (\n        !filename ||\n        !extensions.find((extension) => filename.endsWith(extension))\n      )\n        return;\n\n      // Tokenization\n      // markdown-it options https://github.com/markdown-it/markdown-it?tab=readme-ov-file#init-with-presets-and-options\n      const markdownItConfig = {\n        linkify,\n        typographer,\n      };\n      const tokenizer = new Markdoc.Tokenizer({\n        allowIndentation: true,\n        allowComments: allowComments,\n        ...markdownItConfig,\n      });\n      const tokens = tokenizer.tokenize(content);\n\n      // Parse to AST\n      const parserConfig: ParserArgs = {\n        file: filename,\n        location: true,\n        slots: false,\n      };\n      const ast = Markdoc.parse(tokens, parserConfig);\n\n      // Parse frontmatter\n      const isFrontmatter = Boolean(ast.attributes.frontmatter);\n      debugLogs.push(`Frontmatter detected: ${isFrontmatter}`);\n      debugLogs.push(`Raw frontmatter content: ${isFrontmatter}`);\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      const frontmatter: Record<string, unknown> = isFrontmatter\n        ? YAML.parse(ast.attributes.frontmatter as string)\n        : {};\n      debugLogs.push(`Parsed frontmatter: ${JSON.stringify(frontmatter)}`);\n\n      // Prepare to load schemas & partials\n      const dependencies: string[] = [];\n      let configFromSchema: MarkdocSvelteConfig = {};\n      let partialsFromSchema: MarkdocSvelteConfig[\"partials\"] = {};\n      let partialsFromPartials: MarkdocSvelteConfig[\"partials\"] = {};\n\n      // Discover optional schema directory\n      const schemaDir = findFirstDirectory(schemaPaths);\n\n      // Load schema and partials from resolved schema directory, if one exists\n      if (schemaDir) {\n        const { config, deps: schemaDeps } = await loadSchemas(schemaDir);\n        configFromSchema = config;\n        dependencies.push(...schemaDeps);\n\n        const { config: partials, deps } = loadPartials(schemaDir, extensions);\n        if (partials) partialsFromSchema = partials;\n        dependencies.push(...deps);\n      }\n\n      // Load partials from specified partials directory, if one exists\n      if (partialsPath) {\n        const { config, deps } = loadPartials(partialsPath, extensions, true);\n        if (config) partialsFromPartials = config;\n        dependencies.push(...deps);\n      }\n\n      // Assemble full config\n      const fullConfig: MarkdocSvelteConfig = {\n        // Start with base config loaded from the schema directory\n        // Explicitly set options overwrite the base config\n        // For example, if processing headings,\n        // This processor's heading comes first so it's overwritten\n        nodes: {\n          ...(processHeadings ? { heading } : {}), // Only include if passed as option\n          ...configFromSchema.nodes,\n          ...nodes,\n        },\n        tags: { ...configFromSchema.tags, ...tags },\n        functions: { ...configFromSchema.functions, ...functions },\n        partials: { ...partialsFromSchema, ...partialsFromPartials },\n        // Make $frontmatter available as variable\n        variables: { ...configFromSchema.variables, ...variables, frontmatter },\n        headingSlugger,\n      };\n\n      // Validate Markdoc AST\n      const errors = Markdoc.validate(ast, fullConfig);\n      handleValidationErrors(errors, validationLevel, filename);\n      if (validationLevel && validationLevel === \"debug\") {\n        debugLogs.forEach((debugLog) => log.debug(debugLog));\n      }\n\n      // Tranform AST with loaded config\n      // Needs to be awaited to handle async functions in schema (such as nodes)\n      // eslint-disable-next-line @typescript-eslint/await-thenable\n      const transformedContent = await Markdoc.transform(ast, fullConfig);\n\n      // Collect headings from transformed content\n      const getHeadings = (): HeadingsObject => {\n        if (processHeadings) {\n          const result = collectHeadings(transformedContent, headingSlugger);\n          return result;\n        }\n        return { headings: [], node: transformedContent };\n      };\n      const { headings, node: transformedContentWithHeadings } = getHeadings();\n\n      // Render Markdoc AST to Svelte\n      const svelteContent = render(transformedContentWithHeadings);\n\n      // Define frontmatter string for Svelte\n      // Extract filename without path and extension\n      const baseFilename = filename\n        ? basename(filename, extname(filename))\n        : \"\";\n      // Declare module context, including filename and optionally frontmatter\n      const scriptModuleTag =\n        `<script module>\\n` +\n        `\\texport const slug = \"${baseFilename}\";\\n` +\n        (isFrontmatter\n          ? `\\texport const frontmatter = ${JSON.stringify(frontmatter)};\\n` +\n            `\\tconst { ${Object.keys(frontmatter).join(\", \")} } = frontmatter;\\n`\n          : \"\") +\n        (headings.length > 0\n          ? `\\texport const headings = ${JSON.stringify(headings)};\\n`\n          : \"\") +\n        `</script>\\n`;\n\n      // Generate component import statements\n      const usedSvelteComponentNames =\n        extractUsedSvelteComponents(transformedContent);\n      const componentImportStatements = getComponentImports(\n        usedSvelteComponentNames,\n        componentsPath,\n      );\n\n      // Construct script tag content\n      let allScriptImports = componentImportStatements;\n      // Check if layout set explicitly\n      if (layoutPath) {\n        // Add a line break if there are import statements\n        if (allScriptImports && allScriptImports.trim() !== \"\") {\n          allScriptImports += \"\\n\";\n        }\n        // Add the layout as an import\n        allScriptImports += `\\timport Layout_MARKDOC from '${layoutPath}';\\n`;\n      }\n      // Place it all within a script tag\n      const scriptTag = allScriptImports\n        ? `<script>\\n${allScriptImports}</script>\\n`\n        : \"\";\n\n      // If layout is passed explicitly, add it as a wrapping component\n      // If frontmatter or headings exists, pass them to the layout component\n      const layoutWrapperOpen = layoutPath\n        ? `<Layout_MARKDOC${isFrontmatter ? ` {...frontmatter}` : \"\"}${headings.length > 0 ? ` headings={headings}` : \"\"}>\\n`\n        : \"\";\n      const layoutWrapperClose = layoutPath ? `\\n</Layout_MARKDOC>` : \"\";\n\n      // Assemble final Svelte code\n      const code =\n        scriptModuleTag +\n        scriptTag +\n        layoutWrapperOpen +\n        svelteContent +\n        layoutWrapperClose;\n\n      return {\n        code: code,\n        dependencies,\n      };\n    },\n  };\n};\n","import FS from \"fs\";\nimport Path from \"path\";\n\nimport type { Config } from \"@markdoc/markdoc\";\n\nimport log from \"./logs.ts\";\n\n/**\n * Describe a loaded Markdoc config with optional parts.\n */\ninterface LoadedConfig {\n  nodes?: Config[\"nodes\"];\n  tags?: Config[\"tags\"];\n  variables?: Config[\"variables\"];\n  functions?: Config[\"functions\"];\n}\n\n/**\n * Asynchronously loads Markdoc Nodes, Tags, Variables, and Functions\n * from Schema folders and files (e.g., 'tags.ts', 'functions/index.js')\n * from a specified directory.\n *\n * Supports importing from files like `nodes.ts`, `nodes.js`, `nodes/index.ts`,\n * and `nodes/index.js` (and similarly for `tags`, `variables`, `functions`).\n *\n * Supports both \"/markdoc\" and \"./markdoc\" formats (both treated as relative to project root).\n *\n * Cache-busting added in development mode for HMR.\n *\n * @param directory - The absolute, normalized path to the schema directory.\n * @returns A Promise resolving to an object with two properties:\n * - config: The loaded and assembled Markdoc config with optional parts.\n * - deps: An array of absolute file paths as dependencies for Svelte preprocessor.\n */\nconst loadSchemas = async (\n  directory: string,\n): Promise<{\n  config: LoadedConfig;\n  deps: string[];\n}> => {\n  const loadedConfigParts: Partial<LoadedConfig> = {};\n  const deps: string[] = [];\n\n  /**\n   * Reads the default export from JS/TS files for a specific config part\n   * (such as \"tags\", \"functions\") within the resolved schema directory.\n   * Handles finding .ts, .js, index.ts, index.js files.\n   * Used internally by `loadSchemas`.\n   *\n   * @param configPartName The name of the config part (e.g., \"tags\").\n   * @returns A Promise resolving to the default export object if found, otherwise null.\n   */\n  // Define readDirectory overloads (public signatures)\n  async function readConfigPart(\n    configPartName: \"nodes\",\n  ): Promise<Config[\"nodes\"] | null>;\n  async function readConfigPart(\n    configPartName: \"tags\",\n  ): Promise<Config[\"tags\"] | null>;\n  async function readConfigPart(\n    configPartName: \"variables\",\n  ): Promise<Config[\"variables\"] | null>;\n  async function readConfigPart(\n    configPartName: \"functions\",\n  ): Promise<Config[\"functions\"] | null>;\n\n  // Implementation Signature\n  async function readConfigPart(\n    configPartName: string,\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  ): Promise<unknown | null> {\n    try {\n      const moduleBase = Path.posix.join(directory, configPartName);\n      let moduleFile: string | null = null;\n\n      const pathsToCheck = [\n        `${moduleBase}.ts`,\n        `${moduleBase}.js`,\n        `${moduleBase}/index.ts`,\n        `${moduleBase}/index.js`,\n      ];\n\n      for (const potentialPath of pathsToCheck) {\n        // Use FS.existsSync with the potential path directly\n        if (FS.existsSync(potentialPath)) {\n          moduleFile = potentialPath; // Already absolute and normalized\n          break;\n        }\n      }\n\n      if (moduleFile) {\n        let importPath = `file://${moduleFile}`;\n        if (process.env.NODE_ENV === \"development\") {\n          importPath += `?t=${Date.now()}`; // Cache-busting for HMR\n        }\n\n        const importedModule = (await import(importPath)) as {\n          default?: unknown;\n        };\n\n        // Add the *actual file found* as a dependency\n        deps.push(moduleFile);\n\n        return importedModule?.default || null;\n      }\n\n      // If no matching files found\n      return null;\n    } catch (error) {\n      log.error(`Error loading schema part '${configPartName}':`, error);\n      return null;\n    }\n  }\n\n  // Load specific schema parts\n  const [nodes, tags, variables, functions] = await Promise.all([\n    readConfigPart(\"nodes\"),\n    readConfigPart(\"tags\"),\n    readConfigPart(\"variables\"),\n    readConfigPart(\"functions\"),\n  ]);\n\n  // Type-safe assignment, checking for null\n  if (nodes) loadedConfigParts.nodes = nodes;\n  if (tags) loadedConfigParts.tags = tags;\n  if (variables) loadedConfigParts.variables = variables;\n  if (functions) loadedConfigParts.functions = functions;\n\n  // Final Assembly\n  const finalConfig: LoadedConfig = {\n    nodes: loadedConfigParts.nodes,\n    tags: loadedConfigParts.tags,\n    variables: loadedConfigParts.variables,\n    functions: loadedConfigParts.functions,\n  };\n\n  return {\n    config: finalConfig,\n    deps: [...new Set(deps)], // Ensure uniqueness\n  };\n};\n\nexport default loadSchemas;\n"],"names":["getTextContent","children","reduce","text","child","Markdoc","Tag","isTag","getSlug","sluggifier","attributes","id","heading","type","String","level","Number","required","default","transform","node","config","transformAttributes","transformChildren","slug","headingSlugger","render","nodes","tagProps","__collectHeading","base64","string","opts","result","slugify","undefined","fallback","defaults","window","btoa","input","unescape","encodeURIComponent","str","output","block","charCode","idx","map","charAt","charCodeAt","Error","Buffer","from","toString","locales","bg","X","x","de","sr","uk","defaultLocale","isWellFormed","replacement","Object","assign","mode","modes","keys","key","i","l","length","localeMap","locale","lengths","multicharmap","prototype","hasOwnProperty","call","len","indexOf","push","sort","a","b","disallowedChars","char","matchedMultichar","j","substr","charmap","replace","includes","remove","trim","lower","toLowerCase","initialMulticharmap","initialCharmap","rfc3986","pretty","reset","extend","customMap","multi","single","setLocale","projectName","log","message","console","debug","info","warn","error","errorLevelsMap","Map","makePathProjectRelative","path","startsWith","normalizeAbsolutePath","absolutePath","resolvedPath","Path","resolve","normalizePath","loadPartials","directory","extensions","isExplicit","deps","partialsLoaded","dir","dirExists","FS","existsSync","files","readdirSync","file","posix","join","ext","extname","statSync","isFile","e","content","readFileSync","parse","Set","HTML_SVELTE_ESCAPE_TEST_RE","HTML_SVELTE_ESCAPE_REPLACE_RE","HTML_SVELTE_REPLACEMENTS","replaceUnsafeChar","match","escapeHtml","test","voidElements","escapeChildrenToString","Array","isArray","noNewlines","name","tagName","openingTag","entries","accumulator","value","has","validOptionKeys","markdocPreprocess","options","schemaPaths","schema","tags","variables","functions","partialsPath","partials","componentsPath","components","layoutPath","layout","allowComments","comments","processHeadings","headingIds","linkify","typographer","validationLevel","markup","async","filename","debugLogs","find","extension","endsWith","markdownItConfig","tokens","Tokenizer","allowIndentation","tokenize","parserConfig","location","slots","ast","isFrontmatter","Boolean","frontmatter","YAML","JSON","stringify","dependencies","configFromSchema","partialsFromSchema","partialsFromPartials","schemaDir","potentialPaths","relativeOrAbsolutePath","potentialAbsolutePath","isDirectory","findFirstDirectory","schemaDeps","loadedConfigParts","readConfigPart","configPartName","moduleBase","moduleFile","pathsToCheck","potentialPath","importPath","process","env","NODE_ENV","Date","now","importedModule","import","Promise","all","loadSchemas","fullConfig","errors","breakingLevel","get","breakingErrors","errorLevel","errorLevelValue","summary","errorMessage","lines","errorDetails","startLine","endLine","locString","toUpperCase","handleValidationErrors","validate","forEach","debugLog","transformedContent","headings","transformedContentWithHeadings","topNode","acc","index","headingList","otherChildAttributes","title","newChild","updatedChildren","getHeadings","svelteContent","scriptModuleTag","basename","componentImportStatements","usedSvelteComponentNames","componentDirPath","importStatements","componentName","getComponentImports","usedComponents","traverse","currentNode","add","extractUsedSvelteComponents","allScriptImports","code"],"mappings":"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ErB,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,GACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,GACH,IAAG,IACH,IAAG,KACH,IAAG,KAEH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IAEH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KAEH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KAEH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,MACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,MACH,IAAG,KACH,IAAG,OACH,IAAG,KACH,IAAG,MACH,IAAG,KACH,IAAG,KACH,IAAG,MACH,KAAI,MACJ,IAAG,KACH,IAAG,KACH,IAAG,MACH,IAAG,KACH,IAAG,MACH,KAAI,MACJ,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,MACH,IAAG,MACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,MACH,IAAG,MACH,IAAG,KACH,IAAG,MACH,IAAG,KACH,KAAI,KACJ,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,MACH,IAAG,OACH,IAAG,KACH,IAAG,KACH,IAAG,MACH,IAAG,MACH,IAAG,MACH,IAAG,OACH,KAAI,QACJ,KAAI,SACJ,IAAG,KACH,IAAG,KACH,KAAI,KACJ,KAAI,KAEJ,IAAG,IACH,IAAG,IAEH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IAEH,IAAG,IACH,KAAI,IACJ,IAAG,IACH,IAAG,IACH,KAAI,IACJ,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,IACH,IAAG,KACH,IAAG,KACH,IAAG,IACH,IAAG,IACH,KAAI,IACJ,IAAG,KAGL5E,EAAKoE,QAAU3B,OAAOC,OAAO,CAAA,EAAIkC,GACjC5E,EAAKqD,aAAeZ,OAAOC,OAAO,CAAA,EAAIiC,GACtC3E,EAAKa,SAAW,CACduD,QAASpE,EAAKoE,QACdzB,KAAM,SACNC,MAAO,CACLiC,QAAS,CACPrC,YAAa,IACb+B,OAAQ,KACRE,OAAO,EACPL,QAASpE,EAAKoE,QACdf,aAAcrD,EAAKqD,aACnBmB,MAAM,GAERM,OAAQ,CACNtC,YAAa,IACb+B,OAAQ,KACRE,OAAO,EACPL,QAASpE,EAAKoE,QACdf,aAAcrD,EAAKqD,aACnBmB,MAAM,IAGVnB,aAAcrD,EAAKqD,aACnBzC,UAAU,GAGZZ,EAAK+E,MAAQ,WACX/E,EAAKa,SAAS+B,MAAMiC,QAAQT,QAAUpE,EAAKa,SAAS+B,MAAMkC,OAAOV,QAAUpE,EAAKoE,QAAUpE,EAAKa,SAASuD,QAAU3B,OAAOC,OAAO,CAAA,EAAIkC,GACpI5E,EAAKa,SAAS+B,MAAMiC,QAAQxB,aAAerD,EAAKa,SAAS+B,MAAMkC,OAAOzB,aAAerD,EAAKqD,aAAerD,EAAKa,SAASwC,aAAeZ,OAAOC,OAAO,CAAA,EAAIiC,GACxJrC,EAAgB,EAClB,EAEAtC,EAAKgF,OAAS,SAAUC,GACtB,MAAMpC,EAAOJ,OAAOI,KAAKoC,GACnBC,EAAQ,CAAA,EACRC,EAAS,CAAA,EACf,IAAK,IAAIpC,EAAI,EAAGA,EAAIF,EAAKI,OAAQF,IAC3BF,EAAKE,GAAGE,OAAS,EACnBiC,EAAMrC,EAAKE,IAAMkC,EAAUpC,EAAKE,IAEhCoC,EAAOtC,EAAKE,IAAMkC,EAAUpC,EAAKE,IAGrCN,OAAOC,OAAO1C,EAAKoE,QAASe,GAC5B1C,OAAOC,OAAO1C,EAAKqD,aAAc6B,EACnC,EAEAlF,EAAKoF,UAAY,SAAUjC,GACzBb,EAAgBP,EAAQoB,IAAW,CAAA,CACrC,EClzBO,MCZDkC,EAAc,iBAEdC,EACIC,IACNC,QAAQC,MAAM,IAAIJ,aAAuBE,MAFvCD,EAIGC,IACLC,QAAQE,KAAK,IAAIL,YAAsBE,MALrCD,EAUGC,IACLC,QAAQG,KAAK,IAAIN,eAAyBE,MAXxCD,EAeG,CAACC,EAAiBK,KACnBA,EACFJ,QAAQI,MAAM,IAAIP,aAAuBE,IAAWK,GAEpDJ,QAAQI,MAAM,IAAIP,aAAuBE,MCZzCM,EAAiB,IAAIC,IAA6C,CACtE,CAAC,QAAS,GACV,CAAC,OAAQ,GACT,CAAC,UAAW,GACZ,CAAC,QAAS,GACV,CAAC,WAAY,KCDR,MAAMC,EAA2BC,GAClCA,EAAKC,WAAW,KACX,IAAMD,EAERA,EAIIE,EAAyBC,IAEpC,MAAMC,EAAeC,EAAKC,QAAQH,GAClC,OAAOI,EAAcH,ICNjBI,EAAe,CACnBC,EACAC,EACAC,GAAsB,KAKtB,IAAI9G,EAAoC,KACxC,MAAM+G,EAAiB,GACvB,IAAIC,GAAiB,EAGrB,MAAMC,EAAMH,EAAaF,EAAYJ,EAAKC,QAAQG,EAAW,YAGvDM,EAAYC,EAAGC,WAAWH,GAChC,IAAKC,EAMH,OAJIJ,GACFrB,EACE,yCAAyCmB,iBAEtC,CAAE5G,OAAQA,EAAQ+G,KAAMA,GAIjC,IACE,MAAMM,EAAQF,EAAGG,YAAYL,GAC7B,IAAK,MAAMM,KAAQF,EAAO,CACxB,MAAMlB,EAAOK,EAAKgB,MAAMC,KAAKR,EAAKM,GAC5BG,EAAMlB,EAAKmB,QAAQJ,GAEzB,IAIE,IAHcJ,EAAGS,SAASzB,GAGf0B,WAAahB,EAAWpC,SAASiD,GAC1C,QAEJ,CAAE,MAAOI,GACPrC,EAAU,kBAAkBU,gBAAoB2B,GAChD,QACF,CAEA,IACE,MAAMC,EAAUZ,EAAGa,aAAa7B,EAAM,QACjCnG,IAAQA,EAAS,CAAA,GACtBA,EAAOuH,GAAQvI,EAAQiJ,MAAMF,GAC7BhB,EAAKjD,KAAKqC,GACVa,GAAiB,CACnB,CAAE,MAAOc,GACPrC,EAAU,+BAA+BU,MAAU2B,EACrD,CACF,CACF,CAAE,MAAOA,GAEP,OADArC,EAAU,qCAAqCmB,MAAekB,GACvD,CAAE9H,SAAQ+G,KAAM,IAAI,IAAImB,IAAInB,IACrC,CAGA,GAAIG,IAAcF,EAAgB,CAChC,MAAMtB,EAAU,uBAAuBuB,6DAA+DJ,EAAWY,KAAK,wCAElHX,EACFrB,EAASC,GAETD,EAASC,EAAU,4BAEvB,CAEA,MAAO,CAAE1F,SAAQ+G,KAAM,IAAI,IAAImB,IAAInB,MCtF/BoB,EAA6B,WAC7BC,EAAgC,YAEhCC,EAA2B,CAC/B,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,UAGDC,EAAqBC,GAElBF,EADKE,IAC4BA,EAW7BC,EAAclH,GAErB6G,EAA2BM,KAAKnH,GAC3BA,EAAIkD,QAAQ4D,EAA+BE,GAE7ChH,ECvBHoH,EAAe,IAAIR,IAAI,CAC3B,OACA,OACA,KACA,MACA,QACA,KACA,MACA,QACA,OACA,OACA,SACA,QACA,QAUIS,EACJZ,IAEA,GAAuB,iBAAZA,EACT,OAAOS,EAAWT,GAEpB,GAAIa,MAAMC,QAAQd,GAAU,CAQ1B,OAP0BA,EAAQpG,IAAK5C,IAErC,MACM+J,GADc/J,GAAOkD,YAAc,IACVuC,QAAQ,MAAO,IAE9C,OADgBgE,EAAWM,KAGJrB,KAAK,KAChC,CACA,MAAO,IAMHpH,EAAUN,IAEd,GAAoB,iBAATA,EAAmB,OAAOA,EAGrC,GAAI6I,MAAMC,QAAQ9I,GAAO,OAAOA,EAAK4B,IAAItB,GAAQoH,KAAK,IAGtD,GAAa,OAAT1H,GAAiC,iBAATA,EAAmB,MAAO,GAGtD,MAAMgJ,KAAEA,EAAI1J,WAAEA,EAAUT,SAAEA,EAAW,IAAOmB,EAG5C,IAAKgJ,EAAM,OAAO1I,EAAOzB,GAIzB,MAAMoK,EAAUvJ,OAAOsJ,GAOjBE,EAAa,IAAID,IALApG,OAAOsG,QAAQ7J,GAAc,CAAA,GAAIR,OACtD,CAACsK,GAAclG,EAAKmG,KAClBD,EAAc,IAAIlG,MAAQuF,EAAW/I,OAAO2J,OAC9C,MAKF,OAAIV,EAAaW,IAAIL,GAAiB,GAAGC,OAGjB,iBAAbrK,GAA6C,kBAAbA,IAIvCA,GAAagK,MAAMC,QAAQjK,KAAYA,EAASwE,OAH3C,GAAG6F,OAAgBD,KAMV,SAAZA,EACK,GAAGC,KAAcN,EAAuB/J,OAAcoK,KAG/C,QAAZA,EACK,GAAGC,WAAoBN,EAAuB/J,cAAqBoK,KAGrE,GAAGC,KAAc5I,EAAOzB,OAAcoK,MChF3CM,EAAqC,CACzC,WACA,aACA,aACA,YACA,aACA,SACA,UACA,QACA,WACA,SACA,OACA,cACA,kBACA,aAQWC,EAAoB,CAACC,EAAmB,MAEnD,IAAK,MAAMvG,KAAOuG,EACXF,EAAgB7E,SAASxB,IAC5BwC,EACE,mBAAmBxC,uEAMzB,MAAM4D,EACJ2C,EAAQ3C,YAAc2C,EAAQ3C,WAAWzD,OAAS,EAC9CoG,EAAQ3C,WACR,CAAC,QAAS,OACV4C,EAAcD,EAAQE,OACxB,CAACxD,EAAwBsD,EAAQE,SACjC,CAAC,YAAa,iBACZpJ,EAAQkJ,EAAQlJ,MAChBqJ,EAAOH,EAAQG,KACfC,EAAYJ,EAAQI,UACpBC,EAAYL,EAAQK,UACpBC,EAAeN,EAAQO,SACzB7D,EAAwBsD,EAAQO,eAChCjJ,EACEkJ,EAAiBR,EAAQS,YAAc,kBACvCC,EAAaV,EAAQW,OACrBC,EAAgBZ,EAAQa,WAAY,EACpCC,EAAkBd,EAAQe,aAAc,EAExCnK,EACuB,mBAApBkK,EAAiCA,EAAkBnK,EACtDqK,EAAUhB,EAAQgB,UAAW,EAC7BC,EAAcjB,EAAQiB,cAAe,EACrCC,EAAkBlB,EAAQkB,iBAAmB,QAEnD,MAAO,CACL3B,KAAM,iBACN4B,OAAQC,OAAS7C,UAAS8C,eACxB,MAAMC,EAAsB,GAE5B,IACGD,IACAhE,EAAWkE,KAAMC,GAAcH,EAASI,SAASD,IAElD,OAIF,MAAME,EAAmB,CACvBV,UACAC,eAOIU,EALY,IAAInM,EAAQoM,UAAU,CACtCC,kBAAkB,EAClBjB,cAAeA,KACZc,IAEoBI,SAASvD,GAG5BwD,EAA2B,CAC/BhE,KAAMsD,EACNW,UAAU,EACVC,OAAO,GAEHC,EAAM1M,EAAQiJ,MAAMkD,EAAQI,GAG5BI,EAAgBC,QAAQF,EAAIrM,WAAWwM,aAC7Cf,EAAUhH,KAAK,yBAAyB6H,KACxCb,EAAUhH,KAAK,4BAA4B6H,KAE3C,MAAME,EAAuCF,EACzCG,EAAK7D,MAAMyD,EAAIrM,WAAWwM,aAC1B,CAAA,EACJf,EAAUhH,KAAK,uBAAuBiI,KAAKC,UAAUH,MAGrD,MAAMI,EAAyB,GAC/B,IAAIC,EAAwC,CAAA,EACxCC,EAAsD,CAAA,EACtDC,EAAwD,CAAA,EAG5D,MAAMC,EJhGsB,CAACC,IACjC,IAAK,IAAIC,KAA0BD,EAAgB,CACjDC,EAAyBrG,EAAwBqG,GAGjD,MAAMC,EAAwBhG,EAAKC,QAAQ8F,GAC3C,GAAIpF,EAAGC,WAAWoF,GAEhB,IAEE,GADcrF,EAAGS,SAAS4E,GAChBC,cAER,OAAOpG,EAAsBmG,EAEjC,CAAE,MAAO1E,GAEPrC,EACE,6BAA6B+G,gBAC7B1E,EAEJ,CAEJ,CACA,OAAO,MIyEe4E,CAAmBjD,GAGrC,GAAI4C,EAAW,CACb,MAAMrM,OAAEA,EAAQ+G,KAAM4F,QClGV/B,OAClBhE,IAKA,MAAMgG,EAA2C,CAAA,EAC3C7F,EAAiB,GA0BvB6D,eAAeiC,EACbC,GAGA,IACE,MAAMC,EAAavG,EAAKgB,MAAMC,KAAKb,EAAWkG,GAC9C,IAAIE,EAA4B,KAEhC,MAAMC,EAAe,CACnB,GAAGF,OACH,GAAGA,OACH,GAAGA,aACH,GAAGA,cAGL,IAAK,MAAMG,KAAiBD,EAE1B,GAAI9F,EAAGC,WAAW8F,GAAgB,CAChCF,EAAaE,EACb,KACF,CAGF,GAAIF,EAAY,CACd,IAAIG,EAAa,UAAUH,IACE,gBAAzBI,QAAQC,IAAIC,WACdH,GAAc,MAAMI,KAAKC,SAG3B,MAAMC,QAAwBC,OAAOP,GAOrC,OAFApG,EAAKjD,KAAKkJ,GAEHS,GAAgB5N,SAAW,IACpC,CAGA,OAAO,IACT,CAAE,MAAOkG,GAEP,OADAN,EAAU,8BAA8BqH,MAAoB/G,GACrD,IACT,CACF,CAGA,MAAOzF,EAAOqJ,EAAMC,EAAWC,SAAmB8D,QAAQC,IAAI,CAC5Df,EAAe,SACfA,EAAe,QACfA,EAAe,aACfA,EAAe,eAiBjB,OAbIvM,IAAOsM,EAAkBtM,MAAQA,GACjCqJ,IAAMiD,EAAkBjD,KAAOA,GAC/BC,IAAWgD,EAAkBhD,UAAYA,GACzCC,IAAW+C,EAAkB/C,UAAYA,GAUtC,CACL7J,OARgC,CAChCM,MAAOsM,EAAkBtM,MACzBqJ,KAAMiD,EAAkBjD,KACxBC,UAAWgD,EAAkBhD,UAC7BC,UAAW+C,EAAkB/C,WAK7B9C,KAAM,IAAI,IAAImB,IAAInB,MDN6B8G,CAAYxB,GACvDH,EAAmBlM,EACnBiM,EAAanI,QAAQ6I,GAErB,MAAQ3M,OAAQ+J,EAAQhD,KAAEA,GAASJ,EAAa0F,EAAWxF,GACvDkD,IAAUoC,EAAqBpC,GACnCkC,EAAanI,QAAQiD,EACvB,CAGA,GAAI+C,EAAc,CAChB,MAAM9J,OAAEA,EAAM+G,KAAEA,GAASJ,EAAamD,EAAcjD,GAAY,GAC5D7G,IAAQoM,EAAuBpM,GACnCiM,EAAanI,QAAQiD,EACvB,CAGA,MAAM+G,EAAkC,CAKtCxN,MAAO,IACDgK,EAAkB,CAAE/K,WAAY,MACjC2M,EAAiB5L,SACjBA,GAELqJ,KAAM,IAAKuC,EAAiBvC,QAASA,GACrCE,UAAW,IAAKqC,EAAiBrC,aAAcA,GAC/CE,SAAU,IAAKoC,KAAuBC,GAEtCxC,UAAW,IAAKsC,EAAiBtC,aAAcA,EAAWiC,eAC1DzL,4BLxIN2N,EACArD,EACAG,GAEA,IAAKkD,GAA4B,IAAlBA,EAAO3K,OACpB,OAIF,MAAM4K,EAAgBhI,EAAeiI,IAAIvD,GAEnCwD,EAAkC,GAExC,IAAK,MAAMnI,KAASgI,EAAQ,CAC1B,MAAMI,EAAapI,EAAMA,MAAMrG,MACzB0O,EAAkBpI,EAAeiI,IAAIE,QAEnBrN,IAApBsN,GAAiCA,GAAmBJ,GACtDE,EAAepK,KAAKiC,EAExB,CAGA,GAAImI,EAAe9K,OAAS,EAAG,CAC7B,MAAMiL,EAAU,gCAAgCxD,YAAmBqD,EAAe9K,eAAe8K,EAAe9K,OAAS,EAAI,IAAM,oCAAoCsH,MAEvKjF,EAAU4I,GAGV,MAUMC,EAAe,GAAGD,QAVKH,EAC1BvM,IAAKoE,IACJ,MAAMvG,KAAEA,EAAI+O,MAAEA,EAAOxI,MAAOyI,GAAiBzI,EACvC0I,EAAYF,EAAM,GAClBG,EAAUH,EAAM,GAChBI,EAAY,GAAG9D,KAAY4D,IAAYA,IAAcC,EAAU,IAAIA,IAAY,KACrF,MAAO,GAAGF,EAAa9O,MAAMkP,kBAAkBpP,OAAUgP,EAAa9I,cAAciJ,MAErFlH,KAAK,YAKR,MAFAhC,EAAU6I,GAEJ,IAAIxM,MAAMwM,EAClB,CACF,CKiGMO,CADe7P,EAAQ8P,SAASpD,EAAKoC,GACNpD,EAAiBG,GACL,UAApBH,GACrBI,EAAUiE,QAASC,GAAavJ,EAAUuJ,IAM5C,MAAMC,QAA2BjQ,EAAQc,UAAU4L,EAAKoC,IAUlDoB,SAAEA,EAAUnP,KAAMoP,GAPJ,MAClB,GAAI7E,EAAiB,CAEnB,OT9HR8E,ES6HuCH,ET5HvC7P,ES4H2DgB,ETzHtDpB,EAAQC,IAAIC,MAAMkQ,IAClBA,GAASxQ,SAEPwQ,EAAQxQ,SAASC,OACtB,CAACwQ,EAAKtQ,EAAOuQ,KAEX,IAAKtQ,EAAQC,IAAIC,MAAMH,GAAQ,OAAOsQ,EACtC,MAAME,EAAcF,EAAIH,SAGxB,IACyC,IAAvCnQ,EAAMM,YAAYmB,kBACiB,iBAA5BzB,EAAMM,YAAYK,MACzB,CACA,MAAMc,iBAAEA,EAAgBd,MAAEA,KAAU8P,GAClCzQ,EAAMM,WACRkQ,EAAYzL,KAAK,CACfpE,QACA+P,MAAO9Q,EAAeI,EAAMH,UAC5BU,GAAIH,EAAQC,EAAYL,EAAMM,WAAYN,EAAMH,YAElD,MAAM8Q,EAAW,IACZ3Q,EACHM,WAAY,IACPmQ,MAjESxG,EAkEOjK,EAAMgK,KAlEOC,EAAQT,MAAM,SAkEb,CAAA,EAAK,CAAE7I,YAItCiQ,EAAkB,IAAIN,EAAItP,KAAKnB,UAErC,OADA+Q,EAAgBL,GAASI,EAClB,CACLR,SAAUK,EACVxP,KAAM,IAAKsP,EAAItP,KAAMnB,SAAU+Q,GAEnC,CA5EiB,IAAC3G,EA6ElB,OAAOqG,GAET,CACEH,SAAU,GACVnP,KAAMqP,IAxC8B,CAAEF,SAAU,GAAInP,KAAMqP,ES2HxD,CThIF,IACJA,EACAhQ,ES+HM,MAAO,CAAE8P,SAAU,GAAInP,KAAMkP,IAE4BW,GAGrDC,EAAgBxP,EAAO8O,GAQvBW,EAEJ,2CANmBjF,EACjBkF,EAASlF,EAAUlD,EAAQkD,IAC3B,UAKDc,EACG,gCAAgCI,KAAKC,UAAUH,kBAClCjJ,OAAOI,KAAK6I,GAAapE,KAAK,2BAC3C,KACHyH,EAAS9L,OAAS,EACf,6BAA6B2I,KAAKC,UAAUkD,QAC5C,IACJ,eAKIc,EPnJuB,EACjCC,EACAC,KAEA,IAAIC,EAAmB,GACvB,IAAK,MAAMC,KAAiBH,EAO1BE,GAAoB,YAAYC,WALV1J,EACpB,GAAGwJ,KAAoBE,kBAM3B,OAAOD,GOqI+BE,CPzMG,CACzCtQ,IAEA,MAAMuQ,EAAiB,IAAIpI,IAErBqI,EAAYC,IAEhB,GACGA,GACsB,iBAAhBA,GACgB,iBAAhBA,GACgB,kBAAhBA,EAKT,GAAI5H,MAAMC,QAAQ2H,GAChB,IAAK,MAAMzR,KAASyR,EAClBD,EAASxR,QAiBb,GAREyR,EAAYzH,MACgB,iBAArByH,EAAYzH,MACnB,UAAUN,KAAK+H,EAAYzH,OAE3BuH,EAAeG,IAAID,EAAYzH,MAI7ByH,EAAY5R,UAAYgK,MAAMC,QAAQ2H,EAAY5R,UACpD,IAAK,MAAMG,KAASyR,EAAY5R,SAC9B2R,EAASxR,IAMf,OADAwR,EAASxQ,GACFuQ,GO6JDI,CAA4BzB,GAG5BjF,GAIF,IAAI2G,EAAmBX,EAEnB9F,IAEEyG,GAAgD,KAA5BA,EAAiBhM,SACvCgM,GAAoB,MAGtBA,GAAoB,iCAAiCzG,SAsBvD,MAAO,CACL0G,KAPAd,GAbgBa,EACd,aAAaA,gBACb,KAIsBzG,EACtB,kBAAkByB,EAAgB,oBAAsB,KAAKuD,EAAS9L,OAAS,EAAI,uBAAyB,QAC5G,IAQFyM,GAPyB3F,EAAa,sBAAwB,IAY9D+B","x_google_ignoreList":[1]}