@coderminer/vue-markdown 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +7 -2
  3. package/README.zh-CN.md +6 -3
  4. package/dist/chunks/MarkdownBlockquote-DVXziX2t.js +0 -2
  5. package/dist/chunks/MarkdownBreak-BwCi2Itt.js +0 -2
  6. package/dist/chunks/MarkdownCode-B1k9tmW5.js +0 -2
  7. package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js +0 -2
  8. package/dist/chunks/MarkdownContent-BAK6dqo7.js +0 -2
  9. package/dist/chunks/MarkdownCustomTag-lZJHsD6f.js +46 -0
  10. package/dist/chunks/MarkdownEmphasis-CppivOEu.js +0 -2
  11. package/dist/chunks/MarkdownEmpty-Av5k6bqa.js +0 -2
  12. package/dist/chunks/MarkdownError-C0sPs5W0.js +0 -2
  13. package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js +0 -2
  14. package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js +0 -2
  15. package/dist/chunks/MarkdownHeading-DaNcP0_6.js +0 -2
  16. package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js +0 -2
  17. package/dist/chunks/MarkdownHtml-66lYkvwM.js +0 -2
  18. package/dist/chunks/MarkdownImage-BRy76svs.js +0 -2
  19. package/dist/chunks/MarkdownInlineCode-MXZYFwex.js +0 -2
  20. package/dist/chunks/MarkdownLink-Dbx3NwgV.js +0 -2
  21. package/dist/chunks/MarkdownList-BJ-_C71k.js +0 -2
  22. package/dist/chunks/MarkdownListItem-Z1EHIY26.js +0 -2
  23. package/dist/chunks/MarkdownLoading-D-RYtXxf.js +0 -2
  24. package/dist/chunks/MarkdownParagraph-BxLSmSaG.js +0 -2
  25. package/dist/chunks/MarkdownRenderer-OlkdsvI3.js +482 -0
  26. package/dist/chunks/MarkdownRoot-DEE6iVfh.js +0 -2
  27. package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js +0 -2
  28. package/dist/chunks/MarkdownStrong-uU5MzAoJ.js +0 -2
  29. package/dist/chunks/MarkdownTable-DmBTg_CR.js +0 -2
  30. package/dist/chunks/MarkdownTableCell-eiCJe847.js +0 -2
  31. package/dist/chunks/MarkdownTableRow-DuJaPntg.js +0 -2
  32. package/dist/chunks/MarkdownTableSection-PFHz-R33.js +0 -2
  33. package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js +0 -2
  34. package/dist/chunks/{MarkdownToc-BdOHF-Yo.js → MarkdownToc-DHWWoH6t.js} +1 -3
  35. package/dist/chunks/MarkdownTocItem-DT9mR3vL.js +0 -2
  36. package/dist/chunks/{MermaidLiveEditor-W-qf3G-5.js → MermaidLiveEditor-1TKkI5bp.js} +1 -3
  37. package/dist/chunks/{VueSyntaxHighlighter-DyLsYMwy.js → VueSyntaxHighlighter-BWpCO-cX.js} +1 -3
  38. package/dist/chunks/adapters-CMwX_NEI.js +0 -2
  39. package/dist/chunks/{blank-line-Cb-JBP_5.js → blank-line-CKKsFeKR.js} +1 -3
  40. package/dist/chunks/codemirror-DyphMAEg.js +0 -2
  41. package/dist/chunks/config-aRYo2R8_.js +0 -2
  42. package/dist/chunks/context-8NfW6fxI.js +0 -2
  43. package/dist/chunks/convert-hast-C4Rg2ZuF.js +6 -0
  44. package/dist/chunks/default-ZQ5aHh-N.js +3 -0
  45. package/dist/chunks/diagnostics-CtHoJyiX.js +0 -2
  46. package/dist/chunks/{export-DZQ3cUry.js → export-BrgMLgUp.js} +13 -14
  47. package/dist/chunks/hast-to-nodes-DuZsi4XT.js +29 -0
  48. package/dist/chunks/{lib-BQiWGWpu.js → hast-util-from-html-D3e_iQ89.js} +495 -494
  49. package/dist/chunks/highlightjs-BxJFpKS1.js +196 -0
  50. package/dist/chunks/{identity-jZEhX2d5.js → identity-Bi27FKyx.js} +7 -8
  51. package/dist/chunks/labels-BtHiUTQI.js +0 -2
  52. package/dist/chunks/lib-CCnkLL6S.js +252 -0
  53. package/dist/chunks/longest-streak-DZE_EqsU.js +0 -2
  54. package/dist/chunks/{micromark-factory-space-Db040TnW.js → micromark-factory-space-CpXAnYUY.js} +2 -4
  55. package/dist/chunks/{normalize-CRYv3Wqt.js → normalize-VKfQXZiK.js} +57 -51
  56. package/dist/chunks/{plugin-DqkFHyny.js → plugin-YWo5uqTh.js} +1 -2
  57. package/dist/chunks/preset-BjaOuJUL.js +0 -2
  58. package/dist/chunks/{registry-DLjr93-V.js → registry-B7BfEkuy.js} +1051 -1045
  59. package/dist/chunks/{render-Cs8iKrgz.js → render-DAqK0w5J.js} +524 -494
  60. package/dist/chunks/{default-DWVS-I_8.js → rolldown-runtime-QGRDbDUS.js} +1 -5
  61. package/dist/chunks/{runtime-DJMnzjah.js → runtime-D95F41zG.js} +145 -117
  62. package/dist/chunks/security-y4EwUyAs.js +0 -2
  63. package/dist/chunks/{shared-DNAvZ-UY.js → shared-NjFDPmkb.js} +18 -27
  64. package/dist/chunks/{space-separated-tokens-CmBjEPdR.js → space-separated-tokens-1ebNqf35.js} +1 -3
  65. package/dist/chunks/url-D2BoivaE.js +0 -2
  66. package/dist/chunks/{useActiveHeading-BaGVMJnB.js → useActiveHeading-CnyGTG1u.js} +165 -122
  67. package/dist/components/CodeBlock.js +1 -1
  68. package/dist/components/MarkdownCustomTag.js +1 -1
  69. package/dist/components/MarkdownMath.js +1 -1
  70. package/dist/components/MarkdownMermaid.d.ts +3 -3
  71. package/dist/components/MarkdownMermaid.js +1 -1
  72. package/dist/components/MarkdownRenderer.d.ts +16 -19
  73. package/dist/components/MarkdownRenderer.js +1 -1
  74. package/dist/components/MarkdownToc.js +1 -1
  75. package/dist/components/MermaidBlock.js +1 -1
  76. package/dist/components/MermaidLiveEditor.js +1 -1
  77. package/dist/components/VueSyntaxHighlighter.js +1 -1
  78. package/dist/components/context.d.ts +2 -2
  79. package/dist/components/index.js +6 -6
  80. package/dist/components/types.d.ts +34 -2
  81. package/dist/composables/useMarkdownDocument.d.ts +2 -0
  82. package/dist/core/hast-nodes.d.ts +0 -3
  83. package/dist/core/hast-to-nodes.d.ts +9 -0
  84. package/dist/core/normalize.d.ts +10 -0
  85. package/dist/core/parts.d.ts +1 -0
  86. package/dist/core/slugger.d.ts +7 -0
  87. package/dist/core/types.d.ts +3 -1
  88. package/dist/headless.js +8 -8
  89. package/dist/highlight/convert-hast.d.ts +8 -0
  90. package/dist/highlight/index.d.ts +2 -1
  91. package/dist/highlight/index.js +4 -3
  92. package/dist/highlight/shared.d.ts +0 -5
  93. package/dist/highlight/shiki.js +2 -3
  94. package/dist/html/index.js +0 -2
  95. package/dist/index.d.ts +1 -1
  96. package/dist/index.js +47 -49
  97. package/dist/math/index.js +18 -16
  98. package/dist/mermaid/index.d.ts +2 -1
  99. package/dist/mermaid/index.js +8 -3
  100. package/dist/mermaid/plugin.d.ts +3 -0
  101. package/dist/mermaid/runtime.d.ts +3 -1
  102. package/dist/mermaid/sanitize-svg-lazy.d.ts +10 -0
  103. package/dist/mermaid/sanitize-svg.d.ts +3 -0
  104. package/dist/mermaid/sanitize.d.ts +6 -2
  105. package/dist/node-components.js +6 -6
  106. package/dist/pipeline.js +1 -1
  107. package/dist/plugins.js +1 -1
  108. package/dist/styles/components.css +25 -0
  109. package/package.json +6 -3
  110. package/dist/chunks/MarkdownBlockquote-DVXziX2t.js.map +0 -1
  111. package/dist/chunks/MarkdownBreak-BwCi2Itt.js.map +0 -1
  112. package/dist/chunks/MarkdownCode-B1k9tmW5.js.map +0 -1
  113. package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js.map +0 -1
  114. package/dist/chunks/MarkdownContent-BAK6dqo7.js.map +0 -1
  115. package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js +0 -42
  116. package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js.map +0 -1
  117. package/dist/chunks/MarkdownEmphasis-CppivOEu.js.map +0 -1
  118. package/dist/chunks/MarkdownEmpty-Av5k6bqa.js.map +0 -1
  119. package/dist/chunks/MarkdownError-C0sPs5W0.js.map +0 -1
  120. package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js.map +0 -1
  121. package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js.map +0 -1
  122. package/dist/chunks/MarkdownHeading-DaNcP0_6.js.map +0 -1
  123. package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js.map +0 -1
  124. package/dist/chunks/MarkdownHtml-66lYkvwM.js.map +0 -1
  125. package/dist/chunks/MarkdownImage-BRy76svs.js.map +0 -1
  126. package/dist/chunks/MarkdownInlineCode-MXZYFwex.js.map +0 -1
  127. package/dist/chunks/MarkdownLink-Dbx3NwgV.js.map +0 -1
  128. package/dist/chunks/MarkdownList-BJ-_C71k.js.map +0 -1
  129. package/dist/chunks/MarkdownListItem-Z1EHIY26.js.map +0 -1
  130. package/dist/chunks/MarkdownLoading-D-RYtXxf.js.map +0 -1
  131. package/dist/chunks/MarkdownParagraph-BxLSmSaG.js.map +0 -1
  132. package/dist/chunks/MarkdownRenderer-DLRRfsdI.js +0 -416
  133. package/dist/chunks/MarkdownRenderer-DLRRfsdI.js.map +0 -1
  134. package/dist/chunks/MarkdownRoot-DEE6iVfh.js.map +0 -1
  135. package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js.map +0 -1
  136. package/dist/chunks/MarkdownStrong-uU5MzAoJ.js.map +0 -1
  137. package/dist/chunks/MarkdownTable-DmBTg_CR.js.map +0 -1
  138. package/dist/chunks/MarkdownTableCell-eiCJe847.js.map +0 -1
  139. package/dist/chunks/MarkdownTableRow-DuJaPntg.js.map +0 -1
  140. package/dist/chunks/MarkdownTableSection-PFHz-R33.js.map +0 -1
  141. package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js.map +0 -1
  142. package/dist/chunks/MarkdownToc-BdOHF-Yo.js.map +0 -1
  143. package/dist/chunks/MarkdownTocItem-DT9mR3vL.js.map +0 -1
  144. package/dist/chunks/MermaidLiveEditor-W-qf3G-5.js.map +0 -1
  145. package/dist/chunks/VueSyntaxHighlighter-DyLsYMwy.js.map +0 -1
  146. package/dist/chunks/adapters-CMwX_NEI.js.map +0 -1
  147. package/dist/chunks/blank-line-Cb-JBP_5.js.map +0 -1
  148. package/dist/chunks/codemirror-DyphMAEg.js.map +0 -1
  149. package/dist/chunks/config-aRYo2R8_.js.map +0 -1
  150. package/dist/chunks/context-8NfW6fxI.js.map +0 -1
  151. package/dist/chunks/default-DWVS-I_8.js.map +0 -1
  152. package/dist/chunks/diagnostics-CtHoJyiX.js.map +0 -1
  153. package/dist/chunks/export-DZQ3cUry.js.map +0 -1
  154. package/dist/chunks/hast-nodes-C0bX3M5Z.js +0 -35
  155. package/dist/chunks/hast-nodes-C0bX3M5Z.js.map +0 -1
  156. package/dist/chunks/highlightjs-BEh-YwEG.js +0 -6041
  157. package/dist/chunks/highlightjs-BEh-YwEG.js.map +0 -1
  158. package/dist/chunks/identity-jZEhX2d5.js.map +0 -1
  159. package/dist/chunks/labels-BtHiUTQI.js.map +0 -1
  160. package/dist/chunks/lib-BQiWGWpu.js.map +0 -1
  161. package/dist/chunks/lib-LwqA_W3J.js +0 -127
  162. package/dist/chunks/lib-LwqA_W3J.js.map +0 -1
  163. package/dist/chunks/longest-streak-DZE_EqsU.js.map +0 -1
  164. package/dist/chunks/micromark-factory-space-Db040TnW.js.map +0 -1
  165. package/dist/chunks/normalize-CRYv3Wqt.js.map +0 -1
  166. package/dist/chunks/plugin-DqkFHyny.js.map +0 -1
  167. package/dist/chunks/preset-BjaOuJUL.js.map +0 -1
  168. package/dist/chunks/registry-DLjr93-V.js.map +0 -1
  169. package/dist/chunks/render-Cs8iKrgz.js.map +0 -1
  170. package/dist/chunks/runtime-DJMnzjah.js.map +0 -1
  171. package/dist/chunks/security-y4EwUyAs.js.map +0 -1
  172. package/dist/chunks/shared-DNAvZ-UY.js.map +0 -1
  173. package/dist/chunks/space-separated-tokens-CmBjEPdR.js.map +0 -1
  174. package/dist/chunks/url-D2BoivaE.js.map +0 -1
  175. package/dist/chunks/useActiveHeading-BaGVMJnB.js.map +0 -1
  176. package/dist/highlight/shiki.js.map +0 -1
  177. package/dist/html/index.js.map +0 -1
  178. package/dist/index.js.map +0 -1
  179. package/dist/math/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"security-y4EwUyAs.js","names":["defaultUrlTransform","ALLOWED_TAGS","DANGEROUS_TAGS","URL_ATTRIBUTES","GLOBAL_ATTRIBUTES","TAG_ATTRIBUTES","ATTRIBUTE_ALIASES","kebab","value","toAttributeName","key","isAllowedAttribute","name","tagAttributes","tag","isSafeUrl","parseSrcset","candidates","index","urlStart","url","commaSeparated","descriptor","descriptorStart","sanitizeUrlValue","safe","candidate","ALLOWED_STYLE_PROPERTIES","UNSAFE_STYLE","sanitizeStyleValue","declarations","part","separator","rawValue","propertiesToAttrs","attrs","properties","raw","options","safeStyle"],"sources":["../../src/core/security.ts"],"sourcesContent":["import type { Properties } from 'hast'\r\nimport { defaultUrlTransform } from './url'\r\n\r\n/** Tags that may appear in the normalized model. */\r\nexport const ALLOWED_TAGS = new Set([\r\n 'p',\r\n 'h1',\r\n 'h2',\r\n 'h3',\r\n 'h4',\r\n 'h5',\r\n 'h6',\r\n 'em',\r\n 'strong',\r\n 'del',\r\n 'a',\r\n 'img',\r\n 'ul',\r\n 'ol',\r\n 'li',\r\n 'blockquote',\r\n 'hr',\r\n 'table',\r\n 'thead',\r\n 'tbody',\r\n 'tfoot',\r\n 'tr',\r\n 'th',\r\n 'td',\r\n 'caption',\r\n 'colgroup',\r\n 'col',\r\n 'pre',\r\n 'code',\r\n 'br',\r\n 'input',\r\n 'section',\r\n 'div',\r\n 'span',\r\n 'sup',\r\n 'sub',\r\n 'kbd',\r\n 'mark',\r\n 'abbr',\r\n 'details',\r\n 'summary',\r\n 'dl',\r\n 'dt',\r\n 'dd',\r\n 'figure',\r\n 'figcaption',\r\n 'time',\r\n 'b',\r\n 'i',\r\n 's',\r\n 'u',\r\n 'q',\r\n 'ins',\r\n 'picture',\r\n 'source',\r\n 'ruby',\r\n 'rp',\r\n 'rt',\r\n 'samp',\r\n 'var',\r\n 'tt',\r\n 'strike',\r\n])\r\n\r\n/** Tags whose content must never reach the model. */\r\nexport const DANGEROUS_TAGS = new Set([\r\n 'script',\r\n 'style',\r\n 'iframe',\r\n 'object',\r\n 'embed',\r\n 'link',\r\n 'meta',\r\n 'base',\r\n 'form',\r\n 'textarea',\r\n 'select',\r\n 'option',\r\n 'template',\r\n 'noscript',\r\n 'svg',\r\n 'math',\r\n])\r\n\r\nconst URL_ATTRIBUTES = new Set([\r\n 'href',\r\n 'src',\r\n 'cite',\r\n 'poster',\r\n 'action',\r\n 'formaction',\r\n 'data',\r\n 'srcset',\r\n 'xlink:href',\r\n])\r\n\r\nexport { URL_ATTRIBUTES }\r\n\r\nconst GLOBAL_ATTRIBUTES = new Set([\r\n 'id',\r\n 'class',\r\n 'title',\r\n 'lang',\r\n 'dir',\r\n 'role',\r\n 'tabindex',\r\n 'hidden',\r\n 'align',\r\n])\r\n\r\nconst TAG_ATTRIBUTES: Record<string, readonly string[]> = {\r\n a: ['href', 'target', 'rel', 'download', 'hreflang', 'type', 'name'],\r\n img: [\r\n 'src',\r\n 'alt',\r\n 'width',\r\n 'height',\r\n 'loading',\r\n 'decoding',\r\n 'srcset',\r\n 'sizes',\r\n 'referrerpolicy',\r\n 'crossorigin',\r\n ],\r\n ol: ['start', 'reversed', 'type'],\r\n ul: ['type'],\r\n li: ['value'],\r\n input: ['type', 'checked', 'disabled', 'name', 'value'],\r\n td: ['colspan', 'rowspan', 'headers', 'scope'],\r\n th: ['colspan', 'rowspan', 'headers', 'scope', 'abbr'],\r\n table: ['summary'],\r\n col: ['span', 'width'],\r\n colgroup: ['span'],\r\n blockquote: ['cite'],\r\n q: ['cite'],\r\n del: ['cite', 'datetime'],\r\n ins: ['cite', 'datetime'],\r\n time: ['datetime'],\r\n source: ['src', 'srcset', 'sizes', 'media', 'type'],\r\n details: ['open'],\r\n code: ['class'],\r\n pre: ['class'],\r\n abbr: ['title'],\r\n section: ['data-footnotes', 'data-footnote-ref'],\r\n sup: ['data-footnote-ref'],\r\n}\r\n\r\nconst ATTRIBUTE_ALIASES: Record<string, string> = {\r\n classname: 'class',\r\n htmlfor: 'for',\r\n srcset: 'srcset',\r\n colspan: 'colspan',\r\n rowspan: 'rowspan',\r\n charset: 'charset',\r\n httpequiv: 'http-equiv',\r\n tabindex: 'tabindex',\r\n readonly: 'readonly',\r\n maxlength: 'maxlength',\r\n minlength: 'minlength',\r\n autocomplete: 'autocomplete',\r\n referrerpolicy: 'referrerpolicy',\r\n crossorigin: 'crossorigin',\r\n datetime: 'datetime',\r\n}\r\n\r\nfunction kebab(value: string): string {\r\n return value\r\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\r\n .replace(/[_\\s]+/g, '-')\r\n .toLowerCase()\r\n}\r\n\r\nexport function toAttributeName(key: string): string {\r\n if (/^data[A-Z]/.test(key)) return `data-${kebab(key.slice(4))}`\r\n // ARIA attribute names are lowercase concatenations, not kebab-case:\r\n // ariaLabelledBy -> aria-labelledby, ariaValueText -> aria-valuetext.\r\n if (/^aria[A-Z]/.test(key)) return `aria-${key.slice(4).toLowerCase()}`\r\n const alias = ATTRIBUTE_ALIASES[key.toLowerCase()]\r\n if (alias) return alias\r\n return key.includes('-') ? key.toLowerCase() : kebab(key)\r\n}\r\n\r\nexport function isAllowedAttribute(tag: string, name: string): boolean {\r\n if (name.startsWith('on')) return false\r\n if (name === 'style' || name === 'srcdoc') return false\r\n if (name.startsWith('aria-') || name.startsWith('data-')) return true\r\n if (GLOBAL_ATTRIBUTES.has(name)) return true\r\n const tagAttributes = TAG_ATTRIBUTES[tag]\r\n if (tagAttributes) return tagAttributes.includes(name)\r\n // Unknown tags are plugin/custom tags: accept safe named props, but still\r\n // reject event handlers and validate URL-bearing attributes below.\r\n return /^[a-z][a-z0-9-]*$/.test(name)\r\n}\r\n\r\nfunction isSafeUrl(value: string, key: string): boolean {\r\n return value.trim() === '' || defaultUrlTransform(value, key) !== ''\r\n}\r\n\r\ninterface SrcsetCandidate {\r\n url: string\r\n descriptor: string\r\n}\r\n\r\n/**\r\n * Split a `srcset` value without breaking commas inside a `data:` URL. The URL\r\n * runs until whitespace, matching the HTML candidate grammar; a trailing comma\r\n * separates the next candidate.\r\n */\r\nfunction parseSrcset(value: string): SrcsetCandidate[] {\r\n const candidates: SrcsetCandidate[] = []\r\n let index = 0\r\n\r\n while (index < value.length) {\r\n while (index < value.length && /[\\s,]/.test(value[index]!)) index++\r\n if (index >= value.length) break\r\n\r\n const urlStart = index\r\n while (index < value.length && !/\\s/.test(value[index]!)) index++\r\n let url = value.slice(urlStart, index)\r\n let commaSeparated = false\r\n while (url.endsWith(',')) {\r\n url = url.slice(0, -1)\r\n commaSeparated = true\r\n }\r\n\r\n let descriptor = ''\r\n if (!commaSeparated) {\r\n const descriptorStart = index\r\n while (index < value.length && value[index] !== ',') index++\r\n descriptor = value.slice(descriptorStart, index).trim()\r\n }\r\n\r\n if (url) candidates.push({ url, descriptor })\r\n if (index < value.length && value[index] === ',') index++\r\n }\r\n\r\n return candidates\r\n}\r\n\r\n/**\r\n * Validate one URL-bearing attribute value. `srcset` holds a comma-separated\r\n * candidate list, so each candidate is checked individually.\r\n */\r\nexport function sanitizeUrlValue(\r\n value: string,\r\n key: string,\r\n): string | undefined {\r\n if (key === 'srcset') {\r\n const safe: string[] = []\r\n for (const candidate of parseSrcset(value)) {\r\n if (!isSafeUrl(candidate.url, 'src')) continue\r\n safe.push(\r\n candidate.descriptor\r\n ? `${candidate.url} ${candidate.descriptor}`\r\n : candidate.url,\r\n )\r\n }\r\n return safe.length > 0 ? safe.join(', ') : undefined\r\n }\r\n return isSafeUrl(value, key) ? value : undefined\r\n}\r\n\r\n// Inline styles are rejected for document content. Trusted engine output\r\n// (highlighters, math) may opt in to a small, non-executable subset so token\r\n// colors survive normalization.\r\nconst ALLOWED_STYLE_PROPERTIES = new Set([\r\n 'color',\r\n 'background-color',\r\n 'font-style',\r\n 'font-weight',\r\n 'text-decoration',\r\n 'opacity',\r\n])\r\n\r\nconst UNSAFE_STYLE =\r\n /url\\s*\\(|expression\\s*\\(|javascript\\s*:|@import|behavior\\s*:|-moz-binding|[<>{}]/i\r\n\r\nexport function sanitizeStyleValue(value: string): string | undefined {\r\n const declarations: string[] = []\r\n for (const part of value.split(';')) {\r\n const separator = part.indexOf(':')\r\n if (separator <= 0) continue\r\n const name = part.slice(0, separator).trim().toLowerCase()\r\n const rawValue = part.slice(separator + 1).trim()\r\n if (!name || !rawValue) continue\r\n if (UNSAFE_STYLE.test(rawValue)) continue\r\n const allowed =\r\n ALLOWED_STYLE_PROPERTIES.has(name) || /^--shiki-[a-z0-9-]+$/.test(name)\r\n if (!allowed) continue\r\n declarations.push(`${name}: ${rawValue}`)\r\n }\r\n return declarations.length > 0 ? declarations.join('; ') : undefined\r\n}\r\n\r\nexport interface PropertiesToAttrsOptions {\r\n /** Allow a constrained inline-style subset for trusted engine output. */\r\n allowStyle?: boolean\r\n}\r\n\r\n/** Convert hast properties into safe, normalized attributes. */\r\nexport function propertiesToAttrs(\r\n tag: string,\r\n properties: Properties | undefined,\r\n options: PropertiesToAttrsOptions = {},\r\n): Record<string, string> {\r\n const attrs: Record<string, string> = {}\r\n if (!properties) return attrs\r\n\r\n for (const key of Object.keys(properties)) {\r\n const raw = properties[key]\r\n if (raw === null || raw === undefined || raw === false) continue\r\n const name = toAttributeName(key)\r\n\r\n let value: string\r\n if (raw === true) {\r\n value = ''\r\n } else if (Array.isArray(raw)) {\r\n value = raw.join(' ')\r\n } else {\r\n value = String(raw)\r\n }\r\n\r\n if (name === 'style') {\r\n if (!options.allowStyle) continue\r\n const safeStyle = sanitizeStyleValue(value)\r\n if (safeStyle === undefined) continue\r\n attrs.style = safeStyle\r\n continue\r\n }\r\n\r\n if (!isAllowedAttribute(tag, name)) continue\r\n\r\n if (URL_ATTRIBUTES.has(name)) {\r\n const safe = sanitizeUrlValue(value, name)\r\n if (safe === undefined) continue\r\n attrs[name] = safe\r\n continue\r\n }\r\n\r\n attrs[name] = value\r\n }\r\n\r\n return attrs\r\n}\r\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-DNAvZ-UY.js","names":["_objectSpread2","htmlToMarkdownNodes","hastToMarkdownNodes","MAX_CACHE","cache","plaintextHighlight","code","highlightedNodesFromHtml","html","highlightedNodesFromHast","nodes","cacheKey","_options$theme","_options$colorScheme","highlighter","language","options","clearHighlightCache","isResult","value","result","runHighlighter","key","cached","_unused","oldest","splitHighlightLines","nextKey","splitNode","node","part","splitNodes","lines","list","index","line"],"sources":["../../src/highlight/shared.ts"],"sourcesContent":["import type {\r\n HighlightOptions,\r\n HighlightResult,\r\n MarkdownHighlighter,\r\n MarkdownNode,\r\n} from '../core/types'\r\nimport {\r\n hastToMarkdownNodes,\r\n htmlToMarkdownNodes,\r\n} from '../core/hast-nodes'\r\n\r\nconst MAX_CACHE = 256\r\nconst cache = new Map<string, HighlightResult>()\r\n\r\nexport function plaintextHighlight(\r\n code: string,\r\n language = '',\r\n): HighlightResult {\r\n return {\r\n language,\r\n nodes: [{ kind: 'text', key: 'highlight-0', value: code }],\r\n }\r\n}\r\n\r\n/** Convert trusted engine HTML into normalized nodes. */\r\nexport function highlightedNodesFromHtml(html: string): MarkdownNode[] {\r\n return htmlToMarkdownNodes(html)\r\n}\r\n\r\n/** Convert an already-parsed hast subtree into normalized nodes. */\r\nexport function highlightedNodesFromHast(\r\n nodes: Parameters<typeof hastToMarkdownNodes>[0],\r\n): MarkdownNode[] {\r\n return hastToMarkdownNodes(nodes)\r\n}\r\n\r\nexport function cacheKey(\r\n highlighter: MarkdownHighlighter,\r\n code: string,\r\n language: string,\r\n options: HighlightOptions,\r\n): string {\r\n return [\r\n highlighter.id,\r\n language,\r\n options.theme ?? '',\r\n options.colorScheme ?? '',\r\n JSON.stringify(options),\r\n code,\r\n ].join('\\u001e')\r\n}\r\n\r\nexport function clearHighlightCache(): void {\r\n cache.clear()\r\n}\r\n\r\nfunction isResult(value: unknown): value is HighlightResult {\r\n if (!value || typeof value !== 'object') return false\r\n const result = value as HighlightResult\r\n return typeof result.language === 'string' && Array.isArray(result.nodes)\r\n}\r\n\r\n/**\r\n * Run one adapter safely. Invalid adapters, thrown errors, and malformed\r\n * results fall back to plain text instead of breaking the document.\r\n */\r\nexport function runHighlighter(\r\n highlighter: MarkdownHighlighter | undefined,\r\n code: string,\r\n language: string,\r\n options: HighlightOptions = {},\r\n): HighlightResult {\r\n if (!highlighter) return plaintextHighlight(code, language)\r\n const key = cacheKey(highlighter, code, language, options)\r\n const cached = cache.get(key)\r\n if (cached) return cached\r\n\r\n let result: HighlightResult\r\n try {\r\n const value = highlighter.highlight(code, language, options)\r\n result = isResult(value) ? value : plaintextHighlight(code, language)\r\n } catch {\r\n result = plaintextHighlight(code, language)\r\n }\r\n\r\n cache.set(key, result)\r\n if (cache.size > MAX_CACHE) {\r\n const oldest = cache.keys().next().value\r\n if (oldest !== undefined) cache.delete(oldest)\r\n }\r\n return result\r\n}\r\n\r\n/** Split highlighted nodes into lines while preserving element wrappers. */\r\nexport function splitHighlightLines(\r\n nodes: readonly MarkdownNode[],\r\n): MarkdownNode[][] {\r\n let key = 0\r\n\r\n const nextKey = (): string => `line-${key++}`\r\n\r\n const splitNode = (node: MarkdownNode): MarkdownNode[][] => {\r\n if (node.kind === 'text') {\r\n return node.value.split('\\n').map((part) =>\r\n part === '' ? [] : [{ kind: 'text', key: nextKey(), value: part }],\r\n )\r\n }\r\n if (!('children' in node) || !Array.isArray(node.children)) {\r\n return [[node]]\r\n }\r\n return splitNodes(node.children).map((children) => [\r\n { ...node, key: nextKey(), children } as MarkdownNode,\r\n ])\r\n }\r\n\r\n const splitNodes = (list: readonly MarkdownNode[]): MarkdownNode[][] => {\r\n const lines: MarkdownNode[][] = [[]]\r\n for (const node of list) {\r\n const nodeLines = splitNode(node)\r\n nodeLines.forEach((line, index) => {\r\n if (index > 0) lines.push([])\r\n lines[lines.length - 1]!.push(...line)\r\n })\r\n }\r\n return lines\r\n }\r\n\r\n return splitNodes(nodes)\r\n}\r\n"],"mappings":";;;AAWA,IAAMG,IAAY,KACZC,oBAAQ,IAAI,IAA6B;AAE/C,SAAgBC,EACd,GACA,IAAW,IACM;CACjB,OAAO;EACL;EACA,OAAO,CAAC;GAAE,MAAM;GAAQ,KAAK;GAAe,OAAOC;EAAK,CAAC;CAC3D;AACF;AAGA,SAAgBC,EAAyB,GAA8B;CACrE,OAAON,EAAoBO,CAAI;AACjC;AAGA,SAAgBC,EACd,GACgB;CAChB,OAAOP,EAAoBQ,CAAK;AAClC;AAEA,SAAgBC,EACd,GACA,GACA,GACA,GACQ;;CACR,OAAO;EACLG,EAAY;EACZC;GACA,IAAAC,EAAQ,UAAA,OAAS,KAATJ;GACR,IAAAI,EAAQ,gBAAA,OAAe,KAAfH;EACR,KAAK,UAAUG,CAAO;EACtBV;CACF,CAAC,CAAC,KAAK,GAAQ;AACjB;AAEA,SAAgBW,IAA4B;CAC1C,EAAM,MAAM;AACd;AAEA,SAASC,EAAS,GAA0C;CAC1D,IAAI,CAACC,KAAS,OAAOA,KAAU,UAAU,OAAO;CAChD,IAAMC,IAASD;CACf,OAAO,OAAOC,EAAO,YAAa,YAAY,MAAM,QAAQA,EAAO,KAAK;AAC1E;AAMA,SAAgBC,EACd,GACA,GACA,GACA,IAA4B,CAAC,GACZ;CACjB,IAAI,CAACP,GAAa,OAAOT,EAAmBC,GAAMS,CAAQ;CAC1D,IAAMO,IAAMX,EAASG,GAAaR,GAAMS,GAAUC,CAAO,GACnDO,IAASnB,EAAM,IAAIkB,CAAG;CAC5B,IAAIC,GAAQ,OAAOA;CAEnB,IAAIH;CACJ,IAAI;EACF,IAAMD,IAAQL,EAAY,UAAUR,GAAMS,GAAUC,CAAO;EAC3D,IAASE,EAASC,CAAK,IAAIA,IAAQd,EAAmBC,GAAMS,CAAQ;CACtE,SAAAS,GAAQ;EACN,IAASnB,EAAmBC,GAAMS,CAAQ;CAC5C;CAGA,IADAX,EAAM,IAAIkB,GAAKF,CAAM,GACjBhB,EAAM,OAAOD,GAAW;EAC1B,IAAMsB,IAASrB,EAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;EACnC,AAAIqB,MAAW,KAAA,KAAWrB,EAAM,OAAOqB,CAAM;CAC/C;CACA,OAAOL;AACT;AAGA,SAAgBM,EACd,GACkB;CAClB,IAAIJ,IAAM,GAEJK,UAAwB,QAAQ,OAEhCC,KAAa,MACbC,EAAK,SAAS,SACTA,EAAK,MAAM,MAAM,IAAI,CAAC,CAAC,KAAK,MACjCC,MAAS,KAAK,CAAC,IAAI,CAAC;EAAE,MAAM;EAAQ,KAAKH,EAAQ;EAAG,OAAOG;CAAK,CAAC,CACnE,IAEE,EAAE,cAAcD,MAAS,CAAC,MAAM,QAAQA,EAAK,QAAQ,IAChD,CAAC,CAACA,CAAI,CAAC,IAETE,EAAWF,EAAK,QAAQ,CAAC,CAAC,KAAK,MAAa,CAAA7B,EAAAA,EAAA,CAAA,GAC5C6B,CAAA,GAAA,CAAA,GAAA;EAAM,KAAKF,EAAQ;EAAG;CAAS,CAAA,CACtC,CAAC,GAGGI,KAAc,MAAoD;EACtE,IAAMC,IAA0B,CAAC,CAAC,CAAC;EACnC,KAAK,IAAMH,KAAQI,GAEjB,EAD4BJ,CAC5B,CAAA,CAAU,SAAS,GAAM,MAAU;GAEjC,AADIK,IAAQ,KAAGF,EAAM,KAAK,CAAC,CAAC,GAC5BA,EAAMA,EAAM,SAAS,EAAE,CAAE,KAAK,GAAGG,CAAI;EACvC,CAAC;EAEH,OAAOH;CACT;CAEA,OAAOD,EAAWrB,CAAK;AACzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"space-separated-tokens-CmBjEPdR.js","names":["types","html","svg","htmlBase","svgBase","parse","stringify","__exportAll","Schema","normal","property","space","merge","definition","definitions","normalize","value","Info","attribute","types_exports","boolean","booleanish","commaOrSpaceSeparated","commaSeparated","number","overloadedBoolean","spaceSeparated","powers","increment","checks","DefinedInfo","index","mark","mask","check","key","create","properties","normals","info","aria","caseSensitiveTransform","attributes","caseInsensitiveTransform","html$1","svg$1","xlink","xmlns","xml","cap","dash","valid","find","Type","schema","rest","camelcase","dashes","kebab","$0","html","svg","parse$1","tokens","input","start","end","token","stringify$1","settings","options","values","parse","stringify"],"sources":["../../node_modules/property-information/lib/util/schema.js","../../node_modules/property-information/lib/util/merge.js","../../node_modules/property-information/lib/normalize.js","../../node_modules/property-information/lib/util/info.js","../../node_modules/property-information/lib/util/types.js","../../node_modules/property-information/lib/util/defined-info.js","../../node_modules/property-information/lib/util/create.js","../../node_modules/property-information/lib/aria.js","../../node_modules/property-information/lib/util/case-sensitive-transform.js","../../node_modules/property-information/lib/util/case-insensitive-transform.js","../../node_modules/property-information/lib/html.js","../../node_modules/property-information/lib/svg.js","../../node_modules/property-information/lib/xlink.js","../../node_modules/property-information/lib/xmlns.js","../../node_modules/property-information/lib/xml.js","../../node_modules/property-information/lib/find.js","../../node_modules/property-information/index.js","../../node_modules/comma-separated-tokens/index.js","../../node_modules/space-separated-tokens/index.js"],"sourcesContent":["/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alpha: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n closedBy: null,\n colorSpace: null,\n cols: number,\n colSpan: number,\n command: null,\n commandFor: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootCustomElementRegistry: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shadowRootSerializable: boolean,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n credentialless: boolean,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n exportParts: commaSeparated,\n part: spaceSeparated,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n maskType: 'mask-type',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskType: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":";;AAKA,IAAaQ,IAAb,MAAoB;CAWlB,YAAY,GAAU,GAAQ,GAAO;EAInC,AAHA,KAAK,SAASC,GACd,KAAK,WAAWC,GAEZC,MACF,KAAK,QAAQA;CAEjB;AACF;AAEA,EAAO,UAAU,SAAS,CAAC,GAC3B,EAAO,UAAU,WAAW,CAAC,GAC7B,EAAO,UAAU,QAAQ,KAAA;;ACdzB,SAAgBC,EAAM,GAAa,GAAO;CAExC,IAAMF,IAAW,CAAC,GAEZD,IAAS,CAAC;CAEhB,KAAK,IAAMI,KAAcC,GAEvB,AADA,OAAO,OAAOJ,GAAUG,EAAW,QAAQ,GAC3C,OAAO,OAAOJ,GAAQI,EAAW,MAAM;CAGzC,OAAO,IAAIL,EAAOE,GAAUD,GAAQE,CAAK;AAC3C;;ACjBA,SAAgBI,EAAU,GAAO;CAC/B,OAAOC,EAAM,YAAY;AAC3B;;ACNA,IAAaC,IAAb,MAAkB;CAShB,YAAY,GAAU,GAAW;EAE/B,AADA,KAAK,YAAYC,GACjB,KAAK,WAAWR;CAClB;AACF;AAEA,EAAK,UAAU,YAAY,IAC3B,EAAK,UAAU,aAAa,IAC5B,EAAK,UAAU,UAAU,IACzB,EAAK,UAAU,wBAAwB,IACvC,EAAK,UAAU,iBAAiB,IAChC,EAAK,UAAU,UAAU,IACzB,EAAK,UAAU,kBAAkB,IACjC,EAAK,UAAU,SAAS,IACxB,EAAK,UAAU,oBAAoB,IACnC,EAAK,UAAU,WAAW,IAC1B,EAAK,UAAU,iBAAiB,IAChC,EAAK,UAAU,QAAQ,KAAA;;;;;;;;;;A,IC/BnBiB,IAAS,GAEAP,IAAUQ,EAAU,GACpBP,IAAaO,EAAU,GACvBH,IAAoBG,EAAU,GAC9BJ,IAASI,EAAU,GACnBF,IAAiBE,EAAU,GAC3BL,IAAiBK,EAAU,GAC3BN,IAAwBM,EAAU;AAE/C,SAASA,IAAY;CACnB,OAAO,KAAK,EAAED;AAChB;;ACLA,IAAME,IACJ,OAAO,KAAK7B,CAAK,GAGN8B,IAAb,cAAiCb,EAAK;CAcpC,YAAY,GAAU,GAAW,GAAM,GAAO;EAC5C,IAAIc,IAAQ;EAMZ,IAJA,MAAMrB,GAAUQ,CAAS,GAEzBc,EAAK,MAAM,SAASrB,CAAK,GAErB,OAAOsB,KAAS,UAClB,OAAO,EAAEF,IAAQF,EAAO,SAAQ;GAC9B,IAAMK,IAAQL,EAAOE;GACrB,EAAK,MAAMF,EAAOE,KAASE,IAAOjC,EAAMkC,QAAYlC,EAAMkC,EAAM;EAClE;CAEJ;AACF;AAEA,EAAY,UAAU,UAAU;AAchC,SAASF,EAAK,GAAQ,GAAK,GAAO;CAChC,AAAIhB,MACF,EAAOmB,KAAOnB;AAElB;;ACnBA,SAAgBoB,EAAO,GAAY;CAEjC,IAAMC,IAAa,CAAC,GAEdC,IAAU,CAAC;CAEjB,KAAK,IAAM,CAAC5B,GAAUM,MAAU,OAAO,QAAQH,EAAW,UAAU,GAAG;EACrE,IAAM0B,IAAO,IAAIT,EACfpB,GACAG,EAAW,UAAUA,EAAW,cAAc,CAAC,GAAGH,CAAQ,GAC1DM,GACAH,EAAW,KACb;EAYA,AATEA,EAAW,mBACXA,EAAW,gBAAgB,SAASH,CAAQ,MAE5C,EAAK,kBAAkB,KAGzB,EAAWA,KAAY6B,GAEvB,EAAQxB,EAAUL,CAAQ,KAAKA,GAC/B,EAAQK,EAAUwB,EAAK,SAAS,KAAK7B;CACvC;CAEA,OAAO,IAAIF,EAAO6B,GAAYC,GAASzB,EAAW,KAAK;AACzD;;ACjEA,IAAa2B,IAAOJ,EAAO;CACzB,YAAY;EACV,sBAAsB;EACtB,YAAYf;EACZ,kBAAkB;EAClB,UAAUA;EACV,aAAaA;EACb,cAAcG;EACd,cAAcA;EACd,aAAaA;EACb,cAAcE;EACd,aAAa;EACb,iBAAiBA;EACjB,aAAa;EACb,cAAcL;EACd,gBAAgBK;EAChB,kBAAkB;EAClB,cAAcL;EACd,YAAYK;EACZ,aAAaL;EACb,cAAc;EACd,YAAYA;EACZ,aAAa;EACb,kBAAkB;EAClB,WAAW;EACX,gBAAgBK;EAChB,WAAWF;EACX,UAAU;EACV,WAAWH;EACX,eAAeA;EACf,qBAAqBA;EACrB,iBAAiB;EACjB,UAAUK;EACV,iBAAiB;EACjB,cAAcF;EACd,aAAaH;EACb,cAAcA;EACd,cAAc;EACd,cAAcA;EACd,qBAAqBK;EACrB,cAAcF;EACd,cAAcA;EACd,aAAaA;EACb,cAAcH;EACd,aAAaG;EACb,UAAU;EACV,cAAcA;EACd,cAAcA;EACd,cAAcA;EACd,eAAe;EACf,MAAM;CACR;CACA,UAAU,GAAG,GAAU;EACrB,OAAOd,MAAa,SAChBA,IACA,UAAUA,EAAS,MAAM,CAAC,CAAC,CAAC,YAAY;CAC9C;AACF,CAAC;;ACpDD,SAAgB+B,EAAuB,GAAY,GAAW;CAC5D,OAAOvB,KAAawB,IAAaA,EAAWxB,KAAaA;AAC3D;;ACAA,SAAgByB,EAAyB,GAAY,GAAU;CAC7D,OAAOF,EAAuBC,GAAYhC,EAAS,YAAY,CAAC;AAClE;;ACDA,IAAaT,IAAOmC,EAAO;CACzB,YAAY;EACV,eAAe;EACf,WAAW;EACX,SAAS;EACT,WAAW;CACb;CACA,iBAAiB;EAAC;EAAW;EAAY;EAAS;CAAU;CAC5D,YAAY;EAEV,MAAM;EACN,QAAQb;EACR,eAAeG;EACf,WAAWA;EACX,QAAQ;EACR,OAAO;EACP,iBAAiBN;EACjB,qBAAqBA;EACrB,gBAAgBA;EAChB,OAAOA;EACP,KAAK;EACL,IAAI;EACJ,OAAOA;EACP,gBAAgB;EAChB,cAAcM;EACd,WAAWN;EACX,UAAUA;EACV,UAAUM;EACV,SAAS;EACT,SAAS;EACT,SAASN;EACT,MAAM;EACN,WAAWM;EACX,UAAU;EACV,YAAY;EACZ,MAAMF;EACN,SAASA;EACT,SAAS;EACT,YAAY;EACZ,SAAS;EACT,iBAAiBH;EACjB,UAAUD;EACV,cAAcM;EACd,QAAQF,IAASD;EACjB,aAAa;EACb,MAAM;EACN,UAAU;EACV,UAAU;EACV,SAASH;EACT,OAAOA;EACP,KAAK;EACL,SAAS;EACT,UAAUA;EACV,UAAUK;EACV,WAAWJ;EACX,SAAS;EACT,cAAc;EACd,eAAe;EACf,MAAM;EACN,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,gBAAgBD;EAChB,YAAY;EACZ,SAASM;EACT,QAAQF;EACR,QAAQC;EACR,MAAMD;EACN,MAAM;EACN,UAAU;EACV,SAASE;EACT,WAAWA;EACX,IAAI;EACJ,YAAY;EACZ,aAAa;EACb,OAAON;EACP,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAOA;EACP,QAAQ;EACR,UAAUM;EACV,SAASA;EACT,WAAWN;EACX,UAAUM;EACV,MAAM;EACN,OAAO;EACP,MAAM;EACN,UAAU;EACV,MAAM;EACN,SAAS;EACT,MAAMN;EACN,KAAKI;EACL,UAAU;EACV,KAAK;EACL,WAAWA;EACX,OAAO;EACP,QAAQ;EACR,KAAK;EACL,WAAWA;EACX,UAAUJ;EACV,OAAOA;EACP,MAAM;EACN,OAAO;EACP,UAAUA;EACV,YAAYA;EACZ,SAAS;EACT,cAAc;EACd,YAAY;EACZ,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,QAAQ;EACR,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,SAAS;EACT,eAAe;EACf,eAAe;EACf,mBAAmB;EACnB,QAAQ;EACR,aAAa;EACb,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,WAAW;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,aAAa;EACb,QAAQ;EACR,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,SAAS;EACT,SAAS;EACT,YAAY;EACZ,cAAc;EACd,SAAS;EACT,WAAW;EACX,WAAW;EACX,YAAY;EACZ,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,WAAW;EACX,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,cAAc;EACd,cAAc;EACd,aAAa;EACb,YAAY;EACZ,aAAa;EACb,WAAW;EACX,WAAW;EACX,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,SAAS;EACT,SAAS;EACT,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,SAAS;EACT,UAAU;EACV,UAAU;EACV,aAAa;EACb,2BAA2B;EAC3B,UAAU;EACV,WAAW;EACX,UAAU;EACV,cAAc;EACd,WAAW;EACX,WAAW;EACX,UAAU;EACV,WAAW;EACX,cAAc;EACd,UAAU;EACV,sBAAsB;EACtB,UAAU;EACV,gBAAgB;EAChB,WAAW;EACX,SAAS;EACT,MAAMA;EACN,SAASI;EACT,SAAS;EACT,MAAME;EACN,aAAa;EACb,aAAaN;EACb,SAAS;EACT,eAAe;EACf,qBAAqB;EACrB,QAAQ;EACR,SAAS;EACT,UAAUA;EACV,gBAAgB;EAChB,KAAKM;EACL,UAAUN;EACV,UAAUA;EACV,MAAMI;EACN,SAASA;EACT,SAASE;EACT,OAAO;EACP,QAAQN;EACR,UAAUA;EACV,UAAUA;EACV,oBAAoBA;EACpB,iCAAiCA;EACjC,0BAA0BA;EAC1B,gBAAgB;EAChB,wBAAwBA;EACxB,OAAO;EACP,MAAMI;EACN,OAAO;EACP,MAAM;EACN,MAAMA;EACN,YAAYH;EACZ,KAAK;EACL,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,OAAOG;EACP,MAAM;EACN,OAAO;EACP,UAAUA;EACV,QAAQ;EACR,OAAO;EACP,WAAW;EACX,MAAM;EACN,eAAeJ;EACf,QAAQ;EACR,OAAOC;EACP,OAAOG;EACP,MAAM;EACN,oBAAoB;EAIpB,OAAO;EACP,OAAO;EACP,SAASE;EACT,MAAM;EACN,YAAY;EACZ,SAAS;EACT,QAAQF;EACR,aAAa;EACb,cAAcA;EACd,aAAa;EACb,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,MAAM;EACN,UAAU;EACV,UAAU;EACV,OAAO;EACP,SAASJ;EACT,SAASA;EACT,OAAO;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACb,QAAQI;EACR,YAAYA;EACZ,MAAM;EACN,UAAU;EACV,QAAQ;EACR,cAAcA;EACd,aAAaA;EACb,UAAUJ;EACV,QAAQA;EACR,SAASA;EACT,QAAQA;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,KAAK;EACL,aAAaI;EACb,OAAO;EACP,QAAQ;EACR,WAAWH;EACX,SAAS;EACT,SAAS;EACT,MAAM;EACN,WAAWG;EACX,WAAW;EACX,SAAS;EACT,QAAQ;EACR,OAAO;EACP,QAAQA;EAGR,mBAAmB;EACnB,aAAa;EACb,UAAU;EACV,gBAAgBJ;EAChB,yBAAyBA;EACzB,uBAAuBA;EACvB,aAAaG;EACb,MAAMG;EACN,QAAQ;EACR,UAAU;EACV,SAASF;EACT,UAAU;EACV,cAAc;CAChB;CACA,OAAO;CACP,WAAWmB;AACb,CAAC,GCjUYzC,IAAMkC,EAAO;CACxB,YAAY;EACV,cAAc;EACd,mBAAmB;EACnB,YAAY;EACZ,eAAe;EACf,WAAW;EACX,WAAW;EACX,UAAU;EACV,UAAU;EACV,oBAAoB;EACpB,2BAA2B;EAC3B,cAAc;EACd,gBAAgB;EAChB,aAAa;EACb,UAAU;EACV,kBAAkB;EAClB,kBAAkB;EAClB,aAAa;EACb,UAAU;EACV,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,UAAU;EACV,gBAAgB;EAChB,aAAa;EACb,WAAW;EACX,aAAa;EACb,YAAY;EACZ,WAAW;EACX,4BAA4B;EAC5B,0BAA0B;EAC1B,UAAU;EACV,WAAW;EACX,cAAc;EACd,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,eAAe;EACf,WAAW;EACX,WAAW;EACX,aAAa;EACb,UAAU;EACV,SAAS;EACT,aAAa;EACb,cAAc;EACd,SAAS;EACT,SAAS;EACT,SAAS;EACT,UAAU;EACV,OAAO;EACP,WAAW;EACX,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,cAAc;EACd,eAAe;EACf,SAAS;EACT,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,WAAW;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,aAAa;EACb,QAAQ;EACR,kBAAkB;EAClB,WAAW;EACX,OAAO;EACP,SAAS;EACT,SAAS;EACT,SAAS;EACT,WAAW;EACX,YAAY;EACZ,cAAc;EACd,SAAS;EACT,WAAW;EACX,WAAW;EACX,YAAY;EACZ,SAAS;EACT,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,aAAa;EACb,cAAc;EACd,cAAc;EACd,aAAa;EACb,YAAY;EACZ,aAAa;EACb,WAAW;EACX,cAAc;EACd,WAAW;EACX,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,SAAS;EACT,SAAS;EACT,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,cAAc;EACd,UAAU;EACV,SAAS;EACT,UAAU;EACV,UAAU;EACV,UAAU;EACV,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,WAAW;EACX,UAAU;EACV,WAAW;EACX,cAAc;EACd,UAAU;EACV,UAAU;EACV,gBAAgB;EAChB,WAAW;EACX,QAAQ;EACR,kBAAkB;EAClB,mBAAmB;EACnB,YAAY;EACZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,uBAAuB;EACvB,wBAAwB;EACxB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,QAAQ;EACR,mBAAmB;EACnB,oBAAoB;EACpB,aAAa;EACb,cAAc;EACd,YAAY;EACZ,aAAa;EACb,UAAU;EACV,cAAc;EACd,eAAe;EACf,cAAc;EACd,UAAU;EACV,aAAa;EACb,aAAa;EACb,aAAa;EACb,aAAa;EACb,SAAS;EAET,eAAe;EACf,eAAe;CACjB;CACA,YAAY;EACV,OAAOd;EACP,cAAcE;EACd,YAAY;EACZ,UAAU;EACV,mBAAmB;EACnB,YAAYA;EACZ,WAAWA;EACX,YAAY;EACZ,QAAQA;EACR,eAAe;EACf,eAAe;EACf,SAASA;EACT,WAAW;EACX,eAAe;EACf,eAAe;EACf,aAAa;EACb,MAAM;EACN,OAAO;EACP,MAAMA;EACN,IAAI;EACJ,UAAU;EACV,WAAWA;EACX,WAAWE;EACX,MAAM;EACN,UAAU;EACV,eAAe;EACf,UAAU;EACV,OAAO;EACP,oBAAoB;EACpB,2BAA2B;EAC3B,cAAc;EACd,gBAAgB;EAChB,SAAS;EACT,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;EACb,QAAQ;EACR,IAAI;EACJ,IAAI;EACJ,GAAG;EACH,UAAU;EACV,eAAe;EACf,SAASF;EACT,iBAAiBA;EACjB,WAAW;EACX,SAAS;EACT,KAAK;EACL,SAASA;EACT,kBAAkB;EAClB,UAAUJ;EACV,IAAI;EACJ,IAAI;EACJ,UAAU;EACV,UAAU;EACV,WAAWI;EACX,kBAAkB;EAClB,KAAK;EACL,OAAO;EACP,UAAUA;EACV,2BAA2B;EAC3B,MAAM;EACN,aAAaA;EACb,UAAU;EACV,QAAQ;EACR,WAAW;EACX,aAAa;EACb,YAAY;EACZ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,YAAY;EACZ,UAAU;EACV,gBAAgB;EAChB,aAAa;EACb,WAAW;EACX,aAAa;EACb,YAAY;EACZ,QAAQ;EACR,IAAI;EACJ,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,IAAID;EACJ,IAAIA;EACJ,WAAWA;EACX,4BAA4B;EAC5B,0BAA0B;EAC1B,UAAU;EACV,mBAAmB;EACnB,eAAe;EACf,SAAS;EACT,SAASC;EACT,mBAAmB;EACnB,YAAY;EACZ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAWA;EACX,cAAcA;EACd,cAAcA;EACd,IAAI;EACJ,aAAaA;EACb,gBAAgB;EAChB,mBAAmB;EACnB,IAAI;EACJ,KAAK;EACL,WAAWA;EACX,GAAGA;EACH,IAAIA;EACJ,IAAIA;EACJ,IAAIA;EACJ,IAAIA;EACJ,cAAcF;EACd,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,UAAU;EACV,SAAS;EACT,MAAM;EACN,cAAc;EACd,eAAe;EACf,eAAe;EACf,mBAAmBE;EACnB,OAAO;EACP,WAAW;EACX,WAAW;EACX,aAAa;EACb,cAAc;EACd,aAAa;EACb,aAAa;EACb,MAAM;EACN,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,cAAc;EACd,KAAK;EACL,OAAO;EACP,wBAAwB;EACxB,uBAAuB;EACvB,WAAWA;EACX,WAAW;EACX,QAAQ;EACR,KAAK;EACL,MAAM;EACN,MAAM;EACN,SAAS;EACT,aAAa;EACb,cAAc;EACd,SAAS;EACT,SAAS;EACT,SAAS;EACT,UAAU;EACV,OAAO;EACP,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,UAAU;EACV,QAAQ;EACR,SAAS;EACT,YAAY;EACZ,cAAc;EACd,eAAe;EACf,SAAS;EACT,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,OAAO;EACP,YAAY;EACZ,QAAQ;EACR,WAAW;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,aAAa;EACb,QAAQ;EACR,kBAAkB;EAClB,WAAW;EACX,OAAO;EACP,SAAS;EACT,SAAS;EACT,SAAS;EACT,WAAW;EACX,YAAY;EACZ,cAAc;EACd,SAAS;EACT,WAAW;EACX,WAAW;EACX,YAAY;EACZ,SAAS;EACT,QAAQ;EACR,cAAc;EACd,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,aAAa;EACb,cAAc;EACd,cAAc;EACd,aAAa;EACb,YAAY;EACZ,aAAa;EACb,WAAW;EACX,cAAc;EACd,WAAW;EACX,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,SAAS;EACT,SAAS;EACT,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,cAAc;EACd,UAAU;EACV,SAAS;EACT,UAAU;EACV,UAAU;EACV,UAAU;EACV,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;EACX,WAAW;EACX,UAAU;EACV,WAAW;EACX,cAAc;EACd,UAAU;EACV,UAAU;EACV,gBAAgB;EAChB,WAAW;EACX,QAAQ;EACR,SAAS;EACT,UAAU;EACV,OAAO;EACP,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,SAAS;EACT,kBAAkBA;EAClB,mBAAmBA;EACnB,YAAY;EACZ,SAAS;EACT,MAAM;EACN,YAAYA;EACZ,qBAAqB;EACrB,kBAAkB;EAClB,cAAc;EACd,OAAO;EACP,MAAME;EACN,OAAO;EACP,eAAe;EACf,eAAe;EACf,QAAQ;EACR,WAAWF;EACX,WAAWA;EACX,WAAWA;EACX,eAAe;EACf,qBAAqB;EACrB,gBAAgB;EAChB,WAAW;EACX,UAAUF;EACV,GAAG;EACH,QAAQ;EACR,gBAAgB;EAChB,MAAM;EACN,MAAM;EACN,KAAKA;EACL,KAAKA;EACL,iBAAiB;EACjB,aAAa;EACb,WAAW;EACX,oBAAoBA;EACpB,kBAAkBA;EAClB,eAAeA;EACf,iBAAiBA;EACjB,UAAU;EACV,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,IAAI;EACJ,IAAI;EACJ,OAAO;EACP,MAAM;EACN,gBAAgB;EAChB,MAAM;EACN,OAAO;EACP,cAAc;EACd,kBAAkBE;EAClB,kBAAkBA;EAClB,cAAc;EACd,SAAS;EACT,aAAa;EACb,cAAc;EACd,OAAO;EACP,OAAO;EACP,aAAa;EACb,WAAW;EACX,aAAa;EACb,uBAAuBA;EACvB,wBAAwBA;EACxB,QAAQ;EACR,QAAQ;EACR,iBAAiBF;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,kBAAkBE;EAClB,eAAeA;EACf,aAAa;EACb,OAAO;EACP,cAAcA;EACd,cAAc;EACd,qBAAqB;EACrB,YAAY;EACZ,eAAe;EACf,sBAAsB;EACtB,gBAAgBF;EAChB,UAAUE;EACV,aAAa;EACb,QAAQ;EACR,SAASA;EACT,SAASA;EACT,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,eAAe;EACf,OAAO;EACP,mBAAmB;EACnB,MAAM;EACN,QAAQF;EACR,IAAI;EACJ,WAAW;EACX,iBAAiB;EACjB,IAAI;EACJ,IAAI;EACJ,mBAAmBE;EACnB,oBAAoBA;EACpB,SAAS;EACT,aAAa;EACb,cAAc;EACd,YAAYA;EACZ,QAAQ;EACR,aAAaA;EACb,eAAeA;EACf,cAAc;EACd,UAAUA;EACV,cAAcA;EACd,SAAS;EACT,UAAUA;EACV,aAAaA;EACb,aAAaA;EACb,SAAS;EACT,YAAY;EACZ,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,aAAa;EACb,aAAa;EACb,GAAG;EACH,IAAI;EACJ,IAAI;EACJ,kBAAkB;EAClB,SAASA;EACT,GAAG;EACH,IAAI;EACJ,IAAI;EACJ,kBAAkB;EAClB,GAAG;EACH,YAAY;CACd;CACA,OAAO;CACP,WAAWiB;AACb,CAAC,GCtjBYK,IAAQV,EAAO;CAC1B,YAAY;EACV,cAAc;EACd,cAAc;EACd,WAAW;EACX,WAAW;EACX,WAAW;EACX,YAAY;EACZ,WAAW;CACb;CACA,OAAO;CACP,UAAU,GAAG,GAAU;EACrB,OAAO,WAAW1B,EAAS,MAAM,CAAC,CAAC,CAAC,YAAY;CAClD;AACF,CAAC,GCbYqC,IAAQX,EAAO;CAC1B,YAAY,EAAC,YAAY,cAAa;CACtC,YAAY;EAAC,YAAY;EAAM,OAAO;CAAI;CAC1C,OAAO;CACP,WAAWO;AACb,CAAC,GCNYK,IAAMZ,EAAO;CACxB,YAAY;EAAC,SAAS;EAAM,SAAS;EAAM,UAAU;CAAI;CACzD,OAAO;CACP,UAAU,GAAG,GAAU;EACrB,OAAO,SAAS1B,EAAS,MAAM,CAAC,CAAC,CAAC,YAAY;CAChD;AACF,CAAC,GCAKuC,IAAM,UACNC,IAAO,WACPC,IAAQ;AAgCd,SAAgBC,EAAK,GAAQ,GAAO;CAClC,IAAM3C,IAASM,EAAUC,CAAK,GAC1BN,IAAWM,GACXqC,IAAOpC;CAEX,IAAIR,KAAU6C,EAAO,QACnB,OAAOA,EAAO,SAASA,EAAO,OAAO7C;CAGvC,IAAIA,EAAO,SAAS,KAAKA,EAAO,MAAM,GAAG,CAAC,MAAM,UAAU0C,EAAM,KAAKnC,CAAK,GAAG;EAE3E,IAAIA,EAAM,OAAO,CAAC,MAAM,KAAK;GAE3B,IAAMuC,IAAOvC,EAAM,MAAM,CAAC,CAAC,CAAC,QAAQkC,GAAMM,CAAS;GACnD,IAAW,SAASD,EAAK,OAAO,CAAC,CAAC,CAAC,YAAY,IAAIA,EAAK,MAAM,CAAC;EACjE,OAAO;GAEL,IAAMA,IAAOvC,EAAM,MAAM,CAAC;GAE1B,IAAI,CAACkC,EAAK,KAAKK,CAAI,GAAG;IACpB,IAAIE,IAASF,EAAK,QAAQN,GAAKS,CAAK;IAMpC,AAJID,EAAO,OAAO,CAAC,MAAM,QACvB,IAAS,MAAMA,IAGjB,IAAQ,SAASA;GACnB;EACF;EAEA,IAAO3B;CACT;CAEA,OAAO,IAAIuB,EAAK3C,GAAUM,CAAK;AACjC;AAQA,SAAS0C,EAAM,GAAI;CACjB,OAAO,MAAMC,EAAG,YAAY;AAC9B;AAQA,SAASH,EAAU,GAAI;CACrB,OAAOG,EAAG,OAAO,CAAC,CAAC,CAAC,YAAY;AAClC;;ACrFA,IAAaC,IAAOhD,EAAM;CAAC4B;CAAMrC;CAAU2C;CAAOC;CAAOC;AAAG,GAAG,MAAM,GAKxDa,IAAMjD,EAAM;CAAC4B;CAAMpC;CAAS0C;CAAOC;CAAOC;AAAG,GAAG,KAAK;;ACMlE,SAAgB3C,EAAM,GAAO;CAE3B,IAAM0D,IAAS,CAAC,GACVC,IAAQ,OAAOhD,KAAS,EAAE,GAC5Be,IAAQiC,EAAM,QAAQ,GAAG,GACzBC,IAAQ,GAERC,IAAM;CAEV,OAAO,CAACA,IAAK;EACX,AAAInC,MAAU,OACZ,IAAQiC,EAAM,QACd,IAAM;EAGR,IAAMG,IAAQH,EAAM,MAAMC,GAAOlC,CAAK,CAAC,CAAC,KAAK;EAO7C,CALIoC,KAAS,CAACD,MACZH,EAAO,KAAKI,CAAK,GAGnB,IAAQpC,IAAQ,GAChB,IAAQiC,EAAM,QAAQ,KAAKC,CAAK;CAClC;CAEA,OAAOF;AACT;AAYA,SAAgBzD,EAAU,GAAQ,GAAS;CACzC,IAAM+D,IAAWC,KAAW,CAAC;CAK7B,QAFcC,EAAOA,EAAO,SAAS,OAAO,KAAK,CAAC,GAAGA,GAAQ,EAAE,IAAIA,EAAA,CAGhE,MACEF,EAAS,WAAW,MAAM,MACzB,OACCA,EAAS,YAAY,KAAQ,KAAK,IACvC,CAAC,CACA,KAAK;AACV;;ACjEA,SAAgBG,EAAM,GAAO;CAC3B,IAAMR,IAAQ,OAAOhD,KAAS,EAAE,CAAC,CAAC,KAAK;CACvC,OAAOgD,IAAQA,EAAM,MAAM,eAAe,IAAI,CAAC;AACjD;AAUA,SAAgBS,EAAU,GAAQ;CAChC,OAAOF,EAAO,KAAK,GAAG,CAAC,CAAC,KAAK;AAC/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-D2BoivaE.js","names":["SAFE_PROTOCOL","SAFE_DATA_IMAGE","defaultUrlTransform","url","value","key","colon","questionMark","numberSign","slash","isExternalUrl","resolveUrl","baseUrl","_unused"],"sources":["../../src/core/url.ts"],"sourcesContent":["\r\nconst SAFE_PROTOCOL = /^(https?|ircs?|mailto|xmpp)$/i\r\nconst SAFE_DATA_IMAGE =\r\n /^data:image\\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)(?:;[a-z0-9=._+-]+)*,/i\r\n\r\n/**\r\n * react-markdown-compatible URL transform.\r\n *\r\n * Relative URLs and the documented protocol set pass through. Dangerous\r\n * protocols are removed. Image data URLs are accepted for raster formats only;\r\n * `image/svg+xml` is rejected because it can carry script.\r\n */\r\nexport function defaultUrlTransform(\r\n url: string,\r\n key = 'href',\r\n): string {\r\n if (typeof url !== 'string') return ''\r\n const value = url.trim()\r\n if (!value) return url\r\n\r\n if (value.startsWith('data:')) {\r\n if (key === 'src' && SAFE_DATA_IMAGE.test(value)) return value\r\n return ''\r\n }\r\n\r\n const colon = value.indexOf(':')\r\n if (colon < 0) return value\r\n\r\n const questionMark = value.indexOf('?')\r\n const numberSign = value.indexOf('#')\r\n const slash = value.indexOf('/')\r\n\r\n const relative =\r\n (slash > -1 && colon > slash) ||\r\n (questionMark > -1 && colon > questionMark) ||\r\n (numberSign > -1 && colon > numberSign)\r\n\r\n if (relative) return value\r\n return SAFE_PROTOCOL.test(value.slice(0, colon)) ? value : ''\r\n}\r\n\r\nexport function isExternalUrl(url: string): boolean {\r\n return /^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(url)\r\n}\r\n\r\nexport function resolveUrl(url: string, baseUrl: string | undefined): string {\r\n if (!baseUrl) return url\r\n if (!url || url.startsWith('#') || url.startsWith('//')) return url\r\n if (/^[a-z][a-z0-9+.-]*:/i.test(url)) return url\r\n try {\r\n return new URL(url, baseUrl).toString()\r\n } catch {\r\n return url\r\n }\r\n}\r\n\r\n"],"mappings":";AACA,IAAMA,IAAgB,iCAChBC,IACJ;AASF,SAAgBC,EACd,GACA,IAAM,QACE;CACR,IAAI,OAAOC,KAAQ,UAAU,OAAO;CACpC,IAAMC,IAAQD,EAAI,KAAK;CACvB,IAAI,CAACC,GAAO,OAAOD;CAEnB,IAAIC,EAAM,WAAW,OAAO,GAE1B,OADIC,MAAQ,SAASJ,EAAgB,KAAKG,CAAK,IAAUA,IAClD;CAGT,IAAME,IAAQF,EAAM,QAAQ,GAAG;CAC/B,IAAIE,IAAQ,GAAG,OAAOF;CAEtB,IAAMG,IAAeH,EAAM,QAAQ,GAAG,GAChCI,IAAaJ,EAAM,QAAQ,GAAG,GAC9BK,IAAQL,EAAM,QAAQ,GAAG;CAQ/B,OALGK,IAAQ,MAAMH,IAAQG,KACtBF,IAAe,MAAMD,IAAQC,KAC7BC,IAAa,MAAMF,IAAQE,KAGvBR,EAAc,KAAKI,EAAM,MAAM,GAAGE,CAAK,CAAC,IAD1BF,IACsC;AAC7D;AAEA,SAAgBM,EAAc,GAAsB;CAClD,OAAO,gCAAgC,KAAKP,CAAG;AACjD;AAEA,SAAgBQ,EAAW,GAAa,GAAqC;CAG3E,IAFI,CAACC,KACD,CAACT,KAAOA,EAAI,WAAW,GAAG,KAAKA,EAAI,WAAW,IAAI,KAClD,uBAAuB,KAAKA,CAAG,GAAG,OAAOA;CAC7C,IAAI;EACF,OAAO,IAAI,IAAIA,GAAKS,CAAO,CAAC,CAAC,SAAS;CACxC,SAAAC,GAAQ;EACN,OAAOV;CACT;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useActiveHeading-BaGVMJnB.js","names":["GithubSlugger","errorMessage","normalizeHast","extractToc","collectCustomTags","_objectSpread2","createPluginContext","searchDocument","defaultPlugins","resolvePlugins","resolvePipeline","identityOf","createPipelineIdentity","assertPipelineResult","createMemoKey","_asyncToGenerator","buildDocument","options","withDerivedDocument","document","withUniqueSlugs","used","base","slugger","text","candidate","index","_slugger$reset","finalizeMarkdownDocument","_options$search","input","documentValue","result","plugins","pipelineName","context","source","diagnostics","plugin","transformed","error","_plugin$onError","createDiagnostic","regex","own","BananaSlug","self","slug","value","maintainCase","originalSlug","report","code","secondary","applySourceTransforms","current","next","MAX_ENTRIES","cache","memoGet","key","memoSet","oldest","memoClear","memoSize","isAsyncError","useMarkdownDocument","shallowRef","status","setupDiagnostics","optionsRef","computed","_toValue","toValue","sourceRef","resolved","_optionsRef$value$plu","_optionsRef$value$dis","pipelineResult","pipeline","remarkPlugins","_optionsRef$value$rem","rehypePlugins","_optionsRef$value$reh","remarkRehypeOptions","_optionsRef$value$rem2","defaultSlugger","baseSlugger","_optionsRef$value$slu","idPrefix","_optionsRef$value$idP","pipelineIdentity","parseKey","pluginSetupKey","scope","cleanups","setupPlugins","cleanup","_unused","effectScope","diagnostic","getCurrentScope","onScopeDispose","_pipeline$value$dispo","_pipeline$value","_unused2","apply","createContext","nextDiagnostics","finalize","runId","applyRun","runSync","sync","_slugger$value$reset","_slugger$value","runAsync","_ref","_slugger$value$reset2","_slugger$value2","id","run","force","cached","watch","_document$value$toc","_document$value","findElementById","byId","candidates","element","useActiveHeading","activeId","ref","observer","disconnect","connect","enabled","elements","ids","visible","entries","entry","a","b","onMounted","onBeforeUnmount"],"sources":["../../src/core/model.ts","../../src/core/slugger.ts","../../src/core/finalize.ts","../../node_modules/github-slugger/regex.js","../../node_modules/github-slugger/index.js","../../src/plugins/source.ts","../../src/core/memo.ts","../../src/composables/useMarkdownDocument.ts","../../src/composables/useActiveHeading.ts"],"sourcesContent":["import type { MarkdownDocument, MarkdownNode } from './types'\r\nimport { collectCustomTags, extractToc } from './normalize'\r\n\r\nexport interface BuildDocumentOptions {\r\n nodes: MarkdownNode[]\r\n plugins: string[]\r\n pipeline: string\r\n frontmatter?: Record<string, unknown>\r\n}\r\n\r\nexport function buildDocument(options: BuildDocumentOptions): MarkdownDocument {\r\n return {\r\n nodes: options.nodes,\r\n toc: extractToc(options.nodes),\r\n customTags: collectCustomTags(options.nodes),\r\n frontmatter: options.frontmatter,\r\n plugins: options.plugins,\r\n pipeline: options.pipeline,\r\n }\r\n}\r\n\r\n/** Recompute derived collections after a document transform. */\r\nexport function withDerivedDocument(\r\n document: MarkdownDocument,\r\n): MarkdownDocument {\r\n return {\r\n ...document,\r\n toc: extractToc(document.nodes),\r\n customTags: collectCustomTags(document.nodes),\r\n }\r\n}\r\n","import type { MarkdownSlugger } from './types'\r\n\r\n/**\r\n * Ensure a host slugger still produces unique heading IDs. The wrapper keeps\r\n * the host's formatting and appends a numeric suffix for duplicates.\r\n */\r\nexport function withUniqueSlugs(slugger: MarkdownSlugger): MarkdownSlugger {\r\n const used = new Set<string>()\r\n return {\r\n slug(text: string): string {\r\n const base = slugger.slug(text)\r\n let candidate = base\r\n let index = 1\r\n while (used.has(candidate)) {\r\n candidate = `${base}-${index}`\r\n index += 1\r\n }\r\n used.add(candidate)\r\n return candidate\r\n },\r\n reset(): void {\r\n used.clear()\r\n slugger.reset?.()\r\n },\r\n }\r\n}\r\n","import type {\r\n MarkdownDiagnostic,\r\n MarkdownDocument,\r\n MarkdownDocumentOptions,\r\n MarkdownSlugger,\r\n PipelineResult,\r\n} from './types'\r\nimport type { ResolvedPlugins } from '../plugins/registry'\r\nimport { createPluginContext } from '../plugins/define'\r\nimport { createDiagnostic, errorMessage } from './diagnostics'\r\nimport { buildDocument, withDerivedDocument } from './model'\r\nimport { normalizeHast } from './normalize'\r\nimport { searchDocument } from './search'\r\n\r\nexport interface FinalizeDocumentOptions {\r\n source: string\r\n result: PipelineResult\r\n options: MarkdownDocumentOptions\r\n plugins: ResolvedPlugins\r\n pipelineName: string\r\n slugger: MarkdownSlugger\r\n idPrefix: string\r\n diagnostics: MarkdownDiagnostic[]\r\n}\r\n\r\n/**\r\n * Turn a pipeline result into the public document model. Both the reactive\r\n * composable and static export use this path so filtering, URL policy, heading\r\n * IDs, and plugin document transforms cannot diverge.\r\n */\r\nexport function finalizeMarkdownDocument(\r\n input: FinalizeDocumentOptions,\r\n): MarkdownDocument {\r\n const {\r\n source,\r\n result,\r\n options,\r\n plugins,\r\n pipelineName,\r\n slugger,\r\n idPrefix,\r\n diagnostics,\r\n } = input\r\n\r\n const normalized = normalizeHast(result.hast, {\r\n slugger,\r\n idPrefix,\r\n urlTransform: options.urlTransform,\r\n baseUrl: options.baseUrl,\r\n allowedElements: options.allowedElements,\r\n disallowedElements: options.disallowedElements,\r\n unwrapDisallowed: options.unwrapDisallowed,\r\n allowElement: options.allowElement,\r\n diagnostics,\r\n })\r\n\r\n let documentValue = buildDocument({\r\n nodes: normalized.nodes,\r\n plugins: plugins.names,\r\n pipeline: pipelineName,\r\n frontmatter: result.frontmatter,\r\n })\r\n\r\n const context = createPluginContext(source, options, diagnostics)\r\n for (const plugin of plugins.plugins) {\r\n if (!plugin.transformDocument) continue\r\n try {\r\n const transformed = plugin.transformDocument(documentValue, context)\r\n if (transformed) documentValue = transformed\r\n } catch (error) {\r\n diagnostics.push(\r\n createDiagnostic('plugin-transform', errorMessage(error), {\r\n phase: 'document',\r\n plugin: plugin.name,\r\n }),\r\n )\r\n plugin.onError?.(error, 'document', context)\r\n }\r\n }\r\n\r\n // The host-level search option is the renderer-friendly form of the search\r\n // transform. Run it after plugin transforms so the explicit option wins when\r\n // both are present.\r\n if (options.search?.query?.trim()) {\r\n documentValue = searchDocument(documentValue, options.search)\r\n }\r\n\r\n return withDerivedDocument(documentValue)\r\n}\r\n","// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nexport const regex = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g\n","import { regex } from './regex.js'\n\nconst own = Object.hasOwnProperty\n\n/**\n * Slugger.\n */\nexport default class BananaSlug {\n /**\n * Create a new slug class.\n */\n constructor () {\n /** @type {Record<string, number>} */\n // eslint-disable-next-line no-unused-expressions\n this.occurrences\n\n this.reset()\n }\n\n /**\n * Generate a unique slug.\n *\n * Tracks previously generated slugs: repeated calls with the same value\n * will result in different slugs.\n * Use the `slug` function to get same slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\n slug (value, maintainCase) {\n const self = this\n let result = slug(value, maintainCase === true)\n const originalSlug = result\n\n while (own.call(self.occurrences, result)) {\n self.occurrences[originalSlug]++\n result = originalSlug + '-' + self.occurrences[originalSlug]\n }\n\n self.occurrences[result] = 0\n\n return result\n }\n\n /**\n * Reset - Forget all previous slugs\n *\n * @return void\n */\n reset () {\n this.occurrences = Object.create(null)\n }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param {string} value\n * String of text to slugify\n * @param {boolean} [maintainCase=false]\n * Keep the current case, otherwise make all lowercase\n * @return {string}\n * A unique slug string\n */\nexport function slug (value, maintainCase) {\n if (typeof value !== 'string') return ''\n if (!maintainCase) value = value.toLowerCase()\n return value.replace(regex, '').replace(/ /g, '-')\n}\n","import type {\r\n MarkdownDiagnostic,\r\n MarkdownDocumentOptions,\r\n MarkdownPlugin,\r\n PluginContext,\r\n} from '../core/types'\r\nimport { createDiagnostic, errorMessage } from '../core/diagnostics'\r\nimport { createPluginContext } from './define'\r\n\r\nfunction report(\r\n plugin: MarkdownPlugin,\r\n error: unknown,\r\n context: PluginContext,\r\n diagnostics: MarkdownDiagnostic[],\r\n code: string,\r\n): void {\r\n diagnostics.push(\r\n createDiagnostic(code, errorMessage(error), {\r\n phase: 'source',\r\n plugin: plugin.name,\r\n }),\r\n )\r\n if (!plugin.onError) return\r\n try {\r\n plugin.onError(error, 'source', context)\r\n } catch (secondary) {\r\n diagnostics.push(\r\n createDiagnostic('plugin-onerror', errorMessage(secondary), {\r\n phase: 'source',\r\n plugin: plugin.name,\r\n }),\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Run plugin source transforms in resolved order before parsing. A transform\r\n * that throws or returns a non-string leaves the previous source intact and\r\n * reports a diagnostic instead of breaking the run.\r\n */\r\nexport function applySourceTransforms(\r\n source: string,\r\n plugins: readonly MarkdownPlugin[],\r\n options: MarkdownDocumentOptions,\r\n diagnostics: MarkdownDiagnostic[],\r\n): string {\r\n let current = source\r\n const context = createPluginContext(source, options, diagnostics)\r\n\r\n for (const plugin of plugins) {\r\n if (!plugin.transformSource) continue\r\n context.source = current\r\n try {\r\n const next = plugin.transformSource(current, context)\r\n if (typeof next === 'string') {\r\n current = next\r\n continue\r\n }\r\n report(\r\n plugin,\r\n new TypeError('transformSource must return a string.'),\r\n context,\r\n diagnostics,\r\n 'plugin-source',\r\n )\r\n } catch (error) {\r\n report(plugin, error, context, diagnostics, 'plugin-source')\r\n }\r\n }\r\n\r\n return current\r\n}\r\n","import type { MarkdownDocument } from './types'\r\n\r\nconst MAX_ENTRIES = 64\r\n\r\nconst cache = new Map<string, MarkdownDocument>()\r\n\r\nexport function memoGet(key: string): MarkdownDocument | undefined {\r\n const value = cache.get(key)\r\n if (!value) return undefined\r\n // Refresh LRU order.\r\n cache.delete(key)\r\n cache.set(key, value)\r\n return value\r\n}\r\n\r\nexport function memoSet(key: string, document: MarkdownDocument): void {\r\n if (cache.has(key)) cache.delete(key)\r\n cache.set(key, document)\r\n while (cache.size > MAX_ENTRIES) {\r\n const oldest = cache.keys().next().value\r\n if (oldest === undefined) break\r\n cache.delete(oldest)\r\n }\r\n}\r\n\r\nexport function memoClear(): void {\r\n cache.clear()\r\n}\r\n\r\nexport function memoSize(): number {\r\n return cache.size\r\n}\r\n","import GithubSlugger from 'github-slugger'\r\nimport {\r\n computed,\r\n effectScope,\r\n getCurrentScope,\r\n onScopeDispose,\r\n shallowRef,\r\n toValue,\r\n watch,\r\n type ComputedRef,\r\n type EffectScope,\r\n type MaybeRefOrGetter,\r\n type ShallowRef,\r\n} from 'vue'\r\nimport type { PluggableList } from 'unified'\r\nimport type {\r\n MarkdownDiagnostic,\r\n MarkdownDocument,\r\n MarkdownDocumentOptions,\r\n MarkdownLabels,\r\n MarkdownNodeComponents,\r\n MarkdownRegionComponents,\r\n MarkdownSlugger,\r\n MarkdownTagComponents,\r\n PipelineContext,\r\n PipelineResult,\r\n TocItem,\r\n} from '../core/types'\r\nimport { createDiagnostic, errorMessage } from '../core/diagnostics'\r\nimport { finalizeMarkdownDocument } from '../core/finalize'\r\nimport { identityOf } from '../core/identity'\r\nimport { memoGet, memoSet } from '../core/memo'\r\nimport { withUniqueSlugs } from '../core/slugger'\r\nimport { createPluginContext } from '../plugins/define'\r\nimport { applySourceTransforms } from '../plugins/source'\r\nimport { defaultPlugins } from '../plugins/builtin'\r\nimport { resolvePlugins } from '../plugins/registry'\r\nimport { assertPipelineResult, resolvePipeline } from '../pipeline/custom'\r\nimport { createMemoKey, createPipelineIdentity } from '../pipeline/identity'\r\n\r\nexport type MarkdownStatus = 'idle' | 'pending' | 'ready' | 'error'\r\n\r\nexport interface UseMarkdownDocumentReturn {\r\n document: ShallowRef<MarkdownDocument | undefined>\r\n toc: ComputedRef<TocItem[]>\r\n status: ShallowRef<MarkdownStatus>\r\n diagnostics: ShallowRef<MarkdownDiagnostic[]>\r\n pipeline: ComputedRef<string>\r\n plugins: ComputedRef<string[]>\r\n /** Tag components contributed by plugins; local props are merged by the host. */\r\n resolvedComponents: ComputedRef<MarkdownTagComponents>\r\n /** Semantic node components contributed by plugins. */\r\n resolvedNodeComponents: ComputedRef<MarkdownNodeComponents>\r\n /** Structural regions contributed by plugins. */\r\n resolvedRegions: ComputedRef<MarkdownRegionComponents>\r\n /** Labels contributed by plugins. */\r\n resolvedLabels: ComputedRef<Partial<MarkdownLabels>>\r\n /** Design tokens contributed by plugins. */\r\n resolvedTokens: ComputedRef<Record<string, string>>\r\n refresh: () => Promise<void>\r\n}\r\n\r\nfunction isAsyncError(error: unknown): boolean {\r\n return (\r\n error instanceof Error &&\r\n /finished async|processSync.*async|async.*processSync/i.test(error.message)\r\n )\r\n}\r\n\r\nexport function useMarkdownDocument(\r\n source: MaybeRefOrGetter<string>,\r\n options: MaybeRefOrGetter<MarkdownDocumentOptions> = {},\r\n): UseMarkdownDocumentReturn {\r\n const document = shallowRef<MarkdownDocument>()\r\n const status = shallowRef<MarkdownStatus>('idle')\r\n const diagnostics = shallowRef<MarkdownDiagnostic[]>([])\r\n const setupDiagnostics = shallowRef<MarkdownDiagnostic[]>([])\r\n const optionsRef = computed(() => toValue(options) ?? {})\r\n const sourceRef = computed(() => {\r\n const value = toValue(source)\r\n return typeof value === 'string' ? value : ''\r\n })\r\n\r\n const resolved = computed(() =>\r\n resolvePlugins(\r\n optionsRef.value.plugins ?? defaultPlugins,\r\n optionsRef.value.disablePlugins ?? [],\r\n ),\r\n )\r\n\r\n const pipelineResult = computed(() => resolvePipeline(optionsRef.value.pipeline))\r\n const pipeline = computed(() => pipelineResult.value.pipeline)\r\n\r\n const remarkPlugins = computed<PluggableList>(() => [\r\n ...resolved.value.remarkPlugins,\r\n ...(optionsRef.value.remarkPlugins ?? []),\r\n ])\r\n const rehypePlugins = computed<PluggableList>(() => [\r\n ...resolved.value.rehypePlugins,\r\n ...(optionsRef.value.rehypePlugins ?? []),\r\n ])\r\n const remarkRehypeOptions = computed(() => ({\r\n ...resolved.value.remarkRehypeOptions,\r\n ...(optionsRef.value.remarkRehypeOptions ?? {}),\r\n }))\r\n\r\n const defaultSlugger: MarkdownSlugger = new GithubSlugger()\r\n const baseSlugger = computed(() => optionsRef.value.slugger ?? defaultSlugger)\r\n const slugger = computed(() => withUniqueSlugs(baseSlugger.value))\r\n const idPrefix = computed(() => optionsRef.value.idPrefix ?? '')\r\n\r\n const pipelineIdentity = computed(() =>\r\n createPipelineIdentity({\r\n pipelineName: pipeline.value.name,\r\n plugins: resolved.value.plugins,\r\n remarkPlugins: remarkPlugins.value,\r\n rehypePlugins: rehypePlugins.value,\r\n remarkRehypeOptions: optionsRef.value.remarkRehypeOptions,\r\n options: optionsRef.value,\r\n }),\r\n )\r\n\r\n const parseKey = computed(() => pipelineIdentity.value)\r\n\r\n const pluginSetupKey = computed(() =>\r\n resolved.value.plugins.map((plugin) => identityOf(plugin)).join(','),\r\n )\r\n\r\n let scope: EffectScope | undefined\r\n let cleanups: Array<() => void> = []\r\n\r\n const setupPlugins = (): void => {\r\n scope?.stop()\r\n for (const cleanup of cleanups) {\r\n try {\r\n cleanup()\r\n } catch {\r\n // Cleanup failures must not break reconfiguration.\r\n }\r\n }\r\n cleanups = []\r\n scope = effectScope(true)\r\n setupDiagnostics.value = []\r\n\r\n const context = createPluginContext(\r\n sourceRef.value,\r\n optionsRef.value,\r\n setupDiagnostics.value as MarkdownDiagnostic[],\r\n )\r\n for (const plugin of resolved.value.plugins) {\r\n if (!plugin.setup) continue\r\n try {\r\n const cleanup = plugin.setup(context)\r\n if (typeof cleanup === 'function') cleanups.push(cleanup)\r\n } catch (error) {\r\n const diagnostic = createDiagnostic('plugin-setup', errorMessage(error), {\r\n phase: 'setup',\r\n plugin: plugin.name,\r\n })\r\n setupDiagnostics.value = [...setupDiagnostics.value, diagnostic]\r\n plugin.onError?.(error, 'setup', context)\r\n }\r\n }\r\n }\r\n\r\n const teardown = (): void => {\r\n scope?.stop()\r\n for (const cleanup of cleanups) {\r\n try {\r\n cleanup()\r\n } catch {\r\n // Ignore cleanup errors during teardown.\r\n }\r\n }\r\n cleanups = []\r\n pipeline.value.dispose?.()\r\n }\r\n\r\n if (getCurrentScope()) onScopeDispose(teardown)\r\n\r\n const apply = (next: MarkdownDocument): void => {\r\n document.value = next\r\n status.value = 'ready'\r\n }\r\n\r\n const createContext = (\r\n source: string,\r\n nextDiagnostics: MarkdownDiagnostic[],\r\n ): PipelineContext => ({\r\n source,\r\n options: optionsRef.value,\r\n plugins: resolved.value.plugins,\r\n remarkPlugins: remarkPlugins.value,\r\n rehypePlugins: rehypePlugins.value,\r\n remarkRehypeOptions: remarkRehypeOptions.value,\r\n slugger: slugger.value,\r\n idPrefix: idPrefix.value,\r\n diagnostics: nextDiagnostics,\r\n })\r\n\r\n const finalize = (\r\n source: string,\r\n result: PipelineResult,\r\n nextDiagnostics: MarkdownDiagnostic[],\r\n ): MarkdownDocument =>\r\n finalizeMarkdownDocument({\r\n source,\r\n result,\r\n options: optionsRef.value,\r\n plugins: resolved.value,\r\n pipelineName: pipeline.value.name,\r\n slugger: slugger.value,\r\n idPrefix: idPrefix.value,\r\n diagnostics: nextDiagnostics,\r\n })\r\n\r\n let runId = 0\r\n\r\n const applyRun = (\r\n source: string,\r\n result: PipelineResult,\r\n nextDiagnostics: MarkdownDiagnostic[],\r\n key: string,\r\n cache: boolean,\r\n ): void => {\r\n const next = finalize(source, result, nextDiagnostics)\r\n diagnostics.value = nextDiagnostics\r\n if (cache) memoSet(key, next)\r\n apply(next)\r\n }\r\n\r\n const runSync = (\r\n source: string,\r\n key: string,\r\n cache: boolean,\r\n nextDiagnostics: MarkdownDiagnostic[],\r\n ): 'done' | 'async' => {\r\n const sync = pipeline.value.processSync\r\n if (!sync) return 'async'\r\n\r\n try {\r\n slugger.value.reset?.()\r\n const result = assertPipelineResult(sync.call(pipeline.value, source, createContext(source, nextDiagnostics)))\r\n applyRun(source, result, nextDiagnostics, key, cache)\r\n return 'done'\r\n } catch (error) {\r\n if (isAsyncError(error)) return 'async'\r\n status.value = 'error'\r\n diagnostics.value = [\r\n ...nextDiagnostics,\r\n createDiagnostic('pipeline-sync', errorMessage(error), {\r\n phase: 'pipeline',\r\n }),\r\n ]\r\n return 'done'\r\n }\r\n }\r\n\r\n const runAsync = async (\r\n id: number,\r\n source: string,\r\n key: string,\r\n cache: boolean,\r\n nextDiagnostics: MarkdownDiagnostic[],\r\n ): Promise<void> => {\r\n status.value = 'pending'\r\n try {\r\n slugger.value.reset?.()\r\n const result = assertPipelineResult(\r\n await pipeline.value.process(source, createContext(source, nextDiagnostics)),\r\n )\r\n if (id !== runId) return\r\n applyRun(source, result, nextDiagnostics, key, cache)\r\n } catch (error) {\r\n if (id !== runId) return\r\n status.value = 'error'\r\n diagnostics.value = [\r\n ...nextDiagnostics,\r\n createDiagnostic('pipeline-process', errorMessage(error), {\r\n phase: 'pipeline',\r\n }),\r\n ]\r\n }\r\n }\r\n\r\n const run = (force = false): Promise<void> => {\r\n const id = ++runId\r\n const nextDiagnostics: MarkdownDiagnostic[] = [\r\n ...pipelineResult.value.diagnostics,\r\n ...resolved.value.diagnostics,\r\n ...setupDiagnostics.value,\r\n ]\r\n const source = applySourceTransforms(\r\n sourceRef.value,\r\n resolved.value.plugins,\r\n optionsRef.value,\r\n nextDiagnostics,\r\n )\r\n const key = createMemoKey(source, pipelineIdentity.value)\r\n\r\n if (!force) {\r\n const cached = memoGet(key)\r\n if (cached) {\r\n diagnostics.value = nextDiagnostics\r\n apply(cached)\r\n return Promise.resolve()\r\n }\r\n }\r\n\r\n const sync = runSync(source, key, !force, nextDiagnostics)\r\n if (sync === 'done') return Promise.resolve()\r\n return runAsync(id, source, key, !force, nextDiagnostics)\r\n }\r\n\r\n const refresh = (): Promise<void> => run(true)\r\n\r\n watch(pluginSetupKey, setupPlugins, { immediate: true })\r\n watch([sourceRef, parseKey], () => void run())\r\n\r\n void run()\r\n\r\n return {\r\n document,\r\n toc: computed(() => document.value?.toc ?? []),\r\n status,\r\n diagnostics,\r\n pipeline: computed(() => pipeline.value.name),\r\n plugins: computed(() => resolved.value.names),\r\n resolvedComponents: computed(() => resolved.value.components),\r\n resolvedNodeComponents: computed(() => resolved.value.nodeComponents),\r\n resolvedRegions: computed(() => resolved.value.regions),\r\n resolvedLabels: computed(() => resolved.value.labels),\r\n resolvedTokens: computed(() => resolved.value.tokens),\r\n refresh,\r\n }\r\n}\r\n","import {\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n toValue,\r\n watch,\r\n type MaybeRefOrGetter,\r\n} from 'vue'\r\n\r\nexport interface UseActiveHeadingOptions {\r\n /**\r\n * Scope heading lookups to one rendered document root. Pass this when a\r\n * page contains multiple renderers that may generate the same heading IDs.\r\n */\r\n root?: MaybeRefOrGetter<Element | Document | null | undefined>\r\n}\r\n\r\n/** Find an element by id inside a document or a scoped root element. */\r\nexport function findElementById(\r\n scope: Element | Document,\r\n id: string,\r\n): HTMLElement | null {\r\n const byId = (scope as Document).getElementById\r\n if (typeof byId === 'function') {\r\n return byId.call(scope, id)\r\n }\r\n // Avoid CSS selector escaping for generated ids with punctuation.\r\n const candidates = (scope as Element).querySelectorAll('[id]')\r\n for (let index = 0; index < candidates.length; index += 1) {\r\n const element = candidates[index] as HTMLElement\r\n if (element.getAttribute('id') === id) return element\r\n }\r\n return null\r\n}\r\n\r\n/** Tracks the heading currently in view without touching the DOM before mount. */\r\nexport function useActiveHeading(\r\n ids: MaybeRefOrGetter<string[]>,\r\n enabled: MaybeRefOrGetter<boolean> = true,\r\n options: UseActiveHeadingOptions = {},\r\n) {\r\n const activeId = ref<string>()\r\n let observer: IntersectionObserver | undefined\r\n\r\n const disconnect = (): void => {\r\n observer?.disconnect()\r\n observer = undefined\r\n }\r\n\r\n const connect = (): void => {\r\n disconnect()\r\n if (!toValue(enabled)) return\r\n if (typeof window === 'undefined' || typeof IntersectionObserver === 'undefined') {\r\n return\r\n }\r\n\r\n const scope = toValue(options.root) ?? window.document\r\n const elements = toValue(ids)\r\n .map((id) => findElementById(scope, id))\r\n .filter((element): element is HTMLElement => element !== null)\r\n\r\n if (elements.length === 0) return\r\n\r\n observer = new IntersectionObserver(\r\n (entries) => {\r\n const visible = entries\r\n .filter((entry) => entry.isIntersecting)\r\n .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)\r\n if (visible[0]) activeId.value = visible[0].target.id\r\n },\r\n { rootMargin: '0px 0px -70% 0px', threshold: 0 },\r\n )\r\n\r\n for (const element of elements) observer.observe(element)\r\n }\r\n\r\n onMounted(connect)\r\n watch(() => toValue(ids).join('\\u001f'), connect)\r\n watch(() => toValue(enabled), connect)\r\n if (options.root) watch(() => toValue(options.root), connect)\r\n onBeforeUnmount(disconnect)\r\n\r\n return activeId\r\n}\r\n"],"ignoreList":[3,4],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shiki.js","names":["_objectSpread2","plaintextHighlight","highlightedNodesFromHast","THEMES","DEFAULT_LANGUAGES","highlighterPromise","highlighter","getHighlighter","_getHighlighter","_asyncToGenerator","createHighlighter","instance","codeChildren","_root$children","_pre$children","_code$children","root","nodes","pre","node","code","shiki","_ref","language","_options$colorScheme","lang","colorScheme","options"],"sources":["../../src/highlight/shiki.ts"],"sourcesContent":["import { createHighlighter, type Highlighter } from 'shiki'\r\nimport type { MarkdownHighlighter } from '../core/types'\r\nimport { highlightedNodesFromHast, plaintextHighlight } from './shared'\r\n\r\nconst THEMES = {\r\n light: 'github-light',\r\n dark: 'github-dark',\r\n} as const\r\n\r\nconst DEFAULT_LANGUAGES = [\r\n 'bash',\r\n 'css',\r\n 'diff',\r\n 'go',\r\n 'html',\r\n 'javascript',\r\n 'json',\r\n 'markdown',\r\n 'python',\r\n 'rust',\r\n 'shell',\r\n 'sql',\r\n 'tsx',\r\n 'typescript',\r\n 'xml',\r\n 'yaml',\r\n]\r\n\r\nlet highlighterPromise: Promise<Highlighter> | undefined\r\nlet highlighter: Highlighter | undefined\r\n\r\nasync function getHighlighter(): Promise<Highlighter> {\r\n if (highlighter) return highlighter\r\n if (!highlighterPromise) {\r\n highlighterPromise = createHighlighter({\r\n themes: [THEMES.light, THEMES.dark],\r\n langs: DEFAULT_LANGUAGES,\r\n }).then((instance) => {\r\n highlighter = instance\r\n return instance\r\n })\r\n }\r\n return highlighterPromise\r\n}\r\n\r\nfunction codeChildren(nodes: readonly unknown[]): readonly unknown[] {\r\n const root = nodes[0] as { children?: readonly unknown[] } | undefined\r\n const pre = root?.children?.find(\r\n (node) => (node as { tagName?: string }).tagName === 'pre',\r\n ) as { children?: readonly unknown[] } | undefined\r\n const code = pre?.children?.find(\r\n (node) => (node as { tagName?: string }).tagName === 'code',\r\n ) as { children?: readonly unknown[] } | undefined\r\n return code?.children ?? []\r\n}\r\n\r\n/**\r\n * Optional Shiki adapter. The highlighter, themes, and requested languages\r\n * load asynchronously; until then callers see plain text.\r\n */\r\nexport const shiki: MarkdownHighlighter = {\r\n id: 'shiki',\r\n languages: DEFAULT_LANGUAGES,\r\n load: async () => {\r\n await getHighlighter()\r\n },\r\n async loadLanguage(language) {\r\n const instance = await getHighlighter()\r\n if (!instance.getLoadedLanguages().includes(language)) {\r\n await instance.loadLanguage(language as never)\r\n }\r\n },\r\n highlight(code, language, options) {\r\n if (!highlighter) return plaintextHighlight(code, language)\r\n const loaded = highlighter.getLoadedLanguages()\r\n const lang = loaded.includes(language as never) ? language : 'text'\r\n // Keep both theme variants in the token style while making the active\r\n // scheme the concrete color. Normalization preserves that constrained\r\n // style subset, so tokens keep their colors instead of rendering\r\n // monochrome.\r\n const colorScheme =\r\n options.colorScheme ?? (options.theme === 'dark' ? 'dark' : 'light')\r\n const root = highlighter.codeToHast(code, {\r\n lang: lang as never,\r\n themes: THEMES,\r\n defaultColor: colorScheme,\r\n ...(options.theme ? { theme: options.theme as never } : {}),\r\n })\r\n return {\r\n language: lang,\r\n nodes: highlightedNodesFromHast(\r\n codeChildren([root]) as never[],\r\n ),\r\n }\r\n },\r\n}\r\n\r\nexport default shiki\r\n"],"mappings":";;;;;AAIA,IAAMG,IAAS;CACb,OAAO;CACP,MAAM;AACR,GAEMC,IAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEIC,GACAC;AAEJ,SAAeC,IAAA;;;;C,OAAuC,IAAAE,EAAA,aAAA;EAWpD,OAVIH,MACCD,MACH,IAAqBK,EAAkB;GACrC,QAAQ,CAACP,EAAO,OAAOA,EAAO,IAAI;GAClC,OAAOC;EACT,CAAC,CAAC,CAAC,MAAM,OACP,IAAcO,GACPA,EACR,IAEIN;CACT,CAAA,G;;AAEA,SAASO,EAAa,GAA+C;;CACnE,IAAMI,IAAOC,EAAM,IACbC,IAAAF,KAAA,SAAA,IAAMA,EAAM,aAAA,OAAA,KAAA,IAAAH,EAAU,MACzB,MAAUM,EAA8B,YAAY,KACvD,GACMC,IAAAF,KAAA,SAAA,IAAOA,EAAK,aAAA,OAAA,KAAA,IAAAJ,EAAU,MACzB,MAAUK,EAA8B,YAAY,MACvD;CACA,QAAA,IAAAC,KAAA,OAAA,KAAA,IAAOA,EAAM,aAAA,OAAY,CAAC,IAAbL;AACf;AAMA,IAAaM,IAA6B;CACxC,IAAI;CACJ,WAAWjB;CACX,MAAA,WAAA;EAAkB,IAAAkB,IAAAb,EAAA,aAAA;GAChB,MAAMF,EAAe;EACvB,CAAA;;;;;CACA,aAAmB,GAAA;EAAU,OAAAE,EAAA,aAAA;GAC3B,IAAME,IAAW,MAAMJ,EAAe;GACtC,AAAKI,EAAS,mBAAmB,CAAC,CAAC,SAASY,CAAQ,MAClD,MAAMZ,EAAS,aAAaY,CAAiB;EAEjD,CAAA,CAAA,CAAA;;CACA,UAAU,GAAM,GAAU,GAAS;;EACjC,IAAI,CAACjB,GAAa,OAAOL,EAAmBmB,GAAMG,CAAQ;EAE1D,IAAME,IADSnB,EAAY,mBACd,CAAA,CAAO,SAASiB,CAAiB,IAAIA,IAAW,QAKvDG,KAAA,IACJC,EAAQ,gBAAA,OAAgBA,EAAQ,UAAU,SAAS,SAAS,UAApDH,GACJR,IAAOV,EAAY,WAAWc,GAAApB,EAAA;GAC5B;GACN,QAAQG;GACR,cAAcuB;EACV,GAAAC,EAAQ,QAAQ,EAAE,OAAOA,EAAQ,MAAe,IAAI,CAAC,CAC3D,CAAC;EACD,OAAO;GACL,UAAUF;GACV,OAAOvB,EACLU,EAAa,CAACI,CAAI,CAAC,CACrB;EACF;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["rehypeRaw","htmlPlugin","options"],"sources":["../../src/html/index.ts"],"sourcesContent":["import rehypeRaw from 'rehype-raw'\nimport type { HtmlSchemaExtension, MarkdownPlugin } from '../core/types'\n\nexport interface HtmlPluginOptions {\n /**\n * Add-only extension for the built-in raw HTML sanitizer. Property names use\n * hast casing, for example `srcSet` and `dateTime`.\n */\n schema?: HtmlSchemaExtension\n}\n\n/**\n * Enable sanitized raw HTML in the official pipeline.\n *\n * The plugin contributes `rehype-raw`; the official pipeline runs it before the\n * built-in sanitizer and ignores manual `rehype-raw` entries. Importing this\n * entry is the only supported way to render raw HTML.\n */\nexport function htmlPlugin(options: HtmlPluginOptions = {}): MarkdownPlugin {\n return {\n name: 'html',\n html: true,\n htmlSchema: options.schema,\n rehypePlugins: [[rehypeRaw, {}]],\n }\n}\n\nexport type { HtmlSchemaExtension }\n"],"mappings":";;AAkBA,SAAgBC,EAAW,IAA6B,CAAC,GAAmB;CAC1E,OAAO;EACL,MAAM;EACN,MAAM;EACN,YAAYC,EAAQ;EACpB,eAAe,CAAC,CAACF,GAAW,CAAC,CAAC,CAAC;CACjC;AACF"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["validateManifest","PART_NAMES","VMD_CLASS_PREFIX","partAttrs","TOKENS","exportMarkdownHtmlSync","validateManifestRegistry","partClass","COMPONENT_MANIFESTS","PARTS","exportMarkdownHtml","TOKEN_NAMES","resolveLabel","DEFAULT_LABELS","errorMessage","createDiagnostic","isExternalUrl","resolveUrl","defaultUrlTransform","walkNodes","normalizeHast","extractToc","filterTocByDepth","collectCustomTags","memoGet","withUniqueSlugs","buildDocument","memoClear","useActiveHeading","memoSet","withDerivedDocument","useMarkdownDocument","memoSize","findElementById","segmentSearch","frontmatterPlugin","linkPlugin","createPluginContext","defineMarkdownPlugin","searchDocument","countSearchMatches","defaultPlugins","searchPlugin","codePlugin","fullPlugins","validatePlugin","customTagsPlugin","gfmPlugin","resolvePlugins","tocPlugin","mergeMarkdownPreset","mergeMarkdownConfig","defineMarkdownPreset","resolvePreset","composePresets","isValidSlugger","isValidMermaidRenderer","isValidHighlighter","isValidUrlTransform","isValidMathEngine","isValidDiagnosticFormatter","resolvePipeline","defineMarkdownPipeline","createPipelineIdentity","validatePipeline","assertPipelineResult","createOfficialPipeline","createMemoKey","mermaidPlugin","provideMarkdownConfig","useMarkdownConfig","MARKDOWN_CONFIG","isEmptySlotContent","useRenderContext","RENDER_CONTEXT","CodeBlock_default","MarkdownMath_default","MarkdownMermaid_default","MermaidBlock_default","MarkdownCode_default","MarkdownBlockquote_default","MarkdownBreak_default","MarkdownCustomTag_default","MarkdownEmphasis_default","MarkdownHeading_default","MarkdownHorizontalRule_default","MarkdownImage_default","MarkdownInlineCode_default","MarkdownLink_default","MarkdownList_default","MarkdownListItem_default","MarkdownFootnoteReference_default","MarkdownFootnotes_default","MarkdownParagraph_default","MarkdownStrikethrough_default","MarkdownTaskItem_default","MarkdownStrong_default","MarkdownTable_default","MarkdownTableCell_default","MarkdownTableRow_default","MarkdownTableSection_default","MarkdownChildren_default","MarkdownRenderer_default","MarkdownContent_default","MarkdownEmpty_default","MarkdownError_default","MarkdownLoading_default","MarkdownRoot_default","MarkdownTocItem_default","MarkdownToc_default","MarkdownConfigProvider_default","VueSyntaxHighlighter_default","MermaidLiveEditor_default","MarkdownHtml_default","version","getComponentManifest"],"sources":["../src/index.ts"],"sourcesContent":["export const version = '1.0.0'\r\n\r\nexport * from './core/types'\r\nexport * from './core/parts'\r\nexport * from './core/labels'\r\nexport * from './core/diagnostics'\r\nexport * from './core/url'\r\nexport * from './core/model'\r\nexport * from './core/normalize'\r\nexport * from './core/search'\r\nexport * from './core/slugger'\r\nexport * from './core/manifest'\r\nexport * from './core/config'\r\nexport * from './core/preset'\r\nexport * from './core/adapters'\r\nexport * from './export'\r\nexport * from './core/memo'\r\nexport * from './pipeline'\r\nexport * from './plugins/define'\r\nexport * from './plugins/builtin'\r\nexport * from './plugins/registry'\r\nexport * from './mermaid/plugin'\r\nexport * from './composables/useMarkdownDocument'\r\nexport * from './composables/useActiveHeading'\r\nexport * from './components'\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAakH,KAAU"}