@clarify-labs/renderer 0.6.7 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/output/{OpenApiOperation-CI_PeMSy.js → OpenApiOperation-CWSOhUVa.js} +84 -19
- package/output/OpenApiOperation-CWSOhUVa.js.map +1 -0
- package/output/{OpenApiOperation-CxQQyEHK.cjs → OpenApiOperation-ZXToVSFC.cjs} +89 -18
- package/output/OpenApiOperation-ZXToVSFC.cjs.map +1 -0
- package/output/{ThemeRoot-BhP5M3Hd.cjs → ThemeRoot-CEvwrGp5.cjs} +29 -186
- package/output/ThemeRoot-CEvwrGp5.cjs.map +1 -0
- package/output/{ThemeRoot-DErmHskn.js → ThemeRoot-C_ZdzSMu.js} +21 -178
- package/output/ThemeRoot-C_ZdzSMu.js.map +1 -0
- package/output/app/AppShell.d.ts +2 -0
- package/output/app/PageFooter.d.ts +5 -1
- package/output/client.cjs +5 -2
- package/output/client.d.ts +1 -0
- package/output/client.js +4 -3
- package/output/components/LocalizedLink.d.ts +6 -0
- package/output/components/WebFrame.d.ts +11 -0
- package/output/components/index.d.ts +4 -0
- package/output/context.d.ts +1 -1
- package/output/core/types.d.ts +7 -1
- package/output/index.cjs +5 -4
- package/output/index.d.ts +2 -2
- package/output/index.js +5 -5
- package/output/mdx/components.d.ts +1 -0
- package/output/mdx/primitives.d.ts +2 -2
- package/output/preview.cjs +61 -23
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +61 -23
- package/output/preview.js.map +1 -1
- package/output/{render-HeCAMIGm.js → render-CnUd0XwZ.js} +6 -5
- package/output/render-CnUd0XwZ.js.map +1 -0
- package/output/{render-C_NHO3rz.cjs → render-zHU25Nm9.cjs} +6 -5
- package/output/render-zHU25Nm9.cjs.map +1 -0
- package/output/renderer.css +220 -29
- package/output/server.cjs +5 -4
- package/output/server.cjs.map +1 -1
- package/output/server.js +5 -4
- package/output/server.js.map +1 -1
- package/output/shell/Search.d.ts +4 -0
- package/output/shell/search/Highlight.d.ts +11 -0
- package/output/shell/search/SearchDialog.d.ts +13 -0
- package/output/shell/search/SearchInput.d.ts +8 -0
- package/output/shell/search/SearchResult.d.ts +10 -0
- package/output/shell/search/items.d.ts +3 -0
- package/output/shell/search/pagefind.d.ts +5 -0
- package/output/shell/search/types.d.ts +37 -0
- package/output/shell/search/useSearchProps.d.ts +10 -0
- package/output/{shell-DvTfFx6M.js → shell-CumiARRe.js} +472 -61
- package/output/shell-CumiARRe.js.map +1 -0
- package/output/{shell-D4tS8Jts.cjs → shell-xxhV0p7k.cjs} +524 -59
- package/output/shell-xxhV0p7k.cjs.map +1 -0
- package/output/theme/variables.d.ts +2 -0
- package/package.json +1 -1
- package/output/OpenApiOperation-CI_PeMSy.js.map +0 -1
- package/output/OpenApiOperation-CxQQyEHK.cjs.map +0 -1
- package/output/ThemeRoot-BhP5M3Hd.cjs.map +0 -1
- package/output/ThemeRoot-DErmHskn.js.map +0 -1
- package/output/render-C_NHO3rz.cjs.map +0 -1
- package/output/render-HeCAMIGm.js.map +0 -1
- package/output/shell-D4tS8Jts.cjs.map +0 -1
- package/output/shell-DvTfFx6M.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-DakpK96I.cjs");
|
|
2
|
-
const require_shell = require("./shell-
|
|
2
|
+
const require_shell = require("./shell-xxhV0p7k.cjs");
|
|
3
3
|
let clsx = require("clsx");
|
|
4
4
|
clsx = require_chunk.__toESM(clsx, 1);
|
|
5
5
|
let react = require("react");
|
|
@@ -166,7 +166,7 @@ function BuiltWithClarify() {
|
|
|
166
166
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
167
167
|
src: clarify_default,
|
|
168
168
|
alt: "",
|
|
169
|
-
className: "clarify-built-with-logo h-3.5 w-
|
|
169
|
+
className: "clarify-built-with-logo h-3.5 w-auto flex-none object-contain"
|
|
170
170
|
}),
|
|
171
171
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
172
172
|
className: "clarify-built-with-brand font-semibold",
|
|
@@ -216,18 +216,23 @@ function SocialLink(arg0) {
|
|
|
216
216
|
children: name
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
|
-
function PageFooter() {
|
|
219
|
+
function PageFooter(props = {}) {
|
|
220
220
|
const config = require_shell.useClarifyConfig();
|
|
221
221
|
const locale = localeForPath$1(config, (0, react_router_dom.useLocation)().pathname);
|
|
222
222
|
const footer = config.footer;
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
-
const
|
|
223
|
+
const builtInFooter = footer && typeof footer === "object" ? footer : void 0;
|
|
224
|
+
const CustomFooter = props.component;
|
|
225
|
+
const links = builtInFooter?.links ?? [];
|
|
226
|
+
const socials = Object.entries(builtInFooter?.socials ?? {});
|
|
227
|
+
const copyright = builtInFooter?.copyright ? resolveLocalizedText(builtInFooter.copyright, locale, config.i18n?.defaultLocale) : void 0;
|
|
228
|
+
const hasBuiltInFooter = Boolean(copyright || links.length > 0 || socials.length > 0);
|
|
227
229
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
|
|
228
|
-
className:
|
|
229
|
-
children: [
|
|
230
|
-
className: "clarify-footer-
|
|
230
|
+
className: "clarify-page-footer mx-auto flex w-full max-w-(--clarify-theme-layout-max-width) flex-col gap-4 border-t border-(--clarify-theme-tokens-colors-border) px-4 py-8 sm:px-6 lg:mt-24 lg:px-5",
|
|
231
|
+
children: [CustomFooter ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
232
|
+
className: "clarify-footer-custom w-full",
|
|
233
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CustomFooter, {})
|
|
234
|
+
}) : hasBuiltInFooter ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
235
|
+
className: (0, clsx.default)("clarify-footer-content flex flex-col items-end gap-3 text-right", hasBuiltInFooter && "sm:items-start sm:text-left"),
|
|
231
236
|
children: [copyright ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
232
237
|
className: "clarify-footer-copyright m-0",
|
|
233
238
|
children: copyright
|
|
@@ -243,7 +248,7 @@ function PageFooter() {
|
|
|
243
248
|
}, name))]
|
|
244
249
|
}) : null]
|
|
245
250
|
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
246
|
-
className: "clarify-footer-brand flex justify-end",
|
|
251
|
+
className: "clarify-footer-brand flex justify-end self-end",
|
|
247
252
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BuiltWithClarify, {})
|
|
248
253
|
})]
|
|
249
254
|
});
|
|
@@ -518,7 +523,7 @@ function NotFoundRouteElement(props) {
|
|
|
518
523
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RouteComponent, {});
|
|
519
524
|
}
|
|
520
525
|
function AppShell(arg0) {
|
|
521
|
-
const { config, routes, navigation } = arg0;
|
|
526
|
+
const { config, routes, navigation, footerComponent } = arg0;
|
|
522
527
|
const location = (0, react_router_dom.useLocation)();
|
|
523
528
|
const pathname = require_shell.normalizeRoutePath(location.pathname);
|
|
524
529
|
const currentRoute = routeForPath(routes, pathname);
|
|
@@ -576,6 +581,7 @@ function AppShell(arg0) {
|
|
|
576
581
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
577
582
|
className: "clarify-layout pb-12 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)",
|
|
578
583
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
584
|
+
"data-pagefind-ignore": true,
|
|
579
585
|
className: (0, clsx.default)("clarify-sidebar hidden lg:sticky lg:z-30 lg:block lg:h-(--clarify-sidebar-height) lg:self-start lg:overflow-y-auto lg:bg-(--clarify-theme-tokens-colors-background) lg:px-5 lg:pb-8 xl:px-6", hasTabs ? "lg:top-28 lg:h-(--clarify-sidebar-height-with-tabs) lg:pt-6" : "lg:top-14 lg:pt-6"),
|
|
580
586
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_shell.Navigation, { navigation: currentNavigation.items })
|
|
581
587
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -588,6 +594,7 @@ function AppShell(arg0) {
|
|
|
588
594
|
}),
|
|
589
595
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
|
|
590
596
|
className: "clarify-main min-w-0 flex-auto",
|
|
597
|
+
"data-pagefind-body": true,
|
|
591
598
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageErrorBoundary, {
|
|
592
599
|
title: text("renderError.title"),
|
|
593
600
|
description: text("renderError.description"),
|
|
@@ -621,7 +628,7 @@ function AppShell(arg0) {
|
|
|
621
628
|
]
|
|
622
629
|
})]
|
|
623
630
|
}),
|
|
624
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageFooter, {})
|
|
631
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageFooter, { component: footerComponent })
|
|
625
632
|
]
|
|
626
633
|
})
|
|
627
634
|
});
|
|
@@ -1279,170 +1286,6 @@ function createRandomTheme() {
|
|
|
1279
1286
|
};
|
|
1280
1287
|
}
|
|
1281
1288
|
//#endregion
|
|
1282
|
-
//#region source/theme/variables.ts
|
|
1283
|
-
var clarifyThemePresets = {
|
|
1284
|
-
default: {
|
|
1285
|
-
preset: "default",
|
|
1286
|
-
tokens: {
|
|
1287
|
-
colors: {
|
|
1288
|
-
primary: "#047857",
|
|
1289
|
-
accent: "#0D9488",
|
|
1290
|
-
background: "#ffffff",
|
|
1291
|
-
foreground: "#111827",
|
|
1292
|
-
surface: "#ffffff",
|
|
1293
|
-
muted: "#64748b",
|
|
1294
|
-
border: "rgb(15 23 42 / 0.12)",
|
|
1295
|
-
codeBackground: "#f6fbf8"
|
|
1296
|
-
},
|
|
1297
|
-
radius: {
|
|
1298
|
-
sm: "6px",
|
|
1299
|
-
md: "10px",
|
|
1300
|
-
lg: "14px",
|
|
1301
|
-
xl: "18px"
|
|
1302
|
-
}
|
|
1303
|
-
},
|
|
1304
|
-
layout: { maxWidth: "82rem" },
|
|
1305
|
-
editor: false
|
|
1306
|
-
},
|
|
1307
|
-
base: {
|
|
1308
|
-
preset: "base",
|
|
1309
|
-
tokens: {
|
|
1310
|
-
colors: {
|
|
1311
|
-
primary: "#18181b",
|
|
1312
|
-
accent: "#52525b",
|
|
1313
|
-
background: "#ffffff",
|
|
1314
|
-
foreground: "#18181b",
|
|
1315
|
-
surface: "#ffffff",
|
|
1316
|
-
muted: "#71717a",
|
|
1317
|
-
border: "rgb(24 24 27 / 0.12)",
|
|
1318
|
-
codeBackground: "#f4f4f5"
|
|
1319
|
-
},
|
|
1320
|
-
radius: {
|
|
1321
|
-
sm: "6px",
|
|
1322
|
-
md: "8px",
|
|
1323
|
-
lg: "12px",
|
|
1324
|
-
xl: "16px"
|
|
1325
|
-
}
|
|
1326
|
-
},
|
|
1327
|
-
layout: { maxWidth: "80rem" },
|
|
1328
|
-
editor: false
|
|
1329
|
-
}
|
|
1330
|
-
};
|
|
1331
|
-
function cloneThemeColorValue(value) {
|
|
1332
|
-
return typeof value === "string" ? value : { ...value };
|
|
1333
|
-
}
|
|
1334
|
-
function cloneTheme(theme) {
|
|
1335
|
-
return {
|
|
1336
|
-
preset: theme.preset,
|
|
1337
|
-
tokens: {
|
|
1338
|
-
colors: {
|
|
1339
|
-
primary: cloneThemeColorValue(theme.tokens.colors.primary),
|
|
1340
|
-
accent: cloneThemeColorValue(theme.tokens.colors.accent),
|
|
1341
|
-
background: cloneThemeColorValue(theme.tokens.colors.background),
|
|
1342
|
-
foreground: cloneThemeColorValue(theme.tokens.colors.foreground),
|
|
1343
|
-
surface: cloneThemeColorValue(theme.tokens.colors.surface),
|
|
1344
|
-
muted: cloneThemeColorValue(theme.tokens.colors.muted),
|
|
1345
|
-
border: cloneThemeColorValue(theme.tokens.colors.border),
|
|
1346
|
-
codeBackground: cloneThemeColorValue(theme.tokens.colors.codeBackground)
|
|
1347
|
-
},
|
|
1348
|
-
radius: { ...theme.tokens.radius }
|
|
1349
|
-
},
|
|
1350
|
-
layout: { ...theme.layout },
|
|
1351
|
-
editor: theme.editor
|
|
1352
|
-
};
|
|
1353
|
-
}
|
|
1354
|
-
function isModeColorValue(value) {
|
|
1355
|
-
return typeof value === "object" && value !== null;
|
|
1356
|
-
}
|
|
1357
|
-
function resolveThemeColorValue(value, resolvedTheme = "light") {
|
|
1358
|
-
if (!isModeColorValue(value)) return value;
|
|
1359
|
-
return value[resolvedTheme] ?? value.light ?? value.dark ?? "";
|
|
1360
|
-
}
|
|
1361
|
-
function resolveThemeColors(colors, resolvedTheme = "light") {
|
|
1362
|
-
return {
|
|
1363
|
-
primary: resolveThemeColorValue(colors.primary, resolvedTheme),
|
|
1364
|
-
accent: resolveThemeColorValue(colors.accent, resolvedTheme),
|
|
1365
|
-
background: resolveThemeColorValue(colors.background, resolvedTheme),
|
|
1366
|
-
foreground: resolveThemeColorValue(colors.foreground, resolvedTheme),
|
|
1367
|
-
surface: resolveThemeColorValue(colors.surface, resolvedTheme),
|
|
1368
|
-
muted: resolveThemeColorValue(colors.muted, resolvedTheme),
|
|
1369
|
-
border: resolveThemeColorValue(colors.border, resolvedTheme),
|
|
1370
|
-
codeBackground: resolveThemeColorValue(colors.codeBackground, resolvedTheme)
|
|
1371
|
-
};
|
|
1372
|
-
}
|
|
1373
|
-
function matchesPresetTheme(theme) {
|
|
1374
|
-
const preset = clarifyThemePresets[theme.preset];
|
|
1375
|
-
return JSON.stringify({
|
|
1376
|
-
tokens: theme.tokens,
|
|
1377
|
-
layout: theme.layout
|
|
1378
|
-
}) === JSON.stringify({
|
|
1379
|
-
tokens: preset.tokens,
|
|
1380
|
-
layout: preset.layout
|
|
1381
|
-
});
|
|
1382
|
-
}
|
|
1383
|
-
function effectiveTheme(theme, resolvedTheme) {
|
|
1384
|
-
if (resolvedTheme !== "dark" || !matchesPresetTheme(theme)) return theme;
|
|
1385
|
-
return {
|
|
1386
|
-
...theme,
|
|
1387
|
-
tokens: {
|
|
1388
|
-
...theme.tokens,
|
|
1389
|
-
colors: {
|
|
1390
|
-
...theme.tokens.colors,
|
|
1391
|
-
background: "#09090b",
|
|
1392
|
-
foreground: "#ffffff",
|
|
1393
|
-
surface: "#18181b",
|
|
1394
|
-
muted: "#a1a1aa",
|
|
1395
|
-
border: "rgb(255 255 255 / 0.1)",
|
|
1396
|
-
codeBackground: "#18181b"
|
|
1397
|
-
}
|
|
1398
|
-
}
|
|
1399
|
-
};
|
|
1400
|
-
}
|
|
1401
|
-
function themeToCssVariables(theme, resolvedTheme) {
|
|
1402
|
-
const resolved = effectiveTheme(theme, resolvedTheme);
|
|
1403
|
-
const colors = resolveThemeColors(resolved.tokens.colors, resolvedTheme);
|
|
1404
|
-
const { radius } = resolved.tokens;
|
|
1405
|
-
return {
|
|
1406
|
-
"--clarify-theme-tokens-colors-primary": colors.primary,
|
|
1407
|
-
"--clarify-theme-tokens-colors-accent": colors.accent,
|
|
1408
|
-
"--clarify-theme-tokens-colors-background": colors.background,
|
|
1409
|
-
"--clarify-theme-tokens-colors-foreground": colors.foreground,
|
|
1410
|
-
"--clarify-theme-tokens-colors-surface": colors.surface,
|
|
1411
|
-
"--clarify-theme-tokens-colors-muted": colors.muted,
|
|
1412
|
-
"--clarify-theme-tokens-colors-border": colors.border,
|
|
1413
|
-
"--clarify-theme-tokens-colors-code-background": colors.codeBackground,
|
|
1414
|
-
"--clarify-theme-tokens-radius-sm": radius.sm,
|
|
1415
|
-
"--clarify-theme-tokens-radius-md": radius.md,
|
|
1416
|
-
"--clarify-theme-tokens-radius-lg": radius.lg,
|
|
1417
|
-
"--clarify-theme-tokens-radius-xl": radius.xl,
|
|
1418
|
-
"--clarify-theme-layout-max-width": resolved.layout.maxWidth
|
|
1419
|
-
};
|
|
1420
|
-
}
|
|
1421
|
-
function uniqueElements(elements) {
|
|
1422
|
-
return Array.from(new Set(elements));
|
|
1423
|
-
}
|
|
1424
|
-
function resolveThemeVariableTargets(target) {
|
|
1425
|
-
if (typeof document === "undefined") return [];
|
|
1426
|
-
if (target instanceof HTMLElement) return [target];
|
|
1427
|
-
if (typeof target === "string") return Array.from(document.querySelectorAll(target));
|
|
1428
|
-
return uniqueElements([document.documentElement, ...Array.from(document.querySelectorAll(".clarify-app"))]);
|
|
1429
|
-
}
|
|
1430
|
-
function applyThemeCssVariables(variables, targets) {
|
|
1431
|
-
const previousValues = /* @__PURE__ */ new Map();
|
|
1432
|
-
for (const element of targets) {
|
|
1433
|
-
const elementPreviousValues = /* @__PURE__ */ new Map();
|
|
1434
|
-
for (const [property, value] of Object.entries(variables)) {
|
|
1435
|
-
elementPreviousValues.set(property, element.style.getPropertyValue(property));
|
|
1436
|
-
element.style.setProperty(property, value);
|
|
1437
|
-
}
|
|
1438
|
-
previousValues.set(element, elementPreviousValues);
|
|
1439
|
-
}
|
|
1440
|
-
return () => {
|
|
1441
|
-
for (const [element, elementPreviousValues] of previousValues) for (const [property, previousValue] of elementPreviousValues) if (previousValue) element.style.setProperty(property, previousValue);
|
|
1442
|
-
else element.style.removeProperty(property);
|
|
1443
|
-
};
|
|
1444
|
-
}
|
|
1445
|
-
//#endregion
|
|
1446
1289
|
//#region source/theme/ThemeEditor.tsx
|
|
1447
1290
|
var colorTokenFields = [
|
|
1448
1291
|
{
|
|
@@ -1500,9 +1343,9 @@ var layoutFields = [{
|
|
|
1500
1343
|
key: "maxWidth",
|
|
1501
1344
|
label: "Max width"
|
|
1502
1345
|
}];
|
|
1503
|
-
var clarifyThemeEditorPresets = clarifyThemePresets;
|
|
1346
|
+
var clarifyThemeEditorPresets = require_shell.clarifyThemePresets;
|
|
1504
1347
|
function applyClarifyThemeVariables(theme, target) {
|
|
1505
|
-
return applyThemeCssVariables(themeToCssVariables(theme), resolveThemeVariableTargets(target));
|
|
1348
|
+
return require_shell.applyThemeCssVariables(require_shell.themeToCssVariables(theme), require_shell.resolveThemeVariableTargets(target));
|
|
1506
1349
|
}
|
|
1507
1350
|
function isHexColor(value) {
|
|
1508
1351
|
return /^#[0-9a-f]{6}$/i.test(value);
|
|
@@ -1555,10 +1398,10 @@ function ThemeEditor(props) {
|
|
|
1555
1398
|
const { initialTheme, onChange, target, defaultOpen = false, className } = props;
|
|
1556
1399
|
const { resolvedTheme } = require_shell.useTheme();
|
|
1557
1400
|
const [isOpen, setIsOpen] = (0, react.useState)(defaultOpen);
|
|
1558
|
-
const [theme, setTheme] = (0, react.useState)(() => cloneTheme(initialTheme ?? clarifyThemeEditorPresets.default));
|
|
1401
|
+
const [theme, setTheme] = (0, react.useState)(() => require_shell.cloneTheme(initialTheme ?? clarifyThemeEditorPresets.default));
|
|
1559
1402
|
const [copyState, setCopyState] = (0, react.useState)("idle");
|
|
1560
1403
|
const configSource = (0, react.useMemo)(() => themeToConfigSource(theme), [theme]);
|
|
1561
|
-
(0, react.useEffect)(() => applyThemeCssVariables(themeToCssVariables(theme, resolvedTheme), resolveThemeVariableTargets(target)), [
|
|
1404
|
+
(0, react.useEffect)(() => require_shell.applyThemeCssVariables(require_shell.themeToCssVariables(theme, resolvedTheme), require_shell.resolveThemeVariableTargets(target)), [
|
|
1562
1405
|
resolvedTheme,
|
|
1563
1406
|
target,
|
|
1564
1407
|
theme
|
|
@@ -1568,7 +1411,7 @@ function ThemeEditor(props) {
|
|
|
1568
1411
|
onChange?.(nextTheme);
|
|
1569
1412
|
}
|
|
1570
1413
|
function updatePreset(nextPreset) {
|
|
1571
|
-
commit(cloneTheme(clarifyThemeEditorPresets[nextPreset]));
|
|
1414
|
+
commit(require_shell.cloneTheme(clarifyThemeEditorPresets[nextPreset]));
|
|
1572
1415
|
}
|
|
1573
1416
|
function updateColorToken(key, value) {
|
|
1574
1417
|
commit({
|
|
@@ -1670,7 +1513,7 @@ function ThemeEditor(props) {
|
|
|
1670
1513
|
children: colorTokenFields.map((field) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextField, {
|
|
1671
1514
|
id: `clarify-theme-editor-color-${field.key}`,
|
|
1672
1515
|
label: field.label,
|
|
1673
|
-
value: resolveThemeColorValue(theme.tokens.colors[field.key], resolvedTheme),
|
|
1516
|
+
value: require_shell.resolveThemeColorValue(theme.tokens.colors[field.key], resolvedTheme),
|
|
1674
1517
|
withColorInput: true,
|
|
1675
1518
|
onChange: (value) => updateColorToken(field.key, value)
|
|
1676
1519
|
}, field.key))
|
|
@@ -1744,8 +1587,8 @@ function ThemeEditor(props) {
|
|
|
1744
1587
|
function ThemeRoot(props) {
|
|
1745
1588
|
const { children, theme, themeEditor = false } = props;
|
|
1746
1589
|
const { resolvedTheme } = require_shell.useTheme();
|
|
1747
|
-
const themeVariables = (0, react.useMemo)(() => themeToCssVariables(theme, resolvedTheme), [resolvedTheme, theme]);
|
|
1748
|
-
(0, react.useEffect)(() => applyThemeCssVariables(themeVariables, resolveThemeVariableTargets(":root")), [themeVariables]);
|
|
1590
|
+
const themeVariables = (0, react.useMemo)(() => require_shell.themeToCssVariables(theme, resolvedTheme), [resolvedTheme, theme]);
|
|
1591
|
+
(0, react.useEffect)(() => require_shell.applyThemeCssVariables(themeVariables, require_shell.resolveThemeVariableTargets(":root")), [themeVariables]);
|
|
1749
1592
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1750
1593
|
className: "clarify-app h-full min-h-screen bg-(--clarify-theme-tokens-colors-background) text-(--clarify-theme-tokens-colors-foreground)",
|
|
1751
1594
|
"data-theme-preset": theme.preset,
|
|
@@ -1797,4 +1640,4 @@ Object.defineProperty(exports, "clarifyThemeEditorPresets", {
|
|
|
1797
1640
|
}
|
|
1798
1641
|
});
|
|
1799
1642
|
|
|
1800
|
-
//# sourceMappingURL=ThemeRoot-
|
|
1643
|
+
//# sourceMappingURL=ThemeRoot-CEvwrGp5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeRoot-CEvwrGp5.cjs","names":[],"sources":["../source/app/ErrorBoundary.tsx","../source/assets/clarify.svg?url","../source/app/BuiltWithClarify.tsx","../source/app/PageFooter.tsx","../source/app/PageNavigation.tsx","../source/app/PageSkeleton.tsx","../source/app/AppShell.tsx","../source/theme/randomTheme.ts","../source/theme/ThemeEditor.tsx","../source/theme/ThemeRoot.tsx"],"sourcesContent":["import { Component, useState } from 'react'\nimport type { ErrorInfo, ReactNode } from 'react'\n\nimport { copyTextToClipboard } from '../utils/clipboard'\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 timestampLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n}\n\ntype PageErrorBoundaryState = {\n error?: Error;\n errorInfo?: ErrorInfo;\n occurredAt?: string;\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 timestampLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n error: Error;\n errorInfo?: ErrorInfo;\n occurredAt?: string;\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 timestampLabel,\n copyLabel,\n copiedLabel,\n path,\n error,\n errorInfo,\n occurredAt,\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 const capturedAt = occurredAt ?? new Date().toISOString()\n\n async function copyStack() {\n if (!(await copyTextToClipboard(stackText))) return\n setCopiedStack(true)\n window.setTimeout(() => setCopiedStack(false), 1600)\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=\"clarify-render-error-title\" 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)\">Render error</p>\n <h1 id=\"clarify-render-error-title\" 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 <button\n type=\"button\"\n className=\"inline-flex shrink-0 items-center rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-4 py-2 text-sm/5 font-semibold text-white shadow-xs transition hover:opacity-90\"\n onClick={() => window.location.reload()}\n >\n {reloadLabel}\n </button>\n </div>\n\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 {[\n [pathLabel, path],\n [typeLabel, error.name],\n [timestampLabel, capturedAt],\n ].map(([label, value]) => (\n <div key={label} 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\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 <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 </div>\n <div className=\"px-4 py-4 text-xs/5 text-(--clarify-ui-text)\">\n <p className=\"font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{messageLabel}</p>\n <p className=\"mt-2 break-words 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 break-words 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 break-words font-mono\">\n {componentStack}\n </pre>\n </>\n ) : null}\n </div>\n </div>\n </div>\n </section>\n )\n}\n\nexport class PageErrorBoundary extends Component<PageErrorBoundaryProps, PageErrorBoundaryState> {\n state: PageErrorBoundaryState = {}\n\n static getDerivedStateFromError(error: Error): PageErrorBoundaryState {\n return { error, occurredAt: new Date().toISOString() }\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, occurredAt } = 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 timestampLabel={this.props.timestampLabel}\n copyLabel={this.props.copyLabel}\n copiedLabel={this.props.copiedLabel}\n path={this.props.path}\n error={error}\n errorInfo={errorInfo}\n occurredAt={occurredAt}\n />\n )\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\nexport function BuiltWithClarify() {\n const t = useBuiltInText()\n\n return (\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 )\n}\n","import clsx from 'clsx'\nimport type { ComponentType } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig } from '../core/context'\nimport type { ClarifyConfig, ClarifyLocalizedText, ClarifyNavbarLink } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\n\nimport { BuiltWithClarify } from './BuiltWithClarify'\n\nfunction resolveLocalizedText(text: ClarifyLocalizedText, locale?: string, fallbackLocale?: string): string {\n if (typeof text === 'string') return text\n return (locale ? text[locale] : undefined) ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0] ?? ''\n}\n\nfunction localeForPath(config: ClarifyConfig, pathname: string): string | undefined {\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\ntype FooterLinkProps = { link: ClarifyNavbarLink; locale?: string; config: ClarifyConfig }\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.i18n?.defaultLocale)\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 type PageFooterProps = {\n component?: ComponentType\n}\n\nexport function PageFooter(props: PageFooterProps = {}) {\n const config = useClarifyConfig()\n const location = useLocation()\n const locale = localeForPath(config, location.pathname)\n const footer = config.footer\n const builtInFooter = footer && typeof footer === 'object' ? footer : undefined\n const CustomFooter = props.component\n const links = builtInFooter?.links ?? []\n const socials = Object.entries(builtInFooter?.socials ?? {})\n const copyright = builtInFooter?.copyright\n ? resolveLocalizedText(builtInFooter.copyright, locale, config.i18n?.defaultLocale)\n : undefined\n const hasBuiltInFooter = Boolean(copyright || links.length > 0 || socials.length > 0)\n\n return (\n <footer className=\"clarify-page-footer mx-auto flex w-full max-w-(--clarify-theme-layout-max-width) flex-col gap-4 border-t border-(--clarify-theme-tokens-colors-border) px-4 py-8 sm:px-6 lg:mt-24 lg:px-5\">\n {CustomFooter ? (\n <div className=\"clarify-footer-custom w-full\">\n <CustomFooter />\n </div>\n ) : hasBuiltInFooter ? (\n <div\n className={clsx(\n 'clarify-footer-content flex flex-col items-end gap-3 text-right',\n hasBuiltInFooter && 'sm:items-start sm: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-end gap-x-4 gap-y-2 sm:justify-start\">\n {links.map((link) => (\n <FooterLink key={`${link.href}-${resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)}`} 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 ) : null}\n <div className=\"clarify-footer-brand flex justify-end self-end\">\n <BuiltWithClarify />\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\n return (\n <nav className=\"clarify-page-navigation mt-6 grid gap-3 @3xl:grid-cols-2\" aria-label={t('navigation.previousNext')}>\n <PageNavigationLink direction=\"previous\" route={previous} />\n <PageNavigationLink direction=\"next\" route={next} />\n </nav>\n )\n}\n\ntype PageNavigationLinkProps = { direction: 'previous' | 'next'; route?: NavigationNode }\n\nfunction PageNavigationLink(arg0: PageNavigationLinkProps) {\n const { direction, route } = arg0\n const t = useBuiltInText()\n if (!route) return <div className=\"hidden @3xl:block\" />\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 items-center gap-3 rounded-lg border border-(--clarify-theme-tokens-colors-border) px-4 py-3 no-underline transition hover:border-(--clarify-theme-tokens-colors-primary) hover:bg-(--clarify-ui-hover-background)',\n isNext && '@3xl:justify-end @3xl:text-right',\n )}\n >\n {!isNext ? <ChevronLeft className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-muted) transition group-hover:text-(--clarify-theme-tokens-colors-primary)\" /> : null}\n <span className=\"min-w-0 flex-1\">\n <span className=\"clarify-page-navigation-label block font-medium uppercase tracking-wide text-(--clarify-theme-tokens-colors-muted)\">{isNext ? t('navigation.next') : t('navigation.previous')}</span>\n <span className=\"clarify-page-navigation-title mt-0.5 block truncate font-semibold text-(--clarify-theme-tokens-colors-foreground)\">{route.title}</span>\n </span>\n {isNext ? <ChevronRight className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-muted) transition group-hover:text-(--clarify-theme-tokens-colors-primary)\" /> : null}\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 clsx from 'clsx'\nimport { Suspense, lazy, useEffect, useMemo } from 'react'\nimport type { ComponentType } from 'react'\nimport { Link, Routes, Route, useLocation } from 'react-router-dom'\n\nimport { ClarifyLocaleContext } from '../context'\nimport { useBuiltInText } from '../core/i18n'\nimport { ContentActions, Header, Navigation } from '../shell'\nimport type { RouteItem, ClarifyConfig, NavigationNode, NavigationTab, NavigationTree, TabbedNavigation } from '../types'\nimport { safeDecodeURIComponent } from '../utils/hash'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { PageErrorBoundary } from './ErrorBoundary'\nimport { PageFooter } from './PageFooter'\nimport { PageNavigation } from './PageNavigation'\nimport { PageSkeleton } from './PageSkeleton'\nimport { SectionProvider, type Section } from './SectionProvider'\n\nexport type AppShellProps = {\n config: ClarifyConfig\n routes: RouteItem[]\n navigation: NavigationTree\n footerComponent?: ComponentType\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 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\nfunction scrollToHash(hash: string) {\n if (!hash) return\n\n const targetId = safeDecodeURIComponent(hash.slice(1))\n window.requestAnimationFrame(() => {\n document.getElementById(targetId)?.scrollIntoView()\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n })\n}\n\nfunction localeForPath(config: ClarifyConfig, pathname: string, route?: RouteItem): string | undefined {\n if (route?.locale) return route.locale\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\nfunction isTabbedNavigation(navigation: NavigationTree): navigation is TabbedNavigation {\n return !Array.isArray(navigation) && 'tabs' in navigation\n}\n\nfunction hasPath(nodes: NavigationNode[], pathname: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname) || hasPath(node.children ?? [], pathname))\n}\n\ntype NavigationState = {\n items: NavigationNode[]\n tabs?: NavigationTab[]\n}\n\nfunction navigationFromTabs(navigation: TabbedNavigation, pathname: string): NavigationState {\n const currentTab = navigation.tabs.find((tab) => isSameRoutePath(tab.path, pathname) || hasPath(tab.children, pathname))\n return {\n items: currentTab?.children ?? navigation.tabs[0]?.children ?? [],\n tabs: navigation.tabs,\n }\n}\n\nfunction navigationForLocale(navigation: NavigationTree, locale: string | undefined, pathname: string): NavigationState {\n if (Array.isArray(navigation)) return { items: navigation }\n if (isTabbedNavigation(navigation)) return navigationFromTabs(navigation, pathname)\n if (!locale) return { items: [] }\n\n const localizedNavigation = navigation[locale]\n if (!localizedNavigation) return { items: [] }\n return Array.isArray(localizedNavigation) ? { items: localizedNavigation } : navigationFromTabs(localizedNavigation, pathname)\n}\n\nfunction pageTitle(config: ClarifyConfig, 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: ClarifyConfig, route?: RouteItem) {\n document.title = pageTitle(config, route)\n setNamedMeta('description', route?.description ?? config.description)\n setNamedMeta('keywords', route?.keywords?.join(', '))\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, footerComponent } = arg0\n const location = useLocation()\n const pathname = normalizeRoutePath(location.pathname)\n const currentRoute = routeForPath(routes, pathname)\n const currentLocale = localeForPath(config, pathname, currentRoute)\n const currentLocaleConfig = config.i18n?.locales.find((locale) => locale.code === currentLocale)\n const notFoundRoute = currentRoute ? undefined : notFoundRouteForPath(routes, pathname, currentLocale)\n const text = useBuiltInText(currentLocale)\n const currentNavigation = navigationForLocale(navigation, currentLocale, pathname)\n const sections = sectionsForRoute(currentRoute)\n const hasTabs = Boolean(currentNavigation.tabs?.length)\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 useEffect(() => {\n if (location.hash) {\n scrollToHash(location.hash)\n return\n }\n\n window.scrollTo({ top: 0, left: 0 })\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n }, [location.hash, location.pathname])\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, currentRoute ?? notFoundRoute)\n }, [config, currentRoute, notFoundRoute])\n\n return (\n <ClarifyLocaleContext.Provider value={currentLocale}>\n <SectionProvider sections={sections}>\n <Header\n config={config}\n navigation={currentNavigation.items}\n tabs={currentNavigation.tabs}\n routes={routes}\n currentLocale={currentLocale}\n currentRoute={currentRoute}\n />\n <div className=\"clarify-layout pb-12 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 <aside\n data-pagefind-ignore\n className={clsx(\n 'clarify-sidebar hidden lg:sticky lg:z-30 lg:block lg:h-(--clarify-sidebar-height) lg:self-start lg:overflow-y-auto lg:bg-(--clarify-theme-tokens-colors-background) lg:px-5 lg:pb-8 xl:px-6',\n hasTabs ? 'lg:top-28 lg:h-(--clarify-sidebar-height-with-tabs) lg:pt-6' : 'lg:top-14 lg:pt-6',\n )}\n >\n <Navigation navigation={currentNavigation.items} />\n </aside>\n <div className={clsx('clarify-content @container relative flex min-h-screen min-w-0 flex-col px-4 sm:px-6 lg:px-8 xl:px-10', hasTabs ? 'pt-14 lg:pt-28' : 'pt-14')}>\n <ContentActions hasTabs={hasTabs} route={currentRoute} routePrefix={config.routePrefix} />\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 timestampLabel={text('renderError.timestamp')}\n copyLabel={text('actions.copy')}\n copiedLabel={text('actions.copied')}\n path={pathname}\n >\n <Suspense fallback={<PageSkeleton />}>\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 </Suspense>\n </PageErrorBoundary>\n </main>\n <PageNavigation navigation={currentNavigation.items} currentRoute={currentRoute} />\n </div>\n </div>\n <PageFooter component={footerComponent} />\n </SectionProvider>\n </ClarifyLocaleContext.Provider>\n )\n}\n","import type { ClarifyThemeConfig, ClarifyThemeRadiusTokensConfig } from '../types'\n\ntype RandomThemePalette = {\n primary: string;\n accent: string;\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<ClarifyThemeRadiusTokensConfig>\n\nconst randomLayoutWidths = ['72rem', '76rem', '78rem', '80rem', '82rem', '86rem', '90rem', '96rem', '104rem', '112rem', '120rem', '128rem', '144rem'] as const\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\nexport function createRandomTheme(): ClarifyThemeConfig {\n const palette = randomItem(randomThemePalettes)\n const radius = randomItem(randomRadiusSets)\n const maxWidth = randomItem(randomLayoutWidths)\n\n return {\n preset: 'default',\n tokens: {\n colors: {\n primary: modeColor(palette.primary, palette.accent),\n accent: modeColor(palette.accent, palette.primary),\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 radius: { ...radius },\n },\n layout: { maxWidth },\n editor: false,\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 ClarifyThemeColorTokensConfig,\n ClarifyThemeConfig,\n ClarifyThemeLayoutConfig,\n ClarifyThemePreset,\n ClarifyThemeRadiusTokensConfig,\n} from '../types'\n\nimport { createRandomTheme } from './randomTheme'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, clarifyThemePresets, 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 ClarifyThemeColorTokensConfig; 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 ClarifyThemeRadiusTokensConfig; label: string }>\n\nconst layoutFields = [\n { key: 'maxWidth', label: 'Max width' },\n] as const satisfies ReadonlyArray<{ key: keyof ClarifyThemeLayoutConfig; label: string }>\n\nexport type ThemeEditorProps = {\n /** The resolved theme to use as the editor's initial value. */\n initialTheme?: ClarifyThemeConfig;\n /** Called every time a token changes. */\n onChange?: (theme: ClarifyThemeConfig) => 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 clarifyThemeEditorPresets = clarifyThemePresets\n\nexport function applyClarifyThemeVariables(theme: ClarifyThemeConfig, 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: ClarifyThemeColorTokensConfig[keyof ClarifyThemeColorTokensConfig], resolvedTheme: 'light' | 'dark', nextValue: string): ClarifyThemeColorTokensConfig[keyof ClarifyThemeColorTokensConfig] {\n if (typeof value === 'string') return nextValue\n\n return {\n ...value,\n [resolvedTheme]: 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\nfunction themeToConfigSource(theme: ClarifyThemeConfig): 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\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 [theme, setTheme] = useState<ClarifyThemeConfig>(() => cloneTheme(initialTheme ?? clarifyThemeEditorPresets.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: ClarifyThemeConfig) {\n setTheme(nextTheme)\n onChange?.(nextTheme)\n }\n\n function updatePreset(nextPreset: ClarifyThemePreset) {\n commit(cloneTheme(clarifyThemeEditorPresets[nextPreset]))\n }\n\n function updateColorToken(key: keyof ClarifyThemeColorTokensConfig, value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n colors: {\n ...theme.tokens.colors,\n [key]: updateThemeModeColorValue(theme.tokens.colors[key], resolvedTheme, value),\n },\n },\n })\n }\n\n function updateRadiusToken(key: keyof ClarifyThemeRadiusTokensConfig, 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 ClarifyThemeLayoutConfig, 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 window.setTimeout(() => setCopyState('idle'), 1400)\n } catch {\n setCopyState('failed')\n window.setTimeout(() => setCopyState('idle'), 1400)\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 {isOpen ? (\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 <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 <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 ClarifyThemePreset)}\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 <TextField\n key={field.key}\n id={`clarify-theme-editor-color-${field.key}`}\n label={field.label}\n value={resolveThemeColorValue(theme.tokens.colors[field.key], resolvedTheme)}\n withColorInput\n onChange={(value) => updateColorToken(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)\">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 <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 </section>\n ) : null}\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 { ClarifyThemeConfig } 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: ClarifyThemeConfig\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 style={themeVariables}\n >\n {children}\n {themeEditor ? <ThemeEditor initialTheme={theme} /> : null}\n </div>\n )\n}\n"],"mappings":"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"}
|