@clarify-labs/renderer 0.11.5 → 0.11.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.
- package/output/{ClarifyShell-BwqLbTI-.js → ClarifyShell-CKvXZj0f.js} +71 -20
- package/output/ClarifyShell-CKvXZj0f.js.map +1 -0
- package/output/{ClarifyShell-BbD82nrc.cjs → ClarifyShell-CukbPOAd.cjs} +71 -20
- package/output/ClarifyShell-CukbPOAd.cjs.map +1 -0
- package/output/{MermaidViewer-CO1rhB6A.cjs → MermaidViewer-FOg263MO.cjs} +5 -6
- package/output/MermaidViewer-FOg263MO.cjs.map +1 -0
- package/output/{MermaidViewer-D1wiX_T9.js → MermaidViewer-_tpH0JNn.js} +5 -6
- package/output/MermaidViewer-_tpH0JNn.js.map +1 -0
- package/output/{OpenApiOperation-CbdKZMO1.js → OpenApiOperation-Dv9u2GEJ.js} +5 -5
- package/output/OpenApiOperation-Dv9u2GEJ.js.map +1 -0
- package/output/{OpenApiOperation-C77uiDjW.cjs → OpenApiOperation-c-I6Nw9j.cjs} +22 -4
- package/output/OpenApiOperation-c-I6Nw9j.cjs.map +1 -0
- package/output/app/BuiltWithClarify.d.ts +5 -1
- package/output/client.cjs +2 -2
- package/output/client.js +2 -2
- package/output/index.cjs +87 -3
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +3 -3
- package/output/index.js +86 -5
- package/output/index.js.map +1 -1
- package/output/mdx/components.d.ts +2 -1
- package/output/openapi/components/EndpointMethodBadge.d.ts +1 -0
- package/output/openapi/components/OpenApiLink.d.ts +9 -0
- package/output/openapi/index.d.ts +1 -0
- package/output/preview.cjs +1 -1
- package/output/preview.js +1 -1
- package/output/{render-PDmRKKJm.js → render-B41PHjt8.js} +2 -2
- package/output/{render-PDmRKKJm.js.map → render-B41PHjt8.js.map} +1 -1
- package/output/{render-BhVJVa1q.cjs → render-BxiVlY6q.cjs} +2 -2
- package/output/{render-BhVJVa1q.cjs.map → render-BxiVlY6q.cjs.map} +1 -1
- package/output/renderer.css +34 -0
- package/output/server.cjs +1 -1
- package/output/server.js +1 -1
- package/package.json +1 -1
- package/output/ClarifyShell-BbD82nrc.cjs.map +0 -1
- package/output/ClarifyShell-BwqLbTI-.js.map +0 -1
- package/output/MermaidViewer-CO1rhB6A.cjs.map +0 -1
- package/output/MermaidViewer-D1wiX_T9.js.map +0 -1
- package/output/OpenApiOperation-C77uiDjW.cjs.map +0 -1
- package/output/OpenApiOperation-CbdKZMO1.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-B41PHjt8.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,4 +1,4 @@
|
|
|
1
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
1
|
+
const require_ClarifyShell = require("./ClarifyShell-CukbPOAd.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");
|
|
@@ -61,4 +61,4 @@ Object.defineProperty(exports, "render", {
|
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
//# sourceMappingURL=render-
|
|
64
|
+
//# sourceMappingURL=render-BxiVlY6q.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-BxiVlY6q.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"}
|
package/output/renderer.css
CHANGED
|
@@ -2541,6 +2541,10 @@
|
|
|
2541
2541
|
height: calc(var(--spacing) * 12);
|
|
2542
2542
|
}
|
|
2543
2543
|
|
|
2544
|
+
.\!h-full {
|
|
2545
|
+
height: 100% !important;
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2544
2548
|
.h-0 {
|
|
2545
2549
|
height: 0;
|
|
2546
2550
|
}
|
|
@@ -4127,6 +4131,10 @@
|
|
|
4127
4131
|
padding-block: calc(var(--spacing) * 16);
|
|
4128
4132
|
}
|
|
4129
4133
|
|
|
4134
|
+
.py-px {
|
|
4135
|
+
padding-block: 1px;
|
|
4136
|
+
}
|
|
4137
|
+
|
|
4130
4138
|
.pt-0\.5 {
|
|
4131
4139
|
padding-top: calc(var(--spacing) * .5);
|
|
4132
4140
|
}
|
|
@@ -4167,6 +4175,10 @@
|
|
|
4167
4175
|
padding-right: var(--spacing);
|
|
4168
4176
|
}
|
|
4169
4177
|
|
|
4178
|
+
.pr-1\.5 {
|
|
4179
|
+
padding-right: calc(var(--spacing) * 1.5);
|
|
4180
|
+
}
|
|
4181
|
+
|
|
4170
4182
|
.pr-3 {
|
|
4171
4183
|
padding-right: calc(var(--spacing) * 3);
|
|
4172
4184
|
}
|
|
@@ -4227,6 +4239,10 @@
|
|
|
4227
4239
|
padding-left: calc(var(--spacing) * 10);
|
|
4228
4240
|
}
|
|
4229
4241
|
|
|
4242
|
+
.pl-px {
|
|
4243
|
+
padding-left: 1px;
|
|
4244
|
+
}
|
|
4245
|
+
|
|
4230
4246
|
.text-center {
|
|
4231
4247
|
text-align: center;
|
|
4232
4248
|
}
|
|
@@ -4235,6 +4251,10 @@
|
|
|
4235
4251
|
text-align: left;
|
|
4236
4252
|
}
|
|
4237
4253
|
|
|
4254
|
+
.align-\[0\.125em\] {
|
|
4255
|
+
vertical-align: .125em;
|
|
4256
|
+
}
|
|
4257
|
+
|
|
4238
4258
|
.align-baseline {
|
|
4239
4259
|
vertical-align: baseline;
|
|
4240
4260
|
}
|
|
@@ -4270,6 +4290,16 @@
|
|
|
4270
4290
|
line-height: calc(var(--spacing) * 9);
|
|
4271
4291
|
}
|
|
4272
4292
|
|
|
4293
|
+
.text-\[0\.625rem\]\/4 {
|
|
4294
|
+
font-size: .625rem;
|
|
4295
|
+
line-height: calc(var(--spacing) * 4);
|
|
4296
|
+
}
|
|
4297
|
+
|
|
4298
|
+
.text-\[0\.8125rem\]\/5 {
|
|
4299
|
+
font-size: .8125rem;
|
|
4300
|
+
line-height: calc(var(--spacing) * 5);
|
|
4301
|
+
}
|
|
4302
|
+
|
|
4273
4303
|
.text-\[11px\]\/4 {
|
|
4274
4304
|
font-size: 11px;
|
|
4275
4305
|
line-height: calc(var(--spacing) * 4);
|
|
@@ -5086,6 +5116,10 @@
|
|
|
5086
5116
|
background-color: var(--clarify-theme-tokens-colors-primary);
|
|
5087
5117
|
}
|
|
5088
5118
|
|
|
5119
|
+
.group-hover\:bg-\(--clarify-theme-tokens-colors-surface\):is(:where(.group):hover *) {
|
|
5120
|
+
background-color: var(--clarify-theme-tokens-colors-surface);
|
|
5121
|
+
}
|
|
5122
|
+
|
|
5089
5123
|
.group-hover\:text-\(--clarify-theme-tokens-colors-primary\):is(:where(.group):hover *) {
|
|
5090
5124
|
color: var(--clarify-theme-tokens-colors-primary);
|
|
5091
5125
|
}
|
package/output/server.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
2
|
+
const require_ClarifyShell = require("./ClarifyShell-CukbPOAd.cjs");
|
|
3
3
|
const require_PageActions = require("./PageActions-ob2OJusG.cjs");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_router_dom = require("react-router-dom");
|
package/output/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as ClarifyShell } from "./ClarifyShell-
|
|
1
|
+
import { t as ClarifyShell } from "./ClarifyShell-CKvXZj0f.js";
|
|
2
2
|
import { T as prefixHref } from "./PageActions-DviEypf6.js";
|
|
3
3
|
import { StrictMode } from "react";
|
|
4
4
|
import { StaticRouter } from "react-router-dom";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClarifyShell-BbD82nrc.cjs","names":[],"sources":["../source/slots/context.tsx","../source/slots/RuntimeSlot.tsx","../source/utils/hash.ts","../source/assets/clarify.svg?url","../source/app/BuiltWithClarify.tsx","../source/app/RenderErrorPanel.tsx","../source/app/ErrorBoundary.tsx","../source/app/PageBanner.tsx","../source/app/PageFooter.tsx","../source/app/PageNavigation.tsx","../source/app/PageSkeleton.tsx","../source/app/SectionHashSync.tsx","../source/app/AppShell.tsx","../source/theme/randomTheme.ts","../source/theme/variables.ts","../source/theme/ThemeEditor.tsx","../source/theme/ThemeRoot.tsx","../source/runtime/ClarifyShell.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from 'react'\n\nimport type { UISlotName, UISlotContext } from './types'\n\n// Re-export slot types so internal modules can import from './context'.\nexport type { UISlotName, UISlotContext }\n\nconst UISlotContextValue = createContext<UISlotContext | null>(null)\n\ntype SlotProviderProps = {\n value: UISlotContext\n children: ReactNode\n}\n\n/**\n * Provides an isolated {@link UISlotContext} for a single slot component.\n * `RuntimeSlot` wraps every rendered slot component with this provider.\n */\nexport function SlotProvider(arg0: SlotProviderProps): ReactNode {\n const { value, children } = arg0\n return <UISlotContextValue.Provider value={value}>{children}</UISlotContextValue.Provider>\n}\n\n/**\n * Reads the current slot context.\n *\n * Must be called inside a slot component (or a descendant). Calling it outside a\n * slot provider throws, which helps plugin authors notice that the component was\n * not mounted through a Clarify slot.\n */\nexport function useSlot(): UISlotContext {\n const context = useContext(UISlotContextValue)\n if (!context) {\n throw new Error('[clarify] useSlot must be called inside a slot component')\n }\n return context\n}\n","import { createContext, useContext, useEffect, useState, type ComponentType, type ReactNode } from 'react'\n\nimport { useLocale } from '../core/context'\nimport type { RouteItem } from '../core/types'\n\nimport { SlotProvider } from './context'\nimport type { UISlotName } from './types'\n\n/**\n * One registered slot component, as compiled by the CLI into\n * `virtual:clarify/slots`.\n *\n * `loadComponent` is a lazy import factory `() => import('path')`. On the client\n * it is passed to `React.lazy`. During SSR the factory is pre-resolved and\n * the resulting component is stored in `_resolved`, which the renderer uses\n * directly (no Suspense needed for `renderToString`).\n */\nexport type RuntimeSlotEntry = {\n /** Plugin that registered this component, used as a stable render key. */\n plugin: string\n /** Lazy import factory — `() => import('path')`. Set by CLI virtual module. */\n loadComponent: () => Promise<{ default: ComponentType }>\n /** @internal Pre-resolved component set by SSR before {@link renderToHTML}. */\n _resolved?: ComponentType\n}\n\n/** Registry keyed by slot name. */\nexport type RuntimeSlotRegistry = Partial<Record<UISlotName, RuntimeSlotEntry[]>>\n\ntype RuntimeSlotsContextValue = {\n slots: RuntimeSlotRegistry\n route?: RouteItem\n}\n\nexport const RuntimeSlotsContext = createContext<RuntimeSlotsContextValue>({ slots: {} })\n\ntype RuntimeSlotsProviderProps = {\n slots?: RuntimeSlotRegistry\n route?: RouteItem\n children: ReactNode\n}\n\n/**\n * Makes the compiled slot registry and the current route available to every\n * {@link RuntimeSlot} in the tree. Mounted once near the top of `AppShell`.\n */\nexport function RuntimeSlotsProvider(props: RuntimeSlotsProviderProps): ReactNode {\n const { slots, route, children } = props\n return (\n <RuntimeSlotsContext.Provider value={{ slots: slots ?? {}, route }}>\n {children}\n </RuntimeSlotsContext.Provider>\n )\n}\n\ntype RuntimeSlotProps = {\n name: UISlotName\n /** Built-in default component for replacement slots. */\n default?: ComponentType\n}\n\n/**\n * Renders plugin components registered for a slot, in registration order.\n *\n * For extension slots (*.before/*.after), renders all plugin components.\n * For replacement slots (*.replace), renders only the last registered plugin\n * component (if any), and passes the default component through context.\n *\n * Each component is loaded via the import factory. If `_resolved` is set\n * (SSR pre-resolution), the component is rendered synchronously for\n * compatibility with `renderToString`. Otherwise, `React.lazy` + `Suspense`\n * is used for client-side code-splitting.\n */\nexport function RuntimeSlot(props: RuntimeSlotProps): ReactNode {\n const { name, default: DefaultComponent } = props\n const { slots, route } = useContext(RuntimeSlotsContext)\n const locale = useLocale()\n\n const entries = slots[name]\n if (!entries || entries.length === 0) {\n return DefaultComponent ? <DefaultComponent /> : null\n }\n\n const isReplaceSlot = name.endsWith('.replace')\n if (isReplaceSlot) {\n const lastEntry = entries[entries.length - 1]\n return (\n <SlotProvider\n value={{ name, plugin: lastEntry.plugin, route, locale, DefaultComponent }}\n >\n <SlotEntryRenderer entry={lastEntry} />\n </SlotProvider>\n )\n }\n\n // Extension slot (*.before/*.after): render all entries\n return (\n <>\n {entries.map((entry) => (\n <SlotProvider\n key={`${name}:${entry.plugin}`}\n value={{ name, plugin: entry.plugin, route, locale }}\n >\n <SlotEntryRenderer entry={entry} />\n </SlotProvider>\n ))}\n </>\n )\n}\n\n// ---- internal helpers ----\n\ntype SlotEntryRendererProps = {\n entry: RuntimeSlotEntry\n}\n\nfunction SlotEntryRenderer(props: SlotEntryRendererProps): ReactNode {\n const { entry } = props\n // SSR pre-resolved component — render synchronously (no Suspense needed)\n if (entry._resolved) {\n return <entry._resolved />\n }\n\n // Client: lazy-load with code-splitting\n return <LazySlotComponent loader={entry.loadComponent} />\n}\n\ntype LazySlotComponentProps = {\n loader: () => Promise<{ default: ComponentType }>\n}\n\nfunction LazySlotComponent(props: LazySlotComponentProps): ReactNode {\n const { loader } = props\n const [Component, setComponent] = useState<ComponentType | null>(null)\n\n useEffect(() => {\n let cancelled = false\n loader().then(mod => {\n if (!cancelled) setComponent(() => mod.default)\n })\n return () => { cancelled = true }\n }, [loader])\n\n if (!Component) return null\n return <Component />\n}\n","export function safeDecodeURIComponent(value: string): string {\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='279px'%20height='200px'%20viewBox='0%200%20279%20200'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eclarify%3c/title%3e%3cg%20id='页面-1'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='clarify'%20transform='translate(-0,%200.0054)'%3e%3cpath%20d='M44.867217,0.0054376148%20C130.715579,1.00591567%20200,70.9091172%20200,156.994562%20L199.986321,155.127494%20C199.384888,180.009127%20179.026368,199.994562%20154,199.994562%20L46,199.994562%20C20.5949015,199.994562%200,179.399661%200,153.994562%20L0,45.9945624%20C0,21.0975659%2019.7793434,0.820282524%2044.4815926,0.0191499894%20Z'%20fill='%2300D492'%3e%3c/path%3e%3cpath%20d='M123.867217,0.0054376148%20C209.715579,1.00591567%20279,70.9091172%20279,156.994562%20L278.986321,155.127494%20C278.384888,180.009127%20258.026368,199.994562%20233,199.994562%20L125,199.994562%20C99.5949015,199.994562%2079,179.399661%2079,153.994562%20L79,45.9945624%20C79,21.0975659%2098.7793434,0.820282524%20123.481593,0.0191499894%20Z'%20id='clarify-right'%20fill-opacity='0.6'%20fill='%2300F6C9'%20transform='translate(179,%20100)%20rotate(-90)%20translate(-179,%20-100)'%3e%3c/path%3e%3cpath%20d='M199.979267,154.416906%20L199.984438,155.157125%20L199.962366,155.872459%20C198.977251,180.406837%20178.776104,199.994562%20154,199.994562%20L124.372438,199.994125%20L124.249053,199.994081%20C99.6939678,199.603921%2079.8122712,179.973634%2079.01915,155.518407%20L79.0054376,155.132783%20C79.5830823,105.566626%20103.129768,61.5221348%20139.498462,33.1463428%20C175.69419,61.3871018%20199.186123,105.143863%20199.979267,154.416906%20Z'%20id='形状结合'%20fill='%2300F692'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import clarifyMarkUrl from '../assets/clarify.svg?url'\nimport { useBuiltInText } from '../core/i18n'\n\n// Tracking endpoint hosted on clarify.pub. Loaded via a hidden iframe so the\n// host site never runs our analytics scripts - the iframe reports a page view\n// to our GA4 property with the host site as the HTTP referrer, which is all we\n// need to know which sites use Clarify. Zero impact on the host site.\nconst CLARIFY_TRACKING_URL = 'https://clarify.pub/api/track'\n\nexport function BuiltWithClarify() {\n const t = useBuiltInText()\n\n return (\n <div className=\"clarify-built-with inline-flex items-center gap-1.5\">\n <iframe\n tabIndex={-1}\n aria-hidden=\"true\"\n title={t('builtWith.label')}\n src={CLARIFY_TRACKING_URL}\n // Hidden but still loads: display:none would still load in most\n // browsers, but width/height:0 + position:absolute keeps it out of\n // layout and accessibility tree reliably.\n style={{ position: 'absolute', width: 0, height: 0, border: 0, overflow: 'hidden' }}\n />\n <a\n href=\"https://clarify.pub\"\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={t('builtWith.label')}\n className=\"clarify-built-with inline-flex items-center gap-1.5 rounded-full px-2 py-1 font-medium no-underline transition\"\n >\n <span>{t('builtWith.prefix')}</span>\n <img src={clarifyMarkUrl} alt=\"\" className=\"clarify-built-with-logo h-3.5 w-auto flex-none object-contain\" />\n <span className=\"clarify-built-with-brand font-semibold\">Clarify</span>\n </a>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { useConfigOptional } from '../core/context'\nimport { useBuiltInText } from '../core/i18n'\n\ntype RenderErrorPanelMetadataItem = {\n label: string\n value: string\n}\n\ntype RenderErrorPanelProps = {\n title: string\n description: string\n eyebrowLabel?: string\n action?: ReactNode\n metadata?: RenderErrorPanelMetadataItem[]\n detailsLabel: string\n detailsHeaderAction?: ReactNode\n detailsContent: ReactNode\n titleId?: string\n refreshLabel?: string\n onRefresh?: () => void\n}\n\nexport function RenderErrorPanel(props: RenderErrorPanelProps) {\n const {\n title,\n description,\n eyebrowLabel = 'Render error',\n action,\n metadata = [],\n detailsLabel,\n detailsHeaderAction,\n detailsContent,\n titleId = 'clarify-render-error-title',\n refreshLabel,\n onRefresh,\n } = props\n\n const t = useBuiltInText()\n const config = useConfigOptional()\n const resolvedRefreshLabel = refreshLabel ?? t('renderError.reload')\n const resolvedVersion = config?.version ?? '0.0.0'\n const resolvedMetadata = [\n ...metadata,\n { label: t('renderError.version'), value: resolvedVersion },\n ]\n\n const handleRefresh = () => {\n if (onRefresh) {\n onRefresh()\n return\n }\n if (typeof window !== 'undefined') {\n window.location.reload()\n }\n }\n\n return (\n <section className=\"mx-auto flex min-h-(--clarify-error-page-min-height) w-full max-w-4xl flex-col justify-center py-16 text-(--clarify-theme-tokens-colors-foreground)\" aria-labelledby={titleId} role=\"alert\">\n <div className=\"border-t-2 border-(--clarify-error-accent-text) pt-8\">\n <div className=\"flex flex-col gap-6 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <p className=\"font-mono text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-error-accent-text)\">{eyebrowLabel}</p>\n <h1 id={titleId} className=\"mt-3 text-3xl/9 font-semibold tracking-tight text-(--clarify-theme-tokens-colors-foreground)\">{title}</h1>\n <p className=\"mt-4 max-w-2xl text-sm/6 text-(--clarify-theme-tokens-colors-muted)\">{description}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-3\">\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-sm) border border-(--clarify-theme-tokens-colors-border) px-3 py-2 text-sm/5 font-semibold text-(--clarify-ui-text-soft) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={handleRefresh}\n >\n {resolvedRefreshLabel}\n </button>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n </div>\n\n {resolvedMetadata.length > 0 ? (\n <dl className=\"mt-8 grid gap-px overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-border) sm:grid-cols-3\">\n {resolvedMetadata.map(({ label, value }, index) => (\n <div key={`${label}-${index}`} className=\"min-w-0 bg-(--clarify-theme-tokens-colors-surface) px-4 py-3\">\n <dt className=\"text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{label}</dt>\n <dd className=\"mt-1 truncate font-mono text-sm/6 text-(--clarify-ui-text-strong)\" title={value}>{value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n\n <div className=\"mt-6 overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-code-background)\">\n <div className=\"flex items-center justify-between gap-3 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <p className=\"text-sm/6 font-semibold text-(--clarify-ui-text-strong)\">{detailsLabel}</p>\n {detailsHeaderAction ? <div className=\"shrink-0\">{detailsHeaderAction}</div> : null}\n </div>\n <div className=\"px-4 py-4 text-xs/5 text-(--clarify-ui-text)\">{detailsContent}</div>\n </div>\n </div>\n </section>\n )\n}\n","import { Component, useState } from 'react'\nimport type { ErrorInfo, ReactNode } from 'react'\n\nimport { copyTextToClipboard } from '../utils/clipboard'\n\nimport { RenderErrorPanel } from './RenderErrorPanel'\n\ntype PageErrorBoundaryProps = {\n children: ReactNode;\n title: string;\n description: string;\n reloadLabel: string;\n detailsLabel: string;\n pathLabel: string;\n typeLabel: string;\n messageLabel: string;\n stackLabel: string;\n componentStackLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n}\n\ntype PageErrorBoundaryState = {\n error?: Error;\n errorInfo?: ErrorInfo;\n}\n\ntype PageErrorPanelProps = {\n title: string;\n description: string;\n reloadLabel: string;\n detailsLabel: string;\n pathLabel: string;\n typeLabel: string;\n messageLabel: string;\n stackLabel: string;\n componentStackLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n error: Error;\n errorInfo?: ErrorInfo;\n}\n\nfunction PageErrorPanel(props: PageErrorPanelProps) {\n const {\n title,\n description,\n reloadLabel,\n detailsLabel,\n pathLabel,\n typeLabel,\n messageLabel,\n stackLabel,\n componentStackLabel,\n copyLabel,\n copiedLabel,\n path,\n error,\n errorInfo,\n } = props\n const [copiedStack, setCopiedStack] = useState(false)\n const stack = error.stack ?? error.message\n const componentStack = errorInfo?.componentStack?.trim()\n const stackText = componentStack ? `${stack}\\n\\n${componentStackLabel}\\n${componentStack}` : stack\n\n async function copyStack() {\n if (!(await copyTextToClipboard(stackText))) return\n setCopiedStack(true)\n setTimeout(() => setCopiedStack(false), 1600)\n }\n\n return (\n <RenderErrorPanel\n title={title}\n description={description}\n refreshLabel={reloadLabel}\n onRefresh={() => {\n if (typeof window !== 'undefined') window.location.reload()\n }}\n metadata={[\n [pathLabel, path],\n [typeLabel, error.name],\n ].map(([label, value]) => ({ label, value: String(value) }))}\n detailsLabel={detailsLabel}\n detailsHeaderAction={(\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-sm) px-2 py-1 text-xs/5 font-semibold text-(--clarify-ui-text-soft) ring-1 ring-(--clarify-theme-tokens-colors-border) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={copyStack}\n >\n {copiedStack ? copiedLabel : copyLabel}\n </button>\n )}\n detailsContent={(\n <>\n <p className=\"font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{messageLabel}</p>\n <p className=\"mt-2 wrap-break-word font-mono text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-foreground)\">{error.message}</p>\n <p className=\"mt-6 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{stackLabel}</p>\n <pre className=\"mt-2 max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {stack}\n </pre>\n {componentStack ? (\n <>\n <p className=\"mt-6 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{componentStackLabel}</p>\n <pre className=\"mt-2 max-h-(--clarify-error-component-stack-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {componentStack}\n </pre>\n </>\n ) : null}\n </>\n )}\n />\n )\n}\n\nexport class PageErrorBoundary extends Component<PageErrorBoundaryProps, PageErrorBoundaryState> {\n state: PageErrorBoundaryState = {}\n\n static getDerivedStateFromError(error: Error): PageErrorBoundaryState {\n return { error }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('[clarify] Failed to render page:', error, errorInfo)\n this.setState({ errorInfo })\n }\n\n render() {\n const { error, errorInfo } = this.state\n if (!error) return this.props.children\n\n return (\n <PageErrorPanel\n title={this.props.title}\n description={this.props.description}\n reloadLabel={this.props.reloadLabel}\n detailsLabel={this.props.detailsLabel}\n pathLabel={this.props.pathLabel}\n typeLabel={this.props.typeLabel}\n messageLabel={this.props.messageLabel}\n stackLabel={this.props.stackLabel}\n componentStackLabel={this.props.componentStackLabel}\n copyLabel={this.props.copyLabel}\n copiedLabel={this.props.copiedLabel}\n path={this.props.path}\n error={error}\n errorInfo={errorInfo}\n />\n )\n }\n}\n","import { ArrowRight, X } from 'lucide-react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { useConfig } from '../core/context'\nimport type { Config } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\nimport { resolveLocalizedText } from '../utils/localized-text'\n\nfunction bannerStorageKey(config: Config, content: string): string {\n return `clarify:banner:dismissed:${config.title}:${content}`\n}\n\ntype PageBannerLinkProps = {\n href: string\n label: string\n external?: boolean\n config: Config\n locale?: string\n}\n\nfunction PageBannerLink(props: PageBannerLinkProps) {\n const { href, label, external: externalProp, config, locale } = props\n const external = externalProp ?? isExternalHref(href)\n const resolvedHref = external ? href : localizeHref(href, config, locale)\n const className = \"clarify-banner-link inline-flex h-7 shrink-0 items-center gap-1 rounded-(--clarify-theme-tokens-radius-md) px-2 text-xs/5 font-semibold text-(--clarify-ui-accent-text) no-underline transition hover:bg-(--clarify-ui-hover-background) focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--clarify-theme-tokens-colors-primary)\"\n const children = (\n <>\n <span className=\"hidden sm:inline\">{label}</span>\n <ArrowRight className=\"size-3.5\" aria-hidden=\"true\" />\n </>\n )\n\n if (external) {\n return <a href={resolvedHref} target=\"_blank\" rel=\"noreferrer\" className={className} aria-label={label} title={label}>{children}</a>\n }\n\n return <Link to={resolvedHref} className={className} aria-label={label} title={label}>{children}</Link>\n}\n\nexport type PageBannerProps = {\n currentLocale?: string\n onDismiss?: () => void\n}\n\nexport function PageBanner(props: PageBannerProps) {\n const { currentLocale, onDismiss } = props\n const config = useConfig()\n const banner = config.banner\n\n // All hooks must be called unconditionally — before any early return.\n const content = banner ? resolveLocalizedText(banner.content, currentLocale, config.locales?.default) : ''\n const storageKey = useMemo(() => {\n if (!banner || !content) return ''\n return bannerStorageKey(config, content)\n }, [config, content, banner])\n const [dismissed, setDismissed] = useState(() => {\n if (!banner?.dismissible || typeof window === 'undefined') return false\n return window.localStorage.getItem(storageKey) === '1'\n })\n\n useEffect(() => {\n if (dismissed) onDismiss?.()\n }, [dismissed, onDismiss])\n\n if (!banner) return null\n if (!content) return null\n if (dismissed) return null\n\n const link = banner.link\n const linkLabel = link ? resolveLocalizedText(link.label, currentLocale, config.locales?.default) : ''\n\n return (\n <div className=\"clarify-banner relative flex h-12 items-center border-b border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) px-4 text-sm text-(--clarify-ui-text) dark:border-white/10\">\n <div className=\"mx-auto flex min-w-0 w-full max-w-(--clarify-theme-layout-max-width) items-center justify-center gap-1 pr-9 sm:gap-2\">\n <p className=\"clarify-banner-content m-0 min-w-0 truncate text-left font-medium sm:text-center\">{content}</p>\n {link ? <PageBannerLink href={link.href} label={linkLabel} external={link.external} config={config} locale={currentLocale} /> : null}\n </div>\n {banner.dismissible ? (\n <button\n type=\"button\"\n className=\"clarify-banner-dismiss absolute right-2 inline-flex size-8 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) text-(--clarify-ui-text-soft) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong) focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--clarify-theme-tokens-colors-primary) sm:right-3\"\n aria-label=\"Dismiss announcement\"\n onClick={() => {\n if (storageKey && typeof window !== 'undefined') window.localStorage.setItem(storageKey, '1')\n setDismissed(true)\n }}\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n ) : null}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useConfig } from '../core/context'\nimport type { Config, NavbarLink } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\nimport { resolveLocalizedText } from '../utils/localized-text'\n\nfunction localeForPath(config: Config, pathname: string): string | undefined {\n const locales = config.locales\n if (!locales) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return locales.locales.find((locale) => locale.code === firstSegment)?.code ?? locales.default\n}\n\ntype FooterLinkProps = { link: NavbarLink; locale?: string; config: Config }\n\nfunction FooterLink(arg0: FooterLinkProps) {\n const { link, locale, config } = arg0\n const external = link.external ?? isExternalHref(link.href)\n const href = external ? link.href : localizeHref(link.href, config, locale)\n const className = \"clarify-footer-link no-underline transition\"\n const label = resolveLocalizedText(link.label, locale, config.locales?.default)\n\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={className}>\n {label}\n </a>\n )\n }\n\n return (\n <Link to={href} className={className}>\n {label}\n </Link>\n )\n}\n\ntype SocialLinkProps = { name: string; href: string }\n\nfunction SocialLink(arg0: SocialLinkProps) {\n const { name, href } = arg0\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-footer-social capitalize no-underline transition\"\n >\n {name}\n </a>\n )\n}\n\nexport function PageFooter() {\n const config = useConfig()\n const location = useLocation()\n const locale = localeForPath(config, location.pathname)\n const footer = config.footer\n const links = footer?.links ?? []\n const socials = Object.entries(footer?.socials ?? {})\n const copyright = footer?.copyright\n ? resolveLocalizedText(footer.copyright, locale, config.locales?.default)\n : undefined\n const hasContent = Boolean(copyright || links.length > 0 || socials.length > 0)\n\n if (!hasContent) {\n return null\n }\n\n return (\n <footer className=\"clarify-page-footer w-full\">\n <div\n className={clsx(\n 'clarify-footer-content flex flex-col items-start gap-2.5 text-left',\n )}\n >\n {copyright ? (\n <p className=\"clarify-footer-copyright m-0\">{copyright}</p>\n ) : null}\n {links.length > 0 || socials.length > 0 ? (\n <div className=\"clarify-footer-links flex flex-wrap justify-start gap-x-4 gap-y-2\">\n {links.map((link) => (\n <FooterLink key={`${link.href}-${resolveLocalizedText(link.label, locale, config.locales?.default)}`} link={link} locale={locale} config={config} />\n ))}\n {socials.map(([name, href]) => (\n <SocialLink key={name} name={name} href={href} />\n ))}\n </div>\n ) : null}\n </div>\n </footer>\n )\n}\n","import clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Link } from 'react-router-dom'\n\nimport { useBuiltInText } from '../core/i18n'\nimport type { NavigationNode, RouteItem } from '../core/types'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nfunction flattenNavigation(nodes: NavigationNode[]): NavigationNode[] {\n return nodes.flatMap((node) => node.children?.length ? flattenNavigation(node.children) : [node])\n}\n\ntype PageNavigationProps = { navigation: NavigationNode[]; currentRoute?: RouteItem }\n\nexport function PageNavigation(arg0: PageNavigationProps) {\n const { navigation, currentRoute } = arg0\n const t = useBuiltInText()\n if (!currentRoute) return null\n\n const pageRoutes = flattenNavigation(navigation)\n const currentIndex = pageRoutes.findIndex((route) => isSameRoutePath(route.path, currentRoute.path))\n if (currentIndex === -1) return null\n\n const previous = pageRoutes[currentIndex - 1]\n const next = pageRoutes[currentIndex + 1]\n if (!previous && !next) return null\n const hasBothDirections = Boolean(previous && next)\n\n return (\n <nav\n className={clsx(\n 'clarify-page-navigation mt-12 grid border-t border-(--clarify-theme-tokens-colors-border)',\n hasBothDirections && '@3xl:grid-cols-2',\n )}\n aria-label={t('navigation.previousNext')}\n >\n {previous ? <PageNavigationLink direction=\"previous\" route={previous} separated={hasBothDirections} /> : null}\n {next ? <PageNavigationLink direction=\"next\" route={next} separated={hasBothDirections} /> : null}\n </nav>\n )\n}\n\ntype PageNavigationLinkProps = { direction: 'previous' | 'next'; route: NavigationNode; separated: boolean }\n\nfunction PageNavigationLink(arg0: PageNavigationLinkProps) {\n const { direction, route, separated } = arg0\n const t = useBuiltInText()\n\n const isNext = direction === 'next'\n\n return (\n <Link\n to={normalizeRoutePath(route.path)}\n className={clsx(\n 'group flex min-w-0 py-5 no-underline outline-none focus-visible:bg-(--clarify-ui-hover-background)',\n !isNext && '@3xl:pr-8',\n isNext && '@3xl:justify-end @3xl:pl-8 @3xl:text-right',\n isNext && separated && 'border-t border-(--clarify-theme-tokens-colors-border) @3xl:border-t-0 @3xl:border-l',\n )}\n >\n <span className={clsx('min-w-0', isNext && 'ml-auto')}>\n <span className={clsx('clarify-page-navigation-label flex items-center gap-1.5 text-xs/5 font-medium text-(--clarify-theme-tokens-colors-muted)', isNext && 'justify-end')}>\n {!isNext ? <ChevronLeft className=\"size-3.5 transition-transform group-hover:-translate-x-0.5\" /> : null}\n {isNext ? t('navigation.next') : t('navigation.previous')}\n {isNext ? <ChevronRight className=\"size-3.5 transition-transform group-hover:translate-x-0.5\" /> : null}\n </span>\n <span className=\"clarify-page-navigation-title mt-1 block truncate text-base/6 font-semibold text-(--clarify-theme-tokens-colors-foreground) transition-colors group-hover:text-(--clarify-theme-tokens-colors-primary)\">{route.title}</span>\n </span>\n </Link>\n )\n}\n","import clsx from 'clsx'\n\ntype SkeletonBlockProps = {\n className?: string;\n}\n\nconst paragraphLines = ['w-full', 'w-11/12', 'w-4/5']\nconst codeLines = ['w-5/6', 'w-2/3', 'w-3/4', 'w-1/2']\n\nfunction SkeletonBlock(props: SkeletonBlockProps) {\n return <div aria-hidden=\"true\" className={clsx('rounded-(--clarify-skeleton-radius) bg-(--clarify-skeleton-background)', props.className)} />\n}\n\nfunction SkeletonParagraph() {\n return (\n <div className=\"space-y-3\">\n {paragraphLines.map((width) => (\n <SkeletonBlock key={width} className={clsx('h-3', width)} />\n ))}\n </div>\n )\n}\n\nexport function PageSkeleton() {\n return (\n <section className=\"clarify-page-skeleton animate-pulse space-y-10 py-8\" aria-label=\"Loading page\">\n <div className=\"space-y-5\">\n <SkeletonBlock className=\"h-3 w-24 rounded-full bg-(--clarify-skeleton-accent-background)\" />\n <SkeletonBlock className=\"h-11 w-full max-w-(--clarify-skeleton-title-width) rounded-3xl\" />\n <div className=\"max-w-3xl space-y-3\">\n <SkeletonBlock className=\"h-4 w-full\" />\n <SkeletonBlock className=\"h-4 w-5/6\" />\n </div>\n </div>\n\n <div className=\"grid gap-4 xl:grid-cols-2\">\n {[0, 1].map((item) => (\n <div key={item} className=\"rounded-(--clarify-skeleton-card-radius) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm shadow-zinc-900/5\">\n <div className=\"flex items-start gap-4\">\n <SkeletonBlock className=\"h-10 w-10 shrink-0 bg-(--clarify-skeleton-accent-background)\" />\n <div className=\"min-w-0 flex-1 space-y-4\">\n <SkeletonBlock className=\"h-5 w-2/3\" />\n <SkeletonParagraph />\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"space-y-8\">\n <article className=\"space-y-5\">\n <SkeletonBlock className=\"h-7 w-full max-w-(--clarify-skeleton-heading-width) rounded-2xl\" />\n <SkeletonParagraph />\n <div className=\"rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4\">\n <SkeletonBlock className=\"h-4 w-full max-w-(--clarify-skeleton-line-width) bg-(--clarify-skeleton-accent-background)\" />\n </div>\n </article>\n\n <div className=\"overflow-hidden rounded-(--clarify-skeleton-block-radius) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-code-background)\">\n <div className=\"flex items-center gap-2 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"ml-3 h-3 w-32\" />\n </div>\n <div className=\"space-y-3 p-4\">\n {codeLines.map((width) => (\n <SkeletonBlock key={width} className={clsx('h-3', width)} />\n ))}\n </div>\n </div>\n\n <article className=\"space-y-5\">\n <SkeletonBlock className=\"h-7 w-full max-w-(--clarify-skeleton-heading-short-width) rounded-2xl\" />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {[0, 1, 2, 3].map((item) => (\n <div key={item} className=\"rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) p-4\">\n <SkeletonBlock className=\"mb-3 h-4 w-1/2\" />\n <SkeletonBlock className=\"h-3 w-4/5\" />\n </div>\n ))}\n </div>\n </article>\n </div>\n </section>\n )\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useSectionStore } from './SectionProvider'\n\ntype SectionHashSyncProps = {\n hashScrollSuppressedUntilRef: RefObject<number>\n}\n\nconst HASH_UPDATE_DEBOUNCE_MS = 120\n\nfunction replaceHash(sectionId?: string) {\n if (typeof window === 'undefined') return\n\n const nextHash = sectionId ? `#${encodeURIComponent(sectionId)}` : ''\n if (window.location.hash === nextHash) return\n window.history.replaceState(window.history.state, '', `${window.location.pathname}${window.location.search}${nextHash}`)\n}\n\nfunction useReleaseHashSyncOnManualScroll(hashScrollSuppressedUntilRef: RefObject<number>) {\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const release = () => {\n hashScrollSuppressedUntilRef.current = 0\n }\n const releaseOnScrollKey = (event: KeyboardEvent) => {\n if (['ArrowDown', 'ArrowUp', 'End', 'Home', 'PageDown', 'PageUp', ' '].includes(event.key)) release()\n }\n\n window.addEventListener('wheel', release, { passive: true })\n window.addEventListener('touchmove', release, { passive: true })\n window.addEventListener('keydown', releaseOnScrollKey)\n return () => {\n window.removeEventListener('wheel', release)\n window.removeEventListener('touchmove', release)\n window.removeEventListener('keydown', releaseOnScrollKey)\n }\n }, [hashScrollSuppressedUntilRef])\n}\n\nexport function SectionHashSync(arg0: SectionHashSyncProps) {\n const { hashScrollSuppressedUntilRef } = arg0\n const location = useLocation()\n const pathnameRef = useRef(location.pathname)\n const hashUpdateTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const sections = useSectionStore((state) => state.sections)\n const visibleSections = useSectionStore((state) => state.visibleSections)\n\n useEffect(() => {\n if (pathnameRef.current === location.pathname) return\n\n pathnameRef.current = location.pathname\n hashScrollSuppressedUntilRef.current = Date.now() + 1200\n }, [hashScrollSuppressedUntilRef, location.pathname])\n\n useReleaseHashSyncOnManualScroll(hashScrollSuppressedUntilRef)\n\n useEffect(() => {\n if (!sections.length || !visibleSections.length) return\n if (Date.now() < hashScrollSuppressedUntilRef.current) return\n\n const visibleSectionId = visibleSections.find((id) => id !== '_top' && sections.some((section) => section.id === id))\n\n hashUpdateTimeoutRef.current = setTimeout(() => {\n replaceHash(visibleSections[0] === '_top' ? undefined : visibleSectionId)\n }, HASH_UPDATE_DEBOUNCE_MS)\n\n return () => {\n if (hashUpdateTimeoutRef.current !== undefined) {\n clearTimeout(hashUpdateTimeoutRef.current)\n hashUpdateTimeoutRef.current = undefined\n }\n }\n }, [hashScrollSuppressedUntilRef, location.hash, sections, visibleSections])\n\n return null\n}\n","import clsx from 'clsx'\nimport { Suspense, lazy, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ComponentType, CSSProperties } from 'react'\nimport { Link, Routes, Route, useLocation, useNavigate } from 'react-router-dom'\n\nimport { LocaleContext } from '../context'\nimport { useBuiltInText } from '../core/i18n'\nimport { Header, Navigation } from '../shell'\nimport { RuntimeSlot, RuntimeSlotsProvider, type RuntimeSlotRegistry } from '../slots'\nimport { getStoredLocalePreference, storeLocalePreference } from '../theme/cookies'\nimport type { RouteItem, Config, LocaleConfig, NavigationNode, NavigationTab, NavigationTree } from '../types'\nimport { safeDecodeURIComponent } from '../utils/hash'\nimport { resolveLocalizedText } from '../utils/localized-text'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { BuiltWithClarify } from './BuiltWithClarify'\nimport { PageErrorBoundary } from './ErrorBoundary'\nimport { PageActionsProvider } from './PageActions'\nimport { PageBanner } from './PageBanner'\nimport { PageFooter } from './PageFooter'\nimport { PageNavigation } from './PageNavigation'\nimport { PageSkeleton } from './PageSkeleton'\nimport { SectionHashSync } from './SectionHashSync'\nimport { SectionProvider, type Section } from './SectionProvider'\n\nexport type AppShellProps = {\n config: Config\n routes: RouteItem[]\n navigation: NavigationTree\n runtimeSlots?: RuntimeSlotRegistry\n}\n\ntype BannerSlotProps = {\n activeBannerKey: string | undefined\n dismissedBannerKey: string | undefined\n bannerResolved: boolean\n onDismiss: () => void\n config: Config\n locale?: string\n}\n\nfunction BannerSlot(props: BannerSlotProps) {\n const { activeBannerKey, dismissedBannerKey, bannerResolved, onDismiss, config, locale } = props\n // 直接在插槽内部创建默认组件,这样它可以访问到上下文\n function DefaultBannerComponent() {\n const hasBanner = bannerResolved && Boolean(config.banner) && dismissedBannerKey !== activeBannerKey\n if (!hasBanner) return null\n return <PageBanner currentLocale={locale} onDismiss={onDismiss} />\n }\n \n return <RuntimeSlot name=\"page.banner.replace\" default={DefaultBannerComponent} />\n}\n\nfunction DefaultFooterComponent() {\n return <PageFooter />\n}\n\nfunction routeForPath(routes: RouteItem[], pathname: string): RouteItem | undefined {\n return routes.find((route) => isSameRoutePath(route.path, pathname))\n}\n\nfunction notFoundRouteForPath(routes: RouteItem[], pathname: string, currentLocale?: string): RouteItem | undefined {\n const localePrefix = currentLocale ? `/${currentLocale}` : undefined\n if (localePrefix && pathname.startsWith(`${localePrefix}/`)) {\n return routeForPath(routes, `${localePrefix}/404`)\n }\n return routeForPath(routes, '/404') ?? routes.find(route => isSameRoutePath(route.basePath, '/404'))\n}\n\nfunction sectionsForRoute(route?: RouteItem): Section[] {\n return (\n route?.sections?.map((section) => ({\n id: section.id,\n title: section.title,\n level: section.level,\n badge: section.badge,\n tags: section.tags,\n })) ?? []\n )\n}\n\nfunction resolveRouteComponent(route: RouteItem): ComponentType {\n if (route.lazy) return lazy(route.component as () => Promise<{ default: ComponentType }>)\n return route.component as ComponentType\n}\n\nconst HASH_SCROLL_RETRY_DELAYS = [0, 100, 300, 700, 1200]\nconst HASH_SCROLL_SUPPRESSION_MS = 1500\n\nexport function scrollToHash(hash: string): () => void {\n if (typeof window === 'undefined' || typeof document === 'undefined' || !hash) return () => {}\n\n const targetId = safeDecodeURIComponent(hash.slice(1))\n const timeouts: ReturnType<typeof setTimeout>[] = []\n let cancelled = false\n\n const cancel = () => {\n cancelled = true\n timeouts.forEach(clearTimeout)\n }\n const cancelOnScrollKey = (event: KeyboardEvent) => {\n if (['ArrowDown', 'ArrowUp', 'End', 'Home', 'PageDown', 'PageUp', ' '].includes(event.key)) cancel()\n }\n const tryScrollToTarget = (attempt: number) => {\n if (cancelled) return\n const target = document.getElementById(targetId)\n if (!target) return\n\n target.scrollIntoView({ behavior: attempt === 0 ? 'smooth' : 'auto', block: 'start' })\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n }\n\n window.addEventListener('wheel', cancel, { passive: true })\n window.addEventListener('touchmove', cancel, { passive: true })\n window.addEventListener('pointerdown', cancel, { passive: true })\n window.addEventListener('keydown', cancelOnScrollKey)\n HASH_SCROLL_RETRY_DELAYS.forEach((delay, attempt) => {\n timeouts.push(setTimeout(() => tryScrollToTarget(attempt), delay))\n })\n\n return () => {\n cancel()\n window.removeEventListener('wheel', cancel)\n window.removeEventListener('touchmove', cancel)\n window.removeEventListener('pointerdown', cancel)\n window.removeEventListener('keydown', cancelOnScrollKey)\n }\n}\n\nfunction explicitLocaleForPath(config: Config, pathname: string): string | undefined {\n const locales = config.locales\n if (!locales) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return locales.locales.find((locale) => locale.code === firstSegment)?.code\n}\n\nfunction fallbackLocale(config: Config): string | undefined {\n return config.locales?.default\n}\n\nfunction storedLocaleForConfig(config: Config): string | null {\n return getStoredLocalePreference(config.locales?.locales.map(locale => locale.code))\n}\n\nfunction isDefaultLocale(config: Config, locale: string | undefined): boolean {\n return Boolean(locale && config.locales?.default === locale)\n}\n\nfunction hasPath(nodes: NavigationNode[], pathname: string, locale?: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname, locale) || hasPath(node.children ?? [], pathname, locale))\n}\n\ntype NavigationState = {\n items: NavigationNode[]\n tabs?: NavigationTab[]\n}\n\nfunction navigationFromTabs(tabs: NavigationTab[], pathname: string, locale?: string): NavigationState {\n const currentTab = tabs.find((tab) => isSameRoutePath(tab.path, pathname, locale) || hasPath(tab.children, pathname, locale))\n return {\n items: currentTab?.children ?? tabs[0]?.children ?? [],\n tabs,\n }\n}\n\nfunction navigationForLocale(navigation: NavigationTree, locale: string | undefined, pathname: string): NavigationState {\n switch (navigation.kind) {\n case 'flat':\n return { items: navigation.nodes }\n case 'tabbed':\n return navigationFromTabs(navigation.tabs, pathname, locale)\n case 'localized':\n return { items: locale ? navigation.locales[locale] ?? [] : [] }\n case 'localized-tabbed':\n return locale && navigation.locales[locale] ? navigationFromTabs(navigation.locales[locale].tabs, pathname, locale) : { items: [] }\n }\n}\n\nfunction pageTitle(config: Config, route?: RouteItem): string {\n const routeTitle = route?.title?.trim()\n if (!routeTitle || routeTitle === config.title) return config.title\n return `${routeTitle} - ${config.title}`\n}\n\nfunction setNamedMeta(name: string, content: string | undefined) {\n const existing = document.head.querySelector<HTMLMetaElement>(`meta[name=\"${name}\"]`)\n if (!content) {\n existing?.remove()\n return\n }\n\n const meta = existing ?? document.createElement('meta')\n meta.name = name\n meta.content = content\n if (!existing) document.head.appendChild(meta)\n}\n\nfunction applyDocumentMetadata(config: Config, route?: RouteItem) {\n document.title = pageTitle(config, route)\n setNamedMeta('description', route?.description ?? config.description)\n setNamedMeta('keywords', route?.keywords?.join(', '))\n}\n\nfunction useRouteState(config: Config, routes: RouteItem[], navigation: NavigationTree, pathname: string) {\n const currentRoute = routeForPath(routes, pathname)\n const explicitLocale = explicitLocaleForPath(config, pathname)\n const storedLocale = storedLocaleForConfig(config)\n const currentLocale = explicitLocale ?? storedLocale ?? fallbackLocale(config)\n const currentLocaleConfig = config.locales?.locales.find((locale) => locale.code === currentLocale)\n const notFoundRoute = currentRoute ? undefined : notFoundRouteForPath(routes, pathname, currentLocale)\n const currentNavigation = navigationForLocale(navigation, currentLocale, pathname)\n const sections = sectionsForRoute(currentRoute)\n\n return {\n currentRoute,\n explicitLocale,\n storedLocale,\n currentLocale,\n currentLocaleConfig,\n notFoundRoute,\n currentNavigation,\n sections,\n }\n}\n\nfunction useRenderedRoutes(routes: RouteItem[], notFoundRoute?: RouteItem) {\n const renderRoutes = useMemo(\n () => routes.map(route => ({ ...route, component: resolveRouteComponent(route) })),\n [routes],\n )\n const NotFoundRouteComponent = notFoundRoute\n ? renderRoutes.find(route => isSameRoutePath(route.path, notFoundRoute.path))?.component\n : undefined\n\n return { renderRoutes, NotFoundRouteComponent }\n}\n\nfunction emptySubscribe() {\n return () => {}\n}\n\nfunction useStoredBannerDismissed(storageKey: string | undefined) {\n return useSyncExternalStore(\n emptySubscribe,\n () => Boolean(storageKey && typeof window !== 'undefined' && window.localStorage.getItem(storageKey) === '1'),\n // Avoid SSR/hydration flash for dismissible banners by resolving dismissal on the client.\n () => true,\n )\n}\n\nfunction useBannerState(config: Config, currentLocale: string | undefined) {\n const banner = config.banner\n const bannerContent = banner\n ? resolveLocalizedText(banner.content, currentLocale, config.locales?.default)\n : ''\n const bannerStorageKey = banner && bannerContent ? `clarify:banner:dismissed:${config.title}:${bannerContent}` : undefined\n const storedBannerDismissed = useStoredBannerDismissed(banner?.dismissible ? bannerStorageKey : undefined)\n const [dismissedBannerKey, setDismissedBannerKey] = useState<string>()\n const activeBannerKey = banner ? JSON.stringify(banner) : undefined\n const bannerResolved = !banner?.dismissible || !storedBannerDismissed\n const hasBanner = Boolean(banner && bannerContent) && !storedBannerDismissed && dismissedBannerKey !== activeBannerKey\n\n return {\n activeBannerKey,\n bannerResolved,\n dismissedBannerKey,\n hasBanner,\n dismissBanner: () => setDismissedBannerKey(activeBannerKey),\n }\n}\n\ntype StoredLocaleRedirectOptions = {\n config: Config\n pathname: string\n currentRoute?: RouteItem\n storedLocale: string | null\n explicitLocale?: string\n location: ReturnType<typeof useLocation>\n navigate: ReturnType<typeof useNavigate>\n hashScrollSuppressedUntilRef: React.RefObject<number>\n}\n\ntype AppShellNavigationEffectsArgs = StoredLocaleRedirectOptions\n\nfunction useAppShellNavigationEffects(arg0: AppShellNavigationEffectsArgs) {\n const { config, currentRoute, explicitLocale, hashScrollSuppressedUntilRef, location, navigate, pathname, storedLocale } = arg0\n\n useEffect(() => {\n if (explicitLocale) storeLocalePreference(explicitLocale)\n }, [explicitLocale])\n\n useEffect(() => {\n if (explicitLocale || !storedLocale || isDefaultLocale(config, storedLocale)) return\n const localizedPath = currentRoute?.alternates?.[storedLocale]\n if (!localizedPath || isSameRoutePath(localizedPath, pathname)) return\n navigate(`${localizedPath}${location.search}${location.hash}`, { replace: true })\n }, [config, currentRoute, explicitLocale, location.hash, location.search, navigate, pathname, storedLocale])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n if (location.hash) {\n hashScrollSuppressedUntilRef.current = Number.POSITIVE_INFINITY\n return scrollToHash(location.hash)\n }\n\n hashScrollSuppressedUntilRef.current = Date.now() + HASH_SCROLL_SUPPRESSION_MS\n window.scrollTo({ top: 0, left: 0, behavior: 'instant' })\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n }, [hashScrollSuppressedUntilRef, location.hash, location.pathname])\n}\n\ntype AppShellDocumentEffectsArgs = {\n currentLocale: string | undefined\n currentLocaleConfig: LocaleConfig | undefined\n config: Config\n route?: RouteItem\n}\n\nfunction useAppShellDocumentEffects(arg0: AppShellDocumentEffectsArgs) {\n const { currentLocale, currentLocaleConfig, config, route } = arg0\n\n useEffect(() => {\n if (!currentLocale) return\n document.documentElement.lang = currentLocale\n if (currentLocaleConfig?.dir) {\n document.documentElement.dir = currentLocaleConfig.dir\n } else {\n document.documentElement.removeAttribute('dir')\n }\n }, [currentLocale, currentLocaleConfig?.dir])\n\n useEffect(() => {\n applyDocumentMetadata(config, route)\n }, [config, route])\n}\n\ntype LayoutVariant = 'base' | 'banner' | 'tabs' | 'tabs-banner'\n\ntype LayoutConfig = {\n headerOffset: string\n sidebarScrollClassName: string\n contentClassName: string\n}\n\nconst appShellLayoutConfig: Record<LayoutVariant, LayoutConfig> = {\n base: {\n headerOffset: '3.5rem',\n sidebarScrollClassName: 'lg:top-14 lg:h-(--clarify-sidebar-height) lg:pt-10',\n contentClassName: 'pt-14',\n },\n banner: {\n headerOffset: '6.5rem',\n sidebarScrollClassName: 'lg:top-26 lg:h-(--clarify-sidebar-height-with-banner) lg:pt-10',\n contentClassName: 'pt-26',\n },\n tabs: {\n headerOffset: '7rem',\n sidebarScrollClassName: 'lg:top-28 lg:h-(--clarify-sidebar-height-with-tabs) lg:pt-10',\n contentClassName: 'pt-14 lg:pt-28',\n },\n 'tabs-banner': {\n headerOffset: '10rem',\n sidebarScrollClassName: 'lg:top-40 lg:h-(--clarify-sidebar-height-with-tabs-and-banner) lg:pt-10',\n contentClassName: 'pt-26 lg:pt-40',\n },\n}\n\nfunction getLayoutVariant(hasTabs: boolean, hasBanner: boolean): LayoutVariant {\n if (hasTabs && hasBanner) return 'tabs-banner'\n if (hasTabs) return 'tabs'\n if (hasBanner) return 'banner'\n return 'base'\n}\n\nfunction getAppShellLayoutConfig(hasTabs: boolean, hasBanner: boolean): LayoutConfig {\n return appShellLayoutConfig[getLayoutVariant(hasTabs, hasBanner)]\n}\n\nfunction BuiltInNotFoundPage() {\n const text = useBuiltInText()\n\n return (\n <section className=\"mx-auto flex min-h-(--clarify-error-page-min-height) max-w-2xl flex-col justify-center py-16 text-(--clarify-theme-tokens-colors-foreground)\" aria-labelledby=\"clarify-not-found-title\">\n <p className=\"text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-primary)\">{text('notFound.label')}</p>\n <h1 id=\"clarify-not-found-title\" className=\"mt-3 text-3xl/9 font-semibold tracking-tight text-(--clarify-theme-tokens-colors-foreground)\">{text('notFound.title')}</h1>\n <p className=\"mt-4 text-sm/6 text-(--clarify-theme-tokens-colors-muted)\">{text('notFound.description')}</p>\n <div className=\"mt-8\">\n <Link className=\"inline-flex items-center rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-3 py-2 text-sm/5 font-semibold text-white shadow-xs transition hover:opacity-90\" to=\"/\">\n {text('notFound.home')}\n </Link>\n </div>\n </section>\n )\n}\n\ntype NotFoundRouteElementProps = {\n component?: ComponentType;\n}\n\nfunction NotFoundRouteElement(props: NotFoundRouteElementProps) {\n const { component: RouteComponent } = props\n if (!RouteComponent) return <BuiltInNotFoundPage />\n return <RouteComponent />\n}\n\nexport function AppShell(arg0: AppShellProps) {\n const { config, routes, navigation, runtimeSlots } = arg0\n const location = useLocation()\n const navigate = useNavigate()\n const pathname = normalizeRoutePath(location.pathname)\n const headerRef = useRef<HTMLElement>(null)\n const headerTopAreaRef = useRef<HTMLDivElement>(null)\n const hashScrollSuppressedUntilRef = useRef(0)\n const {\n currentRoute,\n explicitLocale,\n storedLocale,\n currentLocale,\n currentLocaleConfig,\n notFoundRoute,\n currentNavigation,\n sections,\n } = useRouteState(config, routes, navigation, pathname)\n const text = useBuiltInText(currentLocale)\n const { activeBannerKey, bannerResolved, dismissedBannerKey, hasBanner, dismissBanner } = useBannerState(config, currentLocale)\n const hasTabs = Boolean(currentNavigation.tabs?.length)\n const layoutConfig = getAppShellLayoutConfig(hasTabs, hasBanner)\n const { renderRoutes, NotFoundRouteComponent } = useRenderedRoutes(routes, notFoundRoute)\n\n useAppShellNavigationEffects({ config, currentRoute, explicitLocale, hashScrollSuppressedUntilRef, location, navigate, pathname, storedLocale })\n useAppShellDocumentEffects({ currentLocale, currentLocaleConfig, config, route: currentRoute ?? notFoundRoute })\n\n const layoutStyle = {\n '--clarify-header-offset': layoutConfig.headerOffset,\n } as CSSProperties\n\n function renderBannerSlot() {\n return (\n <BannerSlot\n activeBannerKey={activeBannerKey}\n dismissedBannerKey={dismissedBannerKey}\n bannerResolved={bannerResolved}\n onDismiss={dismissBanner}\n config={config}\n locale={currentLocale}\n />\n )\n }\n\n function renderHeader() {\n return (\n <Header\n ref={headerRef}\n topAreaRef={headerTopAreaRef}\n config={config}\n navigation={currentNavigation.items}\n tabs={currentNavigation.tabs}\n routes={routes}\n currentLocale={currentLocale}\n currentRoute={currentRoute}\n banner={renderBannerSlot()}\n />\n )\n }\n\n function renderSidebar() {\n return (\n <aside\n data-pagefind-ignore\n className=\"clarify-sidebar hidden lg:block lg:self-stretch lg:bg-(--clarify-theme-tokens-colors-background) lg:px-5 xl:px-6\"\n >\n <div className={clsx('clarify-sidebar-scroll lg:sticky lg:z-30 lg:overflow-y-auto lg:pb-8', layoutConfig.sidebarScrollClassName)}>\n <Navigation navigation={currentNavigation.items} currentLocale={currentLocale} />\n </div>\n </aside>\n )\n }\n\n function renderRouteElements() {\n return (\n <Routes>\n {renderRoutes.map((route) => (\n <Route key={route.path} path={route.path} element={<route.component />} />\n ))}\n <Route path=\"*\" element={<NotFoundRouteElement component={NotFoundRouteComponent} />} />\n </Routes>\n )\n }\n\n function renderMain() {\n return (\n <main className=\"clarify-main min-w-0 flex-auto\" data-pagefind-body>\n <PageErrorBoundary\n key={pathname}\n title={text('renderError.title')}\n description={text('renderError.description')}\n reloadLabel={text('renderError.reload')}\n detailsLabel={text('renderError.details')}\n pathLabel={text('renderError.path')}\n typeLabel={text('renderError.type')}\n messageLabel={text('renderError.message')}\n stackLabel={text('renderError.stack')}\n componentStackLabel={text('renderError.componentStack')}\n copyLabel={text('actions.copy')}\n copiedLabel={text('actions.copied')}\n path={pathname}\n >\n <Suspense fallback={<PageSkeleton />}>\n {renderRouteElements()}\n </Suspense>\n </PageErrorBoundary>\n </main>\n )\n }\n\n function renderFooter() {\n return (\n <div className=\"clarify-page-footer-region mt-8 grid gap-5 border-t border-(--clarify-theme-tokens-colors-border) pt-6 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-end\">\n <div className=\"clarify-page-footer-slot min-w-0\">\n <RuntimeSlot name=\"page.footer.before\" />\n <RuntimeSlot name=\"page.footer.replace\" default={DefaultFooterComponent} />\n </div>\n <div className=\"clarify-page-attribution flex justify-end sm:self-end\">\n <BuiltWithClarify />\n </div>\n </div>\n )\n }\n\n function renderContent() {\n return (\n <div className={clsx('clarify-content @container relative flex min-h-screen min-w-0 flex-col px-4 pb-12 sm:px-6 lg:px-8 xl:px-10', layoutConfig.contentClassName)}>\n <PageActionsProvider route={currentRoute} routePrefix={config.routePrefix}>\n {renderMain()}\n <PageNavigation navigation={currentNavigation.items} currentRoute={currentRoute} />\n {renderFooter()}\n </PageActionsProvider>\n </div>\n )\n }\n\n function renderLayout() {\n return (\n <div\n className=\"clarify-layout mx-auto grid w-full max-w-(--clarify-theme-layout-max-width) grid-cols-1 lg:grid-cols-(--clarify-layout-sidebar-grid) xl:grid-cols-(--clarify-layout-sidebar-grid-wide)\"\n style={layoutStyle}\n >\n {renderSidebar()}\n {renderContent()}\n </div>\n )\n }\n\n return (\n <LocaleContext.Provider value={currentLocale}>\n <RuntimeSlotsProvider slots={runtimeSlots} route={currentRoute}>\n <SectionProvider sections={sections} headerTopAreaRef={headerTopAreaRef}>\n <SectionHashSync hashScrollSuppressedUntilRef={hashScrollSuppressedUntilRef} />\n {renderHeader()}\n {renderLayout()}\n </SectionProvider>\n </RuntimeSlotsProvider>\n </LocaleContext.Provider>\n )\n}\n","import type { ThemeConfig, ThemeRadiusTokensConfig } from '../types'\n\ntype RandomThemeAccentPair = {\n primary: string;\n accent: string;\n}\n\ntype RandomThemePalette = RandomThemeAccentPair & {\n background: string;\n foreground: string;\n surface: string;\n muted: string;\n borderMix: number;\n codeMix: number;\n}\n\nconst randomThemePalettes = [\n { primary: '#047857', accent: '#0D9488', background: '#ffffff', foreground: '#111827', surface: '#ffffff', muted: '#64748b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#2563eb', accent: '#7c3aed', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#64748b', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#9333ea', accent: '#db2777', background: '#fdf4ff', foreground: '#2e1065', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#ea580c', accent: '#ca8a04', background: '#fff7ed', foreground: '#431407', surface: '#fffbeb', muted: '#9a3412', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#0f766e', accent: '#0891b2', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#be123c', accent: '#f97316', background: '#fff1f2', foreground: '#4c0519', surface: '#ffffff', muted: '#9f1239', borderMix: 0.13, codeMix: 0.06 },\n { primary: '#4f46e5', accent: '#06b6d4', background: '#eef2ff', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4338ca', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#0e7490', accent: '#22c55e', background: '#ecfeff', foreground: '#083344', surface: '#ffffff', muted: '#155e75', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#7c2d12', accent: '#dc2626', background: '#fef2f2', foreground: '#450a0a', surface: '#fff7ed', muted: '#991b1b', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#365314', accent: '#84cc16', background: '#f7fee7', foreground: '#1a2e05', surface: '#ffffff', muted: '#4d7c0f', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0369a1', accent: '#14b8a6', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#075985', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#a21caf', accent: '#e879f9', background: '#fdf4ff', foreground: '#4a044e', surface: '#ffffff', muted: '#86198f', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#c2410c', accent: '#fb7185', background: '#fff7ed', foreground: '#431407', surface: '#ffffff', muted: '#9a3412', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1d4ed8', accent: '#f59e0b', background: '#eff6ff', foreground: '#172554', surface: '#ffffff', muted: '#1e40af', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#6d28d9', accent: '#10b981', background: '#faf5ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6b21a8', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0f172a', accent: '#64748b', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#18181b', accent: '#71717a', background: '#fafafa', foreground: '#18181b', surface: '#ffffff', muted: '#52525b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#166534', accent: '#06b6d4', background: '#f0fdf4', foreground: '#052e16', surface: '#ffffff', muted: '#15803d', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#9d174d', accent: '#8b5cf6', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#be185d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#4338ca', accent: '#ec4899', background: '#f5f3ff', foreground: '#312e81', surface: '#ffffff', muted: '#4f46e5', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#92400e', accent: '#65a30d', background: '#fffbeb', foreground: '#451a03', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0f766e', accent: '#f43f5e', background: '#f8fafc', foreground: '#134e4a', surface: '#ffffff', muted: '#0f766e', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#1e3a8a', accent: '#0ea5e9', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#581c87', accent: '#f97316', background: '#faf5ff', foreground: '#3b0764', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#991b1b', accent: '#facc15', background: '#fef2f2', foreground: '#450a0a', surface: '#ffffff', muted: '#b91c1c', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#115e59', accent: '#a3e635', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#075985', accent: '#38bdf8', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#0369a1', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#7e22ce', accent: '#f472b6', background: '#faf5ff', foreground: '#3b0764', surface: '#ffffff', muted: '#9333ea', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#b45309', accent: '#ef4444', background: '#fffbeb', foreground: '#451a03', surface: '#ffffff', muted: '#92400e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#065f46', accent: '#2dd4bf', background: '#ecfdf5', foreground: '#022c22', surface: '#ffffff', muted: '#047857', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#312e81', accent: '#22d3ee', background: '#eef2ff', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4338ca', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#831843', accent: '#fb923c', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#be185d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#164e63', accent: '#818cf8', background: '#ecfeff', foreground: '#083344', surface: '#ffffff', muted: '#155e75', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#3f6212', accent: '#f97316', background: '#f7fee7', foreground: '#1a2e05', surface: '#ffffff', muted: '#4d7c0f', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1e40af', accent: '#fb7185', background: '#eff6ff', foreground: '#172554', surface: '#ffffff', muted: '#2563eb', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#701a75', accent: '#14b8a6', background: '#fdf4ff', foreground: '#4a044e', surface: '#ffffff', muted: '#a21caf', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#713f12', accent: '#eab308', background: '#fefce8', foreground: '#422006', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1f2937', accent: '#0ea5e9', background: '#f9fafb', foreground: '#111827', surface: '#ffffff', muted: '#4b5563', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#27272a', accent: '#a855f7', background: '#fafafa', foreground: '#18181b', surface: '#ffffff', muted: '#52525b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#374151', accent: '#10b981', background: '#f3f4f6', foreground: '#111827', surface: '#ffffff', muted: '#4b5563', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#064e3b', accent: '#f59e0b', background: '#f8fafc', foreground: '#022c22', surface: '#ffffff', muted: '#047857', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#7f1d1d', accent: '#60a5fa', background: '#fff7ed', foreground: '#450a0a', surface: '#ffffff', muted: '#991b1b', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#3730a3', accent: '#34d399', background: '#f8fafc', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4f46e5', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#9f1239', accent: '#22c55e', background: '#fff1f2', foreground: '#4c0519', surface: '#ffffff', muted: '#be123c', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#134e4a', accent: '#8b5cf6', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1d4ed8', accent: '#dc2626', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#6b21a8', accent: '#fbbf24', background: '#faf5ff', foreground: '#2e1065', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#155e75', accent: '#84cc16', background: '#f0f9ff', foreground: '#083344', surface: '#ffffff', muted: '#0369a1', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#854d0e', accent: '#06b6d4', background: '#fefce8', foreground: '#422006', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#14532d', accent: '#f43f5e', background: '#f0fdf4', foreground: '#052e16', surface: '#ffffff', muted: '#166534', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#4c1d95', accent: '#2dd4bf', background: '#f5f3ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6d28d9', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#9a3412', accent: '#c084fc', background: '#fff7ed', foreground: '#431407', surface: '#ffffff', muted: '#c2410c', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0c4a6e', accent: '#f472b6', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#075985', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#166534', accent: '#facc15', background: '#f7fee7', foreground: '#052e16', surface: '#ffffff', muted: '#15803d', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#be185d', accent: '#38bdf8', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#9d174d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#5b21b6', accent: '#ef4444', background: '#f5f3ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6d28d9', borderMix: 0.14, codeMix: 0.06 },\n] as const satisfies readonly RandomThemePalette[]\n\nconst randomRadiusSets = [\n { sm: '2px', md: '6px', lg: '10px', xl: '14px' },\n { sm: '4px', md: '8px', lg: '12px', xl: '16px' },\n { sm: '6px', md: '10px', lg: '14px', xl: '18px' },\n { sm: '8px', md: '12px', lg: '18px', xl: '24px' },\n { sm: '10px', md: '14px', lg: '20px', xl: '28px' },\n { sm: '12px', md: '16px', lg: '24px', xl: '32px' },\n] as const satisfies ReadonlyArray<ThemeRadiusTokensConfig>\n\nconst randomLayoutWidths = ['72rem', '76rem', '78rem', '80rem', '82rem', '86rem', '90rem', '96rem', '104rem', '112rem', '120rem', '128rem', '144rem'] as const\n\ntype RandomThemeSelection = {\n palette: RandomThemePalette;\n darkAccents: RandomThemeAccentPair;\n radius: ThemeRadiusTokensConfig;\n maxWidth: string;\n}\n\nconst randomDarkAccentPairs = [\n { primary: '#34d399', accent: '#2dd4bf' },\n { primary: '#60a5fa', accent: '#38bdf8' },\n { primary: '#a78bfa', accent: '#c084fc' },\n { primary: '#f472b6', accent: '#fb7185' },\n { primary: '#fb923c', accent: '#facc15' },\n { primary: '#a3e635', accent: '#22c55e' },\n { primary: '#22d3ee', accent: '#818cf8' },\n { primary: '#f87171', accent: '#fb923c' },\n { primary: '#e879f9', accent: '#f472b6' },\n { primary: '#5eead4', accent: '#60a5fa' },\n] as const satisfies readonly RandomThemeAccentPair[]\n\nfunction randomItem<T>(items: readonly T[]): T {\n return items[Math.floor(Math.random() * items.length)]\n}\n\nfunction randomRgbMix(color: string, alpha: number): string {\n return `color-mix(in srgb, ${color} ${Math.round(alpha * 100)}%, transparent)`\n}\n\nfunction modeColor(light: string, dark: string): { light: string; dark: string } {\n return { light, dark }\n}\n\nfunction createRandomThemeSelection(): RandomThemeSelection {\n const palette = randomItem(randomThemePalettes)\n\n return {\n palette,\n darkAccents: randomItem(randomDarkAccentPairs),\n radius: randomItem(randomRadiusSets),\n maxWidth: randomItem(randomLayoutWidths),\n }\n}\n\nfunction createRandomThemeColors(selection: RandomThemeSelection): ThemeConfig['tokens']['colors'] {\n const { palette, darkAccents } = selection\n\n return {\n primary: modeColor(palette.primary, darkAccents.primary),\n accent: modeColor(palette.accent, darkAccents.accent),\n background: modeColor(palette.background, '#09090b'),\n foreground: modeColor(palette.foreground, '#f8fafc'),\n surface: modeColor(palette.surface, '#18181b'),\n muted: modeColor(palette.muted, '#a1a1aa'),\n border: modeColor(randomRgbMix(palette.foreground, palette.borderMix), 'rgb(255 255 255 / 0.1)'),\n codeBackground: modeColor(randomRgbMix(palette.primary, palette.codeMix), '#18181b'),\n }\n}\n\nexport function createRandomTheme(): ThemeConfig {\n const selection = createRandomThemeSelection()\n\n return {\n preset: 'default',\n tokens: {\n colors: createRandomThemeColors(selection),\n radius: { ...selection.radius },\n },\n layout: { maxWidth: selection.maxWidth },\n }\n}\n","import type { CSSProperties } from 'react'\n\nimport type { ThemeColorTokensConfig, ThemeColorValue, ThemeConfig, ThemePreset } from '../types'\n\nimport { themeCookieName } from './cookies'\n\nexport type ThemeCssVariables = CSSProperties & Record<`--clarify-theme-${string}`, string>\n\nexport type ThemeVariableTarget = HTMLElement | string\n\nexport const themeStorageKey = themeCookieName\nexport { themeCookieName }\n\nexport const themePresets = {\n default: {\n preset: 'default',\n tokens: {\n colors: {\n primary: { light: '#047857', dark: '#34d399' },\n accent: { light: '#0f766e', dark: '#5eead4' },\n background: { light: '#f8fafc', dark: '#0a0a0b' },\n foreground: { light: '#172033', dark: '#f4f4f5' },\n surface: { light: '#ffffff', dark: '#18181b' },\n muted: { light: '#667085', dark: '#a1a1aa' },\n border: { light: 'rgb(15 23 42 / 0.11)', dark: 'rgb(255 255 255 / 0.11)' },\n codeBackground: { light: '#f1f5f3', dark: '#171719' },\n },\n radius: {\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n },\n },\n layout: {\n maxWidth: '82rem',\n },\n },\n base: {\n preset: 'base',\n tokens: {\n colors: {\n primary: '#18181b',\n accent: '#52525b',\n background: { light: '#ffffff', dark: '#09090b' },\n foreground: { light: '#18181b', dark: '#ffffff' },\n surface: { light: '#ffffff', dark: '#18181b' },\n muted: { light: '#71717a', dark: '#a1a1aa' },\n border: { light: 'rgb(24 24 27 / 0.12)', dark: 'rgb(255 255 255 / 0.1)' },\n codeBackground: { light: '#f4f4f5', dark: '#18181b' },\n },\n radius: {\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n },\n },\n layout: {\n maxWidth: '80rem',\n },\n },\n} satisfies Record<ThemePreset, ThemeConfig>\n\nfunction cloneThemeColorValue(value: ThemeColorValue): ThemeColorValue {\n return typeof value === 'string' ? value : { ...value }\n}\n\nexport function cloneTheme(theme: ThemeConfig): ThemeConfig {\n return {\n preset: theme.preset,\n tokens: {\n colors: {\n primary: cloneThemeColorValue(theme.tokens.colors.primary),\n accent: cloneThemeColorValue(theme.tokens.colors.accent),\n background: cloneThemeColorValue(theme.tokens.colors.background),\n foreground: cloneThemeColorValue(theme.tokens.colors.foreground),\n surface: cloneThemeColorValue(theme.tokens.colors.surface),\n muted: cloneThemeColorValue(theme.tokens.colors.muted),\n border: cloneThemeColorValue(theme.tokens.colors.border),\n codeBackground: cloneThemeColorValue(theme.tokens.colors.codeBackground),\n },\n radius: { ...theme.tokens.radius },\n },\n layout: { ...theme.layout },\n }\n}\n\nfunction isModeColorValue(value: ThemeColorValue): value is Exclude<ThemeColorValue, string> {\n return typeof value === 'object' && value !== null\n}\n\nexport function resolveThemeColorValue(value: ThemeColorValue, resolvedTheme: 'light' | 'dark' = 'light'): string {\n if (!isModeColorValue(value)) return value\n\n return value[resolvedTheme] ?? value.light ?? value.dark ?? ''\n}\n\nexport function resolveThemeColors(colors: ThemeColorTokensConfig, resolvedTheme: 'light' | 'dark' = 'light'): Record<keyof ThemeColorTokensConfig, string> {\n return {\n primary: resolveThemeColorValue(colors.primary, resolvedTheme),\n accent: resolveThemeColorValue(colors.accent, resolvedTheme),\n background: resolveThemeColorValue(colors.background, resolvedTheme),\n foreground: resolveThemeColorValue(colors.foreground, resolvedTheme),\n surface: resolveThemeColorValue(colors.surface, resolvedTheme),\n muted: resolveThemeColorValue(colors.muted, resolvedTheme),\n border: resolveThemeColorValue(colors.border, resolvedTheme),\n codeBackground: resolveThemeColorValue(colors.codeBackground, resolvedTheme),\n }\n}\n\nexport function themeToCssVariables(theme: ThemeConfig, resolvedTheme?: 'light' | 'dark'): ThemeCssVariables {\n const colors = resolveThemeColors(theme.tokens.colors, resolvedTheme)\n const { radius } = theme.tokens\n\n return {\n '--clarify-theme-tokens-colors-primary': colors.primary,\n '--clarify-theme-tokens-colors-accent': colors.accent,\n '--clarify-theme-tokens-colors-background': colors.background,\n '--clarify-theme-tokens-colors-foreground': colors.foreground,\n '--clarify-theme-tokens-colors-surface': colors.surface,\n '--clarify-theme-tokens-colors-muted': colors.muted,\n '--clarify-theme-tokens-colors-border': colors.border,\n '--clarify-theme-tokens-colors-code-background': colors.codeBackground,\n '--clarify-theme-tokens-radius-sm': radius.sm,\n '--clarify-theme-tokens-radius-md': radius.md,\n '--clarify-theme-tokens-radius-lg': radius.lg,\n '--clarify-theme-tokens-radius-xl': radius.xl,\n '--clarify-theme-layout-max-width': theme.layout.maxWidth,\n }\n}\n\nexport function themeBootstrapScript(theme: ThemeConfig = themePresets.default): string {\n const darkVariables = themeToCssVariables(theme, 'dark')\n const lightVariables = themeToCssVariables(theme, 'light')\n\n return `(function(){try{var c=${JSON.stringify(themeCookieName)};var m=document.cookie?document.cookie.split('; '):[];var e=null;for(var i=0;i<m.length;i++){var p=m[i].indexOf('=');var n=p===-1?m[i]:m[i].slice(0,p);if(decodeURIComponent(n)===c){e=p===-1?'':decodeURIComponent(m[i].slice(p+1));break}}var t=e==='dark'||e==='light'||e==='system'?e:'system';var r=t==='system'?window.matchMedia('(prefers-color-scheme: dark)').matches:t==='dark';var v=r?${JSON.stringify(darkVariables)}:${JSON.stringify(lightVariables)};var s=document.documentElement.style;for(var k in v)s.setProperty(k,v[k]);document.documentElement.classList.toggle('dark',r);document.documentElement.style.colorScheme=r?'dark':'light'}catch(e){}})();`\n}\n\nfunction uniqueElements(elements: HTMLElement[]): HTMLElement[] {\n return Array.from(new Set(elements))\n}\n\nexport function resolveThemeVariableTargets(target?: ThemeVariableTarget): HTMLElement[] {\n if (typeof document === 'undefined') return []\n\n if (target instanceof HTMLElement) return [target]\n\n if (typeof target === 'string') {\n return Array.from(document.querySelectorAll<HTMLElement>(target))\n }\n\n return uniqueElements([\n document.documentElement,\n ...Array.from(document.querySelectorAll<HTMLElement>('.clarify-app')),\n ])\n}\n\nexport function applyThemeCssVariables(variables: ThemeCssVariables, targets: HTMLElement[]): () => void {\n const previousValues = new Map<HTMLElement, Map<string, string>>()\n\n for (const element of targets) {\n const elementPreviousValues = new Map<string, string>()\n\n for (const [property, value] of Object.entries(variables)) {\n elementPreviousValues.set(property, element.style.getPropertyValue(property))\n element.style.setProperty(property, value)\n }\n\n previousValues.set(element, elementPreviousValues)\n }\n\n return () => {\n for (const [element, elementPreviousValues] of previousValues) {\n for (const [property, previousValue] of elementPreviousValues) {\n if (previousValue) {\n element.style.setProperty(property, previousValue)\n } else {\n element.style.removeProperty(property)\n }\n }\n }\n }\n}\n","import clsx from 'clsx'\nimport { ChevronDown, Settings, WandSparkles, X } from 'lucide-react'\nimport { useEffect, useMemo, useState } from 'react'\nimport type { ChangeEvent } from 'react'\n\nimport type {\n ThemeColorTokensConfig,\n ThemeColorValue,\n ThemeConfig,\n ThemeLayoutConfig,\n ThemePreset,\n ThemeRadiusTokensConfig,\n} from '../types'\n\nimport { createRandomTheme } from './randomTheme'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, themePresets, cloneTheme, resolveThemeColorValue, resolveThemeVariableTargets, themeToCssVariables } from './variables'\nimport type { ThemeVariableTarget } from './variables'\n\nconst colorTokenFields = [\n { key: 'primary', label: 'Primary' },\n { key: 'accent', label: 'Accent' },\n { key: 'background', label: 'Background' },\n { key: 'foreground', label: 'Foreground' },\n { key: 'surface', label: 'Surface' },\n { key: 'muted', label: 'Muted' },\n { key: 'border', label: 'Border' },\n { key: 'codeBackground', label: 'Code background' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeColorTokensConfig; label: string }>\n\nconst radiusTokenFields = [\n { key: 'sm', label: 'Small' },\n { key: 'md', label: 'Medium' },\n { key: 'lg', label: 'Large' },\n { key: 'xl', label: 'Extra large' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeRadiusTokensConfig; label: string }>\n\nconst layoutFields = [\n { key: 'maxWidth', label: 'Max width' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeLayoutConfig; label: string }>\n\nexport type ThemeEditorProps = {\n /** The resolved theme to use as the editor's initial value. */\n initialTheme?: ThemeConfig;\n /** Called every time a token changes. */\n onChange?: (theme: ThemeConfig) => void;\n /** CSS variable target. Defaults to documentElement and every .clarify-app root. */\n target?: ThemeVariableTarget;\n /** Whether the panel is open by default. */\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport const themeEditorPresets = themePresets\n\nexport function applyThemeVariables(theme: ThemeConfig, target?: ThemeVariableTarget): () => void {\n return applyThemeCssVariables(themeToCssVariables(theme), resolveThemeVariableTargets(target))\n}\n\nfunction isHexColor(value: string): boolean {\n return /^#[0-9a-f]{6}$/i.test(value)\n}\n\nfunction updateThemeModeColorValue(value: ThemeColorTokensConfig[keyof ThemeColorTokensConfig], mode: 'light' | 'dark', nextValue: string): ThemeColorTokensConfig[keyof ThemeColorTokensConfig] {\n if (typeof value === 'string') {\n return mode === 'light' ? { light: nextValue, dark: value } : { light: value, dark: nextValue }\n }\n\n return {\n ...value,\n [mode]: nextValue,\n }\n}\n\ntype TextFieldProps = {\n id: string;\n label: string;\n value: string;\n onChange: (value: string) => void;\n withColorInput?: boolean;\n}\n\nfunction TextField(props: TextFieldProps) {\n const { id, label, value, onChange, withColorInput = false } = props\n const canUseColorInput = withColorInput && isHexColor(value)\n\n function handleTextChange(event: ChangeEvent<HTMLInputElement>) {\n onChange(event.target.value)\n }\n\n return (\n <label htmlFor={id} className=\"grid min-w-0 gap-1.5 text-xs/5 font-medium text-(--clarify-ui-text)\">\n <span className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"truncate\">{label}</span>\n {canUseColorInput ? (\n <input\n type=\"color\"\n value={value}\n aria-label={`${label} color`}\n className=\"h-5 w-8 shrink-0 cursor-pointer rounded border border-(--clarify-theme-tokens-colors-border) bg-transparent p-0\"\n onChange={handleTextChange}\n />\n ) : null}\n </span>\n <input\n id={id}\n value={value}\n spellCheck={false}\n className=\"h-9 w-full min-w-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2.5 font-mono text-xs text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={handleTextChange}\n />\n </label>\n )\n}\n\ntype ColorFieldProps = {\n id: string;\n label: string;\n value: ThemeColorValue;\n onChange: (mode: 'light' | 'dark', value: string) => void;\n}\n\nfunction ColorField(props: ColorFieldProps) {\n const { id, label, value, onChange } = props\n const lightValue = resolveThemeColorValue(value, 'light')\n const darkValue = resolveThemeColorValue(value, 'dark')\n\n return (\n <div className=\"grid min-w-0 gap-1.5\">\n <span className=\"text-xs/5 font-medium text-(--clarify-ui-text)\">{label}</span>\n <div className=\"grid grid-cols-2 gap-2\">\n <ColorModeInput id={`${id}-light`} mode=\"light\" value={lightValue} onChange={(v) => onChange('light', v)} />\n <ColorModeInput id={`${id}-dark`} mode=\"dark\" value={darkValue} onChange={(v) => onChange('dark', v)} />\n </div>\n </div>\n )\n}\n\ntype ColorModeInputProps = {\n id: string;\n mode: 'light' | 'dark';\n value: string;\n onChange: (value: string) => void;\n}\n\nfunction ColorModeInput(props: ColorModeInputProps) {\n const { id, mode, value, onChange } = props\n const canUseColorInput = isHexColor(value)\n\n function handleTextChange(event: ChangeEvent<HTMLInputElement>) {\n onChange(event.target.value)\n }\n\n return (\n <label htmlFor={id} className=\"grid min-w-0 gap-1 text-[11px]/4 font-medium text-(--clarify-ui-text-faint)\">\n <span className=\"flex min-w-0 items-center justify-between gap-2\">\n <span className=\"uppercase tracking-wide\">{mode}</span>\n {canUseColorInput ? (\n <input\n type=\"color\"\n value={value}\n aria-label={`${id} color`}\n className=\"h-4 w-6 shrink-0 cursor-pointer rounded border border-(--clarify-theme-tokens-colors-border) bg-transparent p-0\"\n onChange={handleTextChange}\n />\n ) : null}\n </span>\n <input\n id={id}\n value={value}\n spellCheck={false}\n className=\"h-8 w-full min-w-0 rounded-(--clarify-theme-tokens-radius-sm) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2 font-mono text-xs text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={handleTextChange}\n />\n </label>\n )\n}\n\nfunction themeToConfigSource(theme: ThemeConfig): string {\n return JSON.stringify(\n {\n theme: {\n preset: theme.preset,\n tokens: theme.tokens,\n layout: theme.layout,\n },\n },\n null,\n 2,\n )\n}\n\ntype UseThemeEditorStateArgs = {\n initialTheme?: ThemeConfig\n onChange?: (theme: ThemeConfig) => void\n target?: ThemeVariableTarget\n resolvedTheme: 'light' | 'dark'\n}\n\nfunction useThemeEditorState(arg0: UseThemeEditorStateArgs) {\n const { initialTheme, onChange, target, resolvedTheme } = arg0\n const [theme, setTheme] = useState<ThemeConfig>(() => cloneTheme(initialTheme ?? themeEditorPresets.default))\n const [copyState, setCopyState] = useState<'idle' | 'copied' | 'failed'>('idle')\n const configSource = useMemo(() => themeToConfigSource(theme), [theme])\n\n useEffect(() => applyThemeCssVariables(themeToCssVariables(theme, resolvedTheme), resolveThemeVariableTargets(target)), [resolvedTheme, target, theme])\n\n function commit(nextTheme: ThemeConfig) {\n setTheme(nextTheme)\n onChange?.(nextTheme)\n }\n\n function updatePreset(nextPreset: ThemePreset) {\n commit(cloneTheme(themeEditorPresets[nextPreset]))\n }\n\n function updateColorToken(key: keyof ThemeColorTokensConfig, mode: 'light' | 'dark', value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n colors: {\n ...theme.tokens.colors,\n [key]: updateThemeModeColorValue(theme.tokens.colors[key], mode, value),\n },\n },\n })\n }\n\n function updateRadiusToken(key: keyof ThemeRadiusTokensConfig, value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n radius: {\n ...theme.tokens.radius,\n [key]: value,\n },\n },\n })\n }\n\n function updateLayoutToken(key: keyof ThemeLayoutConfig, value: string) {\n commit({\n ...theme,\n layout: {\n ...theme.layout,\n [key]: value,\n },\n })\n }\n\n async function copyConfig() {\n try {\n await navigator.clipboard.writeText(configSource)\n setCopyState('copied')\n setTimeout(() => setCopyState('idle'), 1400)\n } catch {\n setCopyState('failed')\n setTimeout(() => setCopyState('idle'), 1400)\n }\n }\n\n return {\n theme,\n copyState,\n commit,\n updatePreset,\n updateColorToken,\n updateRadiusToken,\n updateLayoutToken,\n copyConfig,\n }\n}\n\nexport function ThemeEditor(props: ThemeEditorProps) {\n const { initialTheme, onChange, target, defaultOpen = false, className } = props\n const { resolvedTheme } = useTheme()\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const {\n theme,\n copyState,\n commit,\n updatePreset,\n updateColorToken,\n updateRadiusToken,\n updateLayoutToken,\n copyConfig,\n } = useThemeEditorState({ initialTheme, onChange, target, resolvedTheme })\n\n function renderPanelHeader() {\n return (\n <header className=\"shrink-0 flex items-start justify-between gap-4 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <div>\n <h2 className=\"text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-foreground)\">Theme editor</h2>\n <p className=\"mt-0.5 text-xs/5 text-(--clarify-ui-text-soft)\">Live CSS variable preview for Clarify theme tokens.</p>\n </div>\n <button\n type=\"button\"\n className=\"-mr-1 flex size-8 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) text-(--clarify-ui-text-soft) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n aria-label=\"Close theme editor\"\n onClick={() => setIsOpen(false)}\n >\n <X className=\"size-4 stroke-current stroke-2\" />\n </button>\n </header>\n )\n }\n\n function renderPanelBody() {\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4\">\n <div className=\"grid gap-5\">\n <label htmlFor=\"clarify-theme-editor-preset\" className=\"grid gap-1.5 text-xs/5 font-medium text-(--clarify-ui-text)\">\n Preset\n <span className=\"relative block\">\n <select\n id=\"clarify-theme-editor-preset\"\n value={theme.preset}\n className=\"h-9 w-full appearance-none rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2.5 pr-9 text-sm text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={(event) => updatePreset(event.target.value as ThemePreset)}\n >\n <option value=\"default\">default</option>\n <option value=\"base\">base</option>\n </select>\n <ChevronDown className=\"pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 stroke-current stroke-2 text-(--clarify-ui-text-faint)\" />\n </span>\n </label>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Colors</legend>\n <div className=\"grid grid-cols-1 gap-3\">\n {colorTokenFields.map((field) => (\n <ColorField\n key={field.key}\n id={`clarify-theme-editor-color-${field.key}`}\n label={field.label}\n value={theme.tokens.colors[field.key]}\n onChange={(mode, value) => updateColorToken(field.key, mode, value)}\n />\n ))}\n </div>\n </fieldset>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Radius</legend>\n <div className=\"grid grid-cols-2 gap-3\">\n {radiusTokenFields.map((field) => (\n <TextField\n key={field.key}\n id={`clarify-theme-editor-radius-${field.key}`}\n label={field.label}\n value={theme.tokens.radius[field.key]}\n onChange={(value) => updateRadiusToken(field.key, value)}\n />\n ))}\n </div>\n </fieldset>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Layout</legend>\n {layoutFields.map((field) => (\n <TextField\n key={field.key}\n id={`clarify-theme-editor-layout-${field.key}`}\n label={field.label}\n value={theme.layout[field.key]}\n onChange={(value) => updateLayoutToken(field.key, value)}\n />\n ))}\n </fieldset>\n </div>\n </div>\n )\n }\n\n function renderPanelFooter() {\n return (\n <footer className=\"shrink-0 flex items-center justify-between gap-3 border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-ui-subtle-background) px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-md) px-2.5 py-1.5 text-xs/5 font-semibold text-(--clarify-ui-text) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={() => updatePreset(theme.preset)}\n >\n Reset preset\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1.5 rounded-(--clarify-theme-tokens-radius-md) px-2.5 py-1.5 text-xs/5 font-semibold text-(--clarify-ui-text) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={() => commit(createRandomTheme())}\n >\n <WandSparkles className=\"size-3.5 stroke-current stroke-2\" />\n Random\n </button>\n </div>\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-3 py-1.5 text-xs/5 font-semibold text-white shadow-xs transition hover:opacity-90\"\n onClick={copyConfig}\n >\n {copyState === 'copied' ? 'Copied' : copyState === 'failed' ? 'Copy failed' : 'Copy config'}\n </button>\n </footer>\n )\n }\n\n function renderEditorPanel() {\n if (!isOpen) return null\n\n return (\n <section\n className=\"mb-3 flex max-h-(--clarify-theme-editor-panel-max-height) w-(--clarify-theme-editor-width) flex-col overflow-hidden rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface)/95 shadow-2xl shadow-zinc-900/15 backdrop-blur\"\n aria-label=\"Clarify theme editor\"\n >\n {renderPanelHeader()}\n {renderPanelBody()}\n {renderPanelFooter()}\n </section>\n )\n }\n\n return (\n <div className={clsx('clarify-theme-editor fixed right-4 bottom-4 z-50 text-(--clarify-theme-tokens-colors-foreground)', className)}>\n {renderEditorPanel()}\n\n <button\n type=\"button\"\n className=\"ml-auto flex size-12 items-center justify-center rounded-full border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface)/95 text-(--clarify-theme-tokens-colors-primary) shadow-xl shadow-zinc-900/15 backdrop-blur transition hover:scale-105 hover:bg-(--clarify-ui-accent-background) focus:outline-none focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n aria-label={isOpen ? 'Close Clarify theme editor' : 'Open Clarify theme editor'}\n aria-expanded={isOpen}\n onClick={() => setIsOpen((value) => !value)}\n >\n <Settings className=\"size-5 stroke-current stroke-2\" />\n </button>\n </div>\n )\n}\n","import { useEffect, useMemo } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { ThemeConfig } from '../types'\n\nimport { ThemeEditor } from './ThemeEditor'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, resolveThemeVariableTargets, themeToCssVariables } from './variables'\n\ntype ThemeRootProps = {\n children: ReactNode\n theme: ThemeConfig\n themeEditor?: boolean\n}\n\nexport function ThemeRoot(props: ThemeRootProps) {\n const { children, theme, themeEditor = false } = props\n const { resolvedTheme } = useTheme()\n const themeVariables = useMemo(() => themeToCssVariables(theme, resolvedTheme), [resolvedTheme, theme])\n\n useEffect(() => applyThemeCssVariables(themeVariables, resolveThemeVariableTargets(':root')), [themeVariables])\n\n return (\n <div\n className=\"clarify-app h-full min-h-screen bg-(--clarify-theme-tokens-colors-background) text-(--clarify-theme-tokens-colors-foreground)\"\n data-theme-preset={theme.preset}\n >\n {children}\n {themeEditor ? <ThemeEditor initialTheme={theme} /> : null}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { AppShell } from '../app/AppShell'\nimport { ConfigContext, OpenApiSpecsContext } from '../core/context'\nimport type { Config, NavigationTree, OpenApiRegistry, RouteItem } from '../core/types'\nimport type { RuntimeSlotRegistry } from '../slots'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\n\nexport type ClarifyShellProps = {\n config: Config\n routes: RouteItem[]\n navigation?: NavigationTree\n openApiSpecs: OpenApiRegistry\n runtimeSlots?: RuntimeSlotRegistry\n themeEditor?: boolean\n children?: ReactNode\n}\n\n/**\n * Shared provider chain used by both client-side render and server-side\n * renderToHTML. Wraps AppShell with ConfigContext → OpenApiSpecsContext →\n * ThemeProvider → ThemeRoot.\n *\n * The outer Router (BrowserRouter / StaticRouter) is left to the caller\n * so each entry point can supply the correct router variant.\n */\nexport function ClarifyShell(props: ClarifyShellProps) {\n const {\n config,\n routes,\n navigation,\n openApiSpecs,\n runtimeSlots,\n themeEditor = false,\n } = props\n return (\n <ConfigContext.Provider value={config}>\n <OpenApiSpecsContext.Provider value={openApiSpecs}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell\n config={config}\n routes={routes}\n navigation={navigation ?? { kind: 'flat', nodes: [] }}\n runtimeSlots={runtimeSlots}\n />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApiSpecsContext.Provider>\n </ConfigContext.Provider>\n )\n}\n"],"mappings":"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"}
|