@clarify-labs/renderer 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/output/{ClarifyShell-CxhXBtsR.js → ClarifyShell-1LuBliwt.js} +124 -40
  2. package/output/ClarifyShell-1LuBliwt.js.map +1 -0
  3. package/output/{ClarifyShell-DjLRRW8T.cjs → ClarifyShell-C6li72Ce.cjs} +136 -52
  4. package/output/ClarifyShell-C6li72Ce.cjs.map +1 -0
  5. package/output/MermaidViewer-B6-BMCJG.cjs +101 -0
  6. package/output/MermaidViewer-B6-BMCJG.cjs.map +1 -0
  7. package/output/MermaidViewer-dXsomvM7.js +98 -0
  8. package/output/MermaidViewer-dXsomvM7.js.map +1 -0
  9. package/output/{OpenApiOperation-CyBkzvob.js → OpenApiOperation-CqNM-no4.js} +250 -188
  10. package/output/OpenApiOperation-CqNM-no4.js.map +1 -0
  11. package/output/{OpenApiOperation-qp5tFaWP.cjs → OpenApiOperation-DK46w2dq.cjs} +277 -203
  12. package/output/OpenApiOperation-DK46w2dq.cjs.map +1 -0
  13. package/output/{PageActions-GS_cxeJN.cjs → PageActions-BjB6PYmL.cjs} +73 -734
  14. package/output/PageActions-BjB6PYmL.cjs.map +1 -0
  15. package/output/{PageActions-Dn8IGWoL.js → PageActions-D7K9LDGf.js} +67 -680
  16. package/output/PageActions-D7K9LDGf.js.map +1 -0
  17. package/output/SearchDialog-CIPvXMT3.cjs +414 -0
  18. package/output/SearchDialog-CIPvXMT3.cjs.map +1 -0
  19. package/output/SearchDialog-CxYLjRi5.js +411 -0
  20. package/output/SearchDialog-CxYLjRi5.js.map +1 -0
  21. package/output/app/AppShell.d.ts +2 -2
  22. package/output/app/SectionHashSync.d.ts +6 -0
  23. package/output/client.cjs +3 -3
  24. package/output/client.js +3 -3
  25. package/output/components/MermaidViewer.d.ts +7 -0
  26. package/output/context.d.ts +1 -1
  27. package/output/core/context.d.ts +3 -4
  28. package/output/core/i18n.d.ts +1 -1
  29. package/output/core/index.d.ts +1 -1
  30. package/output/core/types.d.ts +36 -19
  31. package/output/i18n-DnqZHFT7.js +247 -0
  32. package/output/i18n-DnqZHFT7.js.map +1 -0
  33. package/output/i18n-b4iTLeia.cjs +294 -0
  34. package/output/i18n-b4iTLeia.cjs.map +1 -0
  35. package/output/index.cjs +90 -93
  36. package/output/index.cjs.map +1 -1
  37. package/output/index.d.ts +5 -5
  38. package/output/index.js +83 -86
  39. package/output/index.js.map +1 -1
  40. package/output/openapi/components/EndpointSections.d.ts +3 -1
  41. package/output/openapi/components/ExamplePanels.d.ts +3 -1
  42. package/output/openapi/components/OpenApiOperation.d.ts +3 -1
  43. package/output/openapi/components/OpenApiOperation.state.d.ts +3 -3
  44. package/output/openapi/components/SchemaProperties.d.ts +1 -0
  45. package/output/openapi/components/helpers.d.ts +2 -2
  46. package/output/openapi/entry.d.ts +0 -1
  47. package/output/openapi/lib/helpers.d.ts +5 -3
  48. package/output/openapi/lib/request-code.d.ts +2 -1
  49. package/output/openapi/lib/spec-path.d.ts +6 -1
  50. package/output/openapi/lib/utils.d.ts +10 -4
  51. package/output/preview.cjs +7 -5
  52. package/output/preview.cjs.map +1 -1
  53. package/output/preview.js +5 -3
  54. package/output/preview.js.map +1 -1
  55. package/output/{render-CV0a-qtD.js → render-DKj24Jqw.js} +15 -8
  56. package/output/render-DKj24Jqw.js.map +1 -0
  57. package/output/{render-CCCoUWDP.cjs → render-Di5B6Zc0.cjs} +15 -8
  58. package/output/render-Di5B6Zc0.cjs.map +1 -0
  59. package/output/renderer.css +54 -0
  60. package/output/runtime/ClarifyShell.d.ts +5 -6
  61. package/output/server.cjs +4 -4
  62. package/output/server.cjs.map +1 -1
  63. package/output/server.js +4 -4
  64. package/output/server.js.map +1 -1
  65. package/output/shell/Navigation.d.ts +1 -0
  66. package/output/shell/search/SearchDialog.d.ts +1 -1
  67. package/output/slots/RuntimeSlot.d.ts +7 -7
  68. package/output/slots/context.d.ts +5 -5
  69. package/output/slots/index.d.ts +2 -2
  70. package/output/slots/types.d.ts +1 -1
  71. package/output/utils/path.d.ts +1 -1
  72. package/package.json +1 -1
  73. package/output/ClarifyShell-CxhXBtsR.js.map +0 -1
  74. package/output/ClarifyShell-DjLRRW8T.cjs.map +0 -1
  75. package/output/OpenApiOperation-CyBkzvob.js.map +0 -1
  76. package/output/OpenApiOperation-qp5tFaWP.cjs.map +0 -1
  77. package/output/PageActions-Dn8IGWoL.js.map +0 -1
  78. package/output/PageActions-GS_cxeJN.cjs.map +0 -1
  79. package/output/render-CCCoUWDP.cjs.map +0 -1
  80. package/output/render-CV0a-qtD.js.map +0 -1
@@ -1,20 +1,22 @@
1
- import { t as ClarifyShell } from "./ClarifyShell-CxhXBtsR.js";
1
+ import { t as ClarifyShell } from "./ClarifyShell-1LuBliwt.js";
2
2
  import { StrictMode } from "react";
3
3
  import { BrowserRouter } from "react-router-dom";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { createRoot, hydrateRoot } from "react-dom/client";
6
6
  //#region source/runtime/render.tsx
7
+ var root;
7
8
  /**
8
9
  * Clarify 客户端 Hydration 入口。
9
10
  * 在文档项目的 main.tsx 中调用:
10
11
  * ```ts
11
12
  * import { render } from '@clarify-labs/renderer';
12
- * import { routes } from 'virtual:clarify-routes';
13
- * import { config } from 'virtual:clarify-config';
13
+ * import { routes } from 'virtual:clarify/routes';
14
+ * import { config } from 'virtual:clarify/config';
14
15
  * render({ config, routes });
15
16
  * ```
16
17
  */
17
18
  function isHydrationDebugEnabled() {
19
+ if (typeof window === "undefined") return false;
18
20
  try {
19
21
  return new URLSearchParams(window.location.search).get("clarifyHydrationDebug") === "1" || window.localStorage.getItem("clarify:hydration-debug") === "1";
20
22
  } catch {
@@ -22,7 +24,7 @@ function isHydrationDebugEnabled() {
22
24
  }
23
25
  }
24
26
  function render(options) {
25
- const { config, routes, navigation, openApis = {}, runtimeSlots, container, themeEditor = false } = options;
27
+ const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, container, themeEditor = false } = options;
26
28
  const target = container ?? document.getElementById("root");
27
29
  if (!target) throw new Error("[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素");
28
30
  const app = /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(BrowserRouter, {
@@ -31,22 +33,27 @@ function render(options) {
31
33
  config,
32
34
  routes,
33
35
  navigation,
34
- openApis,
36
+ openApiSpecs,
35
37
  runtimeSlots,
36
38
  themeEditor
37
39
  })
38
40
  }) });
39
41
  const hydrationDebug = isHydrationDebugEnabled();
42
+ if (root) {
43
+ root.render(app);
44
+ return;
45
+ }
40
46
  try {
41
- hydrateRoot(target, app, { onRecoverableError(error, errorInfo) {
47
+ root = hydrateRoot(target, app, { onRecoverableError(error, errorInfo) {
42
48
  if (hydrationDebug) console.warn("[clarify] Recoverable hydration error:", error, errorInfo);
43
49
  } });
44
50
  } catch (err) {
45
51
  console.warn("[clarify] Hydration failed, falling back to client render:", err);
46
- createRoot(target).render(app);
52
+ root = createRoot(target);
53
+ root.render(app);
47
54
  }
48
55
  }
49
56
  //#endregion
50
57
  export { render as t };
51
58
 
52
- //# sourceMappingURL=render-CV0a-qtD.js.map
59
+ //# sourceMappingURL=render-DKj24Jqw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-DKj24Jqw.js","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot, type Root } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport type { RenderOptions } from '../types'\n\nimport { ClarifyShell } from './ClarifyShell'\n\nlet root: Root | undefined\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 if (typeof window === 'undefined') return false\n\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, openApiSpecs = {}, runtimeSlots, 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 <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n if (root) {\n root.render(app)\n return\n }\n\n try {\n root = 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 root = createRoot(target as Element)\n root.render(app)\n }\n}\n"],"mappings":";;;;;;AAQA,IAAI;;;;;;;;;;;AAYJ,SAAS,0BAAmC;CAC1C,IAAI,OAAO,WAAW,aAAa,OAAO;CAE1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,CAAA,CAAO,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,eAAe,CAAC,GAAG,cAAc,WAAW,cAAc,UAAU;CAExG,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,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACY,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI,MAAM;EACR,KAAK,OAAO,GAAG;EACf;CACF;CAEA,IAAI;EACF,OAAO,YAAY,QAAmB,KAAK,EACzC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,OAAO,WAAW,MAAiB;EACnC,KAAK,OAAO,GAAG;CACjB;AACF"}
@@ -1,20 +1,22 @@
1
- const require_ClarifyShell = require("./ClarifyShell-DjLRRW8T.cjs");
1
+ const require_ClarifyShell = require("./ClarifyShell-C6li72Ce.cjs");
2
2
  let react = require("react");
3
3
  let react_router_dom = require("react-router-dom");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  let react_dom_client = require("react-dom/client");
6
6
  //#region source/runtime/render.tsx
7
+ var root;
7
8
  /**
8
9
  * Clarify 客户端 Hydration 入口。
9
10
  * 在文档项目的 main.tsx 中调用:
10
11
  * ```ts
11
12
  * import { render } from '@clarify-labs/renderer';
12
- * import { routes } from 'virtual:clarify-routes';
13
- * import { config } from 'virtual:clarify-config';
13
+ * import { routes } from 'virtual:clarify/routes';
14
+ * import { config } from 'virtual:clarify/config';
14
15
  * render({ config, routes });
15
16
  * ```
16
17
  */
17
18
  function isHydrationDebugEnabled() {
19
+ if (typeof window === "undefined") return false;
18
20
  try {
19
21
  return new URLSearchParams(window.location.search).get("clarifyHydrationDebug") === "1" || window.localStorage.getItem("clarify:hydration-debug") === "1";
20
22
  } catch {
@@ -22,7 +24,7 @@ function isHydrationDebugEnabled() {
22
24
  }
23
25
  }
24
26
  function render(options) {
25
- const { config, routes, navigation, openApis = {}, runtimeSlots, container, themeEditor = false } = options;
27
+ const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, container, themeEditor = false } = options;
26
28
  const target = container ?? document.getElementById("root");
27
29
  if (!target) throw new Error("[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素");
28
30
  const app = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.StrictMode, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.BrowserRouter, {
@@ -31,19 +33,24 @@ function render(options) {
31
33
  config,
32
34
  routes,
33
35
  navigation,
34
- openApis,
36
+ openApiSpecs,
35
37
  runtimeSlots,
36
38
  themeEditor
37
39
  })
38
40
  }) });
39
41
  const hydrationDebug = isHydrationDebugEnabled();
42
+ if (root) {
43
+ root.render(app);
44
+ return;
45
+ }
40
46
  try {
41
- (0, react_dom_client.hydrateRoot)(target, app, { onRecoverableError(error, errorInfo) {
47
+ root = (0, react_dom_client.hydrateRoot)(target, app, { onRecoverableError(error, errorInfo) {
42
48
  if (hydrationDebug) console.warn("[clarify] Recoverable hydration error:", error, errorInfo);
43
49
  } });
44
50
  } catch (err) {
45
51
  console.warn("[clarify] Hydration failed, falling back to client render:", err);
46
- (0, react_dom_client.createRoot)(target).render(app);
52
+ root = (0, react_dom_client.createRoot)(target);
53
+ root.render(app);
47
54
  }
48
55
  }
49
56
  //#endregion
@@ -54,4 +61,4 @@ Object.defineProperty(exports, "render", {
54
61
  }
55
62
  });
56
63
 
57
- //# sourceMappingURL=render-CCCoUWDP.cjs.map
64
+ //# sourceMappingURL=render-Di5B6Zc0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-Di5B6Zc0.cjs","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot, type Root } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport type { RenderOptions } from '../types'\n\nimport { ClarifyShell } from './ClarifyShell'\n\nlet root: Root | undefined\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 if (typeof window === 'undefined') return false\n\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, openApiSpecs = {}, runtimeSlots, 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 <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n if (root) {\n root.render(app)\n return\n }\n\n try {\n root = 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 root = createRoot(target as Element)\n root.render(app)\n }\n}\n"],"mappings":";;;;;;AAQA,IAAI;;;;;;;;;;;AAYJ,SAAS,0BAAmC;CAC1C,IAAI,OAAO,WAAW,aAAa,OAAO;CAE1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,CAAA,CAAO,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,eAAe,CAAC,GAAG,cAAc,WAAW,cAAc,UAAU;CAExG,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAA,eAAD;EAAe,UAAU,OAAO;YAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACY,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI,MAAM;EACR,KAAK,OAAO,GAAG;EACf;CACF;CAEA,IAAI;EACF,QAAA,GAAA,iBAAA,YAAA,CAAmB,QAAmB,KAAK,EACzC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,QAAA,GAAA,iBAAA,WAAA,CAAkB,MAAiB;EACnC,KAAK,OAAO,GAAG;CACjB;AACF"}
@@ -106,9 +106,11 @@
106
106
  --color-sky-700: oklch(50% .134 242.749);
107
107
  --color-sky-900: oklch(39.1% .09 240.876);
108
108
  --color-sky-950: oklch(29.3% .066 243.157);
109
+ --color-violet-200: oklch(89.4% .057 293.283);
109
110
  --color-violet-300: oklch(81.1% .111 293.571);
110
111
  --color-violet-400: oklch(70.2% .183 293.541);
111
112
  --color-violet-500: oklch(60.6% .25 292.717);
113
+ --color-violet-700: oklch(49.1% .27 292.581);
112
114
  --color-fuchsia-400: oklch(74% .238 322.16);
113
115
  --color-fuchsia-500: oklch(66.7% .295 322.15);
114
116
  --color-pink-300: oklch(82.3% .12 346.018);
@@ -739,6 +741,17 @@
739
741
 
740
742
  :root, .clarify-app {
741
743
  --clarify-http-method-delete-text: var(--color-rose-700);
744
+ --clarify-http-method-webhook-background: #a685ff3d;
745
+ }
746
+
747
+ @supports (color: color-mix(in lab, red, red)) {
748
+ :root, .clarify-app {
749
+ --clarify-http-method-webhook-background: color-mix(in srgb, var(--color-violet-400) 24%, transparent);
750
+ }
751
+ }
752
+
753
+ :root, .clarify-app {
754
+ --clarify-http-method-webhook-text: var(--color-violet-700);
742
755
  --clarify-http-method-default-background: #9f9fa933;
743
756
  }
744
757
 
@@ -955,6 +968,17 @@
955
968
 
956
969
  .dark, .dark .clarify-app {
957
970
  --clarify-http-method-delete-text: var(--color-rose-200);
971
+ --clarify-http-method-webhook-background: #a685ff4d;
972
+ }
973
+
974
+ @supports (color: color-mix(in lab, red, red)) {
975
+ .dark, .dark .clarify-app {
976
+ --clarify-http-method-webhook-background: color-mix(in srgb, var(--color-violet-400) 30%, transparent);
977
+ }
978
+ }
979
+
980
+ .dark, .dark .clarify-app {
981
+ --clarify-http-method-webhook-text: var(--color-violet-200);
958
982
  --clarify-http-method-default-background: #9f9fa942;
959
983
  }
960
984
 
@@ -3023,6 +3047,10 @@
3023
3047
  background-color: var(--clarify-http-method-put-background);
3024
3048
  }
3025
3049
 
3050
+ .bg-\(--clarify-http-method-webhook-background\) {
3051
+ background-color: var(--clarify-http-method-webhook-background);
3052
+ }
3053
+
3026
3054
  .bg-\(--clarify-skeleton-accent-background\) {
3027
3055
  background-color: var(--clarify-skeleton-accent-background);
3028
3056
  }
@@ -3199,6 +3227,10 @@
3199
3227
  }
3200
3228
  }
3201
3229
 
3230
+ .bg-sky-100 {
3231
+ background-color: var(--color-sky-100);
3232
+ }
3233
+
3202
3234
  .bg-sky-400\/10 {
3203
3235
  background-color: #00bcfe1a;
3204
3236
  }
@@ -3724,6 +3756,10 @@
3724
3756
  color: var(--clarify-http-method-put-text);
3725
3757
  }
3726
3758
 
3759
+ .text-\(--clarify-http-method-webhook-text\) {
3760
+ color: var(--clarify-http-method-webhook-text);
3761
+ }
3762
+
3727
3763
  .text-\(--clarify-theme-tokens-colors-background\) {
3728
3764
  color: var(--clarify-theme-tokens-colors-background);
3729
3765
  }
@@ -3848,6 +3884,10 @@
3848
3884
  color: var(--color-sky-600);
3849
3885
  }
3850
3886
 
3887
+ .text-sky-700 {
3888
+ color: var(--color-sky-700);
3889
+ }
3890
+
3851
3891
  .text-sky-900 {
3852
3892
  color: var(--color-sky-900);
3853
3893
  }
@@ -5056,6 +5096,16 @@
5056
5096
  }
5057
5097
  }
5058
5098
 
5099
+ .dark\:bg-sky-400\/15:where(.dark, .dark *) {
5100
+ background-color: #00bcfe26;
5101
+ }
5102
+
5103
+ @supports (color: color-mix(in lab, red, red)) {
5104
+ .dark\:bg-sky-400\/15:where(.dark, .dark *) {
5105
+ background-color: color-mix(in oklab, var(--color-sky-400) 15%, transparent);
5106
+ }
5107
+ }
5108
+
5059
5109
  .dark\:bg-white:where(.dark, .dark *) {
5060
5110
  background-color: var(--color-white);
5061
5111
  }
@@ -5200,6 +5250,10 @@
5200
5250
  color: var(--color-sky-100);
5201
5251
  }
5202
5252
 
5253
+ .dark\:text-sky-200:where(.dark, .dark *) {
5254
+ color: var(--color-sky-200);
5255
+ }
5256
+
5203
5257
  .dark\:text-sky-400:where(.dark, .dark *) {
5204
5258
  color: var(--color-sky-400);
5205
5259
  }
@@ -1,19 +1,18 @@
1
1
  import { ReactNode } from 'react';
2
- import { Config, NavigationTree, RouteItem } from '../core/types';
3
- import { OpenAPISpec } from '../openapi/lib/utils';
4
- import { RuntimeSlots } from '../slots';
2
+ import { Config, NavigationTree, OpenApiRegistry, RouteItem } from '../core/types';
3
+ import { RuntimeSlotRegistry } from '../slots';
5
4
  export type ClarifyShellProps = {
6
5
  config: Config;
7
6
  routes: RouteItem[];
8
7
  navigation?: NavigationTree;
9
- openApis: Record<string, OpenAPISpec>;
10
- runtimeSlots?: RuntimeSlots;
8
+ openApiSpecs: OpenApiRegistry;
9
+ runtimeSlots?: RuntimeSlotRegistry;
11
10
  themeEditor?: boolean;
12
11
  children?: ReactNode;
13
12
  };
14
13
  /**
15
14
  * Shared provider chain used by both client-side render and server-side
16
- * renderToHTML. Wraps AppShell with ConfigContext → OpenApisContext →
15
+ * renderToHTML. Wraps AppShell with ConfigContext → OpenApiSpecsContext →
17
16
  * ThemeProvider → ThemeRoot.
18
17
  *
19
18
  * The outer Router (BrowserRouter / StaticRouter) is left to the caller
package/output/server.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_PageActions = require("./PageActions-GS_cxeJN.cjs");
3
- const require_ClarifyShell = require("./ClarifyShell-DjLRRW8T.cjs");
2
+ const require_ClarifyShell = require("./ClarifyShell-C6li72Ce.cjs");
3
+ const require_PageActions = require("./PageActions-BjB6PYmL.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");
@@ -12,7 +12,7 @@ let react_dom_server = require("react-dom/server");
12
12
  * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。
13
13
  */
14
14
  function renderToHTML(options) {
15
- const { config, routes, navigation, openApis = {}, runtimeSlots, url, themeEditor = false } = options;
15
+ const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, url, themeEditor = false } = options;
16
16
  const location = require_PageActions.prefixHref(url, config.routePrefix);
17
17
  return (0, react_dom_server.renderToString)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.StrictMode, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.StaticRouter, {
18
18
  basename: config.routePrefix,
@@ -21,7 +21,7 @@ function renderToHTML(options) {
21
21
  config,
22
22
  routes,
23
23
  navigation,
24
- openApis,
24
+ openApiSpecs,
25
25
  runtimeSlots,
26
26
  themeEditor
27
27
  })
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs","names":[],"sources":["../source/runtime/server.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport { StaticRouter } from 'react-router-dom'\n\nimport type { ServerRenderOptions } from '../types'\nimport { prefixHref } from '../utils/href'\n\nimport { ClarifyShell } from './ClarifyShell'\n\n/**\n * Clarify 服务端渲染入口。\n * 由 @clarify-labs/cli 在构建时调用,为每条路由生成 React HTML 片段。\n * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。\n */\nexport function renderToHTML(options: ServerRenderOptions): string {\n const { config, routes, navigation, openApis = {}, runtimeSlots, url, themeEditor = false } = options\n const location = prefixHref(url, config.routePrefix)\n\n return renderToString(\n <StrictMode>\n <StaticRouter basename={config.routePrefix} location={location}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApis={openApis}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </StaticRouter>\n </StrictMode>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,aAAa,SAAsC;CACjE,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,cAAc,KAAK,cAAc,UAAU;CAC9F,MAAM,WAAW,oBAAA,WAAW,KAAK,OAAO,WAAW;CAEnD,QAAA,GAAA,iBAAA,eAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAA,cAAD;EAAc,UAAU,OAAO;EAAuB;YACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,cAAD;GACU;GACA;GACI;GACF;GACI;GACD;EACd,CAAA;CACW,CAAA,EACJ,CAAA,CACd;AACF"}
1
+ {"version":3,"file":"server.cjs","names":[],"sources":["../source/runtime/server.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport { StaticRouter } from 'react-router-dom'\n\nimport type { ServerRenderOptions } from '../types'\nimport { prefixHref } from '../utils/href'\n\nimport { ClarifyShell } from './ClarifyShell'\n\n/**\n * Clarify 服务端渲染入口。\n * 由 @clarify-labs/cli 在构建时调用,为每条路由生成 React HTML 片段。\n * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。\n */\nexport function renderToHTML(options: ServerRenderOptions): string {\n const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, url, themeEditor = false } = options\n const location = prefixHref(url, config.routePrefix)\n\n return renderToString(\n <StrictMode>\n <StaticRouter basename={config.routePrefix} location={location}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </StaticRouter>\n </StrictMode>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,aAAa,SAAsC;CACjE,MAAM,EAAE,QAAQ,QAAQ,YAAY,eAAe,CAAC,GAAG,cAAc,KAAK,cAAc,UAAU;CAClG,MAAM,WAAW,oBAAA,WAAW,KAAK,OAAO,WAAW;CAEnD,QAAA,GAAA,iBAAA,eAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAA,cAAD;EAAc,UAAU,OAAO;EAAuB;YACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACW,CAAA,EACJ,CAAA,CACd;AACF"}
package/output/server.js CHANGED
@@ -1,5 +1,5 @@
1
- import { T as prefixHref } from "./PageActions-Dn8IGWoL.js";
2
- import { t as ClarifyShell } from "./ClarifyShell-CxhXBtsR.js";
1
+ import { t as ClarifyShell } from "./ClarifyShell-1LuBliwt.js";
2
+ import { T as prefixHref } from "./PageActions-D7K9LDGf.js";
3
3
  import { StrictMode } from "react";
4
4
  import { StaticRouter } from "react-router-dom";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -11,7 +11,7 @@ import { renderToString } from "react-dom/server";
11
11
  * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。
12
12
  */
13
13
  function renderToHTML(options) {
14
- const { config, routes, navigation, openApis = {}, runtimeSlots, url, themeEditor = false } = options;
14
+ const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, url, themeEditor = false } = options;
15
15
  const location = prefixHref(url, config.routePrefix);
16
16
  return renderToString(/* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(StaticRouter, {
17
17
  basename: config.routePrefix,
@@ -20,7 +20,7 @@ function renderToHTML(options) {
20
20
  config,
21
21
  routes,
22
22
  navigation,
23
- openApis,
23
+ openApiSpecs,
24
24
  runtimeSlots,
25
25
  themeEditor
26
26
  })
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","names":[],"sources":["../source/runtime/server.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport { StaticRouter } from 'react-router-dom'\n\nimport type { ServerRenderOptions } from '../types'\nimport { prefixHref } from '../utils/href'\n\nimport { ClarifyShell } from './ClarifyShell'\n\n/**\n * Clarify 服务端渲染入口。\n * 由 @clarify-labs/cli 在构建时调用,为每条路由生成 React HTML 片段。\n * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。\n */\nexport function renderToHTML(options: ServerRenderOptions): string {\n const { config, routes, navigation, openApis = {}, runtimeSlots, url, themeEditor = false } = options\n const location = prefixHref(url, config.routePrefix)\n\n return renderToString(\n <StrictMode>\n <StaticRouter basename={config.routePrefix} location={location}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApis={openApis}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </StaticRouter>\n </StrictMode>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,aAAa,SAAsC;CACjE,MAAM,EAAE,QAAQ,QAAQ,YAAY,WAAW,CAAC,GAAG,cAAc,KAAK,cAAc,UAAU;CAC9F,MAAM,WAAW,WAAW,KAAK,OAAO,WAAW;CAEnD,OAAO,eACL,oBAAC,YAAD,EAAA,UACE,oBAAC,cAAD;EAAc,UAAU,OAAO;EAAuB;YACpD,oBAAC,cAAD;GACU;GACA;GACI;GACF;GACI;GACD;EACd,CAAA;CACW,CAAA,EACJ,CAAA,CACd;AACF"}
1
+ {"version":3,"file":"server.js","names":[],"sources":["../source/runtime/server.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport { StaticRouter } from 'react-router-dom'\n\nimport type { ServerRenderOptions } from '../types'\nimport { prefixHref } from '../utils/href'\n\nimport { ClarifyShell } from './ClarifyShell'\n\n/**\n * Clarify 服务端渲染入口。\n * 由 @clarify-labs/cli 在构建时调用,为每条路由生成 React HTML 片段。\n * 返回 `div#root` 内部的 HTML,由 Clarify CLI 组装为完整的 HTML 文档。\n */\nexport function renderToHTML(options: ServerRenderOptions): string {\n const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, url, themeEditor = false } = options\n const location = prefixHref(url, config.routePrefix)\n\n return renderToString(\n <StrictMode>\n <StaticRouter basename={config.routePrefix} location={location}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </StaticRouter>\n </StrictMode>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,aAAa,SAAsC;CACjE,MAAM,EAAE,QAAQ,QAAQ,YAAY,eAAe,CAAC,GAAG,cAAc,KAAK,cAAc,UAAU;CAClG,MAAM,WAAW,WAAW,KAAK,OAAO,WAAW;CAEnD,OAAO,eACL,oBAAC,YAAD,EAAA,UACE,oBAAC,cAAD;EAAc,UAAU,OAAO;EAAuB;YACpD,oBAAC,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACW,CAAA,EACJ,CAAA,CACd;AACF"}
@@ -2,5 +2,6 @@ import { NavigationNode } from '../types';
2
2
  export type NavigationProps = {
3
3
  navigation: NavigationNode[];
4
4
  className?: string;
5
+ currentLocale?: string;
5
6
  };
6
7
  export declare function Navigation(arg0: NavigationProps): import("react").JSX.Element;
@@ -10,4 +10,4 @@ type SearchDialogProps = {
10
10
  onNavigate?: () => void;
11
11
  };
12
12
  export declare function SearchDialog(arg0: SearchDialogProps): import("react").JSX.Element;
13
- export {};
13
+ export default SearchDialog;
@@ -5,7 +5,7 @@ import { UISlotName } from './types';
5
5
  * One registered slot component, as compiled by the CLI into
6
6
  * `virtual:clarify/slots`.
7
7
  *
8
- * `component` is a lazy import factory `() => import('path')`. On the client
8
+ * `loadComponent` is a lazy import factory `() => import('path')`. On the client
9
9
  * it is passed to `React.lazy`. During SSR the factory is pre-resolved and
10
10
  * the resulting component is stored in `_resolved`, which the renderer uses
11
11
  * directly (no Suspense needed for `renderToString`).
@@ -14,21 +14,21 @@ export type RuntimeSlotEntry = {
14
14
  /** Plugin that registered this component, used as a stable render key. */
15
15
  plugin: string;
16
16
  /** Lazy import factory — `() => import('path')`. Set by CLI virtual module. */
17
- component: () => Promise<{
17
+ loadComponent: () => Promise<{
18
18
  default: ComponentType;
19
19
  }>;
20
20
  /** @internal Pre-resolved component set by SSR before {@link renderToHTML}. */
21
21
  _resolved?: ComponentType;
22
22
  };
23
23
  /** Registry keyed by slot name. */
24
- export type RuntimeSlots = Partial<Record<UISlotName, RuntimeSlotEntry[]>>;
24
+ export type RuntimeSlotRegistry = Partial<Record<UISlotName, RuntimeSlotEntry[]>>;
25
25
  type RuntimeSlotsContextValue = {
26
- slots: RuntimeSlots;
26
+ slots: RuntimeSlotRegistry;
27
27
  route?: RouteItem;
28
28
  };
29
29
  export declare const RuntimeSlotsContext: import('react').Context<RuntimeSlotsContextValue>;
30
30
  type RuntimeSlotsProviderProps = {
31
- slots?: RuntimeSlots;
31
+ slots?: RuntimeSlotRegistry;
32
32
  route?: RouteItem;
33
33
  children: ReactNode;
34
34
  };
@@ -36,7 +36,7 @@ type RuntimeSlotsProviderProps = {
36
36
  * Makes the compiled slot registry and the current route available to every
37
37
  * {@link RuntimeSlot} in the tree. Mounted once near the top of `AppShell`.
38
38
  */
39
- export declare function RuntimeSlotsProvider(arg0: RuntimeSlotsProviderProps): ReactNode;
39
+ export declare function RuntimeSlotsProvider(props: RuntimeSlotsProviderProps): ReactNode;
40
40
  type RuntimeSlotProps = {
41
41
  name: UISlotName;
42
42
  /** Built-in default component for replacement slots. */
@@ -54,5 +54,5 @@ type RuntimeSlotProps = {
54
54
  * compatibility with `renderToString`. Otherwise, `React.lazy` + `Suspense`
55
55
  * is used for client-side code-splitting.
56
56
  */
57
- export declare function RuntimeSlot(arg0: RuntimeSlotProps): ReactNode;
57
+ export declare function RuntimeSlot(props: RuntimeSlotProps): ReactNode;
58
58
  export {};
@@ -1,12 +1,12 @@
1
1
  import { ReactNode } from 'react';
2
- import { UISlotName, SlotContext } from './types';
3
- export type { UISlotName, SlotContext };
2
+ import { UISlotName, UISlotContext } from './types';
3
+ export type { UISlotName, UISlotContext };
4
4
  type SlotProviderProps = {
5
- value: SlotContext;
5
+ value: UISlotContext;
6
6
  children: ReactNode;
7
7
  };
8
8
  /**
9
- * Provides an isolated {@link SlotContext} for a single slot component.
9
+ * Provides an isolated {@link UISlotContext} for a single slot component.
10
10
  * `RuntimeSlot` wraps every rendered slot component with this provider.
11
11
  */
12
12
  export declare function SlotProvider(arg0: SlotProviderProps): ReactNode;
@@ -17,4 +17,4 @@ export declare function SlotProvider(arg0: SlotProviderProps): ReactNode;
17
17
  * slot provider throws, which helps plugin authors notice that the component was
18
18
  * not mounted through a Clarify slot.
19
19
  */
20
- export declare function useSlot(): SlotContext;
20
+ export declare function useSlot(): UISlotContext;
@@ -1,5 +1,5 @@
1
1
  export { SlotProvider, useSlot } from './context';
2
- export type { SlotContext, UISlotName } from './context';
2
+ export type { UISlotContext, UISlotName } from './context';
3
3
  export { RuntimeSlot, RuntimeSlotsProvider, RuntimeSlotsContext } from './RuntimeSlot';
4
- export type { RuntimeSlotEntry, RuntimeSlots } from './RuntimeSlot';
4
+ export type { RuntimeSlotEntry, RuntimeSlotRegistry } from './RuntimeSlot';
5
5
  export type { UISlotRegistration } from './types';
@@ -16,7 +16,7 @@ export type UISlotName = 'page.footer.before' | 'page.banner.replace' | 'page.fo
16
16
  * everything they need from this hook, which keeps slot components as ordinary
17
17
  * React components and lets the slot context grow without changing signatures.
18
18
  */
19
- export type SlotContext = {
19
+ export type UISlotContext = {
20
20
  /** The slot the current component is mounted into. */
21
21
  name: UISlotName;
22
22
  /** Name of the plugin that registered the current slot component. */
@@ -1,2 +1,2 @@
1
1
  export declare function normalizeRoutePath(path: string): string;
2
- export declare function isSameRoutePath(a: string | undefined, b: string | undefined): boolean;
2
+ export declare function isSameRoutePath(a: string | undefined, b: string | undefined, locale?: string): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clarify-labs/renderer",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "repository": {