@clarify-labs/renderer 0.6.5 → 0.6.6

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 (35) hide show
  1. package/output/{OpenApiOperation-WntXLbai.js → OpenApiOperation-CI_PeMSy.js} +3 -6
  2. package/output/OpenApiOperation-CI_PeMSy.js.map +1 -0
  3. package/output/{OpenApiOperation-CsDX1s-6.cjs → OpenApiOperation-CxQQyEHK.cjs} +3 -6
  4. package/output/OpenApiOperation-CxQQyEHK.cjs.map +1 -0
  5. package/output/{ThemeRoot-DXoVzHSZ.cjs → ThemeRoot-BhP5M3Hd.cjs} +5 -5
  6. package/output/{ThemeRoot-DXoVzHSZ.cjs.map → ThemeRoot-BhP5M3Hd.cjs.map} +1 -1
  7. package/output/{ThemeRoot-Dr8JC8Yc.js → ThemeRoot-DErmHskn.js} +5 -5
  8. package/output/{ThemeRoot-Dr8JC8Yc.js.map → ThemeRoot-DErmHskn.js.map} +1 -1
  9. package/output/client.cjs +2 -2
  10. package/output/client.js +2 -2
  11. package/output/index.cjs +4 -4
  12. package/output/index.js +4 -4
  13. package/output/markdown.cjs +1 -1
  14. package/output/markdown.js +1 -1
  15. package/output/mdx/remark.d.ts +11 -1
  16. package/output/preview.cjs +1 -1
  17. package/output/preview.js +1 -1
  18. package/output/remark-Dd2WU50s.js +35 -0
  19. package/output/remark-Dd2WU50s.js.map +1 -0
  20. package/output/remark-Dv3owbSH.cjs +42 -0
  21. package/output/remark-Dv3owbSH.cjs.map +1 -0
  22. package/output/{render-BfNmzJeJ.cjs → render-C_NHO3rz.cjs} +2 -2
  23. package/output/{render-BfNmzJeJ.cjs.map → render-C_NHO3rz.cjs.map} +1 -1
  24. package/output/{render-DS2wcTZJ.js → render-HeCAMIGm.js} +2 -2
  25. package/output/{render-DS2wcTZJ.js.map → render-HeCAMIGm.js.map} +1 -1
  26. package/output/renderer.css +13 -38
  27. package/output/server.cjs +1 -1
  28. package/output/server.js +1 -1
  29. package/package.json +1 -1
  30. package/output/OpenApiOperation-CsDX1s-6.cjs.map +0 -1
  31. package/output/OpenApiOperation-WntXLbai.js.map +0 -1
  32. package/output/remark-DNOdJz5i.cjs +0 -14
  33. package/output/remark-DNOdJz5i.cjs.map +0 -1
  34. package/output/remark-o5sg9Ilv.js +0 -7
  35. package/output/remark-o5sg9Ilv.js.map +0 -1
@@ -0,0 +1,35 @@
1
+ import remarkGfm from "remark-gfm";
2
+ //#region source/mdx/remark.ts
3
+ function parseCodeMeta(meta) {
4
+ if (!meta) return {};
5
+ const props = {};
6
+ const pattern = /([\w-]+)(?:=("([^"]*)"|'([^']*)'|([^\s"']+)))?/g;
7
+ let match;
8
+ while (match = pattern.exec(meta)) {
9
+ const [, key, , doubleQuotedValue, singleQuotedValue, bareValue] = match;
10
+ if (!key) continue;
11
+ props[key] = doubleQuotedValue ?? singleQuotedValue ?? bareValue ?? "true";
12
+ }
13
+ return props;
14
+ }
15
+ function addCodeMetaAttributes(node) {
16
+ if (node.type === "code") {
17
+ const props = parseCodeMeta(node.meta);
18
+ if (Object.keys(props).length) {
19
+ node.data = node.data ?? {};
20
+ node.data.hProperties = {
21
+ ...node.data.hProperties,
22
+ ...props
23
+ };
24
+ }
25
+ }
26
+ for (const child of node.children ?? []) addCodeMetaAttributes(child);
27
+ }
28
+ function remarkCodeMeta() {
29
+ return (tree) => addCodeMetaAttributes(tree);
30
+ }
31
+ var markdownRemarkPlugins = [remarkGfm, remarkCodeMeta];
32
+ //#endregion
33
+ export { markdownRemarkPlugins as t };
34
+
35
+ //# sourceMappingURL=remark-Dd2WU50s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-Dd2WU50s.js","names":[],"sources":["../source/mdx/remark.ts"],"sourcesContent":["import remarkGfm from 'remark-gfm'\n\nexport type MarkdownNode = {\n type?: string\n meta?: string | null\n data?: {\n hProperties?: Record<string, unknown>\n }\n children?: MarkdownNode[]\n}\n\nfunction parseCodeMeta(meta: string | null | undefined): Record<string, string> {\n if (!meta) return {}\n\n const props: Record<string, string> = {}\n const pattern = /([\\w-]+)(?:=(\"([^\"]*)\"|'([^']*)'|([^\\s\"']+)))?/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(meta))) {\n const [, key, , doubleQuotedValue, singleQuotedValue, bareValue] = match\n if (!key) continue\n props[key] = doubleQuotedValue ?? singleQuotedValue ?? bareValue ?? 'true'\n }\n\n return props\n}\n\nfunction addCodeMetaAttributes(node: MarkdownNode) {\n if (node.type === 'code') {\n const props = parseCodeMeta(node.meta)\n if (Object.keys(props).length) {\n node.data = node.data ?? {}\n node.data.hProperties = {\n ...node.data.hProperties,\n ...props,\n }\n }\n }\n\n for (const child of node.children ?? []) addCodeMetaAttributes(child)\n}\n\nfunction remarkCodeMeta() {\n return (tree: MarkdownNode) => addCodeMetaAttributes(tree)\n}\n\nexport const markdownRemarkPlugins = [remarkGfm, remarkCodeMeta]\n"],"mappings":";;AAWA,SAAS,cAAc,MAAyD;CAC9E,IAAI,CAAC,MAAM,OAAO,CAAC;CAEnB,MAAM,QAAgC,CAAC;CACvC,MAAM,UAAU;CAChB,IAAI;CAEJ,OAAQ,QAAQ,QAAQ,KAAK,IAAI,GAAI;EACnC,MAAM,GAAG,OAAO,mBAAmB,mBAAmB,aAAa;EACnE,IAAI,CAAC,KAAK;EACV,MAAM,OAAO,qBAAqB,qBAAqB,aAAa;CACtE;CAEA,OAAO;AACT;AAEA,SAAS,sBAAsB,MAAoB;CACjD,IAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,QAAQ,cAAc,KAAK,IAAI;EACrC,IAAI,OAAO,KAAK,KAAK,EAAE,QAAQ;GAC7B,KAAK,OAAO,KAAK,QAAQ,CAAC;GAC1B,KAAK,KAAK,cAAc;IACtB,GAAG,KAAK,KAAK;IACb,GAAG;GACL;EACF;CACF;CAEA,KAAK,MAAM,SAAS,KAAK,YAAY,CAAC,GAAG,sBAAsB,KAAK;AACtE;AAEA,SAAS,iBAAiB;CACxB,QAAQ,SAAuB,sBAAsB,IAAI;AAC3D;AAEA,IAAa,wBAAwB,CAAC,WAAW,cAAc"}
@@ -0,0 +1,42 @@
1
+ const require_chunk = require("./chunk-DakpK96I.cjs");
2
+ let remark_gfm = require("remark-gfm");
3
+ remark_gfm = require_chunk.__toESM(remark_gfm, 1);
4
+ //#region source/mdx/remark.ts
5
+ function parseCodeMeta(meta) {
6
+ if (!meta) return {};
7
+ const props = {};
8
+ const pattern = /([\w-]+)(?:=("([^"]*)"|'([^']*)'|([^\s"']+)))?/g;
9
+ let match;
10
+ while (match = pattern.exec(meta)) {
11
+ const [, key, , doubleQuotedValue, singleQuotedValue, bareValue] = match;
12
+ if (!key) continue;
13
+ props[key] = doubleQuotedValue ?? singleQuotedValue ?? bareValue ?? "true";
14
+ }
15
+ return props;
16
+ }
17
+ function addCodeMetaAttributes(node) {
18
+ if (node.type === "code") {
19
+ const props = parseCodeMeta(node.meta);
20
+ if (Object.keys(props).length) {
21
+ node.data = node.data ?? {};
22
+ node.data.hProperties = {
23
+ ...node.data.hProperties,
24
+ ...props
25
+ };
26
+ }
27
+ }
28
+ for (const child of node.children ?? []) addCodeMetaAttributes(child);
29
+ }
30
+ function remarkCodeMeta() {
31
+ return (tree) => addCodeMetaAttributes(tree);
32
+ }
33
+ var markdownRemarkPlugins = [remark_gfm.default, remarkCodeMeta];
34
+ //#endregion
35
+ Object.defineProperty(exports, "markdownRemarkPlugins", {
36
+ enumerable: true,
37
+ get: function() {
38
+ return markdownRemarkPlugins;
39
+ }
40
+ });
41
+
42
+ //# sourceMappingURL=remark-Dv3owbSH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-Dv3owbSH.cjs","names":[],"sources":["../source/mdx/remark.ts"],"sourcesContent":["import remarkGfm from 'remark-gfm'\n\nexport type MarkdownNode = {\n type?: string\n meta?: string | null\n data?: {\n hProperties?: Record<string, unknown>\n }\n children?: MarkdownNode[]\n}\n\nfunction parseCodeMeta(meta: string | null | undefined): Record<string, string> {\n if (!meta) return {}\n\n const props: Record<string, string> = {}\n const pattern = /([\\w-]+)(?:=(\"([^\"]*)\"|'([^']*)'|([^\\s\"']+)))?/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(meta))) {\n const [, key, , doubleQuotedValue, singleQuotedValue, bareValue] = match\n if (!key) continue\n props[key] = doubleQuotedValue ?? singleQuotedValue ?? bareValue ?? 'true'\n }\n\n return props\n}\n\nfunction addCodeMetaAttributes(node: MarkdownNode) {\n if (node.type === 'code') {\n const props = parseCodeMeta(node.meta)\n if (Object.keys(props).length) {\n node.data = node.data ?? {}\n node.data.hProperties = {\n ...node.data.hProperties,\n ...props,\n }\n }\n }\n\n for (const child of node.children ?? []) addCodeMetaAttributes(child)\n}\n\nfunction remarkCodeMeta() {\n return (tree: MarkdownNode) => addCodeMetaAttributes(tree)\n}\n\nexport const markdownRemarkPlugins = [remarkGfm, remarkCodeMeta]\n"],"mappings":";;;;AAWA,SAAS,cAAc,MAAyD;CAC9E,IAAI,CAAC,MAAM,OAAO,CAAC;CAEnB,MAAM,QAAgC,CAAC;CACvC,MAAM,UAAU;CAChB,IAAI;CAEJ,OAAQ,QAAQ,QAAQ,KAAK,IAAI,GAAI;EACnC,MAAM,GAAG,OAAO,mBAAmB,mBAAmB,aAAa;EACnE,IAAI,CAAC,KAAK;EACV,MAAM,OAAO,qBAAqB,qBAAqB,aAAa;CACtE;CAEA,OAAO;AACT;AAEA,SAAS,sBAAsB,MAAoB;CACjD,IAAI,KAAK,SAAS,QAAQ;EACxB,MAAM,QAAQ,cAAc,KAAK,IAAI;EACrC,IAAI,OAAO,KAAK,KAAK,EAAE,QAAQ;GAC7B,KAAK,OAAO,KAAK,QAAQ,CAAC;GAC1B,KAAK,KAAK,cAAc;IACtB,GAAG,KAAK,KAAK;IACb,GAAG;GACL;EACF;CACF;CAEA,KAAK,MAAM,SAAS,KAAK,YAAY,CAAC,GAAG,sBAAsB,KAAK;AACtE;AAEA,SAAS,iBAAiB;CACxB,QAAQ,SAAuB,sBAAsB,IAAI;AAC3D;AAEA,IAAa,wBAAwB,CAAC,WAAA,SAAW,cAAc"}
@@ -1,5 +1,5 @@
1
1
  const require_shell = require("./shell-D4tS8Jts.cjs");
2
- const require_ThemeRoot = require("./ThemeRoot-DXoVzHSZ.cjs");
2
+ const require_ThemeRoot = require("./ThemeRoot-BhP5M3Hd.cjs");
3
3
  let react = require("react");
4
4
  let react_router_dom = require("react-router-dom");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -62,4 +62,4 @@ Object.defineProperty(exports, "render", {
62
62
  }
63
63
  });
64
64
 
65
- //# sourceMappingURL=render-BfNmzJeJ.cjs.map
65
+ //# sourceMappingURL=render-C_NHO3rz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-BfNmzJeJ.cjs","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,WAAW,cAAc,UAAU;CAEtF,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,iBAAA,GAAA,kBAAA,KAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,eAAD;EAAe,UAAU,OAAO;YAC9B,iBAAA,GAAA,kBAAA,KAAC,cAAA,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,iBAAA,GAAA,kBAAA,KAAC,cAAA,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,iBAAA,GAAA,kBAAA,KAAC,cAAA,eAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,kBAAA,WAAD;KAAW,OAAO,OAAO;KAAoB;eAC3C,iBAAA,GAAA,kBAAA,KAAC,kBAAA,UAAD;MAAkB;MAAgB;MAAQ,YAAY,cAAc,CAAC;KAAI,CAAA;IAChE,CAAA,EACE,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,CAAA,GAAA,iBAAA,aAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,CAAA,GAAA,iBAAA,YAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
1
+ {"version":3,"file":"render-C_NHO3rz.cjs","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,WAAW,cAAc,UAAU;CAEtF,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,iBAAA,GAAA,kBAAA,KAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,iBAAA,eAAD;EAAe,UAAU,OAAO;YAC9B,iBAAA,GAAA,kBAAA,KAAC,cAAA,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,iBAAA,GAAA,kBAAA,KAAC,cAAA,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,iBAAA,GAAA,kBAAA,KAAC,cAAA,eAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,kBAAA,WAAD;KAAW,OAAO,OAAO;KAAoB;eAC3C,iBAAA,GAAA,kBAAA,KAAC,kBAAA,UAAD;MAAkB;MAAgB;MAAQ,YAAY,cAAc,CAAC;KAAI,CAAA;IAChE,CAAA,EACE,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,CAAA,GAAA,iBAAA,aAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,CAAA,GAAA,iBAAA,YAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { S as OpenApisContext, b as ClarifyConfigContext, f as ThemeProvider } from "./shell-DvTfFx6M.js";
2
- import { a as AppShell, t as ThemeRoot } from "./ThemeRoot-Dr8JC8Yc.js";
2
+ import { a as AppShell, t as ThemeRoot } from "./ThemeRoot-DErmHskn.js";
3
3
  import { StrictMode } from "react";
4
4
  import { BrowserRouter } from "react-router-dom";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -57,4 +57,4 @@ function render(options) {
57
57
  //#endregion
58
58
  export { render as t };
59
59
 
60
- //# sourceMappingURL=render-DS2wcTZJ.js.map
60
+ //# sourceMappingURL=render-HeCAMIGm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-DS2wcTZJ.js","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,WAAW,cAAc,UAAU;CAEtF,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,oBAAC,YAAD,EAAA,UACE,oBAAC,eAAD;EAAe,UAAU,OAAO;YAC9B,oBAAC,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,oBAAC,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,oBAAC,eAAD,EAAA,UACE,oBAAC,WAAD;KAAW,OAAO,OAAO;KAAoB;eAC3C,oBAAC,UAAD;MAAkB;MAAgB;MAAQ,YAAY,cAAc,CAAC;KAAI,CAAA;IAChE,CAAA,EACE,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,YAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,WAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
1
+ {"version":3,"file":"render-HeCAMIGm.js","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport { AppShell } from '../app/AppShell'\nimport { ClarifyConfigContext, OpenApisContext } from '../context'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\nimport type { RenderOptions } from '../types'\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify-routes';\n * import { config } from 'virtual:clarify-config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApis = {}, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell config={config} routes={routes} navigation={navigation ?? []} />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ClarifyConfigContext.Provider>\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n try {\n hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n createRoot(target as Element).render(app)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,SAAS,0BAAmC;CAC1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,EAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,WAAW,cAAc,UAAU;CAEtF,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,oBAAC,YAAD,EAAA,UACE,oBAAC,eAAD;EAAe,UAAU,OAAO;YAC9B,oBAAC,qBAAqB,UAAtB;GAA+B,OAAO;aACpC,oBAAC,gBAAgB,UAAjB;IAA0B,OAAO;cAC/B,oBAAC,eAAD,EAAA,UACE,oBAAC,WAAD;KAAW,OAAO,OAAO;KAAoB;eAC3C,oBAAC,UAAD;MAAkB;MAAgB;MAAQ,YAAY,cAAc,CAAC;KAAI,CAAA;IAChE,CAAA,EACE,CAAA;GACS,CAAA;EACG,CAAA;CAClB,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI;EACF,YAAY,QAAmB,KAAK,EAClC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,WAAW,MAAiB,EAAE,OAAO,GAAG;CAC1C;AACF"}
@@ -131,7 +131,6 @@
131
131
  --color-white: #fff;
132
132
  --spacing: .25rem;
133
133
  --container-sm: 24rem;
134
- --container-lg: 33rem;
135
134
  --container-xl: 36rem;
136
135
  --container-2xl: 40rem;
137
136
  --container-3xl: 50rem;
@@ -606,10 +605,10 @@
606
605
  --clarify-popover-max-width: min(32rem, calc(100vw - 2rem));
607
606
  --clarify-code-header-min-height: calc(3rem + 1px);
608
607
  --clarify-feedback-actions-grid: 1fr 1px 1fr;
609
- --clarify-heading-anchor-width: calc(2.625rem + .5px + 50% - min(50%, calc(var(--container-lg) + 2rem)));
610
- --clarify-heading-anchor-width-wide: 2.5rem;
608
+ --clarify-heading-anchor-width: 1.75rem;
609
+ --clarify-heading-anchor-width-wide: 1.75rem;
611
610
  --clarify-theme-editor-width: min(calc(100vw - 2rem), 24rem);
612
- --clarify-theme-editor-body-max-height: min(42rem, calc(100vh - 7rem));
611
+ --clarify-theme-editor-panel-max-height: min(42rem, calc(100dvh - 5.75rem));
613
612
  --clarify-error-page-min-height: 34rem;
614
613
  --clarify-error-details-max-height: 20rem;
615
614
  --clarify-error-component-stack-max-height: 12rem;
@@ -1851,8 +1850,8 @@
1851
1850
  max-height: var(--clarify-error-details-max-height);
1852
1851
  }
1853
1852
 
1854
- .max-h-\(--clarify-theme-editor-body-max-height\) {
1855
- max-height: var(--clarify-theme-editor-body-max-height);
1853
+ .max-h-\(--clarify-theme-editor-panel-max-height\) {
1854
+ max-height: var(--clarify-theme-editor-panel-max-height);
1856
1855
  }
1857
1856
 
1858
1857
  .max-h-64 {
@@ -1871,6 +1870,10 @@
1871
1870
  min-height: var(--clarify-error-page-min-height);
1872
1871
  }
1873
1872
 
1873
+ .min-h-0 {
1874
+ min-height: 0;
1875
+ }
1876
+
1874
1877
  .min-h-11 {
1875
1878
  min-height: calc(var(--spacing) * 11);
1876
1879
  }
@@ -3437,6 +3440,10 @@
3437
3440
  opacity: .35;
3438
3441
  }
3439
3442
 
3443
+ .opacity-80 {
3444
+ opacity: .8;
3445
+ }
3446
+
3440
3447
  .opacity-100 {
3441
3448
  opacity: 1;
3442
3449
  }
@@ -3574,10 +3581,6 @@
3574
3581
  }
3575
3582
  }
3576
3583
 
3577
- .ring-zinc-300 {
3578
- --tw-ring-color: var(--color-zinc-300);
3579
- }
3580
-
3581
3584
  .outline-hidden {
3582
3585
  --tw-outline-style: none;
3583
3586
  outline-style: none;
@@ -3852,10 +3855,6 @@
3852
3855
  --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d);
3853
3856
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3854
3857
  }
3855
-
3856
- .hover\:ring-zinc-500:hover {
3857
- --tw-ring-color: var(--color-zinc-500);
3858
- }
3859
3858
  }
3860
3859
 
3861
3860
  .focus\:w-full:focus {
@@ -4635,10 +4634,6 @@
4635
4634
  background-color: var(--color-zinc-600);
4636
4635
  }
4637
4636
 
4638
- .dark\:bg-zinc-800:where(.dark, .dark *) {
4639
- background-color: var(--color-zinc-800);
4640
- }
4641
-
4642
4637
  .dark\:bg-zinc-900:where(.dark, .dark *) {
4643
4638
  background-color: var(--color-zinc-900);
4644
4639
  }
@@ -4695,10 +4690,6 @@
4695
4690
  }
4696
4691
  }
4697
4692
 
4698
- .dark\:stroke-zinc-400:where(.dark, .dark *) {
4699
- stroke: var(--color-zinc-400);
4700
- }
4701
-
4702
4693
  .dark\:stroke-zinc-600:where(.dark, .dark *) {
4703
4694
  stroke: var(--color-zinc-600);
4704
4695
  }
@@ -4861,10 +4852,6 @@
4861
4852
  }
4862
4853
  }
4863
4854
 
4864
- .dark\:ring-zinc-700:where(.dark, .dark *) {
4865
- --tw-ring-color: var(--color-zinc-700);
4866
- }
4867
-
4868
4855
  .dark\:ring-zinc-800:where(.dark, .dark *) {
4869
4856
  --tw-ring-color: var(--color-zinc-800);
4870
4857
  }
@@ -4900,10 +4887,6 @@
4900
4887
  }
4901
4888
 
4902
4889
  @media (hover: hover) {
4903
- .dark\:group-hover\/anchor\:stroke-white:where(.dark, .dark *):is(:where(.group\/anchor):hover *) {
4904
- stroke: var(--color-white);
4905
- }
4906
-
4907
4890
  .dark\:hover\:bg-white\/5:where(.dark, .dark *):hover {
4908
4891
  background-color: #ffffff0d;
4909
4892
  }
@@ -4924,10 +4907,6 @@
4924
4907
  }
4925
4908
  }
4926
4909
 
4927
- .dark\:hover\:bg-zinc-700:where(.dark, .dark *):hover {
4928
- background-color: var(--color-zinc-700);
4929
- }
4930
-
4931
4910
  .dark\:hover\:text-emerald-200:where(.dark, .dark *):hover {
4932
4911
  color: var(--color-emerald-200);
4933
4912
  }
@@ -4935,10 +4914,6 @@
4935
4914
  .dark\:hover\:opacity-80:where(.dark, .dark *):hover {
4936
4915
  opacity: .8;
4937
4916
  }
4938
-
4939
- .dark\:hover\:ring-zinc-600:where(.dark, .dark *):hover {
4940
- --tw-ring-color: var(--color-zinc-600);
4941
- }
4942
4917
  }
4943
4918
 
4944
4919
  @media (min-width: 48rem) {
package/output/server.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_shell = require("./shell-D4tS8Jts.cjs");
3
- const require_ThemeRoot = require("./ThemeRoot-DXoVzHSZ.cjs");
3
+ const require_ThemeRoot = require("./ThemeRoot-BhP5M3Hd.cjs");
4
4
  let react = require("react");
5
5
  let react_router_dom = require("react-router-dom");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
package/output/server.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { S as OpenApisContext, _ as prefixHref, b as ClarifyConfigContext, f as ThemeProvider } from "./shell-DvTfFx6M.js";
2
- import { a as AppShell, t as ThemeRoot } from "./ThemeRoot-Dr8JC8Yc.js";
2
+ import { a as AppShell, t as ThemeRoot } from "./ThemeRoot-DErmHskn.js";
3
3
  import { StrictMode } from "react";
4
4
  import { StaticRouter } from "react-router-dom";
5
5
  import { jsx } from "react/jsx-runtime";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clarify-labs/renderer",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "repository": {