@hanzo/docs-core 16.4.2 → 16.5.0

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 (88) hide show
  1. package/README.md +1 -1
  2. package/dist/{advanced-CEwMef7q.js → advanced-BRT5Ij43.js} +3 -3
  3. package/dist/{advanced-CEwMef7q.js.map → advanced-BRT5Ij43.js.map} +1 -1
  4. package/dist/{algolia-BrWPzYE_.js → algolia-CQPXCnjV.js} +2 -2
  5. package/dist/{algolia-BrWPzYE_.js.map → algolia-CQPXCnjV.js.map} +1 -1
  6. package/dist/{algolia-CBBN8R6-.d.ts → algolia-Cc1y6qWl.d.ts} +2 -2
  7. package/dist/{algolia-CBBN8R6-.d.ts.map → algolia-Cc1y6qWl.d.ts.map} +1 -1
  8. package/dist/breadcrumb.js +1 -1
  9. package/dist/{codeblock-utils-lld8UiQo.d.ts → codeblock-utils-DDnYb8gi.d.ts} +2 -2
  10. package/dist/{codeblock-utils-lld8UiQo.d.ts.map → codeblock-utils-DDnYb8gi.d.ts.map} +1 -1
  11. package/dist/content/github.d.ts +1 -1
  12. package/dist/content/github.js.map +1 -1
  13. package/dist/content/index.d.ts +2 -2
  14. package/dist/content/mdx/preset-bundler.d.ts +2 -2
  15. package/dist/content/mdx/preset-runtime.d.ts +2 -2
  16. package/dist/dynamic-link.d.ts +2 -2
  17. package/dist/framework/index.d.ts +4 -4
  18. package/dist/framework/react-router.d.ts +2 -2
  19. package/dist/framework/tanstack.d.ts +3 -3
  20. package/dist/framework/tanstack.js +1 -1
  21. package/dist/framework/tanstack.js.map +1 -1
  22. package/dist/framework/waku.d.ts +2 -2
  23. package/dist/highlight/client.d.ts +1 -1
  24. package/dist/highlight/client.js +1 -1
  25. package/dist/highlight/index.d.ts +1 -1
  26. package/dist/highlight/index.js +1 -1
  27. package/dist/{icon-Ds1OCIhh.js → icon-BWwSDabM.js} +2 -2
  28. package/dist/{icon-Ds1OCIhh.js.map → icon-BWwSDabM.js.map} +1 -1
  29. package/dist/link.d.ts +2 -2
  30. package/dist/mdx-plugins/codeblock-utils.d.ts +1 -1
  31. package/dist/mdx-plugins/codeblock-utils.js +1 -1
  32. package/dist/mdx-plugins/codeblock-utils.js.map +1 -1
  33. package/dist/mdx-plugins/index.d.ts +3 -3
  34. package/dist/mdx-plugins/index.js +3 -3
  35. package/dist/mdx-plugins/rehype-code.js +2 -2
  36. package/dist/mdx-plugins/rehype-toc.js +1 -1
  37. package/dist/mdx-plugins/remark-npm.d.ts +1 -1
  38. package/dist/mdx-plugins/remark-npm.js.map +1 -1
  39. package/dist/mdx-plugins/remark-structure.d.ts +1 -1
  40. package/dist/mdx-plugins/remark-structure.js.map +1 -1
  41. package/dist/{normalize-url-DP9-1I-S.js → normalize-url-ChLsV26G.js} +2 -2
  42. package/dist/normalize-url-ChLsV26G.js.map +1 -0
  43. package/dist/{orama-cloud-MyA-JBt1.js → orama-cloud-DH3g37zc.js} +3 -3
  44. package/dist/orama-cloud-DH3g37zc.js.map +1 -0
  45. package/dist/{path-DPJpqaLb.js → path-DHIjrDBP.js} +1 -1
  46. package/dist/{path-DPJpqaLb.js.map → path-DHIjrDBP.js.map} +1 -1
  47. package/dist/{rehype-code-CQDbiG8_.js → rehype-code-sM9Tq-r7.js} +3 -3
  48. package/dist/{rehype-code-CQDbiG8_.js.map → rehype-code-sM9Tq-r7.js.map} +1 -1
  49. package/dist/{rehype-toc-D-eLj90w.js → rehype-toc-DVwJcwvA.js} +1 -1
  50. package/dist/{rehype-toc-D-eLj90w.js.map → rehype-toc-DVwJcwvA.js.map} +1 -1
  51. package/dist/{remark-npm-BIvIEKT2.d.ts → remark-npm-Bo08HqcQ.d.ts} +2 -2
  52. package/dist/{remark-npm-BIvIEKT2.d.ts.map → remark-npm-Bo08HqcQ.d.ts.map} +1 -1
  53. package/dist/{remark-structure-RZD2gGKp.d.ts → remark-structure-DGuWR82i.d.ts} +3 -3
  54. package/dist/{remark-structure-RZD2gGKp.d.ts.map → remark-structure-DGuWR82i.d.ts.map} +1 -1
  55. package/dist/{remove-undefined-DgDIJk1A.js → remove-undefined-Cfs4o_mM.js} +1 -1
  56. package/dist/{remove-undefined-DgDIJk1A.js.map → remove-undefined-Cfs4o_mM.js.map} +1 -1
  57. package/dist/search/algolia.d.ts +2 -2
  58. package/dist/search/client.d.ts +4 -4
  59. package/dist/search/client.js +3 -3
  60. package/dist/search/index.js +1 -1
  61. package/dist/search/orama-cloud.d.ts +1 -1
  62. package/dist/search/server.d.ts +2 -2
  63. package/dist/search/server.js +3 -3
  64. package/dist/{search-GCBSTRxD.js → search-D6ChCLhY.js} +1 -1
  65. package/dist/{search-GCBSTRxD.js.map → search-D6ChCLhY.js.map} +1 -1
  66. package/dist/{server-CPR_fgkH.d.ts → server-DmY4lGBs.d.ts} +2 -2
  67. package/dist/{server-CPR_fgkH.d.ts.map → server-DmY4lGBs.d.ts.map} +1 -1
  68. package/dist/{shiki-4oMYwHED.js → shiki-B5wNmyIZ.js} +2 -2
  69. package/dist/shiki-B5wNmyIZ.js.map +1 -0
  70. package/dist/{shiki-CIBQys54.d.ts → shiki-Dq3XIYAT.d.ts} +2 -2
  71. package/dist/{shiki-CIBQys54.d.ts.map → shiki-Dq3XIYAT.d.ts.map} +1 -1
  72. package/dist/source/client/index.d.ts +2 -2
  73. package/dist/source/client/index.d.ts.map +1 -1
  74. package/dist/source/client/index.js +2 -2
  75. package/dist/source/client/index.js.map +1 -1
  76. package/dist/source/index.js +3 -3
  77. package/dist/source/plugins/lucide-icons.js +1 -1
  78. package/dist/source/plugins/slugs.js +2 -2
  79. package/dist/source/plugins/slugs.js.map +1 -1
  80. package/dist/source/schema.js.map +1 -1
  81. package/dist/{static-vTmR4-T2.js → static-Dq8pA8Ay.js} +2 -2
  82. package/dist/{static-vTmR4-T2.js.map → static-Dq8pA8Ay.js.map} +1 -1
  83. package/dist/toc.d.ts +4 -4
  84. package/package.json +15 -15
  85. package/LICENSE +0 -21
  86. package/dist/normalize-url-DP9-1I-S.js.map +0 -1
  87. package/dist/orama-cloud-MyA-JBt1.js.map +0 -1
  88. package/dist/shiki-4oMYwHED.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { t as normalizeUrl } from "../normalize-url-DP9-1I-S.js";
1
+ import { t as normalizeUrl } from "../normalize-url-ChLsV26G.js";
2
2
  import { c as visit } from "../utils-DUvi2WkD.js";
3
- import { a as path_exports, i as joinPath, n as dirname, o as slash, r as extname, s as splitPath, t as basename } from "../path-DPJpqaLb.js";
3
+ import { a as path_exports, i as joinPath, n as dirname, o as slash, r as extname, s as splitPath, t as basename } from "../path-DHIjrDBP.js";
4
4
  import { getSlugs, slugsPlugin } from "./plugins/slugs.js";
5
- import { t as iconPlugin } from "../icon-Ds1OCIhh.js";
5
+ import { t as iconPlugin } from "../icon-BWwSDabM.js";
6
6
  import path from "node:path";
7
7
 
8
8
  //#region src/source/source.ts
@@ -1,4 +1,4 @@
1
- import { t as iconPlugin } from "../../icon-Ds1OCIhh.js";
1
+ import { t as iconPlugin } from "../../icon-BWwSDabM.js";
2
2
  import { createElement } from "react";
3
3
  import { icons } from "lucide-react";
4
4
 
@@ -1,4 +1,4 @@
1
- import { n as dirname, r as extname, t as basename } from "../../path-DPJpqaLb.js";
1
+ import { n as dirname, r as extname, t as basename } from "../../path-DHIjrDBP.js";
2
2
 
3
3
  //#region src/source/plugins/slugs.ts
4
4
  /**
@@ -9,7 +9,7 @@ function slugsPlugin(slugFn) {
9
9
  return basename(file, extname(file)) === "index";
10
10
  }
11
11
  return {
12
- name: "fumadocs:slugs",
12
+ name: "hanzo-docs:slugs",
13
13
  transformStorage({ storage }) {
14
14
  const indexFiles = [];
15
15
  const taken = /* @__PURE__ */ new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"slugs.js","names":["indexFiles: string[]","slugs: string[]"],"sources":["../../../src/source/plugins/slugs.ts"],"sourcesContent":["import { basename, dirname, extname } from '@/source/path';\nimport type { ContentStoragePageFile } from '../storage/content';\nimport type { LoaderConfig, LoaderPlugin } from '../loader';\n\n/**\n * a function to generate slugs, return `undefined` to fallback to default generation.\n */\nexport type SlugFn<Config extends LoaderConfig = LoaderConfig> = (\n file: ContentStoragePageFile<Config['source']>,\n) => string[] | undefined;\n\n/**\n * Generate slugs for pages if missing\n */\nexport function slugsPlugin<Config extends LoaderConfig = LoaderConfig>(\n slugFn?: SlugFn<Config>,\n): LoaderPlugin<Config> {\n function isIndex(file: string) {\n return basename(file, extname(file)) === 'index';\n }\n\n return {\n name: 'fumadocs:slugs',\n transformStorage({ storage }) {\n const indexFiles: string[] = [];\n const taken = new Set<string>();\n\n for (const path of storage.getFiles()) {\n const file = storage.read(path);\n if (!file || file.format !== 'page' || file.slugs) continue;\n\n const customSlugs = slugFn?.(file);\n // for custom slugs function, don't handle conflicting cases like `dir/index.mdx` vs `dir.mdx`\n if (customSlugs === undefined && isIndex(path)) {\n indexFiles.push(path);\n continue;\n }\n\n file.slugs = customSlugs ?? getSlugs(path);\n const key = file.slugs.join('/');\n if (taken.has(key)) throw new Error(`Duplicated slugs: ${key}`);\n taken.add(key);\n }\n\n for (const path of indexFiles) {\n const file = storage.read(path);\n if (file?.format !== 'page') continue;\n\n file.slugs = getSlugs(path);\n if (taken.has(file.slugs.join('/'))) file.slugs.push('index');\n }\n },\n };\n}\n\n/**\n * Generate slugs from file data (e.g. frontmatter).\n *\n * @param key - the property name in file data to generate slugs, default to `slug`.\n */\nexport function slugsFromData<Config extends LoaderConfig = LoaderConfig>(\n key = 'slug',\n): SlugFn<Config> {\n return (file) => {\n const k = key as keyof typeof file.data;\n\n if (k in file.data && typeof file.data[k] === 'string') {\n return file.data[k].split('/').filter((v) => v.length > 0);\n }\n };\n}\n\nconst GroupRegex = /^\\(.+\\)$/;\n\n/**\n * Convert file path into slugs, also encode non-ASCII characters, so they can work in pathname\n */\nexport function getSlugs(file: string): string[] {\n const dir = dirname(file);\n const name = basename(file, extname(file));\n const slugs: string[] = [];\n\n for (const seg of dir.split('/')) {\n // filter empty names and file groups like (group_name)\n if (seg.length > 0 && !GroupRegex.test(seg)) slugs.push(encodeURI(seg));\n }\n\n if (GroupRegex.test(name)) throw new Error(`Cannot use folder group in file names: ${file}`);\n\n if (name !== 'index') {\n slugs.push(encodeURI(name));\n }\n\n return slugs;\n}\n"],"mappings":";;;;;;AAcA,SAAgB,YACd,QACsB;CACtB,SAAS,QAAQ,MAAc;AAC7B,SAAO,SAAS,MAAM,QAAQ,KAAK,CAAC,KAAK;;AAG3C,QAAO;EACL,MAAM;EACN,iBAAiB,EAAE,WAAW;GAC5B,MAAMA,aAAuB,EAAE;GAC/B,MAAM,wBAAQ,IAAI,KAAa;AAE/B,QAAK,MAAM,QAAQ,QAAQ,UAAU,EAAE;IACrC,MAAM,OAAO,QAAQ,KAAK,KAAK;AAC/B,QAAI,CAAC,QAAQ,KAAK,WAAW,UAAU,KAAK,MAAO;IAEnD,MAAM,cAAc,SAAS,KAAK;AAElC,QAAI,gBAAgB,UAAa,QAAQ,KAAK,EAAE;AAC9C,gBAAW,KAAK,KAAK;AACrB;;AAGF,SAAK,QAAQ,eAAe,SAAS,KAAK;IAC1C,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI;AAChC,QAAI,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,qBAAqB,MAAM;AAC/D,UAAM,IAAI,IAAI;;AAGhB,QAAK,MAAM,QAAQ,YAAY;IAC7B,MAAM,OAAO,QAAQ,KAAK,KAAK;AAC/B,QAAI,MAAM,WAAW,OAAQ;AAE7B,SAAK,QAAQ,SAAS,KAAK;AAC3B,QAAI,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,CAAE,MAAK,MAAM,KAAK,QAAQ;;;EAGlE;;;;;;;AAQH,SAAgB,cACd,MAAM,QACU;AAChB,SAAQ,SAAS;EACf,MAAM,IAAI;AAEV,MAAI,KAAK,KAAK,QAAQ,OAAO,KAAK,KAAK,OAAO,SAC5C,QAAO,KAAK,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;;;AAKhE,MAAM,aAAa;;;;AAKnB,SAAgB,SAAS,MAAwB;CAC/C,MAAM,MAAM,QAAQ,KAAK;CACzB,MAAM,OAAO,SAAS,MAAM,QAAQ,KAAK,CAAC;CAC1C,MAAMC,QAAkB,EAAE;AAE1B,MAAK,MAAM,OAAO,IAAI,MAAM,IAAI,CAE9B,KAAI,IAAI,SAAS,KAAK,CAAC,WAAW,KAAK,IAAI,CAAE,OAAM,KAAK,UAAU,IAAI,CAAC;AAGzE,KAAI,WAAW,KAAK,KAAK,CAAE,OAAM,IAAI,MAAM,0CAA0C,OAAO;AAE5F,KAAI,SAAS,QACX,OAAM,KAAK,UAAU,KAAK,CAAC;AAG7B,QAAO"}
1
+ {"version":3,"file":"slugs.js","names":["indexFiles: string[]","slugs: string[]"],"sources":["../../../src/source/plugins/slugs.ts"],"sourcesContent":["import { basename, dirname, extname } from '@/source/path';\nimport type { ContentStoragePageFile } from '../storage/content';\nimport type { LoaderConfig, LoaderPlugin } from '../loader';\n\n/**\n * a function to generate slugs, return `undefined` to fallback to default generation.\n */\nexport type SlugFn<Config extends LoaderConfig = LoaderConfig> = (\n file: ContentStoragePageFile<Config['source']>,\n) => string[] | undefined;\n\n/**\n * Generate slugs for pages if missing\n */\nexport function slugsPlugin<Config extends LoaderConfig = LoaderConfig>(\n slugFn?: SlugFn<Config>,\n): LoaderPlugin<Config> {\n function isIndex(file: string) {\n return basename(file, extname(file)) === 'index';\n }\n\n return {\n name: 'hanzo-docs:slugs',\n transformStorage({ storage }) {\n const indexFiles: string[] = [];\n const taken = new Set<string>();\n\n for (const path of storage.getFiles()) {\n const file = storage.read(path);\n if (!file || file.format !== 'page' || file.slugs) continue;\n\n const customSlugs = slugFn?.(file);\n // for custom slugs function, don't handle conflicting cases like `dir/index.mdx` vs `dir.mdx`\n if (customSlugs === undefined && isIndex(path)) {\n indexFiles.push(path);\n continue;\n }\n\n file.slugs = customSlugs ?? getSlugs(path);\n const key = file.slugs.join('/');\n if (taken.has(key)) throw new Error(`Duplicated slugs: ${key}`);\n taken.add(key);\n }\n\n for (const path of indexFiles) {\n const file = storage.read(path);\n if (file?.format !== 'page') continue;\n\n file.slugs = getSlugs(path);\n if (taken.has(file.slugs.join('/'))) file.slugs.push('index');\n }\n },\n };\n}\n\n/**\n * Generate slugs from file data (e.g. frontmatter).\n *\n * @param key - the property name in file data to generate slugs, default to `slug`.\n */\nexport function slugsFromData<Config extends LoaderConfig = LoaderConfig>(\n key = 'slug',\n): SlugFn<Config> {\n return (file) => {\n const k = key as keyof typeof file.data;\n\n if (k in file.data && typeof file.data[k] === 'string') {\n return file.data[k].split('/').filter((v) => v.length > 0);\n }\n };\n}\n\nconst GroupRegex = /^\\(.+\\)$/;\n\n/**\n * Convert file path into slugs, also encode non-ASCII characters, so they can work in pathname\n */\nexport function getSlugs(file: string): string[] {\n const dir = dirname(file);\n const name = basename(file, extname(file));\n const slugs: string[] = [];\n\n for (const seg of dir.split('/')) {\n // filter empty names and file groups like (group_name)\n if (seg.length > 0 && !GroupRegex.test(seg)) slugs.push(encodeURI(seg));\n }\n\n if (GroupRegex.test(name)) throw new Error(`Cannot use folder group in file names: ${file}`);\n\n if (name !== 'index') {\n slugs.push(encodeURI(name));\n }\n\n return slugs;\n}\n"],"mappings":";;;;;;AAcA,SAAgB,YACd,QACsB;CACtB,SAAS,QAAQ,MAAc;AAC7B,SAAO,SAAS,MAAM,QAAQ,KAAK,CAAC,KAAK;;AAG3C,QAAO;EACL,MAAM;EACN,iBAAiB,EAAE,WAAW;GAC5B,MAAMA,aAAuB,EAAE;GAC/B,MAAM,wBAAQ,IAAI,KAAa;AAE/B,QAAK,MAAM,QAAQ,QAAQ,UAAU,EAAE;IACrC,MAAM,OAAO,QAAQ,KAAK,KAAK;AAC/B,QAAI,CAAC,QAAQ,KAAK,WAAW,UAAU,KAAK,MAAO;IAEnD,MAAM,cAAc,SAAS,KAAK;AAElC,QAAI,gBAAgB,UAAa,QAAQ,KAAK,EAAE;AAC9C,gBAAW,KAAK,KAAK;AACrB;;AAGF,SAAK,QAAQ,eAAe,SAAS,KAAK;IAC1C,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI;AAChC,QAAI,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,MAAM,qBAAqB,MAAM;AAC/D,UAAM,IAAI,IAAI;;AAGhB,QAAK,MAAM,QAAQ,YAAY;IAC7B,MAAM,OAAO,QAAQ,KAAK,KAAK;AAC/B,QAAI,MAAM,WAAW,OAAQ;AAE7B,SAAK,QAAQ,SAAS,KAAK;AAC3B,QAAI,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,CAAE,MAAK,MAAM,KAAK,QAAQ;;;EAGlE;;;;;;;AAQH,SAAgB,cACd,MAAM,QACU;AAChB,SAAQ,SAAS;EACf,MAAM,IAAI;AAEV,MAAI,KAAK,KAAK,QAAQ,OAAO,KAAK,KAAK,OAAO,SAC5C,QAAO,KAAK,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;;;AAKhE,MAAM,aAAa;;;;AAKnB,SAAgB,SAAS,MAAwB;CAC/C,MAAM,MAAM,QAAQ,KAAK;CACzB,MAAM,OAAO,SAAS,MAAM,QAAQ,KAAK,CAAC;CAC1C,MAAMC,QAAkB,EAAE;AAE1B,MAAK,MAAM,OAAO,IAAI,MAAM,IAAI,CAE9B,KAAI,IAAI,SAAS,KAAK,CAAC,WAAW,KAAK,IAAI,CAAE,OAAM,KAAK,UAAU,IAAI,CAAC;AAGzE,KAAI,WAAW,KAAK,KAAK,CAAE,OAAM,IAAI,MAAM,0CAA0C,OAAO;AAE5F,KAAI,SAAS,QACX,OAAM,KAAK,UAAU,KAAK,CAAC;AAG7B,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":[],"sources":["../../src/source/schema.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Zod 4 schema\n */\nexport const metaSchema = z.object({\n title: z.string().optional(),\n pages: z.array(z.string()).optional(),\n description: z.string().optional(),\n root: z.boolean().optional(),\n defaultOpen: z.boolean().optional(),\n collapsible: z.boolean().optional(),\n icon: z.string().optional(),\n});\n\n/**\n * Zod 4 schema\n */\nexport const pageSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n full: z.boolean().optional(),\n\n // Fumadocs OpenAPI generated\n _openapi: z.looseObject({}).optional(),\n});\n"],"mappings":";;;;;;AAKA,MAAa,aAAa,EAAE,OAAO;CACjC,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC5B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACrC,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,SAAS,CAAC,UAAU;CAC5B,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC5B,CAAC;;;;AAKF,MAAa,aAAa,EAAE,OAAO;CACjC,OAAO,EAAE,QAAQ;CACjB,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,MAAM,EAAE,SAAS,CAAC,UAAU;CAG5B,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU;CACvC,CAAC"}
1
+ {"version":3,"file":"schema.js","names":[],"sources":["../../src/source/schema.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Zod 4 schema\n */\nexport const metaSchema = z.object({\n title: z.string().optional(),\n pages: z.array(z.string()).optional(),\n description: z.string().optional(),\n root: z.boolean().optional(),\n defaultOpen: z.boolean().optional(),\n collapsible: z.boolean().optional(),\n icon: z.string().optional(),\n});\n\n/**\n * Zod 4 schema\n */\nexport const pageSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n full: z.boolean().optional(),\n\n // Hanzo Docs OpenAPI generated\n _openapi: z.looseObject({}).optional(),\n});\n"],"mappings":";;;;;;AAKA,MAAa,aAAa,EAAE,OAAO;CACjC,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC5B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACrC,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,SAAS,CAAC,UAAU;CAC5B,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC5B,CAAC;;;;AAKF,MAAa,aAAa,EAAE,OAAO;CACjC,OAAO,EAAE,QAAQ;CACjB,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,MAAM,EAAE,SAAS,CAAC,UAAU;CAG5B,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU;CACvC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { n as searchSimple, t as searchAdvanced } from "./advanced-CEwMef7q.js";
1
+ import { n as searchSimple, t as searchAdvanced } from "./advanced-BRT5Ij43.js";
2
2
  import { create, load } from "@orama/orama";
3
3
 
4
4
  //#region src/search/client/static.ts
@@ -48,4 +48,4 @@ async function search(query, options) {
48
48
 
49
49
  //#endregion
50
50
  export { search };
51
- //# sourceMappingURL=static-vTmR4-T2.js.map
51
+ //# sourceMappingURL=static-Dq8pA8Ay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"static-vTmR4-T2.js","names":["dbs: Database","db"],"sources":["../src/search/client/static.ts"],"sourcesContent":["import { type AnyOrama, create, load, type Orama } from '@orama/orama';\nimport { searchSimple } from '@/search/orama/search/simple';\nimport { searchAdvanced } from '@/search/orama/search/advanced';\nimport { type advancedSchema, type simpleSchema } from '@/search/orama/create-db';\nimport type { ExportedData } from '@/search/server';\n\nexport interface StaticOptions {\n /**\n * Where to download exported search indexes (URL)\n *\n * @defaultValue '/api/search'\n */\n from?: string;\n\n initOrama?: (locale?: string) => AnyOrama | Promise<AnyOrama>;\n\n /**\n * Filter results with specific tag(s).\n */\n tag?: string | string[];\n\n /**\n * Filter by locale (unsupported at the moment)\n */\n locale?: string;\n}\n\nconst cache = new Map<string, Promise<Database>>();\n\n// locale -> db\ntype Database = Map<\n string,\n {\n type: 'simple' | 'advanced';\n db: AnyOrama;\n }\n>;\n\nasync function loadDB({\n from = '/api/search',\n initOrama = (locale) => create({ schema: { _: 'string' }, language: locale }),\n}: StaticOptions): Promise<Database> {\n const cacheKey = from;\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n\n async function init() {\n const res = await fetch(from);\n\n if (!res.ok)\n throw new Error(\n `failed to fetch exported search indexes from ${from}, make sure the search database is exported and available for client.`,\n );\n\n const data = (await res.json()) as ExportedData;\n const dbs: Database = new Map();\n\n if (data.type === 'i18n') {\n await Promise.all(\n Object.entries(data.data).map(async ([k, v]) => {\n const db = await initOrama(k);\n\n load(db, v);\n dbs.set(k, {\n type: v.type,\n db,\n });\n }),\n );\n\n return dbs;\n }\n\n const db = await initOrama();\n load(db, data);\n dbs.set('', {\n type: data.type,\n db,\n });\n return dbs;\n }\n\n const result = init();\n cache.set(cacheKey, result);\n return result;\n}\n\nexport async function search(query: string, options: StaticOptions) {\n const { tag, locale } = options;\n\n const db = (await loadDB(options)).get(locale ?? '');\n\n if (!db) return [];\n if (db.type === 'simple') return searchSimple(db as unknown as Orama<typeof simpleSchema>, query);\n\n return searchAdvanced(db.db as Orama<typeof advancedSchema>, query, tag);\n}\n"],"mappings":";;;;AA2BA,MAAM,wBAAQ,IAAI,KAAgC;AAWlD,eAAe,OAAO,EACpB,OAAO,eACP,aAAa,WAAW,OAAO;CAAE,QAAQ,EAAE,GAAG,UAAU;CAAE,UAAU;CAAQ,CAAC,IAC1C;CACnC,MAAM,WAAW;CACjB,MAAM,SAAS,MAAM,IAAI,SAAS;AAClC,KAAI,OAAQ,QAAO;CAEnB,eAAe,OAAO;EACpB,MAAM,MAAM,MAAM,MAAM,KAAK;AAE7B,MAAI,CAAC,IAAI,GACP,OAAM,IAAI,MACR,gDAAgD,KAAK,uEACtD;EAEH,MAAM,OAAQ,MAAM,IAAI,MAAM;EAC9B,MAAMA,sBAAgB,IAAI,KAAK;AAE/B,MAAI,KAAK,SAAS,QAAQ;AACxB,SAAM,QAAQ,IACZ,OAAO,QAAQ,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO;IAC9C,MAAMC,OAAK,MAAM,UAAU,EAAE;AAE7B,SAAKA,MAAI,EAAE;AACX,QAAI,IAAI,GAAG;KACT,MAAM,EAAE;KACR;KACD,CAAC;KACF,CACH;AAED,UAAO;;EAGT,MAAM,KAAK,MAAM,WAAW;AAC5B,OAAK,IAAI,KAAK;AACd,MAAI,IAAI,IAAI;GACV,MAAM,KAAK;GACX;GACD,CAAC;AACF,SAAO;;CAGT,MAAM,SAAS,MAAM;AACrB,OAAM,IAAI,UAAU,OAAO;AAC3B,QAAO;;AAGT,eAAsB,OAAO,OAAe,SAAwB;CAClE,MAAM,EAAE,KAAK,WAAW;CAExB,MAAM,MAAM,MAAM,OAAO,QAAQ,EAAE,IAAI,UAAU,GAAG;AAEpD,KAAI,CAAC,GAAI,QAAO,EAAE;AAClB,KAAI,GAAG,SAAS,SAAU,QAAO,aAAa,IAA6C,MAAM;AAEjG,QAAO,eAAe,GAAG,IAAoC,OAAO,IAAI"}
1
+ {"version":3,"file":"static-Dq8pA8Ay.js","names":["dbs: Database","db"],"sources":["../src/search/client/static.ts"],"sourcesContent":["import { type AnyOrama, create, load, type Orama } from '@orama/orama';\nimport { searchSimple } from '@/search/orama/search/simple';\nimport { searchAdvanced } from '@/search/orama/search/advanced';\nimport { type advancedSchema, type simpleSchema } from '@/search/orama/create-db';\nimport type { ExportedData } from '@/search/server';\n\nexport interface StaticOptions {\n /**\n * Where to download exported search indexes (URL)\n *\n * @defaultValue '/api/search'\n */\n from?: string;\n\n initOrama?: (locale?: string) => AnyOrama | Promise<AnyOrama>;\n\n /**\n * Filter results with specific tag(s).\n */\n tag?: string | string[];\n\n /**\n * Filter by locale (unsupported at the moment)\n */\n locale?: string;\n}\n\nconst cache = new Map<string, Promise<Database>>();\n\n// locale -> db\ntype Database = Map<\n string,\n {\n type: 'simple' | 'advanced';\n db: AnyOrama;\n }\n>;\n\nasync function loadDB({\n from = '/api/search',\n initOrama = (locale) => create({ schema: { _: 'string' }, language: locale }),\n}: StaticOptions): Promise<Database> {\n const cacheKey = from;\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n\n async function init() {\n const res = await fetch(from);\n\n if (!res.ok)\n throw new Error(\n `failed to fetch exported search indexes from ${from}, make sure the search database is exported and available for client.`,\n );\n\n const data = (await res.json()) as ExportedData;\n const dbs: Database = new Map();\n\n if (data.type === 'i18n') {\n await Promise.all(\n Object.entries(data.data).map(async ([k, v]) => {\n const db = await initOrama(k);\n\n load(db, v);\n dbs.set(k, {\n type: v.type,\n db,\n });\n }),\n );\n\n return dbs;\n }\n\n const db = await initOrama();\n load(db, data);\n dbs.set('', {\n type: data.type,\n db,\n });\n return dbs;\n }\n\n const result = init();\n cache.set(cacheKey, result);\n return result;\n}\n\nexport async function search(query: string, options: StaticOptions) {\n const { tag, locale } = options;\n\n const db = (await loadDB(options)).get(locale ?? '');\n\n if (!db) return [];\n if (db.type === 'simple') return searchSimple(db as unknown as Orama<typeof simpleSchema>, query);\n\n return searchAdvanced(db.db as Orama<typeof advancedSchema>, query, tag);\n}\n"],"mappings":";;;;AA2BA,MAAM,wBAAQ,IAAI,KAAgC;AAWlD,eAAe,OAAO,EACpB,OAAO,eACP,aAAa,WAAW,OAAO;CAAE,QAAQ,EAAE,GAAG,UAAU;CAAE,UAAU;CAAQ,CAAC,IAC1C;CACnC,MAAM,WAAW;CACjB,MAAM,SAAS,MAAM,IAAI,SAAS;AAClC,KAAI,OAAQ,QAAO;CAEnB,eAAe,OAAO;EACpB,MAAM,MAAM,MAAM,MAAM,KAAK;AAE7B,MAAI,CAAC,IAAI,GACP,OAAM,IAAI,MACR,gDAAgD,KAAK,uEACtD;EAEH,MAAM,OAAQ,MAAM,IAAI,MAAM;EAC9B,MAAMA,sBAAgB,IAAI,KAAK;AAE/B,MAAI,KAAK,SAAS,QAAQ;AACxB,SAAM,QAAQ,IACZ,OAAO,QAAQ,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO;IAC9C,MAAMC,OAAK,MAAM,UAAU,EAAE;AAE7B,SAAKA,MAAI,EAAE;AACX,QAAI,IAAI,GAAG;KACT,MAAM,EAAE;KACR;KACD,CAAC;KACF,CACH;AAED,UAAO;;EAGT,MAAM,KAAK,MAAM,WAAW;AAC5B,OAAK,IAAI,KAAK;AACd,MAAI,IAAI,IAAI;GACV,MAAM,KAAK;GACX;GACD,CAAC;AACF,SAAO;;CAGT,MAAM,SAAS,MAAM;AACrB,OAAM,IAAI,UAAU,OAAO;AAC3B,QAAO;;AAGT,eAAsB,OAAO,OAAe,SAAwB;CAClE,MAAM,EAAE,KAAK,WAAW;CAExB,MAAM,MAAM,MAAM,OAAO,QAAQ,EAAE,IAAI,UAAU,GAAG;AAEpD,KAAI,CAAC,GAAI,QAAO,EAAE;AAClB,KAAI,GAAG,SAAS,SAAU,QAAO,aAAa,IAA6C,MAAM;AAEjG,QAAO,eAAe,GAAG,IAAoC,OAAO,IAAI"}
package/dist/toc.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ComponentProps, ReactNode, RefObject } from "react";
2
- import * as react_jsx_runtime6 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/toc.d.ts
5
5
  interface TOCItemType {
@@ -36,12 +36,12 @@ interface ScrollProviderProps {
36
36
  declare function ScrollProvider({
37
37
  containerRef,
38
38
  children
39
- }: ScrollProviderProps): react_jsx_runtime6.JSX.Element;
39
+ }: ScrollProviderProps): react_jsx_runtime0.JSX.Element;
40
40
  declare function AnchorProvider({
41
41
  toc,
42
42
  single,
43
43
  children
44
- }: AnchorProviderProps): react_jsx_runtime6.JSX.Element;
44
+ }: AnchorProviderProps): react_jsx_runtime0.JSX.Element;
45
45
  interface TOCItemProps extends Omit<ComponentProps<'a'>, 'href'> {
46
46
  href: string;
47
47
  onActiveChange?: (v: boolean) => void;
@@ -50,7 +50,7 @@ declare function TOCItem({
50
50
  ref,
51
51
  onActiveChange,
52
52
  ...props
53
- }: TOCItemProps): react_jsx_runtime6.JSX.Element;
53
+ }: TOCItemProps): react_jsx_runtime0.JSX.Element;
54
54
  //#endregion
55
55
  export { AnchorProvider, AnchorProviderProps, ScrollProvider, ScrollProviderProps, TOCItem, TOCItemProps, TOCItemType, TableOfContents, useActiveAnchor, useActiveAnchors };
56
56
  //# sourceMappingURL=toc.d.ts.map
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@hanzo/docs-core",
3
- "version": "16.4.2",
3
+ "version": "16.5.0",
4
4
  "description": "The React.js library for building a documentation website",
5
5
  "keywords": [
6
6
  "Docs",
7
- "Fumadocs"
7
+ "Hanzo Docs"
8
8
  ],
9
- "homepage": "https://fumadocs.dev",
9
+ "homepage": "https://hanzo.ai/docs",
10
10
  "license": "MIT",
11
11
  "author": "Fuma Nama",
12
- "repository": "github:fuma-nama/fumadocs",
12
+ "repository": "github:hanzoai/docs",
13
13
  "files": [
14
14
  "dist/*"
15
15
  ],
@@ -111,6 +111,13 @@
111
111
  "publishConfig": {
112
112
  "access": "public"
113
113
  },
114
+ "scripts": {
115
+ "build": "tsdown",
116
+ "clean": "rimraf dist",
117
+ "dev": "tsdown --watch",
118
+ "lint": "eslint .",
119
+ "types:check": "tsc --noEmit"
120
+ },
114
121
  "dependencies": {
115
122
  "@formatjs/intl-localematcher": "^0.7.2",
116
123
  "@orama/orama": "^3.1.18",
@@ -144,6 +151,7 @@
144
151
  "@types/react": "^19.2.7",
145
152
  "@types/react-dom": "^19.2.3",
146
153
  "algoliasearch": "5.46.2",
154
+ "eslint-config-custom": "workspace:*",
147
155
  "lucide-react": "^0.562.0",
148
156
  "mdast-util-mdx-jsx": "^3.2.0",
149
157
  "mdast-util-mdxjs-esm": "^2.0.1",
@@ -152,14 +160,13 @@
152
160
  "remark-directive": "^4.0.0",
153
161
  "remark-mdx": "^3.1.1",
154
162
  "remove-markdown": "^0.6.2",
163
+ "tsconfig": "workspace:*",
155
164
  "tsdown": "^0.18.3",
156
165
  "typescript": "^5.9.3",
157
166
  "unified": "^11.0.5",
158
167
  "vfile": "^6.0.3",
159
168
  "waku": "^0.27.5",
160
- "zod": "^4.2.1",
161
- "tsconfig": "0.0.0",
162
- "eslint-config-custom": "0.0.0"
169
+ "zod": "^4.2.1"
163
170
  },
164
171
  "peerDependencies": {
165
172
  "@mixedbread/sdk": "^0.46.0",
@@ -212,12 +219,5 @@
212
219
  "zod": {
213
220
  "optional": true
214
221
  }
215
- },
216
- "scripts": {
217
- "build": "tsdown",
218
- "clean": "rimraf dist",
219
- "dev": "tsdown --watch",
220
- "lint": "eslint .",
221
- "types:check": "tsc --noEmit"
222
222
  }
223
- }
223
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Fuma
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-url-DP9-1I-S.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-MyA-JBt1.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":"shiki-4oMYwHED.js","names":["themes: CodeOptionsThemes<BundledTheme>"],"sources":["../src/highlight/shiki.ts"],"sourcesContent":["import {\n type BundledHighlighterOptions,\n type BundledLanguage,\n type CodeOptionsMeta,\n type CodeOptionsThemes,\n type CodeToHastOptionsCommon,\n type Highlighter,\n} from 'shiki';\nimport type { BundledTheme } from 'shiki/themes';\nimport {\n type Components,\n type Options as ToJsxOptions,\n toJsxRuntime,\n} from 'hast-util-to-jsx-runtime';\nimport { Fragment, type ReactNode } from 'react';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport type { Root } from 'hast';\n\nexport const defaultThemes = {\n light: 'github-light',\n dark: 'github-dark',\n};\n\nexport type HighlightOptionsCommon = CodeToHastOptionsCommon<BundledLanguage> &\n CodeOptionsMeta & {\n /**\n * The Regex Engine for Shiki\n *\n * @defaultValue 'js'\n */\n engine?: 'js' | 'oniguruma';\n components?: Partial<Components>;\n\n fallbackLanguage?: BundledLanguage;\n };\n\nexport type HighlightOptionsThemes = CodeOptionsThemes<BundledTheme>;\n\nexport type HighlightOptions = HighlightOptionsCommon &\n (HighlightOptionsThemes | Record<never, never>);\n\nconst highlighters = new Map<string, Promise<Highlighter>>();\n\nexport async function highlightHast(code: string, options: HighlightOptions): Promise<Root> {\n const { lang: initialLang, fallbackLanguage, components: _, engine = 'js', ...rest } = options;\n let lang = initialLang;\n let themes: CodeOptionsThemes<BundledTheme>;\n let themesToLoad;\n\n if ('theme' in options && options.theme) {\n themes = { theme: options.theme };\n themesToLoad = [themes.theme];\n } else {\n themes = {\n themes: 'themes' in options && options.themes ? options.themes : defaultThemes,\n };\n themesToLoad = Object.values(themes.themes).filter((v) => v !== undefined);\n }\n\n const highlighter = await getHighlighter(engine, {\n langs: [],\n themes: themesToLoad,\n });\n\n try {\n await highlighter.loadLanguage(lang as BundledLanguage);\n } catch {\n lang = fallbackLanguage ?? 'text';\n await highlighter.loadLanguage(lang as BundledLanguage);\n }\n\n return highlighter.codeToHast(code, {\n lang,\n ...rest,\n ...themes,\n defaultColor: 'themes' in themes ? false : undefined,\n });\n}\n\nexport function hastToJsx(hast: Root, options?: Partial<ToJsxOptions>) {\n return toJsxRuntime(hast, {\n jsx,\n jsxs,\n development: false,\n Fragment,\n ...options,\n });\n}\n\n/**\n * Get Shiki highlighter instance of Fumadocs (mostly for internal use, you should use Shiki directly over this).\n *\n * @param engineType - Shiki Regex engine to use.\n * @param options - Shiki options.\n */\nexport async function getHighlighter(\n engineType: 'js' | 'oniguruma',\n options: Omit<BundledHighlighterOptions<BundledLanguage, BundledTheme>, 'engine'>,\n) {\n const { createHighlighter } = await import('shiki');\n let highlighter = highlighters.get(engineType);\n\n if (!highlighter) {\n let engine;\n\n if (engineType === 'js') {\n engine = import('shiki/engine/javascript').then((res) => res.createJavaScriptRegexEngine());\n } else {\n engine = import('shiki/engine/oniguruma').then((res) =>\n res.createOnigurumaEngine(import('shiki/wasm')),\n );\n }\n\n highlighter = createHighlighter({\n ...options,\n engine,\n });\n\n highlighters.set(engineType, highlighter);\n return highlighter;\n }\n\n return highlighter.then(async (instance) => {\n await Promise.all([\n // @ts-expect-error unknown\n instance.loadLanguage(...options.langs),\n // @ts-expect-error unknown\n instance.loadTheme(...options.themes),\n ]);\n\n return instance;\n });\n}\n\nexport async function highlight(code: string, options: HighlightOptions): Promise<ReactNode> {\n return hastToJsx(await highlightHast(code, options), {\n components: options.components,\n });\n}\n"],"mappings":";;;;;AAkBA,MAAa,gBAAgB;CAC3B,OAAO;CACP,MAAM;CACP;AAoBD,MAAM,+BAAe,IAAI,KAAmC;AAE5D,eAAsB,cAAc,MAAc,SAA0C;CAC1F,MAAM,EAAE,MAAM,aAAa,kBAAkB,YAAY,GAAG,SAAS,MAAM,GAAG,SAAS;CACvF,IAAI,OAAO;CACX,IAAIA;CACJ,IAAI;AAEJ,KAAI,WAAW,WAAW,QAAQ,OAAO;AACvC,WAAS,EAAE,OAAO,QAAQ,OAAO;AACjC,iBAAe,CAAC,OAAO,MAAM;QACxB;AACL,WAAS,EACP,QAAQ,YAAY,WAAW,QAAQ,SAAS,QAAQ,SAAS,eAClE;AACD,iBAAe,OAAO,OAAO,OAAO,OAAO,CAAC,QAAQ,MAAM,MAAM,OAAU;;CAG5E,MAAM,cAAc,MAAM,eAAe,QAAQ;EAC/C,OAAO,EAAE;EACT,QAAQ;EACT,CAAC;AAEF,KAAI;AACF,QAAM,YAAY,aAAa,KAAwB;SACjD;AACN,SAAO,oBAAoB;AAC3B,QAAM,YAAY,aAAa,KAAwB;;AAGzD,QAAO,YAAY,WAAW,MAAM;EAClC;EACA,GAAG;EACH,GAAG;EACH,cAAc,YAAY,SAAS,QAAQ;EAC5C,CAAC;;AAGJ,SAAgB,UAAU,MAAY,SAAiC;AACrE,QAAO,aAAa,MAAM;EACxB;EACA;EACA,aAAa;EACb;EACA,GAAG;EACJ,CAAC;;;;;;;;AASJ,eAAsB,eACpB,YACA,SACA;CACA,MAAM,EAAE,sBAAsB,MAAM,OAAO;CAC3C,IAAI,cAAc,aAAa,IAAI,WAAW;AAE9C,KAAI,CAAC,aAAa;EAChB,IAAI;AAEJ,MAAI,eAAe,KACjB,UAAS,OAAO,2BAA2B,MAAM,QAAQ,IAAI,6BAA6B,CAAC;MAE3F,UAAS,OAAO,0BAA0B,MAAM,QAC9C,IAAI,sBAAsB,OAAO,cAAc,CAChD;AAGH,gBAAc,kBAAkB;GAC9B,GAAG;GACH;GACD,CAAC;AAEF,eAAa,IAAI,YAAY,YAAY;AACzC,SAAO;;AAGT,QAAO,YAAY,KAAK,OAAO,aAAa;AAC1C,QAAM,QAAQ,IAAI,CAEhB,SAAS,aAAa,GAAG,QAAQ,MAAM,EAEvC,SAAS,UAAU,GAAG,QAAQ,OAAO,CACtC,CAAC;AAEF,SAAO;GACP;;AAGJ,eAAsB,UAAU,MAAc,SAA+C;AAC3F,QAAO,UAAU,MAAM,cAAc,MAAM,QAAQ,EAAE,EACnD,YAAY,QAAQ,YACrB,CAAC"}