fumadocs-core 16.4.6 → 16.4.8

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 (255) hide show
  1. package/dist/{advanced-tbtFDsHU.js → advanced-BiZjLx5X.js} +3 -4
  2. package/dist/{algolia-B9GvomyW.d.ts → algolia-DWUn4vqa.d.ts} +2 -3
  3. package/dist/{algolia-Dbt0kj8j.js → algolia-IT2aRQE6.js} +2 -3
  4. package/dist/breadcrumb.d.ts +2 -3
  5. package/dist/breadcrumb.js +3 -4
  6. package/dist/{codeblock-utils-CdA7nXLP.d.ts → codeblock-utils-DA5Ql7wp.d.ts} +1 -2
  7. package/dist/content/github.d.ts +1 -2
  8. package/dist/content/github.js +1 -2
  9. package/dist/content/index.d.ts +3 -4
  10. package/dist/content/index.js +1 -2
  11. package/dist/content/mdx/preset-bundler.d.ts +9 -10
  12. package/dist/content/mdx/preset-bundler.js +2 -3
  13. package/dist/content/mdx/preset-runtime.d.ts +9 -10
  14. package/dist/content/mdx/preset-runtime.js +2 -3
  15. package/dist/content/toc.d.ts +1 -2
  16. package/dist/content/toc.js +2 -3
  17. package/dist/{definitions-Ca2P2viV.d.ts → definitions-fBNEDML4.d.ts} +1 -2
  18. package/dist/dynamic-link.d.ts +1 -2
  19. package/dist/dynamic-link.js +1 -2
  20. package/dist/{fetch-CiphcAUR.js → fetch-B9AxBORJ.js} +1 -2
  21. package/dist/framework/index.d.ts +5 -6
  22. package/dist/framework/index.js +1 -2
  23. package/dist/framework/next.d.ts +3 -4
  24. package/dist/framework/next.js +1 -2
  25. package/dist/framework/react-router.d.ts +3 -4
  26. package/dist/framework/react-router.js +1 -2
  27. package/dist/framework/tanstack.d.ts +3 -4
  28. package/dist/framework/tanstack.js +1 -2
  29. package/dist/framework/waku.d.ts +3 -4
  30. package/dist/framework/waku.js +1 -2
  31. package/dist/highlight/client.d.ts +2 -3
  32. package/dist/highlight/client.js +2 -3
  33. package/dist/highlight/index.d.ts +1 -1
  34. package/dist/highlight/index.js +1 -1
  35. package/dist/i18n/index.d.ts +1 -1
  36. package/dist/i18n/index.js +1 -2
  37. package/dist/i18n/middleware.d.ts +2 -3
  38. package/dist/i18n/middleware.js +1 -2
  39. package/dist/{icon-CL3r1pNG.js → icon-D9W4ODUt.js} +1 -2
  40. package/dist/{index-k5KwKJ_c.d.ts → index-Bn_dIR1t.d.ts} +6 -6
  41. package/dist/{index-DxhhLscI.d.ts → index-CNd0mkPr.d.ts} +1 -2
  42. package/dist/index-DbVQNAN8.d.ts +44 -0
  43. package/dist/index-Skpc1DNd.d.ts +18 -0
  44. package/dist/link.d.ts +3 -4
  45. package/dist/link.js +1 -2
  46. package/dist/{mdast-utils-B8O-41y4.js → mdast-utils-BqE5966y.js} +1 -2
  47. package/dist/mdx-plugins/codeblock-utils.d.ts +1 -1
  48. package/dist/mdx-plugins/codeblock-utils.js +1 -2
  49. package/dist/mdx-plugins/index.d.ts +15 -15
  50. package/dist/mdx-plugins/index.js +4 -4
  51. package/dist/mdx-plugins/rehype-code.d.ts +1 -1
  52. package/dist/mdx-plugins/rehype-code.js +2 -2
  53. package/dist/mdx-plugins/rehype-toc.d.ts +1 -1
  54. package/dist/mdx-plugins/rehype-toc.js +1 -1
  55. package/dist/mdx-plugins/remark-admonition.d.ts +1 -1
  56. package/dist/mdx-plugins/remark-admonition.js +2 -3
  57. package/dist/mdx-plugins/remark-code-tab.d.ts +1 -1
  58. package/dist/mdx-plugins/remark-code-tab.js +1 -2
  59. package/dist/mdx-plugins/remark-directive-admonition.d.ts +1 -1
  60. package/dist/mdx-plugins/remark-directive-admonition.js +1 -2
  61. package/dist/mdx-plugins/remark-feedback-block.d.ts +1 -1
  62. package/dist/mdx-plugins/remark-feedback-block.js +2 -3
  63. package/dist/mdx-plugins/remark-gfm.d.ts +1 -1
  64. package/dist/mdx-plugins/remark-heading.d.ts +1 -1
  65. package/dist/mdx-plugins/remark-heading.js +2 -3
  66. package/dist/mdx-plugins/remark-image.d.ts +1 -1
  67. package/dist/mdx-plugins/remark-image.js +1 -2
  68. package/dist/mdx-plugins/remark-mdx-files.d.ts +1 -1
  69. package/dist/mdx-plugins/remark-mdx-files.js +1 -2
  70. package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +1 -1
  71. package/dist/mdx-plugins/remark-mdx-mermaid.js +1 -2
  72. package/dist/mdx-plugins/remark-npm.d.ts +1 -1
  73. package/dist/mdx-plugins/remark-npm.js +1 -2
  74. package/dist/mdx-plugins/remark-steps.d.ts +1 -1
  75. package/dist/mdx-plugins/remark-steps.js +1 -2
  76. package/dist/mdx-plugins/remark-structure.d.ts +1 -1
  77. package/dist/mdx-plugins/remark-structure.js +2 -3
  78. package/dist/{mixedbread-B0TvOHtt.js → mixedbread-B4x0e8AJ.js} +6 -5
  79. package/dist/negotiation/index.d.ts +1 -2
  80. package/dist/negotiation/index.js +1 -2
  81. package/dist/{normalize-url-CEfNKxaE.js → normalize-url-D88zV54r.js} +1 -2
  82. package/dist/{orama-cloud-yicpgD0c.js → orama-cloud-CiI54EU9.js} +3 -4
  83. package/dist/{orama-cloud-legacy-NJTbB19B.js → orama-cloud-legacy-DG0asrcn.js} +3 -4
  84. package/dist/page-tree/index.d.ts +3 -45
  85. package/dist/page-tree/index.js +1 -1
  86. package/dist/{path-CECfI3nn.js → path-B48ZWv8k.js} +2 -3
  87. package/dist/{rehype-code-Ct5Pb6BZ.js → rehype-code-8Te7jiPm.js} +2 -3
  88. package/dist/{rehype-code-BUrju-yF.d.ts → rehype-code-9wJ_hsjl.d.ts} +1 -2
  89. package/dist/{rehype-toc-Dcgzd_Vy.d.ts → rehype-toc-Bt9Ng_4w.d.ts} +1 -2
  90. package/dist/{rehype-toc-CTG0x7La.js → rehype-toc-CRXB92Tc.js} +1 -2
  91. package/dist/{remark-admonition-BvgS4oU1.d.ts → remark-admonition-DVevS9Wn.d.ts} +1 -2
  92. package/dist/{remark-code-tab-Ds_BdYXz.d.ts → remark-code-tab-DwGhoHpj.d.ts} +1 -2
  93. package/dist/{remark-directive-admonition-02cR5K1L.d.ts → remark-directive-admonition-DA7-ewEx.d.ts} +1 -2
  94. package/dist/{remark-feedback-block-fAyt4LdQ.d.ts → remark-feedback-block-PpERWDdJ.d.ts} +1 -2
  95. package/dist/{remark-heading-CSButCYt.d.ts → remark-heading-B02bkQ09.d.ts} +1 -2
  96. package/dist/{remark-image-C3MnP-3r.d.ts → remark-image-k8SDn3Hf.d.ts} +1 -2
  97. package/dist/{remark-mdx-files-BXUiiX3M.d.ts → remark-mdx-files-DXQKQsPS.d.ts} +1 -2
  98. package/dist/{remark-mdx-mermaid-C5ZBxx8x.d.ts → remark-mdx-mermaid-CzeZXfYX.d.ts} +1 -2
  99. package/dist/{remark-npm-DADZg0pf.d.ts → remark-npm-DS3cHDxB.d.ts} +1 -2
  100. package/dist/{remark-steps-CWEE34cT.d.ts → remark-steps-Bz-6C0tE.d.ts} +1 -2
  101. package/dist/{remark-structure-ChKxMXnK.d.ts → remark-structure-dZprfvCG.d.ts} +1 -2
  102. package/dist/{remove-undefined-Buxsprgu.js → remove-undefined-CiwokjLP.js} +1 -2
  103. package/dist/search/algolia.d.ts +2 -2
  104. package/dist/search/algolia.js +1 -2
  105. package/dist/search/client.d.ts +8 -7
  106. package/dist/search/client.js +7 -8
  107. package/dist/search/index.d.ts +1 -2
  108. package/dist/search/index.js +1 -1
  109. package/dist/search/orama-cloud-legacy.d.ts +6 -7
  110. package/dist/search/orama-cloud-legacy.js +1 -2
  111. package/dist/search/orama-cloud.d.ts +6 -7
  112. package/dist/search/orama-cloud.js +1 -2
  113. package/dist/search/server.d.ts +6 -4
  114. package/dist/search/server.js +5 -6
  115. package/dist/{search-DzqmOjzV.js → search-CBAFoCmV.js} +1 -2
  116. package/dist/{server-CjGgVKx_.d.ts → server-BqqfVZaS.d.ts} +4 -5
  117. package/dist/{shiki-B4NO99XD.js → shiki-BMakKE6A.js} +1 -2
  118. package/dist/{shiki-vKy7H_iw.d.ts → shiki-BjMLCq9L.d.ts} +1 -2
  119. package/dist/source/client/index.d.ts +4 -18
  120. package/dist/source/client/index.js +21 -12
  121. package/dist/source/index.d.ts +4 -2
  122. package/dist/source/index.js +118 -66
  123. package/dist/source/plugins/lucide-icons.d.ts +5 -4
  124. package/dist/source/plugins/lucide-icons.js +2 -3
  125. package/dist/source/plugins/slugs.d.ts +4 -2
  126. package/dist/source/plugins/slugs.js +2 -3
  127. package/dist/source/plugins/status-badges.d.ts +53 -0
  128. package/dist/source/plugins/status-badges.js +54 -0
  129. package/dist/source/schema.d.ts +1 -2
  130. package/dist/source/schema.js +1 -2
  131. package/dist/{static-C_WBOzek.js → static-Dg4_dKaf.js} +2 -3
  132. package/dist/toc.d.ts +1 -2
  133. package/dist/toc.js +1 -2
  134. package/dist/{util-d5FlPx1Z.d.ts → util-C1pcIt82.d.ts} +1 -2
  135. package/dist/{util-Dn-wseQ5.js → util-E8U2ttCR.js} +1 -2
  136. package/dist/utils/use-effect-event.d.ts +1 -2
  137. package/dist/utils/use-effect-event.js +1 -2
  138. package/dist/utils/use-media-query.d.ts +1 -2
  139. package/dist/utils/use-media-query.js +1 -2
  140. package/dist/utils/use-on-change.d.ts +1 -2
  141. package/dist/utils/use-on-change.js +1 -2
  142. package/dist/{utils-D10VxgVc.js → utils-BllAiz19.js} +1 -2
  143. package/package.json +14 -14
  144. package/dist/advanced-tbtFDsHU.js.map +0 -1
  145. package/dist/algolia-B9GvomyW.d.ts.map +0 -1
  146. package/dist/algolia-Dbt0kj8j.js.map +0 -1
  147. package/dist/breadcrumb.d.ts.map +0 -1
  148. package/dist/breadcrumb.js.map +0 -1
  149. package/dist/codeblock-utils-CdA7nXLP.d.ts.map +0 -1
  150. package/dist/content/github.d.ts.map +0 -1
  151. package/dist/content/github.js.map +0 -1
  152. package/dist/content/index.d.ts.map +0 -1
  153. package/dist/content/index.js.map +0 -1
  154. package/dist/content/mdx/preset-bundler.d.ts.map +0 -1
  155. package/dist/content/mdx/preset-bundler.js.map +0 -1
  156. package/dist/content/mdx/preset-runtime.d.ts.map +0 -1
  157. package/dist/content/mdx/preset-runtime.js.map +0 -1
  158. package/dist/content/toc.d.ts.map +0 -1
  159. package/dist/content/toc.js.map +0 -1
  160. package/dist/definitions-Ca2P2viV.d.ts.map +0 -1
  161. package/dist/dynamic-link.d.ts.map +0 -1
  162. package/dist/dynamic-link.js.map +0 -1
  163. package/dist/fetch-CiphcAUR.js.map +0 -1
  164. package/dist/framework/index.d.ts.map +0 -1
  165. package/dist/framework/index.js.map +0 -1
  166. package/dist/framework/next.d.ts.map +0 -1
  167. package/dist/framework/next.js.map +0 -1
  168. package/dist/framework/react-router.d.ts.map +0 -1
  169. package/dist/framework/react-router.js.map +0 -1
  170. package/dist/framework/tanstack.d.ts.map +0 -1
  171. package/dist/framework/tanstack.js.map +0 -1
  172. package/dist/framework/waku.d.ts.map +0 -1
  173. package/dist/framework/waku.js.map +0 -1
  174. package/dist/highlight/client.d.ts.map +0 -1
  175. package/dist/highlight/client.js.map +0 -1
  176. package/dist/i18n/index.js.map +0 -1
  177. package/dist/i18n/middleware.d.ts.map +0 -1
  178. package/dist/i18n/middleware.js.map +0 -1
  179. package/dist/icon-CL3r1pNG.js.map +0 -1
  180. package/dist/index-DxhhLscI.d.ts.map +0 -1
  181. package/dist/index-k5KwKJ_c.d.ts.map +0 -1
  182. package/dist/link.d.ts.map +0 -1
  183. package/dist/link.js.map +0 -1
  184. package/dist/mdast-utils-B8O-41y4.js.map +0 -1
  185. package/dist/mdx-plugins/codeblock-utils.js.map +0 -1
  186. package/dist/mdx-plugins/remark-admonition.js.map +0 -1
  187. package/dist/mdx-plugins/remark-code-tab.js.map +0 -1
  188. package/dist/mdx-plugins/remark-directive-admonition.js.map +0 -1
  189. package/dist/mdx-plugins/remark-feedback-block.js.map +0 -1
  190. package/dist/mdx-plugins/remark-heading.js.map +0 -1
  191. package/dist/mdx-plugins/remark-image.js.map +0 -1
  192. package/dist/mdx-plugins/remark-mdx-files.js.map +0 -1
  193. package/dist/mdx-plugins/remark-mdx-mermaid.js.map +0 -1
  194. package/dist/mdx-plugins/remark-npm.js.map +0 -1
  195. package/dist/mdx-plugins/remark-steps.js.map +0 -1
  196. package/dist/mdx-plugins/remark-structure.js.map +0 -1
  197. package/dist/mixedbread-B0TvOHtt.js.map +0 -1
  198. package/dist/negotiation/index.d.ts.map +0 -1
  199. package/dist/negotiation/index.js.map +0 -1
  200. package/dist/normalize-url-CEfNKxaE.js.map +0 -1
  201. package/dist/orama-cloud-legacy-NJTbB19B.js.map +0 -1
  202. package/dist/orama-cloud-yicpgD0c.js.map +0 -1
  203. package/dist/page-tree/index.d.ts.map +0 -1
  204. package/dist/path-CECfI3nn.js.map +0 -1
  205. package/dist/rehype-code-BUrju-yF.d.ts.map +0 -1
  206. package/dist/rehype-code-Ct5Pb6BZ.js.map +0 -1
  207. package/dist/rehype-toc-CTG0x7La.js.map +0 -1
  208. package/dist/rehype-toc-Dcgzd_Vy.d.ts.map +0 -1
  209. package/dist/remark-admonition-BvgS4oU1.d.ts.map +0 -1
  210. package/dist/remark-code-tab-Ds_BdYXz.d.ts.map +0 -1
  211. package/dist/remark-directive-admonition-02cR5K1L.d.ts.map +0 -1
  212. package/dist/remark-feedback-block-fAyt4LdQ.d.ts.map +0 -1
  213. package/dist/remark-heading-CSButCYt.d.ts.map +0 -1
  214. package/dist/remark-image-C3MnP-3r.d.ts.map +0 -1
  215. package/dist/remark-mdx-files-BXUiiX3M.d.ts.map +0 -1
  216. package/dist/remark-mdx-mermaid-C5ZBxx8x.d.ts.map +0 -1
  217. package/dist/remark-npm-DADZg0pf.d.ts.map +0 -1
  218. package/dist/remark-steps-CWEE34cT.d.ts.map +0 -1
  219. package/dist/remark-structure-ChKxMXnK.d.ts.map +0 -1
  220. package/dist/remove-undefined-Buxsprgu.js.map +0 -1
  221. package/dist/search/algolia.js.map +0 -1
  222. package/dist/search/client.d.ts.map +0 -1
  223. package/dist/search/client.js.map +0 -1
  224. package/dist/search/index.d.ts.map +0 -1
  225. package/dist/search/orama-cloud-legacy.d.ts.map +0 -1
  226. package/dist/search/orama-cloud-legacy.js.map +0 -1
  227. package/dist/search/orama-cloud.d.ts.map +0 -1
  228. package/dist/search/orama-cloud.js.map +0 -1
  229. package/dist/search/server.js.map +0 -1
  230. package/dist/search-DzqmOjzV.js.map +0 -1
  231. package/dist/server-CjGgVKx_.d.ts.map +0 -1
  232. package/dist/shiki-B4NO99XD.js.map +0 -1
  233. package/dist/shiki-vKy7H_iw.d.ts.map +0 -1
  234. package/dist/source/client/index.d.ts.map +0 -1
  235. package/dist/source/client/index.js.map +0 -1
  236. package/dist/source/index.js.map +0 -1
  237. package/dist/source/plugins/lucide-icons.d.ts.map +0 -1
  238. package/dist/source/plugins/lucide-icons.js.map +0 -1
  239. package/dist/source/plugins/slugs.js.map +0 -1
  240. package/dist/source/schema.d.ts.map +0 -1
  241. package/dist/source/schema.js.map +0 -1
  242. package/dist/static-C_WBOzek.js.map +0 -1
  243. package/dist/toc.d.ts.map +0 -1
  244. package/dist/toc.js.map +0 -1
  245. package/dist/util-Dn-wseQ5.js.map +0 -1
  246. package/dist/util-d5FlPx1Z.d.ts.map +0 -1
  247. package/dist/utils/use-effect-event.d.ts.map +0 -1
  248. package/dist/utils/use-effect-event.js.map +0 -1
  249. package/dist/utils/use-media-query.d.ts.map +0 -1
  250. package/dist/utils/use-media-query.js.map +0 -1
  251. package/dist/utils/use-on-change.d.ts.map +0 -1
  252. package/dist/utils/use-on-change.js.map +0 -1
  253. package/dist/utils-D10VxgVc.js.map +0 -1
  254. /package/dist/{chunk-C9UIFEcR.js → chunk-CQNP8FC4.js} +0 -0
  255. /package/dist/{remark-gfm-jrvaEZw5.d.ts → remark-gfm-Cvcfjik1.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"codeblock-utils.js","names":["attributes: MdxJsxAttribute[]","children: MdxJsxFlowElement[]","attributes: CodeBlockAttributes['attributes']"],"sources":["../../src/mdx-plugins/codeblock-utils.ts"],"sourcesContent":["import type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport type { BlockContent, Text } from 'mdast';\n\nexport interface CodeBlockTabsOptions {\n attributes?: MdxJsxAttribute[];\n defaultValue?: string;\n persist?:\n | {\n id: string;\n }\n | false;\n triggers: {\n value: string;\n children: (BlockContent | Text)[];\n }[];\n tabs: {\n value: string;\n children: BlockContent[];\n }[];\n}\n\nexport function generateCodeBlockTabs({\n persist = false,\n defaultValue,\n triggers,\n tabs,\n ...options\n}: CodeBlockTabsOptions): MdxJsxFlowElement {\n const attributes: MdxJsxAttribute[] = [];\n if (options.attributes) attributes.push(...options.attributes);\n\n if (defaultValue) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'defaultValue',\n value: defaultValue,\n });\n }\n\n if (typeof persist === 'object') {\n attributes.push(\n {\n type: 'mdxJsxAttribute',\n name: 'groupId',\n value: persist.id,\n },\n {\n type: 'mdxJsxAttribute',\n name: 'persist',\n value: null,\n },\n );\n }\n\n const children: MdxJsxFlowElement[] = [\n {\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTabsList',\n attributes: [],\n children: triggers.map(\n (trigger) =>\n ({\n type: 'mdxJsxFlowElement',\n attributes: [{ type: 'mdxJsxAttribute', name: 'value', value: trigger.value }],\n name: 'CodeBlockTabsTrigger',\n children: trigger.children,\n }) as MdxJsxFlowElement,\n ),\n },\n ];\n\n for (const tab of tabs) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTab',\n attributes: [{ type: 'mdxJsxAttribute', name: 'value', value: tab.value }],\n children: tab.children,\n });\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTabs',\n attributes,\n children,\n };\n}\n\nexport interface CodeBlockAttributes<Name extends string = string> {\n attributes: Partial<Record<Name, string | null>>;\n rest: string;\n}\n\n/**\n * Parse Fumadocs-style code block attributes from meta string, like `title=\"hello world\"`\n */\nexport function parseCodeBlockAttributes<Name extends string = string>(\n meta: string,\n allowedNames?: Name[],\n): CodeBlockAttributes<Name> {\n let str = meta;\n const StringRegex = /(?<=^|\\s)(?<name>\\w+)(?:=(?:\"([^\"]*)\"|'([^']*)'))?/g;\n const attributes: CodeBlockAttributes['attributes'] = {};\n\n str = str.replaceAll(StringRegex, (match, name, value_1, value_2) => {\n if (allowedNames && !allowedNames.includes(name)) return match;\n\n attributes[name] = value_1 ?? value_2 ?? null;\n return '';\n });\n\n return {\n rest: str,\n attributes,\n };\n}\n"],"mappings":";AAqBA,SAAgB,sBAAsB,EACpC,UAAU,OACV,cACA,UACA,MACA,GAAG,WACuC;CAC1C,MAAMA,aAAgC,EAAE;AACxC,KAAI,QAAQ,WAAY,YAAW,KAAK,GAAG,QAAQ,WAAW;AAE9D,KAAI,aACF,YAAW,KAAK;EACd,MAAM;EACN,MAAM;EACN,OAAO;EACR,CAAC;AAGJ,KAAI,OAAO,YAAY,SACrB,YAAW,KACT;EACE,MAAM;EACN,MAAM;EACN,OAAO,QAAQ;EAChB,EACD;EACE,MAAM;EACN,MAAM;EACN,OAAO;EACR,CACF;CAGH,MAAMC,WAAgC,CACpC;EACE,MAAM;EACN,MAAM;EACN,YAAY,EAAE;EACd,UAAU,SAAS,KAChB,aACE;GACC,MAAM;GACN,YAAY,CAAC;IAAE,MAAM;IAAmB,MAAM;IAAS,OAAO,QAAQ;IAAO,CAAC;GAC9E,MAAM;GACN,UAAU,QAAQ;GACnB,EACJ;EACF,CACF;AAED,MAAK,MAAM,OAAO,KAChB,UAAS,KAAK;EACZ,MAAM;EACN,MAAM;EACN,YAAY,CAAC;GAAE,MAAM;GAAmB,MAAM;GAAS,OAAO,IAAI;GAAO,CAAC;EAC1E,UAAU,IAAI;EACf,CAAC;AAGJ,QAAO;EACL,MAAM;EACN,MAAM;EACN;EACA;EACD;;;;;AAWH,SAAgB,yBACd,MACA,cAC2B;CAC3B,IAAI,MAAM;CACV,MAAM,cAAc;CACpB,MAAMC,aAAgD,EAAE;AAExD,OAAM,IAAI,WAAW,cAAc,OAAO,MAAM,SAAS,YAAY;AACnE,MAAI,gBAAgB,CAAC,aAAa,SAAS,KAAK,CAAE,QAAO;AAEzD,aAAW,QAAQ,WAAW,WAAW;AACzC,SAAO;GACP;AAEF,QAAO;EACL,MAAM;EACN;EACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-admonition.js","names":[],"sources":["../../src/mdx-plugins/remark-admonition.ts"],"sourcesContent":["import { type Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport { type Root, type RootContent } from 'mdast';\nimport { flattenNode } from '@/mdx-plugins/mdast-utils';\n\nexport interface RemarkAdmonitionOptions {\n tag?: string;\n\n /**\n * Map type to another type\n */\n typeMap?: Record<string, string>;\n}\n\n/**\n * Remark Plugin to support Admonition syntax\n *\n * Useful when Migrating from Docusaurus\n *\n * @deprecated Use `remarkDirectiveAdmonition` with `remark-directive` configured instead.\n */\nexport function remarkAdmonition(options: RemarkAdmonitionOptions = {}): Transformer<Root, Root> {\n const tag = options.tag ?? ':::';\n // compatible with Docusaurus\n const typeMap = options.typeMap ?? {\n info: 'info',\n warn: 'warn',\n\n note: 'info',\n tip: 'info',\n warning: 'warn',\n danger: 'error',\n };\n\n function replaceNodes(nodes: RootContent[]) {\n if (nodes.length === 0) return;\n\n let open = -1;\n let attributes = [];\n // if children contain nested admonitions\n let hasIntercept = false;\n\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].type !== 'paragraph') continue;\n\n const text = flattenNode(nodes[i]);\n const typeName = Object.keys(typeMap).find((type) => text.startsWith(`${tag}${type}`));\n\n if (typeName) {\n if (open !== -1) {\n hasIntercept = true;\n continue;\n }\n\n open = i;\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'type',\n value: typeMap[typeName],\n });\n\n const meta = text.slice(`${tag}${typeName}`.length);\n if (meta.startsWith('[') && meta.endsWith(']')) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'title',\n value: meta.slice(1, -1),\n });\n }\n }\n\n if (open !== -1 && text === tag) {\n const children = nodes.slice(open + 1, i);\n\n nodes.splice(open, i - open + 1, {\n type: 'mdxJsxFlowElement',\n name: 'Callout',\n attributes,\n children: hasIntercept ? replaceNodes(children) : children,\n } as RootContent);\n open = -1;\n hasIntercept = false;\n attributes = [];\n i = open;\n }\n }\n }\n\n return (tree) => {\n visit(tree, (node) => {\n if (!('children' in node)) return;\n\n replaceNodes(node.children);\n });\n };\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAgB,iBAAiB,UAAmC,EAAE,EAA2B;CAC/F,MAAM,MAAM,QAAQ,OAAO;CAE3B,MAAM,UAAU,QAAQ,WAAW;EACjC,MAAM;EACN,MAAM;EAEN,MAAM;EACN,KAAK;EACL,SAAS;EACT,QAAQ;EACT;CAED,SAAS,aAAa,OAAsB;AAC1C,MAAI,MAAM,WAAW,EAAG;EAExB,IAAI,OAAO;EACX,IAAI,aAAa,EAAE;EAEnB,IAAI,eAAe;AAEnB,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,OAAI,MAAM,GAAG,SAAS,YAAa;GAEnC,MAAM,OAAO,YAAY,MAAM,GAAG;GAClC,MAAM,WAAW,OAAO,KAAK,QAAQ,CAAC,MAAM,SAAS,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC;AAEtF,OAAI,UAAU;AACZ,QAAI,SAAS,IAAI;AACf,oBAAe;AACf;;AAGF,WAAO;AAEP,eAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,OAAO,QAAQ;KAChB,CAAC;IAEF,MAAM,OAAO,KAAK,MAAM,GAAG,MAAM,WAAW,OAAO;AACnD,QAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,CAC5C,YAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,OAAO,KAAK,MAAM,GAAG,GAAG;KACzB,CAAC;;AAIN,OAAI,SAAS,MAAM,SAAS,KAAK;IAC/B,MAAM,WAAW,MAAM,MAAM,OAAO,GAAG,EAAE;AAEzC,UAAM,OAAO,MAAM,IAAI,OAAO,GAAG;KAC/B,MAAM;KACN,MAAM;KACN;KACA,UAAU,eAAe,aAAa,SAAS,GAAG;KACnD,CAAgB;AACjB,WAAO;AACP,mBAAe;AACf,iBAAa,EAAE;AACf,QAAI;;;;AAKV,SAAQ,SAAS;AACf,QAAM,OAAO,SAAS;AACpB,OAAI,EAAE,cAAc,MAAO;AAE3B,gBAAa,KAAK,SAAS;IAC3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-code-tab.js","names":["children: MdxJsxFlowElement[]","children","localTabs: TabType"],"sources":["../../src/mdx-plugins/remark-code-tab.ts"],"sourcesContent":["import type { Processor, Transformer } from 'unified';\nimport type { BlockContent, Code, DefinitionContent, Root } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { generateCodeBlockTabs, parseCodeBlockAttributes } from '@/mdx-plugins/codeblock-utils';\n\ntype TabType = keyof typeof Types;\nexport interface RemarkCodeTabOptions {\n Tabs?: TabType;\n\n /**\n * Parse MDX in tab values\n *\n * @defaultValue false\n */\n parseMdx?: boolean;\n}\n\ndeclare module 'mdast' {\n export interface CodeData {\n tab?: string;\n }\n}\n\nconst Tabs = {\n convert(\n processor: Processor,\n nodes: Code[],\n withMdx = false,\n withParent = true,\n ): MdxJsxFlowElement {\n const tabs = Array.from(processTabValue(nodes).entries());\n\n if (!withMdx) {\n const children: MdxJsxFlowElement[] = tabs.map(([name, codes]) => {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tab',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: codes,\n };\n });\n\n if (!withParent) return createFragment(children);\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tabs',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'items',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: tabs.map(([name]) => name).join(', '),\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n comments: [],\n body: [\n {\n type: 'ExpressionStatement',\n expression: {\n type: 'ArrayExpression',\n elements: tabs.map(([name]) => ({\n type: 'Literal',\n value: name,\n })),\n },\n },\n ],\n },\n },\n },\n },\n ],\n children,\n };\n }\n\n const children: MdxJsxFlowElement[] = [\n {\n type: 'mdxJsxFlowElement',\n name: 'TabsList',\n attributes: [],\n children: tabs.map(([name]) => ({\n type: 'mdxJsxFlowElement',\n name: 'TabsTrigger',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: [mdxToAst(processor, name) as unknown as BlockContent],\n })),\n },\n ...tabs.map(\n ([name, codes]) =>\n ({\n type: 'mdxJsxFlowElement',\n name: 'TabsContent',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: codes,\n }) as MdxJsxFlowElement,\n ),\n ];\n\n if (!withParent) return createFragment(children);\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tabs',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'defaultValue',\n value: tabs[0][0],\n },\n ],\n children,\n };\n },\n};\n\nconst CodeBlockTabs = {\n convert(\n processor: Processor,\n nodes: Code[],\n withMdx = false,\n withParent = true,\n ): MdxJsxFlowElement {\n const tabs = Array.from(processTabValue(nodes).entries());\n\n const node = generateCodeBlockTabs({\n defaultValue: tabs[0][0],\n triggers: tabs.map(([name]) => ({\n value: name,\n children: [\n withMdx\n ? (mdxToAst(processor, name) as unknown as BlockContent)\n : {\n type: 'text',\n value: name,\n },\n ],\n })),\n tabs: tabs.map(([name, codes]) => ({\n value: name,\n children: codes,\n })),\n });\n\n if (!withParent) return createFragment(node.children);\n return node;\n },\n};\n\nconst Types = {\n CodeBlockTabs,\n Tabs,\n};\n\nexport function remarkCodeTab(\n this: Processor,\n options: RemarkCodeTabOptions = {},\n): Transformer<Root, Root> {\n const { parseMdx = false, Tabs = 'CodeBlockTabs' } = options;\n\n return (tree) => {\n const ignored = new WeakSet();\n\n visit(tree, (node) => {\n if (!('children' in node) || ignored.has(node)) return 'skip';\n let localTabs: TabType = Tabs;\n let localParseMdx = parseMdx;\n let withParent = true;\n\n if (node.type === 'mdxJsxFlowElement' && node.name && node.name in Types) {\n withParent = false;\n localTabs = node.name as TabType;\n\n // for `Tabs` in simple mode, it doesn't support MDX tab names\n if (node.name === 'Tabs' && localParseMdx) {\n localParseMdx = node.attributes.every(\n (attribute) => attribute.type !== 'mdxJsxAttribute' || attribute.name !== 'items',\n );\n }\n }\n\n let start = -1;\n let end = 0;\n const close = () => {\n if (start === -1 || start === end) return;\n const replacement = Types[localTabs].convert(\n this,\n node.children.slice(start, end) as Code[],\n localParseMdx,\n withParent,\n );\n\n ignored.add(replacement);\n node.children.splice(start, end - start, replacement);\n end = start;\n start = -1;\n };\n\n for (; end < node.children.length; end++) {\n const child = node.children[end];\n if (child.type !== 'code' || !child.meta) {\n close();\n continue;\n }\n\n const meta = parseCodeBlockAttributes(child.meta, ['tab']);\n if (!meta.attributes.tab) {\n close();\n continue;\n }\n\n if (start === -1) start = end;\n child.meta = meta.rest;\n child.data ??= {};\n child.data.tab = meta.attributes.tab;\n }\n\n close();\n });\n };\n}\n\nfunction processTabValue(nodes: Code[]) {\n const out = new Map<string, Code[]>();\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const name = node.data?.tab ?? `Tab ${i + 1}`;\n const li = out.get(name) ?? [];\n li.push(node);\n out.set(name, li);\n }\n return out;\n}\n\n/**\n * MDX tab name to tab trigger node children\n */\nfunction mdxToAst(processor: Processor, name: string) {\n const node = processor.parse(name) as Root;\n\n if (node.type === 'root') {\n node.children = node.children.flatMap((child) => {\n if (child.type === 'paragraph') return child.children;\n\n return child;\n });\n }\n\n return node;\n}\n\nfunction createFragment(children: (BlockContent | DefinitionContent)[]): MdxJsxFlowElement {\n return {\n type: 'mdxJsxFlowElement',\n name: null,\n attributes: [],\n children,\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-directive-admonition.js","names":["attributes: MdxJsxAttribute[]","titleNodes: PhrasingContent[]","descriptionNodes: (BlockContent | DefinitionContent)[]","children: MdxJsxFlowElement[]"],"sources":["../../src/mdx-plugins/remark-directive-admonition.ts"],"sourcesContent":["import type { BlockContent, DefinitionContent, PhrasingContent, Root } from 'mdast';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\n\nexport interface RemarkDirectiveAdmonitionOptions {\n /**\n * the tag names of Callout component.\n */\n tags?: {\n CalloutContainer?: string;\n CalloutTitle?: string;\n CalloutDescription?: string;\n };\n\n /**\n * All supported admonition types and their linked Callout type.\n *\n * When specified, all defaults will be cleared.\n */\n types?: Record<string, string>;\n}\n\n/**\n * Remark Plugin to support Admonition syntax in Docusaurus, useful for migrating from Docusaurus.\n *\n * Requires [`remark-directive`](https://github.com/remarkjs/remark-directive) to be configured.\n */\nexport function remarkDirectiveAdmonition({\n tags: {\n CalloutContainer = 'CalloutContainer',\n CalloutTitle = 'CalloutTitle',\n CalloutDescription = 'CalloutDescription',\n } = {},\n types = {\n note: 'info',\n tip: 'info',\n info: 'info',\n warn: 'warning',\n warning: 'warning',\n danger: 'error',\n success: 'success',\n },\n}: RemarkDirectiveAdmonitionOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, 'containerDirective', (node) => {\n if (!(node.name in types)) return;\n\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'type',\n value: types[node.name],\n },\n ];\n\n for (const [k, v] of Object.entries(node.attributes ?? {})) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: k,\n value: v,\n });\n }\n\n const titleNodes: PhrasingContent[] = [];\n const descriptionNodes: (BlockContent | DefinitionContent)[] = [];\n\n for (const item of node.children) {\n if (item.type === 'paragraph' && item.data?.directiveLabel) {\n titleNodes.push(...item.children);\n } else {\n descriptionNodes.push(item);\n }\n }\n\n const children: MdxJsxFlowElement[] = [];\n\n if (titleNodes.length > 0) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: CalloutTitle,\n attributes: [],\n children: titleNodes as BlockContent[],\n });\n }\n\n if (descriptionNodes.length > 0) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: CalloutDescription,\n attributes: [],\n children: descriptionNodes,\n });\n }\n\n Object.assign(node, {\n type: 'mdxJsxFlowElement',\n attributes,\n name: CalloutContainer,\n children,\n } satisfies MdxJsxFlowElement);\n });\n };\n}\n"],"mappings":";;;;;;;;AA4BA,SAAgB,0BAA0B,EACxC,MAAM,EACJ,mBAAmB,oBACnB,eAAe,gBACf,qBAAqB,yBACnB,EAAE,EACN,QAAQ;CACN,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,SAAS;CACT,QAAQ;CACR,SAAS;CACV,KACmC,EAAE,EAA2B;AACjE,SAAQ,SAAS;AACf,QAAM,MAAM,uBAAuB,SAAS;AAC1C,OAAI,EAAE,KAAK,QAAQ,OAAQ;GAE3B,MAAMA,aAAgC,CACpC;IACE,MAAM;IACN,MAAM;IACN,OAAO,MAAM,KAAK;IACnB,CACF;AAED,QAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,cAAc,EAAE,CAAC,CACxD,YAAW,KAAK;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACR,CAAC;GAGJ,MAAMC,aAAgC,EAAE;GACxC,MAAMC,mBAAyD,EAAE;AAEjE,QAAK,MAAM,QAAQ,KAAK,SACtB,KAAI,KAAK,SAAS,eAAe,KAAK,MAAM,eAC1C,YAAW,KAAK,GAAG,KAAK,SAAS;OAEjC,kBAAiB,KAAK,KAAK;GAI/B,MAAMC,WAAgC,EAAE;AAExC,OAAI,WAAW,SAAS,EACtB,UAAS,KAAK;IACZ,MAAM;IACN,MAAM;IACN,YAAY,EAAE;IACd,UAAU;IACX,CAAC;AAGJ,OAAI,iBAAiB,SAAS,EAC5B,UAAS,KAAK;IACZ,MAAM;IACN,MAAM;IACN,YAAY,EAAE;IACd,UAAU;IACX,CAAC;AAGJ,UAAO,OAAO,MAAM;IAClB,MAAM;IACN;IACA,MAAM;IACN;IACD,CAA6B;IAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-feedback-block.js","names":["wrapper: MdxJsxFlowElement"],"sources":["../../src/mdx-plugins/remark-feedback-block.ts"],"sourcesContent":["import type { Transformer } from 'unified';\nimport type { BlockContent, Root, RootContent } from 'mdast';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { visit } from 'unist-util-visit';\nimport { createHash } from 'node:crypto';\nimport { flattenNode } from './mdast-utils';\n\nexport interface RemarkFeedbackBlockOptions {\n /**\n * generate block ID, default to using MD5.\n */\n generateHash?: (ctx: { body: string }) => string;\n\n /**\n * @defaultValue FeedbackBlock\n */\n tagName?: string;\n\n /**\n * determine how the node should be resolved into a feedback block.\n *\n * scan paragraph, list, and image nodes by default.\n *\n * @returns\n * - `true`: convert the node into a feedback block.\n * - `false`: skip the current node and look into its children.\n * - `skip`: skip the current node and its children.\n */\n resolve?: (node: RootContent) => boolean | 'skip';\n\n /**\n * generate & include the block body to `<FeedbackBlock body=\"...\" />` as string\n *\n * @defaultValue true\n */\n generateBody?: boolean;\n}\n\nexport interface FeedbackBlockProps {\n id: string;\n /** the text body of block, only exists when `generateBody` is enabled. */\n body?: string;\n}\n\n/**\n * Generate MDX `<FeedbackBlock />` elements with an unique `id` for every block-like element.\n *\n * Note: the uniqueness is only guaranteed per MDX file/page.\n */\nexport function remarkFeedbackBlock({\n generateHash = ({ body }) => createHash('md5').update(body).digest('hex').substring(0, 16),\n tagName = 'FeedbackBlock',\n resolve = (node) => node.type === 'paragraph' || node.type === 'image' || node.type === 'list',\n generateBody = true,\n}: RemarkFeedbackBlockOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n const counts = new Map<string, number>();\n\n visit(tree, (node, index, parent) => {\n if (node.type === 'root') return;\n const resolved = resolve(node);\n if (resolved === false) return;\n if (resolved === 'skip') return 'skip';\n\n const text = flattenNode(node).trim();\n if (text.length === 0 || !parent || typeof index !== 'number') return;\n let id = generateHash({ body: text });\n const count = counts.get(id) ?? 0;\n if (count > 0) id = `${id}-${count}`;\n counts.set(id, count + 1);\n\n const wrapper: MdxJsxFlowElement = {\n type: 'mdxJsxFlowElement',\n name: tagName,\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'id',\n value: id,\n },\n ],\n children: [node as BlockContent],\n };\n if (generateBody)\n wrapper.attributes.push({\n type: 'mdxJsxAttribute',\n name: 'body',\n value: text,\n });\n\n parent.children[index] = wrapper;\n return 'skip';\n });\n };\n}\n"],"mappings":";;;;;;;;;;AAiDA,SAAgB,oBAAoB,EAClC,gBAAgB,EAAE,WAAW,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG,EAC1F,UAAU,iBACV,WAAW,SAAS,KAAK,SAAS,eAAe,KAAK,SAAS,WAAW,KAAK,SAAS,QACxF,eAAe,SACe,EAAE,EAA2B;AAC3D,SAAQ,SAAS;EACf,MAAM,yBAAS,IAAI,KAAqB;AAExC,QAAM,OAAO,MAAM,OAAO,WAAW;AACnC,OAAI,KAAK,SAAS,OAAQ;GAC1B,MAAM,WAAW,QAAQ,KAAK;AAC9B,OAAI,aAAa,MAAO;AACxB,OAAI,aAAa,OAAQ,QAAO;GAEhC,MAAM,OAAO,YAAY,KAAK,CAAC,MAAM;AACrC,OAAI,KAAK,WAAW,KAAK,CAAC,UAAU,OAAO,UAAU,SAAU;GAC/D,IAAI,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;GACrC,MAAM,QAAQ,OAAO,IAAI,GAAG,IAAI;AAChC,OAAI,QAAQ,EAAG,MAAK,GAAG,GAAG,GAAG;AAC7B,UAAO,IAAI,IAAI,QAAQ,EAAE;GAEzB,MAAMA,UAA6B;IACjC,MAAM;IACN,MAAM;IACN,YAAY,CACV;KACE,MAAM;KACN,MAAM;KACN,OAAO;KACR,CACF;IACD,UAAU,CAAC,KAAqB;IACjC;AACD,OAAI,aACF,SAAQ,WAAW,KAAK;IACtB,MAAM;IACN,MAAM;IACN,OAAO;IACR,CAAC;AAEJ,UAAO,SAAS,SAAS;AACzB,UAAO;IACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-heading.js","names":["toc: TOCItemType[]","flattened: string | null"],"sources":["../../src/mdx-plugins/remark-heading.ts"],"sourcesContent":["import Slugger from 'github-slugger';\nimport type { Heading, Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { TOCItemType } from '@/toc';\nimport { flattenNode } from '@/mdx-plugins/mdast-utils';\n\nconst slugger = new Slugger();\n\ndeclare module 'mdast' {\n export interface HeadingData extends Data {\n hProperties?: {\n id?: string;\n };\n }\n}\n\nconst regex = /\\s*\\[#(?<slug>[^]+?)]\\s*$/;\n\nexport interface RemarkHeadingOptions {\n slug?: (root: Root, heading: Heading, text: string) => string;\n\n /**\n * Allow custom headings ids\n *\n * @defaultValue true\n */\n customId?: boolean;\n\n /**\n * Attach an array of `TOCItemType` to `file.data.toc`\n *\n * @defaultValue true\n */\n generateToc?: boolean;\n}\n\n/**\n * Add heading ids and extract TOC\n */\nexport function remarkHeading({\n slug: defaultSlug,\n customId = true,\n generateToc = true,\n}: RemarkHeadingOptions = {}): Transformer<Root, Root> {\n return (root, file) => {\n const toc: TOCItemType[] = [];\n slugger.reset();\n\n visit(root, 'heading', (heading) => {\n heading.data ||= {};\n heading.data.hProperties ||= {};\n const props = heading.data.hProperties;\n\n const lastNode = heading.children.at(-1);\n if (lastNode?.type === 'text' && customId) {\n const match = regex.exec(lastNode.value);\n\n if (match?.[1]) {\n props.id = match[1];\n lastNode.value = lastNode.value.slice(0, match.index);\n }\n }\n\n let flattened: string | null = null;\n if (!props.id) {\n flattened ??= flattenNode(heading);\n\n props.id = defaultSlug ? defaultSlug(root, heading, flattened) : slugger.slug(flattened);\n }\n\n if (generateToc) {\n toc.push({\n title: flattened ?? flattenNode(heading),\n url: `#${props.id}`,\n depth: heading.depth,\n });\n }\n\n return 'skip';\n });\n\n if (generateToc) file.data.toc = toc;\n };\n}\n"],"mappings":";;;;;AAOA,MAAM,UAAU,IAAI,SAAS;AAU7B,MAAM,QAAQ;;;;AAuBd,SAAgB,cAAc,EAC5B,MAAM,aACN,WAAW,MACX,cAAc,SACU,EAAE,EAA2B;AACrD,SAAQ,MAAM,SAAS;EACrB,MAAMA,MAAqB,EAAE;AAC7B,UAAQ,OAAO;AAEf,QAAM,MAAM,YAAY,YAAY;AAClC,WAAQ,SAAS,EAAE;AACnB,WAAQ,KAAK,gBAAgB,EAAE;GAC/B,MAAM,QAAQ,QAAQ,KAAK;GAE3B,MAAM,WAAW,QAAQ,SAAS,GAAG,GAAG;AACxC,OAAI,UAAU,SAAS,UAAU,UAAU;IACzC,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM;AAExC,QAAI,QAAQ,IAAI;AACd,WAAM,KAAK,MAAM;AACjB,cAAS,QAAQ,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM;;;GAIzD,IAAIC,YAA2B;AAC/B,OAAI,CAAC,MAAM,IAAI;AACb,kBAAc,YAAY,QAAQ;AAElC,UAAM,KAAK,cAAc,YAAY,MAAM,SAAS,UAAU,GAAG,QAAQ,KAAK,UAAU;;AAG1F,OAAI,YACF,KAAI,KAAK;IACP,OAAO,aAAa,YAAY,QAAQ;IACxC,KAAK,IAAI,MAAM;IACf,OAAO,QAAQ;IAChB,CAAC;AAGJ,UAAO;IACP;AAEF,MAAI,YAAa,MAAK,KAAK,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-image.js","names":["path","importsToInject: { variableName: string; importPath: string }[]","promises: Promise<void>[]","attributes: MdxJsxAttribute[]","out: MdxJsxFlowElement"],"sources":["../../src/mdx-plugins/remark-image.ts"],"sourcesContent":["import * as path from 'node:path';\nimport type { Image, Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { MdxjsEsm } from 'mdast-util-mdxjs-esm';\nimport type { ISizeCalculationResult } from 'image-size/types/interface';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { fileURLToPath } from 'node:url';\n\nconst VALID_BLUR_EXT = ['.jpeg', '.png', '.webp', '.avif', '.jpg'];\nconst EXTERNAL_URL_REGEX = /^https?:\\/\\//;\n\ntype ExternalImageOptions =\n | {\n /**\n * timeout for fetching remote images (in milliseconds)\n */\n timeout?: number;\n }\n | boolean;\n\nexport interface RemarkImageOptions {\n /**\n * Directory or base URL to resolve absolute image paths\n */\n publicDir?: string;\n\n /**\n * Preferred placeholder type, only available with `useImport` + local images.\n *\n * @defaultValue 'blur'\n */\n placeholder?: 'blur' | 'none';\n\n /**\n * Define how to handle errors when fetching image size.\n *\n * - `error` (default): throw an error.\n * - `ignore`: do absolutely nothing (Next.js Image component may complain).\n * - `hide`: remove that image element.\n *\n * @defaultValue 'error'\n */\n onError?: 'error' | 'hide' | 'ignore' | ((error: Error) => void);\n\n /**\n * Import images in the file, and let bundlers handle it.\n *\n * ```tsx\n * import MyImage from \"./public/img.png\";\n *\n * <img src={MyImage} />\n * ```\n *\n * When disabled, `placeholder` will be ignored.\n *\n * @defaultValue true\n */\n useImport?: boolean;\n\n /**\n * Fetch image size of external URLs\n *\n * @defaultValue true\n */\n external?: ExternalImageOptions;\n}\n\ntype Source =\n | {\n type: 'url';\n url: URL;\n }\n | {\n type: 'file';\n file: string;\n };\n\n/**\n * Turn images into Next.js Image compatible usage.\n */\nexport function remarkImage({\n placeholder = 'blur',\n external = true,\n useImport = true,\n onError = 'error',\n publicDir = path.join(process.cwd(), 'public'),\n}: RemarkImageOptions = {}): Transformer<Root, Root> {\n return async (tree, file) => {\n const importsToInject: { variableName: string; importPath: string }[] = [];\n const promises: Promise<void>[] = [];\n\n async function onImage(src: Source, node: Image): Promise<MdxJsxFlowElement | undefined> {\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'alt',\n value: node.alt ?? 'image',\n },\n ];\n\n if (node.title) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'title',\n value: node.title,\n });\n }\n\n if (src.type === 'file' && useImport) {\n // Unique variable name for the given static image URL\n const variableName = `__img${importsToInject.length}`;\n const hasBlur =\n placeholder === 'blur' && VALID_BLUR_EXT.some((ext) => src.file.endsWith(ext));\n\n if (!file.dirname) {\n throw new Error(\n 'When `useImport` is enabled, you must specify `dirname` in the VFile passed to compiler.',\n );\n }\n\n importsToInject.push({\n variableName,\n importPath: getImportPath(src.file, file.dirname),\n });\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'src',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: variableName,\n data: {\n estree: {\n body: [\n {\n type: 'ExpressionStatement',\n expression: { type: 'Identifier', name: variableName },\n },\n ],\n type: 'Program',\n sourceType: 'script',\n },\n },\n },\n });\n\n const out: MdxJsxFlowElement = {\n children: [],\n type: 'mdxJsxFlowElement',\n name: 'img',\n attributes,\n };\n\n if (hasBlur) {\n out.attributes.push({\n type: 'mdxJsxAttribute',\n name: 'placeholder',\n value: 'blur',\n });\n }\n\n return out;\n }\n\n const size = await getImageSize(src, external).catch((e) => {\n throw new Error(\n `[Remark Image] Failed obtain image size for ${node.url} (public directory configured as ${publicDir})`,\n {\n cause: e,\n },\n );\n });\n\n if (!size) return;\n\n attributes.push(\n {\n type: 'mdxJsxAttribute',\n name: 'src',\n // `src` doesn't support file paths, we can use `node.url` for files and let the underlying framework handle it\n value: src.type === 'url' ? src.url.toString() : node.url,\n },\n {\n type: 'mdxJsxAttribute',\n name: 'width',\n value: size.width.toString(),\n },\n {\n type: 'mdxJsxAttribute',\n name: 'height',\n value: size.height.toString(),\n },\n );\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'img',\n attributes,\n children: [],\n };\n }\n\n visit(tree, 'image', (node) => {\n const src = parseSrc(decodeURI(node.url), publicDir, file.dirname);\n if (!src) return;\n\n const task = onImage(src, node)\n .catch((e) => {\n // ignore SVG as it is not always needed\n if (onError === 'ignore' || node.url.endsWith('.svg')) {\n return;\n }\n\n if (onError === 'hide') {\n return {\n type: 'mdxJsxFlowElement',\n name: null,\n attributes: [],\n children: [],\n } satisfies MdxJsxFlowElement;\n }\n\n if (onError === 'error') throw e;\n onError(e);\n })\n .then((res) => {\n if (res) Object.assign(node, res);\n });\n\n promises.push(task);\n });\n\n await Promise.all(promises);\n if (importsToInject.length === 0) return;\n\n const imports = importsToInject.map(\n ({ variableName, importPath }) =>\n ({\n type: 'mdxjsEsm',\n data: {\n estree: {\n body: [\n {\n type: 'ImportDeclaration',\n source: { type: 'Literal', value: importPath },\n specifiers: [\n {\n type: 'ImportDefaultSpecifier',\n local: { type: 'Identifier', name: variableName },\n },\n ],\n },\n ],\n },\n },\n }) as MdxjsEsm,\n );\n\n tree.children.unshift(...imports);\n };\n}\n\nfunction getImportPath(file: string, dir: string): string {\n const relative = path.relative(dir, file).replaceAll(path.sep, '/');\n\n return relative.startsWith('../') ? relative : `./${relative}`;\n}\n\n/**\n * @param src - src href\n * @param publicDir - dir/url to resolve absolute paths\n * @param dir - dir to resolve relative paths\n */\nfunction parseSrc(src: string, publicDir: string, dir?: string): Source | undefined {\n if (src.startsWith('file:///')) return { type: 'file', file: fileURLToPath(src) };\n\n if (EXTERNAL_URL_REGEX.test(src)) {\n return {\n type: 'url',\n url: new URL(src),\n };\n }\n\n if (src.startsWith('/')) {\n if (EXTERNAL_URL_REGEX.test(publicDir)) {\n const url = new URL(publicDir);\n const segs = [...url.pathname.split('/'), ...src.split('/')].filter((v) => v.length > 0);\n\n url.pathname = `/${segs.join('/')}`;\n return { type: 'url', url };\n }\n\n return {\n type: 'file',\n file: path.join(publicDir, src),\n };\n }\n\n if (!dir) {\n console.warn(\n `[Remark Image] found relative path ${src} but missing 'dirname' in VFile, this image will be skipped for now.`,\n );\n return;\n }\n\n return {\n type: 'file',\n file: path.join(dir, src),\n };\n}\n\nasync function getImageSize(\n src: Source,\n onExternal: ExternalImageOptions,\n): Promise<ISizeCalculationResult | undefined> {\n if (src.type === 'file') {\n const { imageSizeFromFile } = await import('image-size/fromFile');\n return imageSizeFromFile(src.file);\n }\n if (onExternal === false) return;\n\n const { timeout } = typeof onExternal === 'object' ? onExternal : {};\n const res = await fetch(src.url, {\n signal: typeof timeout === 'number' ? AbortSignal.timeout(timeout) : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `[Remark Image] Failed to fetch ${src.url} (${res.status}): ${await res.text()}`,\n );\n }\n\n const { imageSize } = await import('image-size');\n return imageSize(new Uint8Array(await res.arrayBuffer()));\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-mdx-files.js","names":["match: RegExpMatchArray | null","node: Node","parent: Node | undefined","attributes: MdxJsxAttribute[]","queue: Promise<void>[]","parsed: AutoFilesProps","root: FolderNode","fileNode: FileNode"],"sources":["../../src/mdx-plugins/remark-mdx-files.ts"],"sourcesContent":["import type { Root } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport type { VFile } from 'vfile';\nimport path from 'node:path';\n\nexport interface FileNode {\n depth: number;\n type: 'file';\n name: string;\n}\n\nexport interface FolderNode {\n depth: number;\n type: 'folder';\n name: string;\n children: Node[];\n}\n\nexport interface ToMdxOptions {\n defaultOpenAll: boolean;\n}\n\ntype Node = FileNode | FolderNode;\n\nexport interface RemarkMdxFilesOptions {\n /**\n * @defaultValue files\n */\n lang?: string;\n toMdx?: (node: Node, options: ToMdxOptions) => MdxJsxFlowElement;\n}\n\ninterface AutoFilesProps extends Partial<ToMdxOptions> {\n dir?: string;\n patterns?: string[];\n}\n\nfunction parseFileTree(code: string) {\n const lines = code.split(/\\r?\\n/);\n const stack = new Map<number, Node>();\n\n for (const line of lines) {\n let depth = 0;\n let name = line;\n let match: RegExpMatchArray | null;\n\n while ((match = /(?:├──|│|└──)\\s*/.exec(name))) {\n name = name.slice(match[0].length);\n depth++;\n }\n\n if (!name) continue;\n const node: Node = name.endsWith('/')\n ? { type: 'folder', name, children: [], depth }\n : { type: 'file', name, depth };\n\n let parent: Node | undefined;\n for (let i = depth - 1; i >= 0 && !parent; i--) {\n parent = stack.get(i);\n }\n\n stack.set(depth, node);\n if (!parent) continue;\n if (parent.type === 'file') {\n Object.assign(parent, {\n type: 'folder',\n children: [],\n });\n }\n\n (parent as FolderNode).children.push(node);\n }\n\n return stack.get(0);\n}\n\nfunction defaultToMDX(node: Node, options: ToMdxOptions, depth = 0): MdxJsxFlowElement {\n if (depth === 0) {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Files',\n attributes: [],\n children: [defaultToMDX(node, options, depth + 1)],\n };\n }\n\n const attributes: MdxJsxAttribute[] = [\n { type: 'mdxJsxAttribute', name: 'name', value: node.name },\n ];\n\n if (node.type === 'file') {\n return {\n type: 'mdxJsxFlowElement',\n attributes,\n children: [],\n name: 'File',\n };\n }\n\n if (options.defaultOpenAll) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'defaultOpen',\n value: null,\n });\n }\n\n return {\n type: 'mdxJsxFlowElement',\n attributes,\n name: 'Folder',\n children: node.children.map((item) => defaultToMDX(item, options, depth + 1)),\n };\n}\n\n/**\n *\n * **Files CodeBlock:**\n *\n * Convert codeblocks with `files` as lang, like:\n *\n * ```files\n * project\n * ├── src\n * │ ├── index.js\n * │ └── utils\n * │ └── helper.js\n * ├── package.json\n * ```\n *\n * into MDX `<Files />` component.\n *\n * **Auto Files:**\n *\n * Generates MDX `<Files />` component from file system.\n *\n * ```mdx\n * <auto-files dir=\"scripts\" pattern=\"my-dir/*\" defaultOpenAll />\n * ```\n */\nexport function remarkMdxFiles(options: RemarkMdxFilesOptions = {}): Transformer<Root, Root> {\n const { lang = 'files', toMdx = defaultToMDX } = options;\n\n async function autoFiles(\n file: VFile,\n node: MdxJsxFlowElement,\n { patterns, dir, defaultOpenAll = false }: AutoFilesProps,\n ) {\n const { glob } = await import('tinyglobby');\n if (!patterns) {\n file.fail('Missing `pattern` prop in <auto-files>', {\n place: node.position,\n });\n }\n\n const baseDir = file.dirname ?? file.cwd;\n const cwd = dir ? path.join(baseDir, dir) : baseDir;\n const files = await glob(patterns, { cwd });\n Object.assign(node, toMdx(buildFileTreeFromGlob(cwd, files), { defaultOpenAll }));\n }\n\n return async (tree, file) => {\n const queue: Promise<void>[] = [];\n\n visit(tree, ['code', 'mdxJsxFlowElement'] as const, (node) => {\n if (node.type === 'code') {\n if (node.lang !== lang || !node.value) return;\n\n const fileTree = parseFileTree(node.value);\n if (!fileTree) return;\n\n Object.assign(\n node,\n toMdx(fileTree, {\n defaultOpenAll: true,\n }),\n );\n return 'skip';\n }\n\n if (node.type === 'mdxJsxFlowElement') {\n if (node.name !== 'auto-files') return;\n const parsed: AutoFilesProps = {};\n for (const attr of node.attributes) {\n if (attr.type !== 'mdxJsxAttribute') continue;\n const { name, value } = attr;\n\n switch (name) {\n case 'dir':\n if (typeof value === 'string') parsed.dir = value;\n break;\n case 'pattern':\n if (typeof value === 'string') {\n parsed.patterns ??= [];\n parsed.patterns.push(value);\n }\n break;\n case 'defaultOpenAll':\n parsed.defaultOpenAll = true;\n break;\n }\n }\n\n queue.push(autoFiles(file, node, parsed));\n return 'skip';\n }\n });\n\n await Promise.all(queue);\n };\n}\n\nfunction buildFileTreeFromGlob(dir: string, files: string[]): Node {\n const nodeMap = new Map<string, FolderNode>();\n const root: FolderNode = {\n depth: 0,\n type: 'folder',\n name: path.basename(dir),\n children: [],\n };\n nodeMap.set('', root);\n\n for (const file of files) {\n const parts = path\n .normalize(file)\n .split(path.sep)\n .filter((part) => part.length > 0);\n let currentPath = '';\n let current = root;\n\n for (let i = 0; i < parts.length; i++) {\n const name = parts[i];\n const nextPath = path.join(currentPath, name);\n\n if (i === parts.length - 1) {\n // Add file node.\n const fileNode: FileNode = { depth: i + 1, type: 'file', name };\n current.children.push(fileNode);\n } else {\n // Add or retrieve folder node using the map.\n let folder = nodeMap.get(nextPath);\n\n if (!folder) {\n folder = { depth: i + 1, type: 'folder', name, children: [] };\n nodeMap.set(nextPath, folder);\n current.children.push(folder);\n }\n\n current = folder;\n currentPath = nextPath;\n }\n }\n }\n\n return root;\n}\n"],"mappings":";;;;AAuCA,SAAS,cAAc,MAAc;CACnC,MAAM,QAAQ,KAAK,MAAM,QAAQ;CACjC,MAAM,wBAAQ,IAAI,KAAmB;AAErC,MAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,QAAQ;EACZ,IAAI,OAAO;EACX,IAAIA;AAEJ,SAAQ,QAAQ,mBAAmB,KAAK,KAAK,EAAG;AAC9C,UAAO,KAAK,MAAM,MAAM,GAAG,OAAO;AAClC;;AAGF,MAAI,CAAC,KAAM;EACX,MAAMC,OAAa,KAAK,SAAS,IAAI,GACjC;GAAE,MAAM;GAAU;GAAM,UAAU,EAAE;GAAE;GAAO,GAC7C;GAAE,MAAM;GAAQ;GAAM;GAAO;EAEjC,IAAIC;AACJ,OAAK,IAAI,IAAI,QAAQ,GAAG,KAAK,KAAK,CAAC,QAAQ,IACzC,UAAS,MAAM,IAAI,EAAE;AAGvB,QAAM,IAAI,OAAO,KAAK;AACtB,MAAI,CAAC,OAAQ;AACb,MAAI,OAAO,SAAS,OAClB,QAAO,OAAO,QAAQ;GACpB,MAAM;GACN,UAAU,EAAE;GACb,CAAC;AAGJ,EAAC,OAAsB,SAAS,KAAK,KAAK;;AAG5C,QAAO,MAAM,IAAI,EAAE;;AAGrB,SAAS,aAAa,MAAY,SAAuB,QAAQ,GAAsB;AACrF,KAAI,UAAU,EACZ,QAAO;EACL,MAAM;EACN,MAAM;EACN,YAAY,EAAE;EACd,UAAU,CAAC,aAAa,MAAM,SAAS,QAAQ,EAAE,CAAC;EACnD;CAGH,MAAMC,aAAgC,CACpC;EAAE,MAAM;EAAmB,MAAM;EAAQ,OAAO,KAAK;EAAM,CAC5D;AAED,KAAI,KAAK,SAAS,OAChB,QAAO;EACL,MAAM;EACN;EACA,UAAU,EAAE;EACZ,MAAM;EACP;AAGH,KAAI,QAAQ,eACV,YAAW,KAAK;EACd,MAAM;EACN,MAAM;EACN,OAAO;EACR,CAAC;AAGJ,QAAO;EACL,MAAM;EACN;EACA,MAAM;EACN,UAAU,KAAK,SAAS,KAAK,SAAS,aAAa,MAAM,SAAS,QAAQ,EAAE,CAAC;EAC9E;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BH,SAAgB,eAAe,UAAiC,EAAE,EAA2B;CAC3F,MAAM,EAAE,OAAO,SAAS,QAAQ,iBAAiB;CAEjD,eAAe,UACb,MACA,MACA,EAAE,UAAU,KAAK,iBAAiB,SAClC;EACA,MAAM,EAAE,SAAS,MAAM,OAAO;AAC9B,MAAI,CAAC,SACH,MAAK,KAAK,0CAA0C,EAClD,OAAO,KAAK,UACb,CAAC;EAGJ,MAAM,UAAU,KAAK,WAAW,KAAK;EACrC,MAAM,MAAM,MAAM,KAAK,KAAK,SAAS,IAAI,GAAG;EAC5C,MAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC;AAC3C,SAAO,OAAO,MAAM,MAAM,sBAAsB,KAAK,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;;AAGnF,QAAO,OAAO,MAAM,SAAS;EAC3B,MAAMC,QAAyB,EAAE;AAEjC,QAAM,MAAM,CAAC,QAAQ,oBAAoB,GAAY,SAAS;AAC5D,OAAI,KAAK,SAAS,QAAQ;AACxB,QAAI,KAAK,SAAS,QAAQ,CAAC,KAAK,MAAO;IAEvC,MAAM,WAAW,cAAc,KAAK,MAAM;AAC1C,QAAI,CAAC,SAAU;AAEf,WAAO,OACL,MACA,MAAM,UAAU,EACd,gBAAgB,MACjB,CAAC,CACH;AACD,WAAO;;AAGT,OAAI,KAAK,SAAS,qBAAqB;AACrC,QAAI,KAAK,SAAS,aAAc;IAChC,MAAMC,SAAyB,EAAE;AACjC,SAAK,MAAM,QAAQ,KAAK,YAAY;AAClC,SAAI,KAAK,SAAS,kBAAmB;KACrC,MAAM,EAAE,MAAM,UAAU;AAExB,aAAQ,MAAR;MACE,KAAK;AACH,WAAI,OAAO,UAAU,SAAU,QAAO,MAAM;AAC5C;MACF,KAAK;AACH,WAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,aAAa,EAAE;AACtB,eAAO,SAAS,KAAK,MAAM;;AAE7B;MACF,KAAK;AACH,cAAO,iBAAiB;AACxB;;;AAIN,UAAM,KAAK,UAAU,MAAM,MAAM,OAAO,CAAC;AACzC,WAAO;;IAET;AAEF,QAAM,QAAQ,IAAI,MAAM;;;AAI5B,SAAS,sBAAsB,KAAa,OAAuB;CACjE,MAAM,0BAAU,IAAI,KAAyB;CAC7C,MAAMC,OAAmB;EACvB,OAAO;EACP,MAAM;EACN,MAAM,KAAK,SAAS,IAAI;EACxB,UAAU,EAAE;EACb;AACD,SAAQ,IAAI,IAAI,KAAK;AAErB,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,KACX,UAAU,KAAK,CACf,MAAM,KAAK,IAAI,CACf,QAAQ,SAAS,KAAK,SAAS,EAAE;EACpC,IAAI,cAAc;EAClB,IAAI,UAAU;AAEd,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,MAAM,OAAO,MAAM;GACnB,MAAM,WAAW,KAAK,KAAK,aAAa,KAAK;AAE7C,OAAI,MAAM,MAAM,SAAS,GAAG;IAE1B,MAAMC,WAAqB;KAAE,OAAO,IAAI;KAAG,MAAM;KAAQ;KAAM;AAC/D,YAAQ,SAAS,KAAK,SAAS;UAC1B;IAEL,IAAI,SAAS,QAAQ,IAAI,SAAS;AAElC,QAAI,CAAC,QAAQ;AACX,cAAS;MAAE,OAAO,IAAI;MAAG,MAAM;MAAU;MAAM,UAAU,EAAE;MAAE;AAC7D,aAAQ,IAAI,UAAU,OAAO;AAC7B,aAAQ,SAAS,KAAK,OAAO;;AAG/B,cAAU;AACV,kBAAc;;;;AAKpB,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-mdx-mermaid.js","names":[],"sources":["../../src/mdx-plugins/remark-mdx-mermaid.ts"],"sourcesContent":["import { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { Root } from 'mdast';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\n\nfunction toMDX(code: string): MdxJsxFlowElement {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Mermaid',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'chart',\n value: code.trim(),\n },\n ],\n children: [],\n };\n}\n\nexport interface RemarkMdxMermaidOptions {\n /**\n * @defaultValue mermaid\n */\n lang?: string;\n}\n\n/**\n * Convert `mermaid` codeblocks into `<Mermaid />` MDX component\n */\nexport function remarkMdxMermaid(options: RemarkMdxMermaidOptions = {}): Transformer<Root, Root> {\n const { lang = 'mermaid' } = options;\n\n return (tree) => {\n visit(tree, 'code', (node) => {\n if (node.lang !== lang || !node.value) return;\n\n Object.assign(node, toMDX(node.value));\n });\n };\n}\n"],"mappings":";;;AAKA,SAAS,MAAM,MAAiC;AAC9C,QAAO;EACL,MAAM;EACN,MAAM;EACN,YAAY,CACV;GACE,MAAM;GACN,MAAM;GACN,OAAO,KAAK,MAAM;GACnB,CACF;EACD,UAAU,EAAE;EACb;;;;;AAaH,SAAgB,iBAAiB,UAAmC,EAAE,EAA2B;CAC/F,MAAM,EAAE,OAAO,cAAc;AAE7B,SAAQ,SAAS;AACf,QAAM,MAAM,SAAS,SAAS;AAC5B,OAAI,KAAK,SAAS,QAAQ,CAAC,KAAK,MAAO;AAEvC,UAAO,OAAO,MAAM,MAAM,KAAK,MAAM,CAAC;IACtC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-npm.js","names":["options: CodeBlockTabsOptions"],"sources":["../../src/mdx-plugins/remark-npm.ts"],"sourcesContent":["import type { Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport convert from 'npm-to-yarn';\nimport { type CodeBlockTabsOptions, generateCodeBlockTabs } from '@/mdx-plugins/codeblock-utils';\n\ninterface PackageManager {\n name: string;\n\n /**\n * Default to `name`\n */\n value?: string;\n\n /**\n * Convert from npm to another package manager\n */\n command: (command: string) => string | undefined;\n}\n\nexport interface RemarkNpmOptions {\n /**\n * Persist Tab value (Fumadocs UI only)\n *\n * @defaultValue false\n */\n persist?:\n | {\n id: string;\n }\n | false;\n\n packageManagers?: PackageManager[];\n}\n\nconst aliases = ['npm', 'package-install'];\n\n/**\n * It generates multiple tabs of codeblocks for different package managers from a npm command codeblock.\n */\nexport function remarkNpm({\n persist = false,\n packageManagers = [\n { command: (cmd) => convert(cmd, 'npm'), name: 'npm' },\n { command: (cmd) => convert(cmd, 'pnpm'), name: 'pnpm' },\n { command: (cmd) => convert(cmd, 'yarn'), name: 'yarn' },\n { command: (cmd) => convert(cmd, 'bun'), name: 'bun' },\n ],\n}: RemarkNpmOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, 'code', (node) => {\n if (!node.lang || !aliases.includes(node.lang)) return;\n let code = node.value;\n\n if (node.lang === 'package-install' && !code.startsWith('npm') && !code.startsWith('npx')) {\n code = `npm install ${code}`;\n }\n const options: CodeBlockTabsOptions = {\n persist,\n tabs: [],\n triggers: [],\n };\n\n for (const manager of packageManagers) {\n const value = manager.value ?? manager.name;\n const command = manager.command(code);\n if (!command || command.length === 0) continue;\n\n options.defaultValue ??= value;\n options.triggers.push({\n value,\n children: [{ type: 'text', value: manager.name }],\n });\n options.tabs.push({\n value,\n children: [\n {\n type: 'code',\n lang: 'bash',\n meta: node.meta,\n value: command,\n },\n ],\n });\n }\n\n Object.assign(node, generateCodeBlockTabs(options));\n return 'skip';\n });\n };\n}\n"],"mappings":";;;;;AAmCA,MAAM,UAAU,CAAC,OAAO,kBAAkB;;;;AAK1C,SAAgB,UAAU,EACxB,UAAU,OACV,kBAAkB;CAChB;EAAE,UAAU,QAAQ,QAAQ,KAAK,MAAM;EAAE,MAAM;EAAO;CACtD;EAAE,UAAU,QAAQ,QAAQ,KAAK,OAAO;EAAE,MAAM;EAAQ;CACxD;EAAE,UAAU,QAAQ,QAAQ,KAAK,OAAO;EAAE,MAAM;EAAQ;CACxD;EAAE,UAAU,QAAQ,QAAQ,KAAK,MAAM;EAAE,MAAM;EAAO;CACvD,KACmB,EAAE,EAA2B;AACjD,SAAQ,SAAS;AACf,QAAM,MAAM,SAAS,SAAS;AAC5B,OAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,SAAS,KAAK,KAAK,CAAE;GAChD,IAAI,OAAO,KAAK;AAEhB,OAAI,KAAK,SAAS,qBAAqB,CAAC,KAAK,WAAW,MAAM,IAAI,CAAC,KAAK,WAAW,MAAM,CACvF,QAAO,eAAe;GAExB,MAAMA,UAAgC;IACpC;IACA,MAAM,EAAE;IACR,UAAU,EAAE;IACb;AAED,QAAK,MAAM,WAAW,iBAAiB;IACrC,MAAM,QAAQ,QAAQ,SAAS,QAAQ;IACvC,MAAM,UAAU,QAAQ,QAAQ,KAAK;AACrC,QAAI,CAAC,WAAW,QAAQ,WAAW,EAAG;AAEtC,YAAQ,iBAAiB;AACzB,YAAQ,SAAS,KAAK;KACpB;KACA,UAAU,CAAC;MAAE,MAAM;MAAQ,OAAO,QAAQ;MAAM,CAAC;KAClD,CAAC;AACF,YAAQ,KAAK,KAAK;KAChB;KACA,UAAU,CACR;MACE,MAAM;MACN,MAAM;MACN,MAAM,KAAK;MACX,OAAO;MACR,CACF;KACF,CAAC;;AAGJ,UAAO,OAAO,MAAM,sBAAsB,QAAQ,CAAC;AACnD,UAAO;IACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-steps.js","names":["children: MdxJsxFlowElement[]"],"sources":["../../src/mdx-plugins/remark-steps.ts"],"sourcesContent":["import type { Transformer } from 'unified';\nimport type { BlockContent, Heading, Root, RootContent } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\n\nexport interface RemarkStepsOptions {\n /**\n * Class name for steps container\n *\n * @defaultValue fd-steps\n */\n steps?: string;\n\n /**\n * Class name for step container\n *\n * @defaultValue fd-step\n */\n step?: string;\n}\n\nconst StepRegex = /^(\\d+)\\.\\s(.+)$/;\n\n/**\n * Convert headings in the format of `1. Hello World` into steps.\n */\nexport function remarkSteps({\n steps = 'fd-steps',\n step = 'fd-step',\n}: RemarkStepsOptions = {}): Transformer<Root, Root> {\n function convertToSteps(nodes: RootContent[]): MdxJsxFlowElement {\n const depth = (nodes[0] as Heading).depth;\n const children: MdxJsxFlowElement[] = [];\n\n for (const node of nodes) {\n if (node.type === 'heading' && node.depth === depth) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: 'div',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'className',\n value: step,\n },\n ],\n children: [node],\n });\n } else {\n children[children.length - 1].children.push(node as BlockContent);\n }\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'div',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'className',\n value: steps,\n },\n ],\n data: {\n _fd_step: true,\n } as object,\n children,\n };\n }\n\n return (tree) => {\n visit(tree, (parent) => {\n if (!('children' in parent) || parent.type === 'heading') return;\n if (parent.data && '_fd_step' in parent.data) return 'skip';\n\n let startIdx = -1;\n let i = 0;\n\n const onEnd = () => {\n if (startIdx === -1) return;\n // range: start index to i - 1\n const item = {};\n const nodes = parent.children.splice(startIdx, i - startIdx, item as RootContent);\n Object.assign(item, convertToSteps(nodes));\n i = startIdx + 1;\n startIdx = -1;\n };\n\n for (; i < parent.children.length; i++) {\n const node = parent.children[i];\n\n if (node.type !== 'heading') continue;\n if (startIdx !== -1) {\n const startDepth = (parent.children[startIdx] as Heading).depth;\n\n if (node.depth > startDepth) continue;\n else if (node.depth < startDepth) onEnd();\n }\n\n const head = node.children.filter((c) => c.type === 'text').at(0);\n if (!head) {\n onEnd();\n continue;\n }\n\n const match = StepRegex.exec(head.value);\n if (!match) {\n onEnd();\n continue;\n }\n\n head.value = match[2];\n if (startIdx === -1) startIdx = i;\n }\n\n onEnd();\n });\n };\n}\n"],"mappings":";;;AAqBA,MAAM,YAAY;;;;AAKlB,SAAgB,YAAY,EAC1B,QAAQ,YACR,OAAO,cACe,EAAE,EAA2B;CACnD,SAAS,eAAe,OAAyC;EAC/D,MAAM,QAAS,MAAM,GAAe;EACpC,MAAMA,WAAgC,EAAE;AAExC,OAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,SAAS,aAAa,KAAK,UAAU,MAC5C,UAAS,KAAK;GACZ,MAAM;GACN,MAAM;GACN,YAAY,CACV;IACE,MAAM;IACN,MAAM;IACN,OAAO;IACR,CACF;GACD,UAAU,CAAC,KAAK;GACjB,CAAC;MAEF,UAAS,SAAS,SAAS,GAAG,SAAS,KAAK,KAAqB;AAIrE,SAAO;GACL,MAAM;GACN,MAAM;GACN,YAAY,CACV;IACE,MAAM;IACN,MAAM;IACN,OAAO;IACR,CACF;GACD,MAAM,EACJ,UAAU,MACX;GACD;GACD;;AAGH,SAAQ,SAAS;AACf,QAAM,OAAO,WAAW;AACtB,OAAI,EAAE,cAAc,WAAW,OAAO,SAAS,UAAW;AAC1D,OAAI,OAAO,QAAQ,cAAc,OAAO,KAAM,QAAO;GAErD,IAAI,WAAW;GACf,IAAI,IAAI;GAER,MAAM,cAAc;AAClB,QAAI,aAAa,GAAI;IAErB,MAAM,OAAO,EAAE;IACf,MAAM,QAAQ,OAAO,SAAS,OAAO,UAAU,IAAI,UAAU,KAAoB;AACjF,WAAO,OAAO,MAAM,eAAe,MAAM,CAAC;AAC1C,QAAI,WAAW;AACf,eAAW;;AAGb,UAAO,IAAI,OAAO,SAAS,QAAQ,KAAK;IACtC,MAAM,OAAO,OAAO,SAAS;AAE7B,QAAI,KAAK,SAAS,UAAW;AAC7B,QAAI,aAAa,IAAI;KACnB,MAAM,aAAc,OAAO,SAAS,UAAsB;AAE1D,SAAI,KAAK,QAAQ,WAAY;cACpB,KAAK,QAAQ,WAAY,QAAO;;IAG3C,MAAM,OAAO,KAAK,SAAS,QAAQ,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG,EAAE;AACjE,QAAI,CAAC,MAAM;AACT,YAAO;AACP;;IAGF,MAAM,QAAQ,UAAU,KAAK,KAAK,MAAM;AACxC,QAAI,CAAC,OAAO;AACV,YAAO;AACP;;AAGF,SAAK,QAAQ,MAAM;AACnB,QAAI,aAAa,GAAI,YAAW;;AAGlC,UAAO;IACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-structure.js","names":["data: StructuredData","lastHeading: string | undefined","content"],"sources":["../../src/mdx-plugins/remark-structure.ts"],"sourcesContent":["import Slugger from 'github-slugger';\nimport type { Nodes, Root } from 'mdast';\nimport { remark } from 'remark';\nimport remarkGfm from 'remark-gfm';\nimport type { PluggableList, Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport { flattenNode, toMdxExport } from './mdast-utils';\nimport type {\n MdxJsxAttribute,\n MdxJsxExpressionAttribute,\n MdxJsxFlowElement,\n} from 'mdast-util-mdx-jsx';\n\ninterface Heading {\n id: string;\n content: string;\n}\n\ninterface Content {\n heading: string | undefined;\n content: string;\n}\n\nexport interface StructuredData {\n headings: Heading[];\n /**\n * Refer to paragraphs, a heading may contain multiple contents as well\n */\n contents: Content[];\n}\n\nexport interface StructureOptions {\n /**\n * Types to be scanned as content.\n *\n * @defaultValue ['heading', 'paragraph', 'blockquote', 'tableCell', 'mdxJsxFlowElement']\n */\n types?: string[] | ((node: Nodes) => boolean);\n\n /**\n * A list of indexable MDX attributes, either:\n *\n * - an array of attribute names.\n * - a function that determines if attribute should be indexed.\n */\n allowedMdxAttributes?:\n | string[]\n | ((\n node: MdxJsxFlowElement,\n attribute: MdxJsxAttribute | MdxJsxExpressionAttribute,\n ) => boolean);\n\n /**\n * export as `structuredData` or specified variable name.\n */\n exportAs?: string | boolean;\n}\n\ndeclare module 'mdast' {\n interface Data {\n /**\n * [Fumadocs] Get content of unserializable element, `remarkStructure` uses it to generate search index.\n */\n _string?: string[];\n }\n}\n\ndeclare module 'vfile' {\n interface DataMap {\n /**\n * [Fumadocs] injected by `remarkStructure`\n */\n structuredData: StructuredData;\n }\n}\n\nexport const remarkStructureDefaultOptions = {\n types: ['heading', 'paragraph', 'blockquote', 'tableCell', 'mdxJsxFlowElement'],\n allowedMdxAttributes: (node) => {\n if (!node.name) return false;\n\n return ['TypeTable', 'Callout'].includes(node.name);\n },\n exportAs: false,\n} satisfies Required<StructureOptions>;\n\n/**\n * Extract content into structured data.\n *\n * By default, the output is stored into VFile (`vfile.data.structuredData`), you can specify `exportAs` to export it.\n */\nexport function remarkStructure({\n types = remarkStructureDefaultOptions.types,\n allowedMdxAttributes = remarkStructureDefaultOptions.allowedMdxAttributes,\n exportAs = remarkStructureDefaultOptions.exportAs,\n}: StructureOptions = {}): Transformer<Root, Root> {\n const slugger = new Slugger();\n\n if (Array.isArray(allowedMdxAttributes)) {\n const arr = allowedMdxAttributes;\n allowedMdxAttributes = (_node, attribute) =>\n attribute.type === 'mdxJsxAttribute' && arr.includes(attribute.name);\n }\n\n if (Array.isArray(types)) {\n const arr = types;\n types = (node) => arr.includes(node.type);\n }\n\n return (tree, file) => {\n slugger.reset();\n const data: StructuredData = { contents: [], headings: [] };\n let lastHeading: string | undefined;\n\n // Fumadocs OpenAPI Generated Structured Data\n if (file.data.frontmatter) {\n const frontmatter = file.data.frontmatter as {\n _openapi?: {\n structuredData?: StructuredData;\n };\n };\n\n if (frontmatter._openapi?.structuredData) {\n data.headings.push(...frontmatter._openapi.structuredData.headings);\n data.contents.push(...frontmatter._openapi.structuredData.contents);\n }\n }\n\n visit(tree, (element) => {\n if (element.type === 'root' || !types(element)) return;\n\n if (element.type === 'heading') {\n element.data ||= {};\n element.data.hProperties ||= {};\n const properties = element.data.hProperties;\n const content = flattenNode(element).trim();\n const id = properties.id ?? slugger.slug(content);\n\n data.headings.push({\n id,\n content,\n });\n\n lastHeading = id;\n return 'skip';\n }\n\n if (element.data?._string) {\n for (const content of element.data._string) {\n data.contents.push({\n heading: lastHeading,\n content,\n });\n }\n\n return 'skip';\n }\n\n if (element.type === 'mdxJsxFlowElement' && element.name) {\n data.contents.push(\n ...element.attributes.flatMap((attribute) => {\n const value =\n typeof attribute.value === 'string' ? attribute.value : attribute.value?.value;\n if (!value || value.length === 0) return [];\n if (allowedMdxAttributes && !allowedMdxAttributes(element, attribute)) return [];\n\n return {\n heading: lastHeading,\n content: attribute.type === 'mdxJsxAttribute' ? `${attribute.name}: ${value}` : value,\n };\n }),\n );\n\n return;\n }\n\n const content = flattenNode(element).trim();\n if (content.length === 0) return;\n\n data.contents.push({\n heading: lastHeading,\n content,\n });\n\n return 'skip';\n });\n\n file.data.structuredData = data;\n if (exportAs) {\n tree.children.unshift(\n toMdxExport(typeof exportAs === 'string' ? exportAs : 'structuredData', data),\n );\n }\n };\n}\n\n/**\n * Extract data from markdown/mdx content\n */\nexport function structure(\n content: string,\n remarkPlugins: PluggableList = [],\n options: StructureOptions = {},\n): StructuredData {\n const result = remark()\n .use(remarkGfm)\n .use(remarkPlugins)\n .use(remarkStructure, options)\n .processSync(content);\n\n return result.data.structuredData!;\n}\n"],"mappings":";;;;;;;AA4EA,MAAa,gCAAgC;CAC3C,OAAO;EAAC;EAAW;EAAa;EAAc;EAAa;EAAoB;CAC/E,uBAAuB,SAAS;AAC9B,MAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,SAAO,CAAC,aAAa,UAAU,CAAC,SAAS,KAAK,KAAK;;CAErD,UAAU;CACX;;;;;;AAOD,SAAgB,gBAAgB,EAC9B,QAAQ,8BAA8B,OACtC,uBAAuB,8BAA8B,sBACrD,WAAW,8BAA8B,aACrB,EAAE,EAA2B;CACjD,MAAM,UAAU,IAAI,SAAS;AAE7B,KAAI,MAAM,QAAQ,qBAAqB,EAAE;EACvC,MAAM,MAAM;AACZ,0BAAwB,OAAO,cAC7B,UAAU,SAAS,qBAAqB,IAAI,SAAS,UAAU,KAAK;;AAGxE,KAAI,MAAM,QAAQ,MAAM,EAAE;EACxB,MAAM,MAAM;AACZ,WAAS,SAAS,IAAI,SAAS,KAAK,KAAK;;AAG3C,SAAQ,MAAM,SAAS;AACrB,UAAQ,OAAO;EACf,MAAMA,OAAuB;GAAE,UAAU,EAAE;GAAE,UAAU,EAAE;GAAE;EAC3D,IAAIC;AAGJ,MAAI,KAAK,KAAK,aAAa;GACzB,MAAM,cAAc,KAAK,KAAK;AAM9B,OAAI,YAAY,UAAU,gBAAgB;AACxC,SAAK,SAAS,KAAK,GAAG,YAAY,SAAS,eAAe,SAAS;AACnE,SAAK,SAAS,KAAK,GAAG,YAAY,SAAS,eAAe,SAAS;;;AAIvE,QAAM,OAAO,YAAY;AACvB,OAAI,QAAQ,SAAS,UAAU,CAAC,MAAM,QAAQ,CAAE;AAEhD,OAAI,QAAQ,SAAS,WAAW;AAC9B,YAAQ,SAAS,EAAE;AACnB,YAAQ,KAAK,gBAAgB,EAAE;IAC/B,MAAM,aAAa,QAAQ,KAAK;IAChC,MAAMC,YAAU,YAAY,QAAQ,CAAC,MAAM;IAC3C,MAAM,KAAK,WAAW,MAAM,QAAQ,KAAKA,UAAQ;AAEjD,SAAK,SAAS,KAAK;KACjB;KACA;KACD,CAAC;AAEF,kBAAc;AACd,WAAO;;AAGT,OAAI,QAAQ,MAAM,SAAS;AACzB,SAAK,MAAMA,aAAW,QAAQ,KAAK,QACjC,MAAK,SAAS,KAAK;KACjB,SAAS;KACT;KACD,CAAC;AAGJ,WAAO;;AAGT,OAAI,QAAQ,SAAS,uBAAuB,QAAQ,MAAM;AACxD,SAAK,SAAS,KACZ,GAAG,QAAQ,WAAW,SAAS,cAAc;KAC3C,MAAM,QACJ,OAAO,UAAU,UAAU,WAAW,UAAU,QAAQ,UAAU,OAAO;AAC3E,SAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO,EAAE;AAC3C,SAAI,wBAAwB,CAAC,qBAAqB,SAAS,UAAU,CAAE,QAAO,EAAE;AAEhF,YAAO;MACL,SAAS;MACT,SAAS,UAAU,SAAS,oBAAoB,GAAG,UAAU,KAAK,IAAI,UAAU;MACjF;MACD,CACH;AAED;;GAGF,MAAM,UAAU,YAAY,QAAQ,CAAC,MAAM;AAC3C,OAAI,QAAQ,WAAW,EAAG;AAE1B,QAAK,SAAS,KAAK;IACjB,SAAS;IACT;IACD,CAAC;AAEF,UAAO;IACP;AAEF,OAAK,KAAK,iBAAiB;AAC3B,MAAI,SACF,MAAK,SAAS,QACZ,YAAY,OAAO,aAAa,WAAW,WAAW,kBAAkB,KAAK,CAC9E;;;;;;AAQP,SAAgB,UACd,SACA,gBAA+B,EAAE,EACjC,UAA4B,EAAE,EACd;AAOhB,QANe,QAAQ,CACpB,IAAI,UAAU,CACd,IAAI,cAAc,CAClB,IAAI,iBAAiB,QAAQ,CAC7B,YAAY,QAAQ,CAET,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mixedbread-B0TvOHtt.js","names":["chunkResults: SortedResult[]"],"sources":["../../../node_modules/.pnpm/remove-markdown@0.6.2/node_modules/remove-markdown/index.js","../src/search/client/mixedbread.ts"],"sourcesContent":["module.exports = function(md, options) {\n options = options || {};\n options.listUnicodeChar = options.hasOwnProperty('listUnicodeChar') ? options.listUnicodeChar : false;\n options.stripListLeaders = options.hasOwnProperty('stripListLeaders') ? options.stripListLeaders : true;\n options.gfm = options.hasOwnProperty('gfm') ? options.gfm : true;\n options.useImgAltText = options.hasOwnProperty('useImgAltText') ? options.useImgAltText : true;\n options.abbr = options.hasOwnProperty('abbr') ? options.abbr : false;\n options.replaceLinksWithURL = options.hasOwnProperty('replaceLinksWithURL') ? options.replaceLinksWithURL : false;\n options.htmlTagsToSkip = options.hasOwnProperty('htmlTagsToSkip') ? options.htmlTagsToSkip : [];\n options.throwError = options.hasOwnProperty('throwError') ? options.throwError : false;\n\n var output = md || '';\n\n // Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)\n output = output.replace(/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/gm, '');\n\n try {\n if (options.stripListLeaders) {\n if (options.listUnicodeChar)\n output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, options.listUnicodeChar + ' $1');\n else\n output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, '$1');\n }\n if (options.gfm) {\n output = output\n // Header\n .replace(/\\n={2,}/g, '\\n')\n // Fenced codeblocks\n .replace(/~{3}.*\\n/g, '')\n // Strikethrough\n .replace(/~~/g, '')\n // Fenced codeblocks with backticks\n .replace(/```(?:.*)\\n([\\s\\S]*?)```/g, (_, code) => code.trim());\n }\n if (options.abbr) {\n // Remove abbreviations\n output = output.replace(/\\*\\[.*\\]:.*\\n/, '');\n }\n \n let htmlReplaceRegex = /<[^>]*>/g\n if (options.htmlTagsToSkip && options.htmlTagsToSkip.length > 0) {\n // Create a regex that matches tags not in htmlTagsToSkip\n const joinedHtmlTagsToSkip = options.htmlTagsToSkip.join('|')\n htmlReplaceRegex = new RegExp(\n `<(?!\\/?(${joinedHtmlTagsToSkip})(?=>|\\s[^>]*>))[^>]*>`,\n 'g',\n )\n }\n\n output = output\n // Remove HTML tags\n .replace(htmlReplaceRegex, '')\n // Remove setext-style headers\n .replace(/^[=\\-]{2,}\\s*$/g, '')\n // Remove footnotes?\n .replace(/\\[\\^.+?\\](\\: .*?$)?/g, '')\n .replace(/\\s{0,2}\\[.*?\\]: .*?$/g, '')\n // Remove images\n .replace(/\\!\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, options.useImgAltText ? '$1' : '')\n // Remove inline links\n .replace(/\\[([\\s\\S]*?)\\]\\s*[\\(\\[].*?[\\)\\]]/g, options.replaceLinksWithURL ? '$2' : '$1')\n // Remove blockquotes\n .replace(/^(\\n)?\\s{0,3}>\\s?/gm, '$1')\n // .replace(/(^|\\n)\\s{0,3}>\\s?/g, '\\n\\n')\n // Remove reference-style links?\n .replace(/^\\s{1,2}\\[(.*?)\\]: (\\S+)( \".*?\")?\\s*$/g, '')\n // Remove atx-style headers\n .replace(/^(\\n)?\\s{0,}#{1,6}\\s*( (.+))? +#+$|^(\\n)?\\s{0,}#{1,6}\\s*( (.+))?$/gm, '$1$3$4$6')\n // Remove * emphasis\n .replace(/([\\*]+)(\\S)(.*?\\S)??\\1/g, '$2$3')\n // Remove _ emphasis. Unlike *, _ emphasis gets rendered only if \n // 1. Either there is a whitespace character before opening _ and after closing _.\n // 2. Or _ is at the start/end of the string.\n .replace(/(^|\\W)([_]+)(\\S)(.*?\\S)??\\2($|\\W)/g, '$1$3$4$5')\n // Remove single-line code blocks (already handled multiline above in gfm section)\n .replace(/(`{3,})(.*?)\\1/gm, '$2')\n // Remove inline code\n .replace(/`(.+?)`/g, '$1')\n // // Replace two or more newlines with exactly two? Not entirely sure this belongs here...\n // .replace(/\\n{2,}/g, '\\n\\n')\n // // Remove newlines in a paragraph\n // .replace(/(\\S+)\\n\\s*(\\S+)/g, '$1 $2')\n // Replace strike through\n .replace(/~(.*?)~/g, '$1');\n } catch(e) {\n if (options.throwError) throw e;\n\n console.error(\"remove-markdown encountered error: %s\", e);\n return md;\n }\n return output;\n};\n","import type { SortedResult } from '@/search';\nimport type Mixedbread from '@mixedbread/sdk';\nimport removeMd from 'remove-markdown';\nimport Slugger from 'github-slugger';\nimport type { StoreSearchResponse } from '@mixedbread/sdk/resources/stores';\n\nexport interface MixedbreadOptions {\n /**\n * The identifier of the store to search in\n */\n storeIdentifier: string;\n\n /**\n * The Mixedbread SDK client instance\n */\n client: Mixedbread;\n\n /**\n * Filter results with specific tag.\n */\n tag?: string;\n\n /**\n * Filter by locale (unsupported at the moment)\n */\n locale?: string;\n}\n\nexport interface SearchMetadata {\n title?: string;\n description?: string;\n url?: string;\n tag?: string;\n}\n\ntype StoreSearchResult = StoreSearchResponse['data'][number] & {\n generated_metadata: SearchMetadata;\n};\n\nconst slugger = new Slugger();\n\nfunction extractHeadingTitle(text: string): string {\n const trimmedText = text.trim();\n\n if (!trimmedText.startsWith('#')) {\n return '';\n }\n\n const lines = trimmedText.split('\\n');\n const firstLine = lines[0]?.trim();\n\n if (firstLine) {\n // Use remove-markdown to convert to plain text and remove colons\n return removeMd(firstLine, {\n useImgAltText: false,\n });\n }\n\n return '';\n}\n\nexport async function search(query: string, options: MixedbreadOptions): Promise<SortedResult[]> {\n const { client, storeIdentifier, tag } = options;\n\n if (!query.trim()) {\n return [];\n }\n\n const res = await client.stores.search({\n query,\n store_identifiers: [storeIdentifier],\n top_k: 10,\n filters: {\n key: 'generated_metadata.tag',\n operator: 'eq',\n value: tag,\n },\n search_options: {\n return_metadata: true,\n },\n });\n\n return (res.data as StoreSearchResult[]).flatMap((item) => {\n const metadata = item.generated_metadata;\n\n const url = metadata.url || '#';\n const title = metadata.title || 'Untitled';\n\n const chunkResults: SortedResult[] = [\n {\n id: `${item.file_id}-${item.chunk_index}-page`,\n type: 'page',\n content: title,\n url,\n },\n ];\n\n const headingTitle = item.type === 'text' ? extractHeadingTitle(item.text) : '';\n\n if (headingTitle) {\n slugger.reset();\n\n chunkResults.push({\n id: `${item.file_id}-${item.chunk_index}-heading`,\n type: 'heading',\n content: headingTitle,\n url: `${url}#${slugger.slug(headingTitle)}`,\n });\n }\n\n return chunkResults;\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/negotiation/index.ts"],"sourcesContent":[],"mappings":";;;iBAGgB,aAAA,UAAuB,UAAO;;AAA9C;AAiBA;AAcA;;;;;iBAdgB,WAAA;;;iBAcA,mBAAA,UACL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["headers: Record<string, string>"],"sources":["../../src/negotiation/index.ts"],"sourcesContent":["import Negotiator from 'negotiator';\nimport { compile, match } from 'path-to-regexp';\n\nexport function getNegotiator(request: Request) {\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n return new Negotiator({ headers });\n}\n\n/**\n * Rewrite incoming path matching the `source` pattern into the `destination` pattern.\n *\n * See [`path-to-regexp`](https://github.com/pillarjs/path-to-regexp) for accepted pattern formats.\n *\n * @param source - the original pattern of incoming paths\n * @param destination - the target pattern to convert into\n */\nexport function rewritePath(source: string, destination: string) {\n const matcher = match(source, { decode: false });\n const compiler = compile(destination, { encode: false });\n\n return {\n rewrite(pathname: string) {\n const result = matcher(pathname);\n if (!result) return false;\n\n return compiler(result.params);\n },\n };\n}\n\nexport function isMarkdownPreferred(\n request: Request,\n options?: {\n markdownMediaTypes?: string[];\n },\n) {\n const { markdownMediaTypes = ['text/plain', 'text/markdown', 'text/x-markdown'] } = options ?? {};\n\n const mediaTypes = getNegotiator(request).mediaTypes();\n return markdownMediaTypes.some((type) => mediaTypes.includes(type));\n}\n"],"mappings":";;;;AAGA,SAAgB,cAAc,SAAkB;CAC9C,MAAMA,UAAkC,EAAE;AAC1C,SAAQ,QAAQ,SAAS,OAAO,QAAQ;AACtC,UAAQ,OAAO;GACf;AAEF,QAAO,IAAI,WAAW,EAAE,SAAS,CAAC;;;;;;;;;;AAWpC,SAAgB,YAAY,QAAgB,aAAqB;CAC/D,MAAM,UAAU,MAAM,QAAQ,EAAE,QAAQ,OAAO,CAAC;CAChD,MAAM,WAAW,QAAQ,aAAa,EAAE,QAAQ,OAAO,CAAC;AAExD,QAAO,EACL,QAAQ,UAAkB;EACxB,MAAM,SAAS,QAAQ,SAAS;AAChC,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO,SAAS,OAAO,OAAO;IAEjC;;AAGH,SAAgB,oBACd,SACA,SAGA;CACA,MAAM,EAAE,qBAAqB;EAAC;EAAc;EAAiB;EAAkB,KAAK,WAAW,EAAE;CAEjG,MAAM,aAAa,cAAc,QAAQ,CAAC,YAAY;AACtD,QAAO,mBAAmB,MAAM,SAAS,WAAW,SAAS,KAAK,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-url-CEfNKxaE.js","names":[],"sources":["../src/utils/normalize-url.tsx"],"sourcesContent":["/**\n * normalize URL into the Fumadocs standard form (`/slug-1/slug-2`).\n *\n * This includes URLs with trailing slashes.\n */\nexport function normalizeUrl(url: string) {\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\n\n if (!url.startsWith('/')) url = '/' + url;\n if (url.length > 1 && url.endsWith('/')) url = url.slice(0, -1);\n return url;\n}\n"],"mappings":";;;;;;AAKA,SAAgB,aAAa,KAAa;AACxC,KAAI,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,WAAW,CAAE,QAAO;AAEpE,KAAI,CAAC,IAAI,WAAW,IAAI,CAAE,OAAM,MAAM;AACtC,KAAI,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI,CAAE,OAAM,IAAI,MAAM,GAAG,GAAG;AAC/D,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud-legacy-NJTbB19B.js","names":["list: SortedResult[]","result","params: ClientSearchParams"],"sources":["../src/search/client/orama-cloud-legacy.ts"],"sourcesContent":["import type { ClientSearchParams, OramaClient } from '@oramacloud/client';\nimport { removeUndefined } from '@/utils/remove-undefined';\nimport type { OramaIndex } from '@/search/orama-cloud-legacy';\nimport { createContentHighlighter, type SortedResult } from '@/search';\n\ninterface CrawlerIndex {\n path: string;\n title: string;\n content: string;\n section: string;\n category: string;\n}\n\nexport interface OramaCloudLegacyOptions {\n client: OramaClient;\n /**\n * The type of your index.\n *\n * You can set it to `crawler` if you use crawler instead of the JSON index with schema provided by Fumadocs\n */\n index?: 'default' | 'crawler';\n params?: ClientSearchParams;\n\n /**\n * Filter results with specific tag.\n */\n tag?: string;\n\n /**\n * Filter by locale (unsupported at the moment)\n */\n locale?: string;\n}\n\nexport async function searchDocs(\n query: string,\n options: OramaCloudLegacyOptions,\n): Promise<SortedResult[]> {\n const highlighter = createContentHighlighter(query);\n const list: SortedResult[] = [];\n const { index = 'default', client, params: extraParams = {}, tag } = options;\n\n if (index === 'crawler') {\n const result = await client.search({\n ...extraParams,\n term: query,\n where: {\n category: tag\n ? {\n eq: tag.slice(0, 1).toUpperCase() + tag.slice(1),\n }\n : undefined,\n ...extraParams.where,\n },\n limit: 10,\n });\n if (!result) return list;\n\n for (const hit of result.hits) {\n const doc = hit.document as unknown as CrawlerIndex;\n\n list.push(\n {\n id: hit.id,\n type: 'page',\n content: doc.title,\n contentWithHighlights: highlighter.highlight(doc.title),\n url: doc.path,\n },\n {\n id: 'page' + hit.id,\n type: 'text',\n content: doc.content,\n contentWithHighlights: highlighter.highlight(doc.content),\n url: doc.path,\n },\n );\n }\n\n return list;\n }\n\n const params: ClientSearchParams = {\n ...extraParams,\n term: query,\n where: removeUndefined({\n tag,\n ...extraParams.where,\n }),\n groupBy: {\n properties: ['page_id'],\n maxResult: 7,\n ...extraParams.groupBy,\n },\n };\n\n const result = await client.search(params);\n if (!result || !result.groups) return list;\n\n for (const item of result.groups) {\n let addedHead = false;\n\n for (const hit of item.result) {\n const doc = hit.document as unknown as OramaIndex;\n\n if (!addedHead) {\n list.push({\n id: doc.page_id,\n type: 'page',\n content: doc.title,\n breadcrumbs: doc.breadcrumbs,\n contentWithHighlights: highlighter.highlight(doc.title),\n url: doc.url,\n });\n addedHead = true;\n }\n\n list.push({\n id: doc.id,\n content: doc.content,\n contentWithHighlights: highlighter.highlight(doc.content),\n type: doc.content === doc.section ? 'heading' : 'text',\n url: doc.section_id ? `${doc.url}#${doc.section_id}` : doc.url,\n });\n }\n }\n\n return list;\n}\n"],"mappings":";;;;AAkCA,eAAsB,WACpB,OACA,SACyB;CACzB,MAAM,cAAc,yBAAyB,MAAM;CACnD,MAAMA,OAAuB,EAAE;CAC/B,MAAM,EAAE,QAAQ,WAAW,QAAQ,QAAQ,cAAc,EAAE,EAAE,QAAQ;AAErE,KAAI,UAAU,WAAW;EACvB,MAAMC,WAAS,MAAM,OAAO,OAAO;GACjC,GAAG;GACH,MAAM;GACN,OAAO;IACL,UAAU,MACN,EACE,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE,EACjD,GACD;IACJ,GAAG,YAAY;IAChB;GACD,OAAO;GACR,CAAC;AACF,MAAI,CAACA,SAAQ,QAAO;AAEpB,OAAK,MAAM,OAAOA,SAAO,MAAM;GAC7B,MAAM,MAAM,IAAI;AAEhB,QAAK,KACH;IACE,IAAI,IAAI;IACR,MAAM;IACN,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,MAAM;IACvD,KAAK,IAAI;IACV,EACD;IACE,IAAI,SAAS,IAAI;IACjB,MAAM;IACN,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,QAAQ;IACzD,KAAK,IAAI;IACV,CACF;;AAGH,SAAO;;CAGT,MAAMC,SAA6B;EACjC,GAAG;EACH,MAAM;EACN,OAAO,gBAAgB;GACrB;GACA,GAAG,YAAY;GAChB,CAAC;EACF,SAAS;GACP,YAAY,CAAC,UAAU;GACvB,WAAW;GACX,GAAG,YAAY;GAChB;EACF;CAED,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO;AAC1C,KAAI,CAAC,UAAU,CAAC,OAAO,OAAQ,QAAO;AAEtC,MAAK,MAAM,QAAQ,OAAO,QAAQ;EAChC,IAAI,YAAY;AAEhB,OAAK,MAAM,OAAO,KAAK,QAAQ;GAC7B,MAAM,MAAM,IAAI;AAEhB,OAAI,CAAC,WAAW;AACd,SAAK,KAAK;KACR,IAAI,IAAI;KACR,MAAM;KACN,SAAS,IAAI;KACb,aAAa,IAAI;KACjB,uBAAuB,YAAY,UAAU,IAAI,MAAM;KACvD,KAAK,IAAI;KACV,CAAC;AACF,gBAAY;;AAGd,QAAK,KAAK;IACR,IAAI,IAAI;IACR,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,QAAQ;IACzD,MAAM,IAAI,YAAY,IAAI,UAAU,YAAY;IAChD,KAAK,IAAI,aAAa,GAAG,IAAI,IAAI,GAAG,IAAI,eAAe,IAAI;IAC5D,CAAC;;;AAIN,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud-yicpgD0c.js","names":["list: SortedResult[]","result","params: OramaCloudSearchParams"],"sources":["../src/search/client/orama-cloud.ts"],"sourcesContent":["import type { OramaCloud, OramaCloudSearchParams } from '@orama/core';\nimport { removeUndefined } from '@/utils/remove-undefined';\nimport type { OramaIndex } from '@/search/orama-cloud';\nimport { createContentHighlighter, type SortedResult } from '@/search';\n\ninterface CrawlerIndex {\n path: string;\n title: string;\n content: string;\n section: string;\n category: string;\n}\n\nexport interface OramaCloudOptions {\n client: OramaCloud;\n /**\n * The type of your index.\n *\n * You can set it to `crawler` if you use crawler instead of the JSON index with schema provided by Fumadocs\n */\n index?: 'default' | 'crawler';\n params?: Partial<OramaCloudSearchParams>;\n\n /**\n * Filter results with specific tag.\n */\n tag?: string;\n\n /**\n * Filter by locale (unsupported at the moment)\n */\n locale?: string;\n}\n\nexport async function searchDocs(\n query: string,\n options: OramaCloudOptions,\n): Promise<SortedResult[]> {\n const highlighter = createContentHighlighter(query);\n const list: SortedResult[] = [];\n const { index = 'default', client, params: extraParams, tag } = options;\n\n if (index === 'crawler') {\n const result = await client.search({\n datasources: [],\n ...extraParams,\n term: query,\n where: {\n category: tag\n ? {\n eq: tag.slice(0, 1).toUpperCase() + tag.slice(1),\n }\n : undefined,\n ...extraParams?.where,\n },\n limit: 10,\n });\n if (!result) return list;\n\n for (const hit of result.hits) {\n const doc = hit.document as unknown as CrawlerIndex;\n\n list.push(\n {\n id: hit.id,\n type: 'page',\n content: doc.title,\n contentWithHighlights: highlighter.highlight(doc.title),\n url: doc.path,\n },\n {\n id: 'page' + hit.id,\n type: 'text',\n content: doc.content,\n contentWithHighlights: highlighter.highlight(doc.content),\n url: doc.path,\n },\n );\n }\n\n return list;\n }\n\n const params: OramaCloudSearchParams = {\n datasources: [],\n ...extraParams,\n term: query,\n where: removeUndefined({\n tag,\n ...extraParams?.where,\n }),\n groupBy: {\n properties: ['page_id'],\n max_results: 7,\n ...extraParams?.groupBy,\n },\n };\n\n const result = await client.search(params);\n if (!result || !result.groups) return list;\n\n for (const item of result.groups) {\n let addedHead = false;\n\n for (const hit of item.result) {\n const doc = hit.document as unknown as OramaIndex;\n\n if (!addedHead) {\n list.push({\n id: doc.page_id,\n type: 'page',\n content: doc.title,\n breadcrumbs: doc.breadcrumbs,\n contentWithHighlights: highlighter.highlight(doc.title),\n url: doc.url,\n });\n addedHead = true;\n }\n\n list.push({\n id: doc.id,\n content: doc.content,\n contentWithHighlights: highlighter.highlight(doc.content),\n type: doc.content === doc.section ? 'heading' : 'text',\n url: doc.section_id ? `${doc.url}#${doc.section_id}` : doc.url,\n });\n }\n }\n\n return list;\n}\n"],"mappings":";;;;AAkCA,eAAsB,WACpB,OACA,SACyB;CACzB,MAAM,cAAc,yBAAyB,MAAM;CACnD,MAAMA,OAAuB,EAAE;CAC/B,MAAM,EAAE,QAAQ,WAAW,QAAQ,QAAQ,aAAa,QAAQ;AAEhE,KAAI,UAAU,WAAW;EACvB,MAAMC,WAAS,MAAM,OAAO,OAAO;GACjC,aAAa,EAAE;GACf,GAAG;GACH,MAAM;GACN,OAAO;IACL,UAAU,MACN,EACE,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE,EACjD,GACD;IACJ,GAAG,aAAa;IACjB;GACD,OAAO;GACR,CAAC;AACF,MAAI,CAACA,SAAQ,QAAO;AAEpB,OAAK,MAAM,OAAOA,SAAO,MAAM;GAC7B,MAAM,MAAM,IAAI;AAEhB,QAAK,KACH;IACE,IAAI,IAAI;IACR,MAAM;IACN,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,MAAM;IACvD,KAAK,IAAI;IACV,EACD;IACE,IAAI,SAAS,IAAI;IACjB,MAAM;IACN,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,QAAQ;IACzD,KAAK,IAAI;IACV,CACF;;AAGH,SAAO;;CAGT,MAAMC,SAAiC;EACrC,aAAa,EAAE;EACf,GAAG;EACH,MAAM;EACN,OAAO,gBAAgB;GACrB;GACA,GAAG,aAAa;GACjB,CAAC;EACF,SAAS;GACP,YAAY,CAAC,UAAU;GACvB,aAAa;GACb,GAAG,aAAa;GACjB;EACF;CAED,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO;AAC1C,KAAI,CAAC,UAAU,CAAC,OAAO,OAAQ,QAAO;AAEtC,MAAK,MAAM,QAAQ,OAAO,QAAQ;EAChC,IAAI,YAAY;AAEhB,OAAK,MAAM,OAAO,KAAK,QAAQ;GAC7B,MAAM,MAAM,IAAI;AAEhB,OAAI,CAAC,WAAW;AACd,SAAK,KAAK;KACR,IAAI,IAAI;KACR,MAAM;KACN,SAAS,IAAI;KACb,aAAa,IAAI;KACjB,uBAAuB,YAAY,UAAU,IAAI,MAAM;KACvD,KAAK,IAAI;KACV,CAAC;AACF,gBAAY;;AAGd,QAAK,KAAK;IACR,IAAI,IAAI;IACR,SAAS,IAAI;IACb,uBAAuB,YAAY,UAAU,IAAI,QAAQ;IACzD,MAAM,IAAI,YAAY,IAAI,UAAU,YAAY;IAChD,KAAK,IAAI,aAAa,GAAG,IAAI,IAAI,GAAG,IAAI,eAAe,IAAI;IAC5D,CAAC;;;AAIN,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/page-tree/utils.ts"],"sourcesContent":[],"mappings":";;;;;;AAKA;AAkBgB,iBAlBA,WAAA,CAkBa,KAAA,EAlBM,IAkBN,EAAA,CAAA,EAlBwB,IAkBxB,EAAA;;;;AAQP,iBARN,aAAA,CAQM,IAAA,EAPd,IAOc,EAAA,GAAA,EAAA,MAAA,EAAA,OAqBV,CArBU,EAAA;EAoBN,YAAA,CAAA,EAAA,OAAgB;CACpB,CAAA,EAAA;EAAgB,QAAA,CAAA,EAtBf,IAsBe;EACxB,IAAA,CAAA,EAtBK,IAsBL;CAAgB;AAAe,iBAFnB,gBAAA,CAEmB,QAAA,EADvB,IACuB,GADP,MACO,CAAA,EAAA,CAA/B,IAA+B,GAAf,MAAe,CAAA,EAAA;AAgBnC;;;AAC+B,iBADf,gBAAA,CACe,WAAA,EAAhB,IAAgB,GAAA,MAAA,CAAA,MAAA,EAAe,IAAf,CAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAE5B,IAF4B,EAAA;;;AAS/B;AACe,iBADC,YAAA,CACD,WAAA,EAAA,IAAA,GAAgB,MAAhB,CAAA,MAAA,EAA+B,IAA/B,CAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAEZ,IAFY,EAAA;AAA+B,iBAsB9B,UAAA,CAtB8B,IAAA,EAuBtC,IAvBsC,GAuBtB,MAvBsB,EAAA,GAAA,EAAA,MAAA,CAAA,EAyB3C,IAzB2C,GAyB3B,MAzB2B,GAAA,SAAA;;;;AAsB9C;;AACwB,iBAoBR,QAAA,CApBQ,KAAA,EAqBf,IArBe,EAAA,EAAA,OAAA,EAAA,CAAA,IAAA,EAsBN,IAtBM,EAAA,GAAA,OAAA,EAAA,OAEL,CAFK,EAAA;EAErB,gBAAA,CAAA,EAAA,OAAA;CAAgB,CAAA,EAwBhB,IAxBgB,EAAA,GAAA,IAAA;;AAkBnB;;;;;AAkDgB,iBAAA,KAAK,CAAA,eAAc,IAAd,GAA8B,IAA9B,CAAA,CAAA,IAAA,EACb,MADa,EAAA,OAAA,EAAA,CAAA,UAEC,IAFD,GAEiB,IAFjB,CAAA,CAAA,IAAA,EAGX,CAHW,EAAA,MAAA,CAAA,EAIR,IAJQ,GAIQ,MAJR,EAAA,GAAA,MAAA,GAAA,OAAA,GAKK,CALL,GAAA,IAAA,CAAA,EAMlB,MANkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"path-CECfI3nn.js","names":[],"sources":["../src/source/path.ts"],"sourcesContent":["export function basename(path: string, ext?: string): string {\n const idx = path.lastIndexOf('/');\n\n return path.substring(idx === -1 ? 0 : idx + 1, ext ? path.length - ext.length : path.length);\n}\n\nexport function extname(path: string): string {\n const dotIdx = path.lastIndexOf('.');\n\n if (dotIdx !== -1) {\n return path.substring(dotIdx);\n }\n\n return '';\n}\n\nexport function dirname(path: string): string {\n return path.split('/').slice(0, -1).join('/');\n}\n/**\n * Split path into segments, trailing/leading slashes are removed\n */\nexport function splitPath(path: string): string[] {\n return path.split('/').filter((p) => p.length > 0);\n}\n\n/**\n * Resolve paths, slashes within the path will be ignored\n * @param paths - Paths to join\n * @example\n * ```\n * ['a','b'] // 'a/b'\n * ['/a'] // 'a'\n * ['a', '/b'] // 'a/b'\n * ['a', '../b/c'] // 'b/c'\n * ```\n */\nexport function joinPath(...paths: string[]): string {\n const out = [];\n const parsed = paths.flatMap(splitPath);\n\n for (const seg of parsed) {\n switch (seg) {\n case '..':\n out.pop();\n break;\n case '.':\n break;\n default:\n out.push(seg);\n }\n }\n\n return out.join('/');\n}\n\nexport function slash(path: string): string {\n const isExtendedLengthPath = path.startsWith('\\\\\\\\?\\\\');\n\n if (isExtendedLengthPath) {\n return path;\n }\n\n return path.replaceAll('\\\\', '/');\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAgB,SAAS,MAAc,KAAsB;CAC3D,MAAM,MAAM,KAAK,YAAY,IAAI;AAEjC,QAAO,KAAK,UAAU,QAAQ,KAAK,IAAI,MAAM,GAAG,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO;;AAG/F,SAAgB,QAAQ,MAAsB;CAC5C,MAAM,SAAS,KAAK,YAAY,IAAI;AAEpC,KAAI,WAAW,GACb,QAAO,KAAK,UAAU,OAAO;AAG/B,QAAO;;AAGT,SAAgB,QAAQ,MAAsB;AAC5C,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI;;;;;AAK/C,SAAgB,UAAU,MAAwB;AAChD,QAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;;;;;;;;;;;;;AAcpD,SAAgB,SAAS,GAAG,OAAyB;CACnD,MAAM,MAAM,EAAE;CACd,MAAM,SAAS,MAAM,QAAQ,UAAU;AAEvC,MAAK,MAAM,OAAO,OAChB,SAAQ,KAAR;EACE,KAAK;AACH,OAAI,KAAK;AACT;EACF,KAAK,IACH;EACF,QACE,KAAI,KAAK,IAAI;;AAInB,QAAO,IAAI,KAAK,IAAI;;AAGtB,SAAgB,MAAM,MAAsB;AAG1C,KAF6B,KAAK,WAAW,UAAU,CAGrD,QAAO;AAGT,QAAO,KAAK,WAAW,MAAM,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rehype-code-BUrju-yF.d.ts","names":[],"sources":["../src/mdx-plugins/transformer-icon.ts","../src/mdx-plugins/rehype-code.ts"],"sourcesContent":[],"mappings":";;;;;;KAEY,aAAA;;;;;AAAA,UAiIK,WAAA,CAjIQ;EAiIR,SAAA,CAAA,EACH,MADc,CAAA,MAAA,EAAA,MAAA,CAAA;EACd,MAAA,CAAA,EACH,MADG,CAAA,MAAA,EACY,aADZ,CAAA;;;;AAOd;iBAAgB,eAAA,WAAyB,cAAmB;;;AAzIhD,cCeC,wBDfY,ECec,iBDfd;AAiIzB,KC1EK,gBD0EuB,CAAA,CAAA,EAAA,UAAA,MC1Ea,CD0Eb,CAAA,GC1EkB,CD0ElB,SAAA,OAAA,GC1EsC,ID0EtC,CC1E2C,CD0E3C,EC1E8C,CD0E9C,CAAA,GAAA,KAAA;AACd,KCzEF,iBAAA,GAAoB,gBDyElB,CCzEmC,kBDyEnC,EAAA,MAAA,CAAA,GAAA;EACY;;;AAM1B;;;;AC1HA;AA4BE;;EAY4C,MAAA,CAAA,EAAA,IAAA,GAAA,WAAA;EAAyB;;;EAAD,gBAAA,CAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EAE1D;;;EAsBH,IAAA,CAAA,EAAA,WAAA,GAAA,KAAA;EAAW;AAapB;;;;EAGe,GAAA,CAAA,EAAA,OAAA;CAAM;;;AAwDpB;iBA3De,UAAA,OACR,sBACI,QAAQ,qBACjB,YAAY,MAAM;iBA0DZ,cAAA,CAAA,GAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rehype-code-Ct5Pb6BZ.js","names":["defaultShortcuts: Record<string, string>","defaultIcons: Record<string, CodeBlockIcon>","rehypeCodeDefaultOptions: RehypeCodeOptions","data: Record<string, unknown>","options: RehypeCodeOptions"],"sources":["../src/mdx-plugins/transformer-icon.ts","../src/mdx-plugins/rehype-code.ts"],"sourcesContent":["import { type ShikiTransformer } from 'shiki';\n\nexport type CodeBlockIcon =\n | {\n viewBox: string;\n fill: string;\n d: string;\n }\n | string;\n\nconst defaultShortcuts: Record<string, string> = {\n js: 'javascript',\n jsx: 'react',\n ts: 'typescript',\n tsx: 'react',\n 'c#': 'csharp',\n cs: 'csharp',\n gql: 'graphql',\n py: 'python',\n bash: 'shellscript',\n sh: 'shellscript',\n shell: 'shellscript',\n zsh: 'shellscript',\n 'c++': 'cpp',\n};\n\n// From https://simpleicons.org\n// Java - Not supported, https://github.com/simple-icons/simple-icons/issues/7374\nconst defaultIcons: Record<string, CodeBlockIcon> = {\n react: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z',\n },\n vue: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M24,1.61H14.06L12,5.16,9.94,1.61H0L12,22.39ZM12,14.08,5.16,2.23H9.59L12,6.41l2.41-4.18h4.43Z',\n },\n ruby: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M20.156.083c3.033.525 3.893 2.598 3.829 4.77L24 4.822 22.635 22.71 4.89 23.926h.016C3.433 23.864.15 23.729 0 19.139l1.645-3 2.819 6.586.503 1.172 2.805-9.144-.03.007.016-.03 9.255 2.956-1.396-5.431-.99-3.9 8.82-.569-.615-.51L16.5 2.114 20.159.073l-.003.01zM0 19.089zM5.13 5.073c3.561-3.533 8.157-5.621 9.922-3.84 1.762 1.777-.105 6.105-3.673 9.636-3.563 3.532-8.103 5.734-9.864 3.957-1.766-1.777.045-6.217 3.612-9.75l.003-.003z',\n },\n zig: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'm23.53 1.02-7.686 3.45h-7.06l-2.98 3.452h7.173L.47 22.98l7.681-3.607h7.065v-.002l2.978-3.45-7.148-.001 12.482-14.9zM0 4.47v14.901h1.883l2.98-3.45H3.451v-8h.942l2.824-3.45H0zm22.117 0-2.98 3.608h1.412v7.844h-.942l-2.98 3.45H24V4.47h-1.883z',\n },\n swift: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z',\n },\n prisma: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M21.8068 18.2848L13.5528.7565c-.207-.4382-.639-.7273-1.1286-.7541-.5023-.0293-.9523.213-1.2062.6253L2.266 15.1271c-.2773.4518-.2718 1.0091.0158 1.4555l4.3759 6.7786c.2608.4046.7127.6388 1.1823.6388.1332 0 .267-.0188.3987-.0577l12.7019-3.7568c.3891-.1151.7072-.3904.8737-.7553s.1633-.7828-.0075-1.1454zm-1.8481.7519L9.1814 22.2242c-.3292.0975-.6448-.1873-.5756-.5194l3.8501-18.4386c.072-.3448.5486-.3996.699-.0803l7.1288 15.138c.1344.2856-.019.6224-.325.7128z',\n },\n typescript: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z',\n },\n javascript: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M0 0h24v24H0V0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873-.736-.345-1.554-.585-1.797-1.14-.091-.33-.105-.51-.046-.705.15-.646.915-.84 1.515-.66.39.12.75.42.976.9 1.034-.676 1.034-.676 1.755-1.125-.27-.42-.404-.601-.586-.78-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005-1.14 1.291-.811 3.541.569 4.471 1.365 1.02 3.361 1.244 3.616 2.205.24 1.17-.87 1.545-1.966 1.41-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109 1.74 1.756 6.09 1.666 6.871-1.004.029-.09.24-.705.074-1.65l.046.067zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805 0 1.232.063 2.363-.138 2.711-.33.689-1.18.601-1.566.48-.396-.196-.597-.466-.83-.855-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517.855.51 2.004.675 3.207.405.783-.226 1.458-.691 1.811-1.411.51-.93.402-2.07.397-3.346.012-2.054 0-4.109 0-6.179l.004-.056z',\n },\n php: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M7.01 10.207h-.944l-.515 2.648h.838c.556 0 .97-.105 1.242-.314.272-.21.455-.559.55-1.049.092-.47.05-.802-.124-.995-.175-.193-.523-.29-1.047-.29zM12 5.688C5.373 5.688 0 8.514 0 12s5.373 6.313 12 6.313S24 15.486 24 12c0-3.486-5.373-6.312-12-6.312zm-3.26 7.451c-.261.25-.575.438-.917.551-.336.108-.765.164-1.285.164H5.357l-.327 1.681H3.652l1.23-6.326h2.65c.797 0 1.378.209 1.744.628.366.418.476 1.002.33 1.752a2.836 2.836 0 0 1-.305.847c-.143.255-.33.49-.561.703zm4.024.715l.543-2.799c.063-.318.039-.536-.068-.651-.107-.116-.336-.174-.687-.174H11.46l-.704 3.625H9.388l1.23-6.327h1.367l-.327 1.682h1.218c.767 0 1.295.134 1.586.401s.378.7.263 1.299l-.572 2.944h-1.389zm7.597-2.265a2.782 2.782 0 0 1-.305.847c-.143.255-.33.49-.561.703a2.44 2.44 0 0 1-.917.551c-.336.108-.765.164-1.286.164h-1.18l-.327 1.682h-1.378l1.23-6.326h2.649c.797 0 1.378.209 1.744.628.366.417.477 1.001.331 1.751zM17.766 10.207h-.943l-.516 2.648h.838c.557 0 .971-.105 1.242-.314.272-.21.455-.559.551-1.049.092-.47.049-.802-.125-.995s-.524-.29-1.047-.29z',\n },\n shellscript: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'm 4,4 a 1,1 0 0 0 -0.7070312,0.2929687 1,1 0 0 0 0,1.4140625 L 8.5859375,11 3.2929688,16.292969 a 1,1 0 0 0 0,1.414062 1,1 0 0 0 1.4140624,0 l 5.9999998,-6 a 1.0001,1.0001 0 0 0 0,-1.414062 L 4.7070312,4.2929687 A 1,1 0 0 0 4,4 Z m 8,14 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 h 8 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z',\n },\n c: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M16.5921 9.1962s-.354-3.298-3.627-3.39c-3.2741-.09-4.9552 2.474-4.9552 6.14 0 3.6651 1.858 6.5972 5.0451 6.5972 3.184 0 3.5381-3.665 3.5381-3.665l6.1041.365s.36 3.31-2.196 5.836c-2.552 2.5241-5.6901 2.9371-7.8762 2.9201-2.19-.017-5.2261.034-8.1602-2.97-2.938-3.0101-3.436-5.9302-3.436-8.8002 0-2.8701.556-6.6702 4.047-9.5502C7.444.72 9.849 0 12.254 0c10.0422 0 10.7172 9.2602 10.7172 9.2602z',\n },\n cpp: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M22.394 6c-.167-.29-.398-.543-.652-.69L12.926.22c-.509-.294-1.34-.294-1.848 0L2.26 5.31c-.508.293-.923 1.013-.923 1.6v10.18c0 .294.104.62.271.91.167.29.398.543.652.69l8.816 5.09c.508.293 1.34.293 1.848 0l8.816-5.09c.254-.147.485-.4.652-.69.167-.29.27-.616.27-.91V6.91c.003-.294-.1-.62-.268-.91zM12 19.11c-3.92 0-7.109-3.19-7.109-7.11 0-3.92 3.19-7.11 7.11-7.11a7.133 7.133 0 016.156 3.553l-3.076 1.78a3.567 3.567 0 00-3.08-1.78A3.56 3.56 0 008.444 12 3.56 3.56 0 0012 15.555a3.57 3.57 0 003.08-1.778l3.078 1.78A7.135 7.135 0 0112 19.11zm7.11-6.715h-.79v.79h-.79v-.79h-.79v-.79h.79v-.79h.79v.79h.79zm2.962 0h-.79v.79h-.79v-.79h-.79v-.79h.79v-.79h.79v.79h.79z',\n },\n go: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.035.07.082l-.023.28c0 .047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204 1.274-1.192 2.22.011.935.654 1.706 1.577 1.835.795.105 1.46-.175 1.987-.77.105-.13.198-.27.315-.434H10.47c-.245 0-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315 0 01.292-.187h4.253c-.023.316-.023.631-.07.947a4.983 4.983 0 01-.958 2.29c-.841 1.11-1.94 1.8-3.33 1.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086 1.928-1.776 3.272-2.02 1.098-.2 2.15-.07 3.096.571.62.41 1.063.97 1.356 1.648.07.105.023.164-.117.2m3.868 6.461c-1.064-.024-2.034-.328-2.852-1.029a3.665 3.665 0 01-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122 1.881-1.706 3.272-1.95 1.192-.21 2.314-.095 3.33.595.923.63 1.496 1.484 1.648 2.605.198 1.578-.257 2.863-1.344 3.962-.771.783-1.718 1.273-2.805 1.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045 2.033-.21.912.234 1.835 1.075 2.21.643.28 1.285.244 1.905-.07.923-.48 1.425-1.228 1.484-2.233z',\n },\n graphql: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M12.002 0a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277zm8.54 4.931a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277zm0 9.862a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277zm-8.54 4.931a2.138 2.138 0 1 0 0 4.276 2.138 2.138 0 1 0 0-4.276zm-8.542-4.93a2.138 2.138 0 1 0 0 4.276 2.138 2.138 0 1 0 0-4.277zm0-9.863a2.138 2.138 0 1 0 0 4.277 2.138 2.138 0 1 0 0-4.277zm8.542-3.378L2.953 6.777v10.448l9.049 5.224 9.047-5.224V6.777zm0 1.601 7.66 13.27H4.34zm-1.387.371L3.97 15.037V7.363zm2.774 0 6.646 3.838v7.674zM5.355 17.44h13.293l-6.646 3.836z',\n },\n python: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z',\n },\n md: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M22.27 19.385H1.73A1.73 1.73 0 010 17.655V6.345a1.73 1.73 0 011.73-1.73h20.54A1.73 1.73 0 0124 6.345v11.308a1.73 1.73 0 01-1.73 1.731zM5.769 15.923v-4.5l2.308 2.885 2.307-2.885v4.5h2.308V8.078h-2.308l-2.307 2.885-2.308-2.885H3.46v7.847zM21.232 12h-2.309V8.077h-2.307V12h-2.308l3.461 4.039z',\n },\n kotlin: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M24 24H0V0h24L12 12Z',\n },\n rust: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 00-.49-.328l-1.076.491c-.0872-.0476-.1742-.0952-.2623-.1407l-.1903-1.1673A.3483.3483 0 0016.256.955l-.9597.6905a8.4867 8.4867 0 00-.2855-.086l-.414-1.1066a.3483.3483 0 00-.5781-.1154l-.8069.8666a9.2936 9.2936 0 00-.2936-.0284L12.2946.1683a.3462.3462 0 00-.5892 0l-.6236 1.0073a13.7383 13.7383 0 00-.2936.0284L9.9803.3374a.3462.3462 0 00-.578.1154l-.4141 1.1065c-.0962.0274-.1903.0567-.2855.086L7.744.955a.3483.3483 0 00-.5447.2258L7.009 2.348a9.3574 9.3574 0 00-.2622.1407l-1.0762-.491a.3462.3462 0 00-.49.328l.0416 1.1845a7.9826 7.9826 0 00-.2278.1873L3.8413 3.425a.3472.3472 0 00-.4171.4171l.2713 1.1531c-.0628.075-.1255.1509-.1863.2268l-1.1845-.0415a.3462.3462 0 00-.328.49l.491 1.0761a9.167 9.167 0 00-.1407.2622l-1.1662.1894a.3483.3483 0 00-.2258.5446l.6904.9587a13.303 13.303 0 00-.087.2855l-1.1065.414a.3483.3483 0 00-.1155.5781l.8656.807a9.2936 9.2936 0 00-.0283.2935l-1.0073.6236a.3442.3442 0 000 .5892l1.0073.6236c.008.0982.0182.1964.0283.2936l-.8656.8079a.3462.3462 0 00.1155.578l1.1065.4141c.0273.0962.0567.1914.087.2855l-.6904.9587a.3452.3452 0 00.2268.5447l1.1662.1893c.0456.088.0922.1751.1408.2622l-.491 1.0762a.3462.3462 0 00.328.49l1.1834-.0415c.0618.0769.1235.1528.1873.2277l-.2713 1.1541a.3462.3462 0 00.4171.4161l1.153-.2713c.075.0638.151.1255.2279.1863l-.0415 1.1845a.3442.3442 0 00.49.327l1.0761-.49c.087.0486.1741.0951.2622.1407l.1903 1.1662a.3483.3483 0 00.5447.2268l.9587-.6904a9.299 9.299 0 00.2855.087l.414 1.1066a.3452.3452 0 00.5781.1154l.8079-.8656c.0972.0111.1954.0203.2936.0294l.6236 1.0073a.3472.3472 0 00.5892 0l.6236-1.0073c.0982-.0091.1964-.0183.2936-.0294l.8069.8656a.3483.3483 0 00.578-.1154l.4141-1.1066a8.4626 8.4626 0 00.2855-.087l.9587.6904a.3452.3452 0 00.5447-.2268l.1903-1.1662c.088-.0456.1751-.0931.2622-.1407l1.0762.49a.3472.3472 0 00.49-.327l-.0415-1.1845a6.7267 6.7267 0 00.2267-.1863l1.1531.2713a.3472.3472 0 00.4171-.416l-.2713-1.1542c.0628-.0749.1255-.1508.1863-.2278l1.1845.0415a.3442.3442 0 00.328-.49l-.49-1.076c.0475-.0872.0951-.1742.1407-.2623l1.1662-.1893a.3483.3483 0 00.2258-.5447l-.6904-.9587.087-.2855 1.1066-.414a.3462.3462 0 00.1154-.5781l-.8656-.8079c.0101-.0972.0202-.1954.0283-.2936l1.0073-.6236a.3442.3442 0 000-.5892zm-6.7413 8.3551a.7138.7138 0 01.2986-1.396.714.714 0 11-.2997 1.396zm-.3422-2.3142a.649.649 0 00-.7715.5l-.3573 1.6685c-1.1035.501-2.3285.7795-3.6193.7795a8.7368 8.7368 0 01-3.6951-.814l-.3574-1.6684a.648.648 0 00-.7714-.499l-1.473.3158a8.7216 8.7216 0 01-.7613-.898h7.1676c.081 0 .1356-.0141.1356-.088v-2.536c0-.074-.0536-.0881-.1356-.0881h-2.0966v-1.6077h2.2677c.2065 0 1.1065.0587 1.394 1.2088.0901.3533.2875 1.5044.4232 1.8729.1346.413.6833 1.2381 1.2685 1.2381h3.5716a.7492.7492 0 00.1296-.0131 8.7874 8.7874 0 01-.8119.9526zM6.8369 20.024a.714.714 0 11-.2997-1.396.714.714 0 01.2997 1.396zM4.1177 8.9972a.7137.7137 0 11-1.304.5791.7137.7137 0 011.304-.579zm-.8352 1.9813l1.5347-.6824a.65.65 0 00.33-.8585l-.3158-.7147h1.2432v5.6025H3.5669a8.7753 8.7753 0 01-.2834-3.348zm6.7343-.5437V8.7836h2.9601c.153 0 1.0792.1772 1.0792.8697 0 .575-.7107.7815-1.2948.7815zm10.7574 1.4862c0 .2187-.008.4363-.0243.651h-.9c-.09 0-.1265.0586-.1265.1477v.413c0 .973-.5487 1.1846-1.0296 1.2382-.4576.0517-.9648-.1913-1.0275-.4717-.2704-1.5186-.7198-1.8436-1.4305-2.4034.8817-.5599 1.799-1.386 1.799-2.4915 0-1.1936-.819-1.9458-1.3769-2.3153-.7825-.5163-1.6491-.6195-1.883-.6195H5.4682a8.7651 8.7651 0 014.907-2.7699l1.0974 1.151a.648.648 0 00.9182.0213l1.227-1.1743a8.7753 8.7753 0 016.0044 4.2762l-.8403 1.8982a.652.652 0 00.33.8585l1.6178.7188c.0283.2875.0425.577.0425.8717zm-9.3006-9.5993a.7128.7128 0 11.984 1.0316.7137.7137 0 01-.984-1.0316zm8.3389 6.71a.7107.7107 0 01.9395-.3625.7137.7137 0 11-.9405.3635z',\n },\n csharp: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M1.194 7.543v8.913c0 1.103.588 2.122 1.544 2.674l7.718 4.456a3.086 3.086 0 0 0 3.088 0l7.718-4.456a3.087 3.087 0 0 0 1.544-2.674V7.543a3.084 3.084 0 0 0-1.544-2.673L13.544.414a3.086 3.086 0 0 0-3.088 0L2.738 4.87a3.085 3.085 0 0 0-1.544 2.673Zm5.403 2.914v3.087a.77.77 0 0 0 .772.772.773.773 0 0 0 .772-.772.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546 2.314 2.314 0 1 1-4.631 0v-3.087c0-.615.244-1.203.679-1.637a2.312 2.312 0 0 1 3.274 0c.434.434.678 1.023.678 1.637a.769.769 0 0 1-.226.545.767.767 0 0 1-1.091 0 .77.77 0 0 1-.226-.545.77.77 0 0 0-.772-.772.771.771 0 0 0-.772.772Zm12.35 3.087a.77.77 0 0 1-.772.772h-.772v.772a.773.773 0 0 1-1.544 0v-.772h-1.544v.772a.773.773 0 0 1-1.317.546.775.775 0 0 1-.226-.546v-.772H12a.771.771 0 1 1 0-1.544h.772v-1.543H12a.77.77 0 1 1 0-1.544h.772v-.772a.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546v.772h1.544v-.772a.773.773 0 0 1 1.544 0v.772h.772a.772.772 0 0 1 0 1.544h-.772v1.543h.772a.776.776 0 0 1 .772.772Zm-3.088-2.315h-1.544v1.543h1.544v-1.543Z',\n },\n default: {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n d: 'M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z',\n },\n};\n\nexport interface IconOptions {\n shortcuts?: Record<string, string>;\n extend?: Record<string, CodeBlockIcon>;\n}\n\n/**\n * Inject icons to `icon` property (as HTML)\n */\nexport function transformerIcon(options: IconOptions = {}): ShikiTransformer {\n const shortcuts = {\n ...defaultShortcuts,\n ...options.shortcuts,\n };\n const icons = {\n ...defaultIcons,\n ...options.extend,\n };\n\n const defaultIcon = 'default' in icons ? icons.default : undefined;\n return {\n name: 'rehype-code:icon',\n pre(pre) {\n const lang = this.options.lang;\n if (!lang) return;\n\n const iconName = lang in shortcuts ? shortcuts[lang] : lang;\n const icon = iconName in icons ? icons[iconName] : defaultIcon;\n\n if (icon) {\n pre.properties.icon =\n typeof icon === 'string'\n ? icon\n : `<svg viewBox=\"${icon.viewBox}\"><path d=\"${icon.d}\" fill=\"${icon.fill}\" /></svg>`;\n }\n\n return pre;\n },\n };\n}\n","import type { Root } from 'hast';\nimport type { RehypeShikiOptions } from '@shikijs/rehype';\nimport rehypeShikiFromHighlighter from '@shikijs/rehype/core';\nimport {\n transformerNotationDiff,\n transformerNotationFocus,\n transformerNotationHighlight,\n transformerNotationWordHighlight,\n} from '@shikijs/transformers';\nimport type { Processor, Transformer } from 'unified';\nimport { type BuiltinTheme, bundledLanguages, type ShikiTransformer } from 'shiki';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport type { CodeBlockIcon, IconOptions } from './transformer-icon';\nimport { transformerIcon } from './transformer-icon';\nimport { defaultThemes, getHighlighter } from '@/highlight/shiki';\nimport { parseCodeBlockAttributes } from '@/mdx-plugins/codeblock-utils';\n\nexport const rehypeCodeDefaultOptions: RehypeCodeOptions = {\n lazy: true,\n themes: defaultThemes,\n defaultColor: false,\n defaultLanguage: 'plaintext',\n engine: 'js',\n transformers: [\n transformerNotationHighlight({\n matchAlgorithm: 'v3',\n }),\n transformerNotationWordHighlight({\n matchAlgorithm: 'v3',\n }),\n transformerNotationDiff({\n matchAlgorithm: 'v3',\n }),\n transformerNotationFocus({\n matchAlgorithm: 'v3',\n }),\n ],\n parseMetaString(meta) {\n const parsed = parseCodeBlockAttributes(meta, ['title', 'tab']);\n const data: Record<string, unknown> = parsed.attributes;\n parsed.rest = parseLineNumber(parsed.rest, data);\n\n data.__parsed_raw = parsed.rest;\n return data;\n },\n};\n\nfunction parseLineNumber(str: string, data: Record<string, unknown>) {\n return str.replace(/lineNumbers=(\\d+)|lineNumbers/, (_, ...args) => {\n data['data-line-numbers'] = true;\n\n if (args[0] !== undefined) data['data-line-numbers-start'] = Number(args[0]);\n\n return '';\n });\n}\n\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\n\nexport type RehypeCodeOptions = DistributiveOmit<RehypeShikiOptions, 'lazy'> & {\n /**\n * Load languages and themes on-demand.\n * @defaultValue true\n */\n lazy?: boolean;\n\n /**\n * The regex engine to use.\n *\n * @defaultValue 'js'\n */\n engine?: 'js' | 'oniguruma';\n\n /**\n * Filter meta string before processing\n */\n filterMetaString?: (metaString: string) => string;\n\n /**\n * Add icon to code blocks\n */\n icon?: IconOptions | false;\n\n /**\n * Wrap code blocks in `<Tab>` component when \"tab\" meta string presents\n *\n * @defaultValue true\n */\n tab?: boolean;\n};\n\n/**\n * Handle codeblocks\n */\nexport function rehypeCode(\n this: Processor,\n _options: Partial<RehypeCodeOptions> = {},\n): Transformer<Root, Root> {\n const options: RehypeCodeOptions = {\n ...rehypeCodeDefaultOptions,\n ..._options,\n };\n\n const transformers = [...(options.transformers ?? [])];\n transformers.unshift({\n name: 'rehype-code:pre-process',\n preprocess(code, { meta }) {\n if (meta && '__parsed_raw' in meta) {\n meta.__raw = meta.__parsed_raw;\n delete meta.__parsed_raw;\n }\n\n if (meta && options.filterMetaString) {\n meta.__raw = options.filterMetaString(meta.__raw ?? '');\n }\n\n // Remove empty line at end\n return code.replace(/\\n$/, '');\n },\n });\n\n if (options.icon !== false) {\n transformers.push(transformerIcon(options.icon));\n }\n\n if (options.tab !== false) {\n transformers.push(transformerTab());\n }\n\n const highlighter = getHighlighter(options.engine ?? 'js', {\n themes:\n 'themes' in options\n ? (Object.values(options.themes).filter(Boolean) as BuiltinTheme[])\n : [options.theme],\n langs:\n options.langs ?? (options.lazy ? ['js', 'jsx', 'ts', 'tsx'] : Object.keys(bundledLanguages)),\n langAlias: options.langAlias,\n });\n\n const transformer = highlighter.then((loaded) =>\n rehypeShikiFromHighlighter(loaded, {\n ...options,\n transformers,\n }),\n );\n\n return async (tree, file) => {\n await (\n await transformer\n )(tree, file, () => {\n // nothing\n });\n };\n}\n\nfunction transformerTab(): ShikiTransformer {\n return {\n name: 'rehype-code:tab',\n // @ts-expect-error -- types not compatible with MDX\n root(root) {\n const value = this.options.meta?.tab;\n if (typeof value !== 'string') return root;\n console.warn(\n '[Fumadocs] For `tab=\"value\" in codeblocks, please use `remarkCodeTab` plugin instead.',\n );\n\n return {\n type: 'root',\n children: [\n {\n type: 'mdxJsxFlowElement',\n name: 'Tab',\n data: {\n _codeblock: true,\n },\n attributes: [{ type: 'mdxJsxAttribute', name: 'value', value }],\n children: root.children,\n } as MdxJsxFlowElement,\n ],\n };\n },\n };\n}\n\nexport { type CodeBlockIcon, transformerIcon, transformerTab };\n"],"mappings":";;;;;;;AAUA,MAAMA,mBAA2C;CAC/C,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,KAAK;CACL,MAAM;CACN,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,MAAM;CACN,IAAI;CACJ,OAAO;CACP,KAAK;CACL,OAAO;CACR;AAID,MAAMC,eAA8C;CAClD,OAAO;EACL,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,KAAK;EACH,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,MAAM;EACJ,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,KAAK;EACH,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,OAAO;EACL,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,QAAQ;EACN,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,YAAY;EACV,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,YAAY;EACV,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,KAAK;EACH,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,aAAa;EACX,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,GAAG;EACD,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,KAAK;EACH,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,IAAI;EACF,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,SAAS;EACP,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,QAAQ;EACN,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,IAAI;EACF,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,QAAQ;EACN,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,MAAM;EACJ,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,QAAQ;EACN,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACD,SAAS;EACP,SAAS;EACT,MAAM;EACN,GAAG;EACJ;CACF;;;;AAUD,SAAgB,gBAAgB,UAAuB,EAAE,EAAoB;CAC3E,MAAM,YAAY;EAChB,GAAG;EACH,GAAG,QAAQ;EACZ;CACD,MAAM,QAAQ;EACZ,GAAG;EACH,GAAG,QAAQ;EACZ;CAED,MAAM,cAAc,aAAa,QAAQ,MAAM,UAAU;AACzD,QAAO;EACL,MAAM;EACN,IAAI,KAAK;GACP,MAAM,OAAO,KAAK,QAAQ;AAC1B,OAAI,CAAC,KAAM;GAEX,MAAM,WAAW,QAAQ,YAAY,UAAU,QAAQ;GACvD,MAAM,OAAO,YAAY,QAAQ,MAAM,YAAY;AAEnD,OAAI,KACF,KAAI,WAAW,OACb,OAAO,SAAS,WACZ,OACA,iBAAiB,KAAK,QAAQ,aAAa,KAAK,EAAE,UAAU,KAAK,KAAK;AAG9E,UAAO;;EAEV;;;;;ACvJH,MAAaC,2BAA8C;CACzD,MAAM;CACN,QAAQ;CACR,cAAc;CACd,iBAAiB;CACjB,QAAQ;CACR,cAAc;EACZ,6BAA6B,EAC3B,gBAAgB,MACjB,CAAC;EACF,iCAAiC,EAC/B,gBAAgB,MACjB,CAAC;EACF,wBAAwB,EACtB,gBAAgB,MACjB,CAAC;EACF,yBAAyB,EACvB,gBAAgB,MACjB,CAAC;EACH;CACD,gBAAgB,MAAM;EACpB,MAAM,SAAS,yBAAyB,MAAM,CAAC,SAAS,MAAM,CAAC;EAC/D,MAAMC,OAAgC,OAAO;AAC7C,SAAO,OAAO,gBAAgB,OAAO,MAAM,KAAK;AAEhD,OAAK,eAAe,OAAO;AAC3B,SAAO;;CAEV;AAED,SAAS,gBAAgB,KAAa,MAA+B;AACnE,QAAO,IAAI,QAAQ,kCAAkC,GAAG,GAAG,SAAS;AAClE,OAAK,uBAAuB;AAE5B,MAAI,KAAK,OAAO,OAAW,MAAK,6BAA6B,OAAO,KAAK,GAAG;AAE5E,SAAO;GACP;;;;;AAwCJ,SAAgB,WAEd,WAAuC,EAAE,EAChB;CACzB,MAAMC,UAA6B;EACjC,GAAG;EACH,GAAG;EACJ;CAED,MAAM,eAAe,CAAC,GAAI,QAAQ,gBAAgB,EAAE,CAAE;AACtD,cAAa,QAAQ;EACnB,MAAM;EACN,WAAW,MAAM,EAAE,QAAQ;AACzB,OAAI,QAAQ,kBAAkB,MAAM;AAClC,SAAK,QAAQ,KAAK;AAClB,WAAO,KAAK;;AAGd,OAAI,QAAQ,QAAQ,iBAClB,MAAK,QAAQ,QAAQ,iBAAiB,KAAK,SAAS,GAAG;AAIzD,UAAO,KAAK,QAAQ,OAAO,GAAG;;EAEjC,CAAC;AAEF,KAAI,QAAQ,SAAS,MACnB,cAAa,KAAK,gBAAgB,QAAQ,KAAK,CAAC;AAGlD,KAAI,QAAQ,QAAQ,MAClB,cAAa,KAAK,gBAAgB,CAAC;CAarC,MAAM,cAVc,eAAe,QAAQ,UAAU,MAAM;EACzD,QACE,YAAY,UACP,OAAO,OAAO,QAAQ,OAAO,CAAC,OAAO,QAAQ,GAC9C,CAAC,QAAQ,MAAM;EACrB,OACE,QAAQ,UAAU,QAAQ,OAAO;GAAC;GAAM;GAAO;GAAM;GAAM,GAAG,OAAO,KAAK,iBAAiB;EAC7F,WAAW,QAAQ;EACpB,CAAC,CAE8B,MAAM,WACpC,2BAA2B,QAAQ;EACjC,GAAG;EACH;EACD,CAAC,CACH;AAED,QAAO,OAAO,MAAM,SAAS;AAC3B,SACE,MAAM,aACN,MAAM,YAAY,GAElB;;;AAIN,SAAS,iBAAmC;AAC1C,QAAO;EACL,MAAM;EAEN,KAAK,MAAM;GACT,MAAM,QAAQ,KAAK,QAAQ,MAAM;AACjC,OAAI,OAAO,UAAU,SAAU,QAAO;AACtC,WAAQ,KACN,0FACD;AAED,UAAO;IACL,MAAM;IACN,UAAU,CACR;KACE,MAAM;KACN,MAAM;KACN,MAAM,EACJ,YAAY,MACb;KACD,YAAY,CAAC;MAAE,MAAM;MAAmB,MAAM;MAAS;MAAO,CAAC;KAC/D,UAAU,KAAK;KAChB,CACF;IACF;;EAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rehype-toc-CTG0x7La.js","names":["output: {\n title: JSXElement;\n url: string;\n depth: number;\n }[]","declaration: Declaration"],"sources":["../src/mdx-plugins/hast-utils.ts","../src/mdx-plugins/rehype-toc.ts"],"sourcesContent":["import type { Element, Root, RootContent } from 'hast';\n\n/**\n * Visit a node with filtered tag names\n */\nexport function visit(\n node: RootContent | Root,\n tagNames: string[],\n handler: (node: Element) => 'skip' | undefined,\n): void {\n if (node.type === 'element' && tagNames.includes(node.tagName)) {\n const result = handler(node);\n if (result === 'skip') return;\n }\n\n if ('children' in node)\n node.children.forEach((n) => {\n visit(n, tagNames, handler);\n });\n}\n","import type { Processor, Transformer } from 'unified';\nimport type { Root, RootContent } from 'hast';\nimport { toEstree } from 'hast-util-to-estree';\nimport type { Declaration, JSXElement } from 'estree-jsx';\nimport { visit } from '@/mdx-plugins/hast-utils';\n\nexport interface RehypeTocOptions {\n /**\n * Export generated toc as a variable\n *\n * @defaultValue true\n */\n exportToc?: boolean;\n}\n\nconst TocOnlyTag = '[toc]';\nconst NoTocTag = '[!toc]';\n\nexport function rehypeToc(\n this: Processor,\n { exportToc = true }: RehypeTocOptions = {},\n): Transformer<Root, Root> {\n return (tree) => {\n const output: {\n title: JSXElement;\n url: string;\n depth: number;\n }[] = [];\n\n visit(tree, ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], (element) => {\n const id = element.properties.id;\n if (typeof id !== 'string') return 'skip';\n let isTocOnly = false;\n\n const last = element.children.at(-1);\n if (last?.type === 'text' && last.value.endsWith(TocOnlyTag)) {\n isTocOnly = true;\n last.value = last.value.substring(0, last.value.length - TocOnlyTag.length).trimEnd();\n } else if (last?.type === 'text' && last.value.endsWith(NoTocTag)) {\n last.value = last.value.substring(0, last.value.length - NoTocTag.length).trimEnd();\n return 'skip';\n }\n\n const estree = toEstree(element, {\n elementAttributeNameCase: 'react',\n stylePropertyNameCase: 'dom',\n });\n\n if (estree.body[0].type === 'ExpressionStatement')\n output.push({\n title: estree.body[0].expression as unknown as JSXElement,\n depth: Number(element.tagName.slice(1)),\n url: `#${id}`,\n });\n\n if (isTocOnly) {\n Object.assign(element, {\n type: 'comment',\n value: '',\n } satisfies RootContent);\n }\n\n return 'skip';\n });\n\n const declaration: Declaration = {\n type: 'VariableDeclaration',\n kind: 'const',\n declarations: [\n {\n type: 'VariableDeclarator',\n id: {\n type: 'Identifier',\n name: 'toc',\n },\n init: {\n type: 'ArrayExpression',\n elements: output.map((item) => ({\n type: 'ObjectExpression',\n properties: [\n {\n type: 'Property',\n method: false,\n shorthand: false,\n computed: false,\n key: {\n type: 'Identifier',\n name: 'depth',\n },\n value: {\n type: 'Literal',\n value: item.depth,\n },\n kind: 'init',\n },\n {\n type: 'Property',\n method: false,\n shorthand: false,\n computed: false,\n key: {\n type: 'Identifier',\n name: 'url',\n },\n value: {\n type: 'Literal',\n value: item.url,\n },\n kind: 'init',\n },\n {\n type: 'Property',\n method: false,\n shorthand: false,\n computed: false,\n key: {\n type: 'Identifier',\n name: 'title',\n },\n value: {\n type: 'JSXFragment',\n openingFragment: { type: 'JSXOpeningFragment' },\n closingFragment: { type: 'JSXClosingFragment' },\n children: item.title.children,\n },\n kind: 'init',\n },\n ],\n })),\n },\n },\n ],\n };\n\n tree.children.push({\n type: 'mdxjsEsm',\n value: '',\n data: {\n estree: {\n type: 'Program',\n body: [\n exportToc\n ? {\n type: 'ExportNamedDeclaration',\n declaration,\n attributes: [],\n specifiers: [],\n }\n : declaration,\n ],\n sourceType: 'module',\n comments: [],\n },\n },\n } satisfies RootContent);\n };\n}\n"],"mappings":";;;;;;AAKA,SAAgB,MACd,MACA,UACA,SACM;AACN,KAAI,KAAK,SAAS,aAAa,SAAS,SAAS,KAAK,QAAQ,EAE5D;MADe,QAAQ,KAAK,KACb,OAAQ;;AAGzB,KAAI,cAAc,KAChB,MAAK,SAAS,SAAS,MAAM;AAC3B,QAAM,GAAG,UAAU,QAAQ;GAC3B;;;;;ACHN,MAAM,aAAa;AACnB,MAAM,WAAW;AAEjB,SAAgB,UAEd,EAAE,YAAY,SAA2B,EAAE,EAClB;AACzB,SAAQ,SAAS;EACf,MAAMA,SAIA,EAAE;AAER,QAAM,MAAM;GAAC;GAAM;GAAM;GAAM;GAAM;GAAM;GAAK,GAAG,YAAY;GAC7D,MAAM,KAAK,QAAQ,WAAW;AAC9B,OAAI,OAAO,OAAO,SAAU,QAAO;GACnC,IAAI,YAAY;GAEhB,MAAM,OAAO,QAAQ,SAAS,GAAG,GAAG;AACpC,OAAI,MAAM,SAAS,UAAU,KAAK,MAAM,SAAS,WAAW,EAAE;AAC5D,gBAAY;AACZ,SAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,KAAK,MAAM,SAAS,EAAkB,CAAC,SAAS;cAC5E,MAAM,SAAS,UAAU,KAAK,MAAM,SAAS,SAAS,EAAE;AACjE,SAAK,QAAQ,KAAK,MAAM,UAAU,GAAG,KAAK,MAAM,SAAS,EAAgB,CAAC,SAAS;AACnF,WAAO;;GAGT,MAAM,SAAS,SAAS,SAAS;IAC/B,0BAA0B;IAC1B,uBAAuB;IACxB,CAAC;AAEF,OAAI,OAAO,KAAK,GAAG,SAAS,sBAC1B,QAAO,KAAK;IACV,OAAO,OAAO,KAAK,GAAG;IACtB,OAAO,OAAO,QAAQ,QAAQ,MAAM,EAAE,CAAC;IACvC,KAAK,IAAI;IACV,CAAC;AAEJ,OAAI,UACF,QAAO,OAAO,SAAS;IACrB,MAAM;IACN,OAAO;IACR,CAAuB;AAG1B,UAAO;IACP;EAEF,MAAMC,cAA2B;GAC/B,MAAM;GACN,MAAM;GACN,cAAc,CACZ;IACE,MAAM;IACN,IAAI;KACF,MAAM;KACN,MAAM;KACP;IACD,MAAM;KACJ,MAAM;KACN,UAAU,OAAO,KAAK,UAAU;MAC9B,MAAM;MACN,YAAY;OACV;QACE,MAAM;QACN,QAAQ;QACR,WAAW;QACX,UAAU;QACV,KAAK;SACH,MAAM;SACN,MAAM;SACP;QACD,OAAO;SACL,MAAM;SACN,OAAO,KAAK;SACb;QACD,MAAM;QACP;OACD;QACE,MAAM;QACN,QAAQ;QACR,WAAW;QACX,UAAU;QACV,KAAK;SACH,MAAM;SACN,MAAM;SACP;QACD,OAAO;SACL,MAAM;SACN,OAAO,KAAK;SACb;QACD,MAAM;QACP;OACD;QACE,MAAM;QACN,QAAQ;QACR,WAAW;QACX,UAAU;QACV,KAAK;SACH,MAAM;SACN,MAAM;SACP;QACD,OAAO;SACL,MAAM;SACN,iBAAiB,EAAE,MAAM,sBAAsB;SAC/C,iBAAiB,EAAE,MAAM,sBAAsB;SAC/C,UAAU,KAAK,MAAM;SACtB;QACD,MAAM;QACP;OACF;MACF,EAAE;KACJ;IACF,CACF;GACF;AAED,OAAK,SAAS,KAAK;GACjB,MAAM;GACN,OAAO;GACP,MAAM,EACJ,QAAQ;IACN,MAAM;IACN,MAAM,CACJ,YACI;KACE,MAAM;KACN;KACA,YAAY,EAAE;KACd,YAAY,EAAE;KACf,GACD,YACL;IACD,YAAY;IACZ,UAAU,EAAE;IACb,EACF;GACF,CAAuB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rehype-toc-Dcgzd_Vy.d.ts","names":[],"sources":["../src/mdx-plugins/rehype-toc.ts"],"sourcesContent":[],"mappings":";;;;UAMiB,gBAAA;;AAAjB;AAYA;;;EAEwB,SAAA,CAAA,EAAA,OAAA;;AACH,iBAHL,SAAA,CAGK,IAAA,EAFb,SAEa,EAAA;EAAA;AAAA,CAAA,CAAA,EADG,gBACH,CAAA,EAAlB,WAAkB,CAAN,IAAM,EAAA,IAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-admonition-BvgS4oU1.d.ts","names":[],"sources":["../src/mdx-plugins/remark-admonition.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,uBAAA;;EAAA;AAgBjB;;EAAqF,OAAA,CAAA,EAVzE,MAUyE,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;;;iBAArE,gBAAA,WAA0B,0BAA+B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-code-tab-Ds_BdYXz.d.ts","names":[],"sources":["../src/mdx-plugins/remark-code-tab.ts"],"sourcesContent":[],"mappings":";;;;;KAMK,OAAA,gBAAuB;UACX,oBAAA;EADZ,IAAA,CAAA,EAEI,OAFG;EACK;AAShB;;;;EAAA,QAAA,CAAA,EAAA,OAAA;AAAA;eA6Hc,OAAA,CAAA;EACJ,UAAA,QAAA,CAAA;IAGN,GAAA,CAAA,EAAA,MAAA;EAvHU;;cAkJT,KA9ID,EAAA;EAAiB,aAAA,EAAA;IAmJN,OAAA,CAAA,SAAa,EApCd,SAoCc,EAAA,KAAA,EAnClB,IAmCkB,EAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,CAAA,EAhCxB,iBAgCwB;EACrB,CAAA;EACG,IAAA,EAAA;IACI,OAAA,CAAA,SAAA,EA1JA,SA0JA,EAAA,KAAA,EAzJJ,IAyJI,EAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,CAAA,EAtJV,iBAsJU;EAAM,CAAA;CAAlB;AAAW,iBAHE,aAAA,CAGF,IAAA,EAFN,SAEM,EAAA,OAAA,CAAA,EADH,oBACG,CAAA,EAAX,WAAW,CAAC,IAAD,EAAO,IAAP,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-directive-admonition-02cR5K1L.d.ts","names":[],"sources":["../src/mdx-plugins/remark-directive-admonition.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,gCAAA;;AAAjB;AAuBA;EAEI,IAAA,CAAA,EAAA;IACA,gBAAA,CAAA,EAAA,MAAA;IACA,YAAA,CAAA,EAAA,MAAA;IAEF,kBAAA,CAAA,EAAA,MAAA;EASC,CAAA;EAAoD;;;;;UAvB7C;;;;;;;iBAQM,yBAAA;;;;;;;IAeb,mCAAwC,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-feedback-block-fAyt4LdQ.d.ts","names":[],"sources":["../src/mdx-plugins/remark-feedback-block.ts"],"sourcesContent":[],"mappings":";;;;UAOiB,0BAAA;;AAAjB;AA+BA;EAWgB,YAAA,CAAA,EAAA,CAAA,GAAA,EAAA;IACd,IAAA,EAAA,MAAA;EACA,CAAA,EAAA,GAAA,MAAA;EACA;;;EAE+C,OAAA,CAAA,EAAA,MAAA;EAAM;;;;;;;;;;mBA1BpC;;;;;;;;UAUF,kBAAA;;;;;;;;;;iBAWD,mBAAA;;;;;IAKb,6BAAkC,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-heading-CSButCYt.d.ts","names":[],"sources":["../src/mdx-plugins/remark-heading.ts"],"sourcesContent":[],"mappings":";;;;;gCAUuC;IARI,WAAA,CAAA,EAAA;MAAA,EAAA,CAAA,EAAA,MAAA;IAQJ,CAAA;EAAI;;AAS1B,UAAA,oBAAA,CAAoB;EAqBrB,IAAA,CAAA,EAAA,CAAA,IAAA,EApBA,IAoBa,EAAA,OAAA,EApBE,OAoBF,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EACrB;;;;;EAGyC,QAAA,CAAA,EAAA,OAAA;EAAlB;;;;;;;;;;iBAJf,aAAA;QACR;;;IAGL,uBAA4B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-image-C3MnP-3r.d.ts","names":[],"sources":["../src/mdx-plugins/remark-image.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;;AAVsC;AAmB3C;EA4DgB,OAAA,CAAA,EAAA,MAAW;CACzB,GAAA,OAAA;AACA,UA9De,kBAAA,CA8Df;EACA;;;EAGC,SAAA,CAAA,EAAA,MAAA;EAAsC;;;;;;;;;;;;;;;mDA5CU;;;;;;;;;;;;;;;;;;;;aAsBtC;;;;;iBAgBG,WAAA;;;;;;IAMb,qBAA0B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-mdx-files-BXUiiX3M.d.ts","names":[],"sources":["../src/mdx-plugins/remark-mdx-files.ts"],"sourcesContent":[],"mappings":";;;;;UAOiB,QAAA;;EAAA,IAAA,EAAA,MAAQ;EAMR,IAAA,EAAA,MAAA;AAOjB;AAIK,UAXY,UAAA,CAWL;EAEK,KAAA,EAAA,MAAA;EAKA,IAAA,EAAA,QAAA;EAAe,IAAA,EAAA,MAAA;EAAiB,QAAA,EAdrC,IAcqC,EAAA;;AA+GjC,UA1HC,YAAA,CA0Ha;EAAU,cAAA,EAAA,OAAA;;KAtHnC,IAAA,GAAO,QAsH2E,GAtHhE,UAsHgE;AAAlB,UApHpD,qBAAA,CAoHoD;EAAW;;;;iBA/G/D,eAAe,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+GjC,cAAA,WAAwB,wBAA6B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-mdx-mermaid-C5ZBxx8x.d.ts","names":[],"sources":["../src/mdx-plugins/remark-mdx-mermaid.ts"],"sourcesContent":[],"mappings":";;;;UAoBiB,uBAAA;;AAAjB;AAUA;EAA0C,IAAA,CAAA,EAAA,MAAA;;;;;iBAA1B,gBAAA,WAA0B,0BAA+B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-npm-DADZg0pf.d.ts","names":[],"sources":["../src/mdx-plugins/remark-npm.ts"],"sourcesContent":[],"mappings":";;;;UAMU,cAAA;;EAAA;AAcV;AAoBA;EACE,KAAA,CAAA,EAAA,MAAA;EACA;;;EAM2C,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,MAAA,GAAA,SAAA;;AAAP,UA5BrB,gBAAA,CA4BqB;;;;;;;;;oBAhBlB;;;;;iBAQJ,SAAA;;;IAQb,mBAAwB,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-steps-CWEE34cT.d.ts","names":[],"sources":["../src/mdx-plugins/remark-steps.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,kBAAA;;AAAjB;AAqBA;;;EAGG,KAAA,CAAA,EAAA,MAAA;EAAsC;;;;;;;;;;iBAHzB,WAAA;;;IAGb,qBAA0B,YAAY,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remark-structure-ChKxMXnK.d.ts","names":[],"sources":["../src/mdx-plugins/remark-structure.ts"],"sourcesContent":[],"mappings":";;;;;UAaU,SAAA;;EAAA,OAAA,EAAA,MAAO;AAAA;AAUjB,UALU,OAAA,CAKO;EAQA,OAAA,EAAA,MAAA,GAAA,SAAgB;EAMJ,OAAA,EAAA,MAAA;;AAYV,UA1BF,cAAA,CA0BE;EAAkB,QAAA,EAzBzB,SAyByB,EAAA;EAAyB;AAO7D;;UAAA,EA5BW,OA4BX,EAAA;;AAAA,UAzBgB,gBAAA,CAyBhB;EAAA;;;;;EAoBY,KAAA,CAAA,EAAA,MAAA,EAAA,GAAA,CAAA,CAAA,IAAA,EAvCgB,KA+CS,EAAA,GAAA,OAAA,CAAA;EAOtB;;;;;;EAI6B,oBAAA,CAAA,EAAA,MAAA,EAAA,GAAA,CAAA,CAAA,IAAA,EA/C/B,iBA+C+B,EAAA,SAAA,EA9C1B,eA8C0B,GA9CR,yBA8CQ,EAAA,GAAA,OAAA,CAAA;EAAlB;;AAwG3B;EAEiB,QAAA,CAAA,EAAA,MAAA,GAAA,OAAA;;eAEd,OAAA,CAAA;EAAc,UAAA,IAAA,CAAA;;;;;;;;;;;;oBAnIG;;;cAIP;;+BAQyB;;;;;;;;iBAOtB,eAAA;;;;IAIb,mBAAwB,YAAY,MAAM;;;;iBAwG7B,SAAA,kCAEC,yBACN,mBACR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove-undefined-Buxsprgu.js","names":[],"sources":["../src/utils/remove-undefined.ts"],"sourcesContent":["export function removeUndefined<T extends object>(value: T, deep = false): T {\n const obj = value as Record<string, unknown>;\n\n for (const key in obj) {\n if (obj[key] === undefined) delete obj[key];\n if (!deep) continue;\n\n const entry = obj[key];\n\n if (typeof entry === 'object' && entry !== null) {\n removeUndefined(entry, deep);\n continue;\n }\n\n if (Array.isArray(entry)) {\n for (const item of entry) removeUndefined(item, deep);\n }\n }\n\n return value;\n}\n"],"mappings":";AAAA,SAAgB,gBAAkC,OAAU,OAAO,OAAU;CAC3E,MAAM,MAAM;AAEZ,MAAK,MAAM,OAAO,KAAK;AACrB,MAAI,IAAI,SAAS,OAAW,QAAO,IAAI;AACvC,MAAI,CAAC,KAAM;EAEX,MAAM,QAAQ,IAAI;AAElB,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,mBAAgB,OAAO,KAAK;AAC5B;;AAGF,MAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,QAAQ,MAAO,iBAAgB,MAAM,KAAK;;AAIzD,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"algolia.js","names":["indexes: BaseIndex[]"],"sources":["../../src/search/algolia.ts"],"sourcesContent":["import type { Algoliasearch } from 'algoliasearch';\nimport type { StructuredData } from '@/mdx-plugins/remark-structure';\n\nexport interface DocumentRecord {\n /**\n * The ID of document, must be unique\n */\n _id: string;\n\n title: string;\n description?: string;\n breadcrumbs?: string[];\n\n /**\n * URL to the page\n */\n url: string;\n structured: StructuredData;\n\n /**\n * Tag to filter results\n */\n tag?: string;\n\n /**\n * Data to be added to each section index\n */\n extra_data?: object;\n}\n\nexport interface SyncOptions {\n /**\n * Index Name for documents.\n */\n indexName?: string;\n\n /**\n * Search indexes\n */\n documents: DocumentRecord[];\n}\n\n/**\n * Update index settings and replace all objects\n *\n * @param client - Algolia Admin Client\n * @param options - Index Options\n */\nexport async function sync(client: Algoliasearch, options: SyncOptions): Promise<void> {\n const { indexName = 'document', documents } = options;\n await setIndexSettings(client, indexName);\n await updateDocuments(client, indexName, documents);\n}\n\nexport async function setIndexSettings(client: Algoliasearch, indexName: string): Promise<void> {\n await client.setSettings({\n indexName,\n indexSettings: {\n attributeForDistinct: 'page_id',\n attributesToRetrieve: ['title', 'section', 'content', 'url', 'section_id', 'breadcrumbs'],\n searchableAttributes: ['title', 'section', 'content'],\n attributesToSnippet: [],\n attributesForFaceting: ['tag'],\n },\n });\n}\n\nfunction toIndex(page: DocumentRecord): BaseIndex[] {\n let id = 0;\n const indexes: BaseIndex[] = [];\n const scannedHeadings = new Set<string>();\n\n function createIndex(\n section: string | undefined,\n sectionId: string | undefined,\n content: string,\n ): BaseIndex {\n return {\n objectID: `${page._id}-${(id++).toString()}`,\n breadcrumbs: page.breadcrumbs,\n title: page.title,\n url: page.url,\n page_id: page._id,\n tag: page.tag,\n section,\n section_id: sectionId,\n content,\n ...page.extra_data,\n };\n }\n\n if (page.description) indexes.push(createIndex(undefined, undefined, page.description));\n const { headings, contents } = page.structured;\n\n for (const p of contents) {\n const heading = p.heading ? headings.find((h) => p.heading === h.id) : null;\n\n const index = createIndex(heading?.content, heading?.id, p.content);\n\n if (heading && !scannedHeadings.has(heading.id)) {\n scannedHeadings.add(heading.id);\n\n indexes.push(createIndex(heading.content, heading.id, heading.content));\n }\n\n indexes.push(index);\n }\n\n return indexes;\n}\n\nexport async function updateDocuments(\n client: Algoliasearch,\n indexName: string,\n documents: DocumentRecord[],\n): Promise<void> {\n const objects = documents.flatMap(toIndex);\n\n await client.replaceAllObjects({\n indexName,\n objects: objects as unknown as Record<string, unknown>[],\n });\n}\n\nexport interface BaseIndex {\n objectID: string;\n title: string;\n url: string;\n tag?: string;\n\n /**\n * The id of page, used for distinct\n */\n page_id: string;\n\n /**\n * Heading content\n */\n section?: string;\n\n /**\n * Heading (anchor) id\n */\n section_id?: string;\n\n breadcrumbs?: string[];\n\n content: string;\n}\n"],"mappings":";;;;;;;AAgDA,eAAsB,KAAK,QAAuB,SAAqC;CACrF,MAAM,EAAE,YAAY,YAAY,cAAc;AAC9C,OAAM,iBAAiB,QAAQ,UAAU;AACzC,OAAM,gBAAgB,QAAQ,WAAW,UAAU;;AAGrD,eAAsB,iBAAiB,QAAuB,WAAkC;AAC9F,OAAM,OAAO,YAAY;EACvB;EACA,eAAe;GACb,sBAAsB;GACtB,sBAAsB;IAAC;IAAS;IAAW;IAAW;IAAO;IAAc;IAAc;GACzF,sBAAsB;IAAC;IAAS;IAAW;IAAU;GACrD,qBAAqB,EAAE;GACvB,uBAAuB,CAAC,MAAM;GAC/B;EACF,CAAC;;AAGJ,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAMA,UAAuB,EAAE;CAC/B,MAAM,kCAAkB,IAAI,KAAa;CAEzC,SAAS,YACP,SACA,WACA,SACW;AACX,SAAO;GACL,UAAU,GAAG,KAAK,IAAI,IAAI,MAAM,UAAU;GAC1C,aAAa,KAAK;GAClB,OAAO,KAAK;GACZ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,KAAK,KAAK;GACV;GACA,YAAY;GACZ;GACA,GAAG,KAAK;GACT;;AAGH,KAAI,KAAK,YAAa,SAAQ,KAAK,YAAY,QAAW,QAAW,KAAK,YAAY,CAAC;CACvF,MAAM,EAAE,UAAU,aAAa,KAAK;AAEpC,MAAK,MAAM,KAAK,UAAU;EACxB,MAAM,UAAU,EAAE,UAAU,SAAS,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;EAEvE,MAAM,QAAQ,YAAY,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ;AAEnE,MAAI,WAAW,CAAC,gBAAgB,IAAI,QAAQ,GAAG,EAAE;AAC/C,mBAAgB,IAAI,QAAQ,GAAG;AAE/B,WAAQ,KAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,CAAC;;AAGzE,UAAQ,KAAK,MAAM;;AAGrB,QAAO;;AAGT,eAAsB,gBACpB,QACA,WACA,WACe;CACf,MAAM,UAAU,UAAU,QAAQ,QAAQ;AAE1C,OAAM,OAAO,kBAAkB;EAC7B;EACS;EACV,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","names":[],"sources":["../../src/search/client/fetch.ts","../../src/search/client/static.ts","../../src/search/client/algolia.ts","../../src/search/client/orama-cloud.ts","../../src/search/client/orama-cloud-legacy.ts","../../src/search/client/mixedbread.ts","../../src/search/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;UAEiB,YAAA;;;;;;;;;;;;;AAAjB;;;;;UCIiB,aAAA;;;;;;;mCAQkB,WAAW,QAAQ;;;;;;ADZtD;;;;;;UEEiB,cAAA;;UAEP;;;;;;+DAaH;aACM,eAAe;;AFlB5B;;;UGWiB,iBAAA;UACP;;;;;;;WAOC,QAAQ;;;;EHnBF,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UGOA,uBAAA;UACP;;;;;;;WAOC;;;;EJnBM,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UIAA,iBAAA;;;;;;;;UASP;;;;ELbO,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UKKP,aAAA;;;;;WAKC;INdM,KAAA,CAAA,EMeL,KNfiB;;;KMmBjB,MAAA;ELfK,IAAA,EAAA,OAAA;CAQkB,GKU3B,YLV2B,CAAA,GAAA,CAAA;EAAmB,IAAA,EAAA,QAAA;CAAR,GKatC,aLbsC,CAAA,GAAA,CAAA;EAAO,IAAA,EAAA,SAAA;IKgB7C;;IAGA;EJ7BS,IAAA,EAAA,oBAAc;CAErB,GI8BF,uBJ9BE,CAAA,GAAA,CAAA;EAckB,IAAA,EAAA,YAAA;CAAf,GImBL,iBJnBK,CAAA;;;;;;ACPI,iBGwDD,aAAA,CHxDkB,aAAA,EGyDjB,MHzDiB,GAAA;EACxB;;;;;;;ACDV;;;;ECPiB,UAAA,CAAA,EAAA,OAAiB;UC+EzB,iBACN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","names":["search"],"sources":["../../src/utils/use-debounce.ts","../../src/search/client.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<T>(value: T, delayMs = 1000): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n if (delayMs === 0) return;\n const handler = window.setTimeout(() => {\n setDebouncedValue(value);\n }, delayMs);\n\n return () => clearTimeout(handler);\n }, [delayMs, value]);\n\n if (delayMs === 0) return value;\n return debouncedValue;\n}\n","import { type DependencyList, useRef, useState } from 'react';\nimport { useDebounce } from '@/utils/use-debounce';\nimport { type FetchOptions } from '@/search/client/fetch';\nimport { useOnChange } from '@/utils/use-on-change';\nimport { type StaticOptions } from '@/search/client/static';\nimport { type AlgoliaOptions } from '@/search/client/algolia';\nimport { type OramaCloudOptions } from '@/search/client/orama-cloud';\nimport { type OramaCloudLegacyOptions } from '@/search/client/orama-cloud-legacy';\nimport { type MixedbreadOptions } from '@/search/client/mixedbread';\nimport type { SortedResult } from '@/search';\n\ninterface UseDocsSearch {\n search: string;\n setSearch: (v: string) => void;\n query: {\n isLoading: boolean;\n data?: SortedResult[] | 'empty';\n error?: Error;\n };\n}\n\nexport type Client =\n | ({\n type: 'fetch';\n } & FetchOptions)\n | ({\n type: 'static';\n } & StaticOptions)\n | ({\n type: 'algolia';\n } & AlgoliaOptions)\n | ({\n type: 'orama-cloud';\n } & OramaCloudOptions)\n | ({\n type: 'orama-cloud-legacy';\n } & OramaCloudLegacyOptions)\n | ({\n type: 'mixedbread';\n } & MixedbreadOptions);\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return b.length === a.length && a.every((v, i) => isDeepEqual(v, b[i]));\n }\n\n if (typeof a === 'object' && a && typeof b === 'object' && b) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.hasOwn(b, key) && isDeepEqual(a[key as keyof object], b[key as keyof object]),\n )\n );\n }\n\n return false;\n}\n\n/**\n * Provide a hook to query different official search clients.\n *\n * Note: it will re-query when its parameters changed, make sure to use `useMemo()` on `clientOptions` or define `deps` array.\n */\nexport function useDocsSearch(\n clientOptions: Client & {\n /**\n * The debounced delay for performing a search (in ms).\n * .\n * @defaultValue 100\n */\n delayMs?: number;\n\n /**\n * still perform search even if query is empty.\n *\n * @defaultValue false\n */\n allowEmpty?: boolean;\n },\n deps?: DependencyList,\n): UseDocsSearch {\n const { delayMs = 100, allowEmpty = false, ...client } = clientOptions;\n\n const [search, setSearch] = useState('');\n const [results, setResults] = useState<SortedResult[] | 'empty'>('empty');\n const [error, setError] = useState<Error>();\n const [isLoading, setIsLoading] = useState(false);\n const debouncedValue = useDebounce(search, delayMs);\n const onStart = useRef<() => void>(undefined);\n\n useOnChange(\n [deps ?? clientOptions, debouncedValue],\n () => {\n if (onStart.current) {\n onStart.current();\n onStart.current = undefined;\n }\n\n setIsLoading(true);\n let interrupt = false;\n onStart.current = () => {\n interrupt = true;\n };\n\n async function run(): Promise<SortedResult[] | 'empty'> {\n if (debouncedValue.length === 0 && !allowEmpty) return 'empty';\n switch (client.type) {\n case 'fetch': {\n const { fetchDocs } = await import('./client/fetch');\n return fetchDocs(debouncedValue, client);\n }\n case 'algolia': {\n const { searchDocs } = await import('./client/algolia');\n return searchDocs(debouncedValue, client);\n }\n case 'orama-cloud': {\n const { searchDocs } = await import('./client/orama-cloud');\n return searchDocs(debouncedValue, client);\n }\n case 'orama-cloud-legacy': {\n const { searchDocs } = await import('./client/orama-cloud-legacy');\n return searchDocs(debouncedValue, client);\n }\n case 'mixedbread': {\n const { search } = await import('./client/mixedbread');\n return search(debouncedValue, client);\n }\n case 'static': {\n const { search } = await import('./client/static');\n return search(debouncedValue, client);\n }\n default:\n throw new Error('unknown search client');\n }\n }\n\n void run()\n .then((res) => {\n if (interrupt) return;\n\n setError(undefined);\n setResults(res);\n })\n .catch((err: Error) => {\n setError(err);\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n deps ? undefined : (a, b) => !isDeepEqual(a, b),\n );\n\n return { search, setSearch, query: { isLoading, data: results, error } };\n}\n\nexport type { OramaCloudOptions, FetchOptions, StaticOptions, AlgoliaOptions };\n"],"mappings":";;;;AAEA,SAAgB,YAAe,OAAU,UAAU,KAAS;CAC1D,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,MAAM;AAE3D,iBAAgB;AACd,MAAI,YAAY,EAAG;EACnB,MAAM,UAAU,OAAO,iBAAiB;AACtC,qBAAkB,MAAM;KACvB,QAAQ;AAEX,eAAa,aAAa,QAAQ;IACjC,CAAC,SAAS,MAAM,CAAC;AAEpB,KAAI,YAAY,EAAG,QAAO;AAC1B,QAAO;;;;;AC0BT,SAAS,YAAY,GAAY,GAAqB;AACpD,KAAI,MAAM,EAAG,QAAO;AAEpB,KAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,CACtC,QAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC;AAGzE,KAAI,OAAO,MAAM,YAAY,KAAK,OAAO,MAAM,YAAY,GAAG;EAC5D,MAAM,QAAQ,OAAO,KAAK,EAAE;EAC5B,MAAM,QAAQ,OAAO,KAAK,EAAE;AAE5B,SACE,MAAM,WAAW,MAAM,UACvB,MAAM,OACH,QACC,OAAO,OAAO,GAAG,IAAI,IAAI,YAAY,EAAE,MAAsB,EAAE,KAAqB,CACvF;;AAIL,QAAO;;;;;;;AAQT,SAAgB,cACd,eAeA,MACe;CACf,MAAM,EAAE,UAAU,KAAK,aAAa,OAAO,GAAG,WAAW;CAEzD,MAAM,CAAC,QAAQ,aAAa,SAAS,GAAG;CACxC,MAAM,CAAC,SAAS,cAAc,SAAmC,QAAQ;CACzE,MAAM,CAAC,OAAO,YAAY,UAAiB;CAC3C,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,iBAAiB,YAAY,QAAQ,QAAQ;CACnD,MAAM,UAAU,OAAmB,OAAU;AAE7C,aACE,CAAC,QAAQ,eAAe,eAAe,QACjC;AACJ,MAAI,QAAQ,SAAS;AACnB,WAAQ,SAAS;AACjB,WAAQ,UAAU;;AAGpB,eAAa,KAAK;EAClB,IAAI,YAAY;AAChB,UAAQ,gBAAgB;AACtB,eAAY;;EAGd,eAAe,MAAyC;AACtD,OAAI,eAAe,WAAW,KAAK,CAAC,WAAY,QAAO;AACvD,WAAQ,OAAO,MAAf;IACE,KAAK,SAAS;KACZ,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,YAAO,UAAU,gBAAgB,OAAO;;IAE1C,KAAK,WAAW;KACd,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,YAAO,WAAW,gBAAgB,OAAO;;IAE3C,KAAK,eAAe;KAClB,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,YAAO,WAAW,gBAAgB,OAAO;;IAE3C,KAAK,sBAAsB;KACzB,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,YAAO,WAAW,gBAAgB,OAAO;;IAE3C,KAAK,cAAc;KACjB,MAAM,EAAE,qBAAW,MAAM,OAAO;AAChC,YAAOA,SAAO,gBAAgB,OAAO;;IAEvC,KAAK,UAAU;KACb,MAAM,EAAE,qBAAW,MAAM,OAAO;AAChC,YAAOA,SAAO,gBAAgB,OAAO;;IAEvC,QACE,OAAM,IAAI,MAAM,wBAAwB;;;AAI9C,EAAK,KAAK,CACP,MAAM,QAAQ;AACb,OAAI,UAAW;AAEf,YAAS,OAAU;AACnB,cAAW,IAAI;IACf,CACD,OAAO,QAAe;AACrB,YAAS,IAAI;IACb,CACD,cAAc;AACb,gBAAa,MAAM;IACnB;IAEN,OAAO,UAAa,GAAG,MAAM,CAAC,YAAY,GAAG,EAAE,CAChD;AAED,QAAO;EAAE;EAAQ;EAAW,OAAO;GAAE;GAAW,MAAM;GAAS;GAAO;EAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/search/index.ts"],"sourcesContent":[],"mappings":";;;UAEiB;;EAAA,GAAA,EAAA,MAAA;EAIN,IAAA,EAAA,MAAA,GAAA,SAAA,GAAA,MAAA;EAKK,OAAA,EALL,OAKK;EAC0B;;;EAG9B,WAAA,CAAA,EAJI,OAIa,EAAA;EAEZ,qBAAe,CAAA,EALN,eAOf,CAP+B,OAOxB,CAAA,EAAA;AA0BlB;KA9BY,iBAAA,GAAoB,aAAa;UAE5B;;WAEN;;;;;iBA0BK,wBAAA,iBAAyC;8BAIzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud-legacy.d.ts","names":[],"sources":["../../src/search/orama-cloud-legacy.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAGiB,WAAA;;;;;aAMJ;;AANb;AAgBA;;;EAUW,UAAA,CAAA,EAAA,OAAA;;AAVkC,UAA5B,eAAA,SAAwB,IAAI,CAAC,WAAD,EAAA,OAAA,GAAA,WAAA,CAAA,CAAA;EAc5B;AA2BjB;AA4BA;;;EAA8E,OAAA,EA/DnE,MA+DmE,CAAA,MAAA,EAAA,MAAA,CAAA;EAAO,SAAA,EAAA;IAQ/D,MAAA,EAAQ,MAAA;IACd,KAAA,EApEL,aAoEK,EAAA;EACL,CAAA,EAAA;;AACD,UAlEO,aAAA,CAkEP;;;;;;;;;;;cArDI;;;;;;;;;;;UAcG,UAAA;;;;;;;;;;;;;;;;;;;;iBA4BK,IAAA,eAAmB,uBAAuB,cAAc;iBAQxD,QAAA,eACN,uBACL,kBACR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud-legacy.js","names":["indexes: OramaIndex[]"],"sources":["../../src/search/orama-cloud-legacy.ts"],"sourcesContent":["import type { CloudManager } from '@oramacloud/client';\nimport type { StructuredData } from '@/mdx-plugins';\n\nexport interface SyncOptions {\n /**\n * Index name to sync\n */\n index: string;\n\n documents: OramaDocument[];\n\n /**\n * Deploy changes\n *\n * @defaultValue true\n */\n autoDeploy?: boolean;\n}\n\nexport interface I18nSyncOptions extends Omit<SyncOptions, 'index' | 'documents'> {\n /**\n * Indexes to sync.\n *\n * Pairs of `locale`-`index`.\n **/\n indexes: Record<string, string>;\n\n documents: {\n locale: string;\n items: OramaDocument[];\n }[];\n}\n\nexport interface OramaDocument {\n /**\n * The ID of document, must be unique\n */\n id: string;\n\n title: string;\n description?: string;\n\n /**\n * URL to the page\n */\n url: string;\n structured: StructuredData;\n\n /**\n * Tag to filter results\n */\n tag?: string;\n\n /**\n * Data to be added to each section index\n */\n extra_data?: object;\n breadcrumbs?: string[];\n}\n\nexport interface OramaIndex {\n id: string;\n\n title: string;\n url: string;\n\n tag?: string;\n\n /**\n * The id of page, used for `group by`\n */\n page_id: string;\n\n /**\n * Heading content\n */\n section?: string;\n\n breadcrumbs?: string[];\n\n /**\n * Heading (anchor) id\n */\n section_id?: string;\n\n content: string;\n}\n\nexport async function sync(cloudManager: CloudManager, options: SyncOptions): Promise<void> {\n const { autoDeploy = true } = options;\n const index = cloudManager.index(options.index);\n\n await index.snapshot(options.documents.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\n}\n\nexport async function syncI18n(\n cloudManager: CloudManager,\n options: I18nSyncOptions,\n): Promise<void> {\n const { autoDeploy = true } = options;\n\n const tasks = options.documents.map(async (document) => {\n const index = cloudManager.index(options.indexes[document.locale]);\n\n await index.snapshot(document.items.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\n });\n\n await Promise.all(tasks);\n}\n\nfunction toIndex(page: OramaDocument): OramaIndex[] {\n let id = 0;\n const indexes: OramaIndex[] = [];\n const scannedHeadings = new Set<string>();\n\n function createIndex(\n section: string | undefined,\n sectionId: string | undefined,\n content: string,\n ): OramaIndex {\n return {\n id: `${page.id}-${(id++).toString()}`,\n title: page.title,\n url: page.url,\n page_id: page.id,\n tag: page.tag,\n section,\n section_id: sectionId,\n content,\n breadcrumbs: page.breadcrumbs,\n ...page.extra_data,\n };\n }\n\n if (page.description) indexes.push(createIndex(undefined, undefined, page.description));\n\n page.structured.contents.forEach((p) => {\n const heading = p.heading ? page.structured.headings.find((h) => p.heading === h.id) : null;\n\n const index = createIndex(heading?.content, heading?.id, p.content);\n\n if (heading && !scannedHeadings.has(heading.id)) {\n scannedHeadings.add(heading.id);\n\n indexes.push(createIndex(heading.content, heading.id, heading.content));\n }\n\n indexes.push(index);\n });\n\n return indexes;\n}\n"],"mappings":";AAwFA,eAAsB,KAAK,cAA4B,SAAqC;CAC1F,MAAM,EAAE,aAAa,SAAS;CAC9B,MAAM,QAAQ,aAAa,MAAM,QAAQ,MAAM;AAE/C,OAAM,MAAM,SAAS,QAAQ,UAAU,QAAQ,QAAQ,CAAC;AACxD,KAAI,WAAY,OAAM,MAAM,QAAQ;;AAGtC,eAAsB,SACpB,cACA,SACe;CACf,MAAM,EAAE,aAAa,SAAS;CAE9B,MAAM,QAAQ,QAAQ,UAAU,IAAI,OAAO,aAAa;EACtD,MAAM,QAAQ,aAAa,MAAM,QAAQ,QAAQ,SAAS,QAAQ;AAElE,QAAM,MAAM,SAAS,SAAS,MAAM,QAAQ,QAAQ,CAAC;AACrD,MAAI,WAAY,OAAM,MAAM,QAAQ;GACpC;AAEF,OAAM,QAAQ,IAAI,MAAM;;AAG1B,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAMA,UAAwB,EAAE;CAChC,MAAM,kCAAkB,IAAI,KAAa;CAEzC,SAAS,YACP,SACA,WACA,SACY;AACZ,SAAO;GACL,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,UAAU;GACnC,OAAO,KAAK;GACZ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,KAAK,KAAK;GACV;GACA,YAAY;GACZ;GACA,aAAa,KAAK;GAClB,GAAG,KAAK;GACT;;AAGH,KAAI,KAAK,YAAa,SAAQ,KAAK,YAAY,QAAW,QAAW,KAAK,YAAY,CAAC;AAEvF,MAAK,WAAW,SAAS,SAAS,MAAM;EACtC,MAAM,UAAU,EAAE,UAAU,KAAK,WAAW,SAAS,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;EAEvF,MAAM,QAAQ,YAAY,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ;AAEnE,MAAI,WAAW,CAAC,gBAAgB,IAAI,QAAQ,GAAG,EAAE;AAC/C,mBAAgB,IAAI,QAAQ,GAAG;AAE/B,WAAQ,KAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,CAAC;;AAGzE,UAAQ,KAAK,MAAM;GACnB;AAEF,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud.d.ts","names":[],"sources":["../../src/search/orama-cloud.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAGiB,WAAA;;;;;aAMJ;;AANb;AAgBA;;;EAUW,UAAA,CAAA,EAAA,OAAA;;AAVkC,UAA5B,eAAA,SAAwB,IAAI,CAAC,WAAD,EAAA,OAAA,GAAA,WAAA,CAAA,CAAA;EAc5B;AA2BjB;AA4BA;;;EAAqE,OAAA,EA/D1D,MA+D0D,CAAA,MAAA,EAAA,MAAA,CAAA;EAAO,SAAA,EAAA;IAYtD,MAAA,EAAQ,MAAA;IAAQ,KAAA,EAvE3B,aAuE2B,EAAA;EAAqB,CAAA,EAAA;;AAAyB,UAnEnE,aAAA,CAmEmE;;;;;;;;;;;cAtDtE;;;;;;;;;;;UAcG,UAAA;;;;;;;;;;;;;;;;;;;;iBA4BK,IAAA,QAAY,qBAAqB,cAAc;iBAY/C,QAAA,QAAgB,qBAAqB,kBAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"orama-cloud.js","names":["indexes: OramaIndex[]"],"sources":["../../src/search/orama-cloud.ts"],"sourcesContent":["import type { StructuredData } from '@/mdx-plugins';\nimport { type AnyObject, type OramaCloud } from '@orama/core';\n\nexport interface SyncOptions {\n /**\n * Index name to sync\n */\n index: string;\n\n documents: OramaDocument[];\n\n /**\n * Deploy changes\n *\n * @defaultValue true\n */\n autoDeploy?: boolean;\n}\n\nexport interface I18nSyncOptions extends Omit<SyncOptions, 'index' | 'documents'> {\n /**\n * Indexes to sync.\n *\n * Pairs of `locale`-`index`.\n **/\n indexes: Record<string, string>;\n\n documents: {\n locale: string;\n items: OramaDocument[];\n }[];\n}\n\nexport interface OramaDocument {\n /**\n * The ID of document, must be unique\n */\n id: string;\n\n title: string;\n description?: string;\n\n /**\n * URL to the page\n */\n url: string;\n structured: StructuredData;\n\n /**\n * Tag to filter results\n */\n tag?: string;\n\n /**\n * Data to be added to each section index\n */\n extra_data?: object;\n breadcrumbs?: string[];\n}\n\nexport interface OramaIndex {\n id: string;\n\n title: string;\n url: string;\n\n tag?: string;\n\n /**\n * The id of page, used for `group by`\n */\n page_id: string;\n\n /**\n * Heading content\n */\n section?: string;\n\n breadcrumbs?: string[];\n\n /**\n * Heading (anchor) id\n */\n section_id?: string;\n\n content: string;\n}\n\nexport async function sync(orama: OramaCloud, options: SyncOptions): Promise<void> {\n const { autoDeploy = true } = options;\n const index = orama.index.set(options.index);\n await index.transaction.open();\n\n await index.transaction.insertDocuments(\n options.documents.flatMap(toIndex) as unknown as AnyObject[],\n );\n\n if (autoDeploy) await index.transaction.commit();\n}\n\nexport async function syncI18n(orama: OramaCloud, options: I18nSyncOptions): Promise<void> {\n const { autoDeploy = true, indexes } = options;\n\n const tasks = options.documents.map(async (document) => {\n const index = orama.index.set(indexes[document.locale]);\n await index.transaction.open();\n\n await index.transaction.insertDocuments(\n document.items.flatMap(toIndex) as unknown as AnyObject[],\n );\n\n if (autoDeploy) await index.transaction.commit();\n });\n\n await Promise.all(tasks);\n}\n\nfunction toIndex(page: OramaDocument): OramaIndex[] {\n let id = 0;\n const indexes: OramaIndex[] = [];\n const scannedHeadings = new Set<string>();\n\n function createIndex(\n section: string | undefined,\n sectionId: string | undefined,\n content: string,\n ): OramaIndex {\n return {\n id: `${page.id}-${(id++).toString()}`,\n title: page.title,\n url: page.url,\n // TODO: explicit declare enums\n page_id: page.id,\n tag: page.tag,\n section,\n section_id: sectionId,\n content,\n breadcrumbs: page.breadcrumbs,\n ...page.extra_data,\n };\n }\n\n if (page.description) indexes.push(createIndex(undefined, undefined, page.description));\n\n page.structured.contents.forEach((p) => {\n const heading = p.heading ? page.structured.headings.find((h) => p.heading === h.id) : null;\n\n const index = createIndex(heading?.content, heading?.id, p.content);\n\n if (heading && !scannedHeadings.has(heading.id)) {\n scannedHeadings.add(heading.id);\n\n indexes.push(createIndex(heading.content, heading.id, heading.content));\n }\n\n indexes.push(index);\n });\n\n return indexes;\n}\n"],"mappings":";AAwFA,eAAsB,KAAK,OAAmB,SAAqC;CACjF,MAAM,EAAE,aAAa,SAAS;CAC9B,MAAM,QAAQ,MAAM,MAAM,IAAI,QAAQ,MAAM;AAC5C,OAAM,MAAM,YAAY,MAAM;AAE9B,OAAM,MAAM,YAAY,gBACtB,QAAQ,UAAU,QAAQ,QAAQ,CACnC;AAED,KAAI,WAAY,OAAM,MAAM,YAAY,QAAQ;;AAGlD,eAAsB,SAAS,OAAmB,SAAyC;CACzF,MAAM,EAAE,aAAa,MAAM,YAAY;CAEvC,MAAM,QAAQ,QAAQ,UAAU,IAAI,OAAO,aAAa;EACtD,MAAM,QAAQ,MAAM,MAAM,IAAI,QAAQ,SAAS,QAAQ;AACvD,QAAM,MAAM,YAAY,MAAM;AAE9B,QAAM,MAAM,YAAY,gBACtB,SAAS,MAAM,QAAQ,QAAQ,CAChC;AAED,MAAI,WAAY,OAAM,MAAM,YAAY,QAAQ;GAChD;AAEF,OAAM,QAAQ,IAAI,MAAM;;AAG1B,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAMA,UAAwB,EAAE;CAChC,MAAM,kCAAkB,IAAI,KAAa;CAEzC,SAAS,YACP,SACA,WACA,SACY;AACZ,SAAO;GACL,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,UAAU;GACnC,OAAO,KAAK;GACZ,KAAK,KAAK;GAEV,SAAS,KAAK;GACd,KAAK,KAAK;GACV;GACA,YAAY;GACZ;GACA,aAAa,KAAK;GAClB,GAAG,KAAK;GACT;;AAGH,KAAI,KAAK,YAAa,SAAQ,KAAK,YAAY,QAAW,QAAW,KAAK,YAAY,CAAC;AAEvF,MAAK,WAAW,SAAS,SAAS,MAAM;EACtC,MAAM,UAAU,EAAE,UAAU,KAAK,WAAW,SAAS,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;EAEvF,MAAM,QAAQ,YAAY,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ;AAEnE,MAAI,WAAW,CAAC,gBAAgB,IAAI,QAAQ,GAAG,EAAE;AAC/C,mBAAgB,IAAI,QAAQ,GAAG;AAE/B,WAAQ,KAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,CAAC;;AAGzE,UAAQ,KAAK,MAAM;GACnB;AAEF,QAAO"}