deepspace 0.10.2 → 0.11.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/CHANGELOG.md +14 -0
- package/dist/{chunk-T7V4GUIN.js → chunk-ZJ43EK3N.js} +220 -107
- package/dist/chunk-ZJ43EK3N.js.map +1 -0
- package/dist/cli.js +335 -468
- package/dist/cli.js.map +1 -1
- package/dist/documentation-client-core.js +1 -1
- package/dist/documentation-default-renderer.cjs +34 -34
- package/dist/documentation-react.js +1 -1
- package/dist/documentation-runtime.js +10 -10
- package/dist/documentation-server-core.js +1 -1
- package/dist/documentation.d.ts +2 -1
- package/dist/documentation.js +326 -157
- package/dist/documentation.js.map +1 -1
- package/dist/fonts/geist-mono-OFL.txt +93 -0
- package/dist/fonts/geist-mono-variable.woff2 +0 -0
- package/dist/fonts/inter-OFL.txt +92 -0
- package/dist/fonts/inter-variable.woff2 +0 -0
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-T7V4GUIN.js.map +0 -1
package/dist/documentation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/documentation/build.ts
|
|
2
2
|
import { buildSync as buildSync3 } from "esbuild";
|
|
3
|
-
import { readFileSync as
|
|
3
|
+
import { readFileSync as readFileSync7 } from "fs";
|
|
4
4
|
import { resolve as resolve7 } from "path";
|
|
5
5
|
|
|
6
6
|
// src/documentation/markdown.ts
|
|
@@ -630,7 +630,7 @@ function createSearchEntries(pages) {
|
|
|
630
630
|
route: page.route,
|
|
631
631
|
title: page.title,
|
|
632
632
|
...page.description ? { description: page.description } : {},
|
|
633
|
-
headings: page.headings.filter((heading) => heading.depth > 1)
|
|
633
|
+
headings: page.headings.filter((heading) => heading.depth > 1),
|
|
634
634
|
text: page.text.slice(0, 12e3)
|
|
635
635
|
}));
|
|
636
636
|
}
|
|
@@ -2492,6 +2492,7 @@ function resolveCompiledImports(code, sourcePath, appDir) {
|
|
|
2492
2492
|
const tree = parseJavaScript(code, { ecmaVersion: "latest", sourceType: "module" });
|
|
2493
2493
|
const replacements = [];
|
|
2494
2494
|
const appRequire = createRequire(join2(appDir, "package.json"));
|
|
2495
|
+
const resolveAlias = tsconfigAliasResolver(appDir);
|
|
2495
2496
|
visitJavaScript(tree, (node) => {
|
|
2496
2497
|
const source = importSource(node);
|
|
2497
2498
|
if (!source || typeof source.value !== "string" || source.start === void 0 || source.end === void 0) {
|
|
@@ -2499,7 +2500,7 @@ function resolveCompiledImports(code, sourcePath, appDir) {
|
|
|
2499
2500
|
}
|
|
2500
2501
|
const specifier = source.value;
|
|
2501
2502
|
if (/^(?:data:|https?:|node:)/.test(specifier)) return;
|
|
2502
|
-
const resolved = specifier.startsWith(".") ? resolve5(dirname2(sourcePath), specifier) : specifier === "deepspace/documentation/react" || specifier === "react" || specifier.startsWith("react/") ? specifier : appRequire.resolve(specifier);
|
|
2503
|
+
const resolved = specifier.startsWith(".") ? resolve5(dirname2(sourcePath), specifier) : specifier === "deepspace/documentation/react" || specifier === "react" || specifier.startsWith("react/") ? specifier : resolveAlias(specifier) ?? appRequire.resolve(specifier);
|
|
2503
2504
|
replacements.push({ start: source.start, end: source.end, value: quote(resolved.split(sep3).join("/")) });
|
|
2504
2505
|
});
|
|
2505
2506
|
return replacements.sort((left, right) => right.start - left.start).reduce(
|
|
@@ -2507,6 +2508,34 @@ function resolveCompiledImports(code, sourcePath, appDir) {
|
|
|
2507
2508
|
code
|
|
2508
2509
|
);
|
|
2509
2510
|
}
|
|
2511
|
+
function tsconfigAliasResolver(appDir) {
|
|
2512
|
+
let base = appDir;
|
|
2513
|
+
let aliases = [];
|
|
2514
|
+
try {
|
|
2515
|
+
const raw = readFileSync4(join2(appDir, "tsconfig.json"), "utf8");
|
|
2516
|
+
const parsed = JSON.parse(
|
|
2517
|
+
raw.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^\s*\/\/.*$/gm, "")
|
|
2518
|
+
);
|
|
2519
|
+
const options = parsed.compilerOptions;
|
|
2520
|
+
if (options?.paths) {
|
|
2521
|
+
base = resolve5(appDir, options.baseUrl ?? ".");
|
|
2522
|
+
aliases = Object.entries(options.paths).filter(([, targets]) => typeof targets?.[0] === "string").map(([pattern, targets]) => ({
|
|
2523
|
+
exact: !pattern.includes("*"),
|
|
2524
|
+
prefix: pattern.replace(/\*$/, ""),
|
|
2525
|
+
target: targets[0].replace(/\*$/, "")
|
|
2526
|
+
})).sort((left, right) => right.prefix.length - left.prefix.length);
|
|
2527
|
+
}
|
|
2528
|
+
} catch {
|
|
2529
|
+
}
|
|
2530
|
+
return (specifier) => {
|
|
2531
|
+
for (const alias of aliases) {
|
|
2532
|
+
if (alias.exact ? specifier === alias.prefix : specifier.startsWith(alias.prefix)) {
|
|
2533
|
+
return resolve5(base, `${alias.target}${alias.exact ? "" : specifier.slice(alias.prefix.length)}`);
|
|
2534
|
+
}
|
|
2535
|
+
}
|
|
2536
|
+
return void 0;
|
|
2537
|
+
};
|
|
2538
|
+
}
|
|
2510
2539
|
function importSource(node) {
|
|
2511
2540
|
if (node.type === "ImportDeclaration" || node.type === "ExportAllDeclaration" || node.type === "ExportNamedDeclaration" || node.type === "ImportExpression") return node.source;
|
|
2512
2541
|
return void 0;
|
|
@@ -2567,12 +2596,81 @@ function quote(value) {
|
|
|
2567
2596
|
return JSON.stringify(value);
|
|
2568
2597
|
}
|
|
2569
2598
|
|
|
2599
|
+
// src/documentation/fonts.ts
|
|
2600
|
+
import { existsSync as existsSync6, readFileSync as readFileSync5 } from "fs";
|
|
2601
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
2602
|
+
var DOCUMENTATION_BUNDLED_BODY_FONT = {
|
|
2603
|
+
family: "Inter",
|
|
2604
|
+
fileName: "inter-variable.woff2",
|
|
2605
|
+
weight: "100 900"
|
|
2606
|
+
};
|
|
2607
|
+
var DOCUMENTATION_BUNDLED_MONO_FONT = {
|
|
2608
|
+
family: "Geist Mono",
|
|
2609
|
+
fileName: "geist-mono-variable.woff2",
|
|
2610
|
+
weight: "100 900"
|
|
2611
|
+
};
|
|
2612
|
+
function resolveDocumentationFonts(theme, basePath) {
|
|
2613
|
+
const resolved = [];
|
|
2614
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2615
|
+
const add = (font) => {
|
|
2616
|
+
const key = `${font.family}:${font.source}:${font.weight}`;
|
|
2617
|
+
if (seen.has(key)) return;
|
|
2618
|
+
seen.add(key);
|
|
2619
|
+
resolved.push(font);
|
|
2620
|
+
};
|
|
2621
|
+
const addAuthored = (font, fallbackFamily) => {
|
|
2622
|
+
if (!font?.source || !validFontSource(font.source)) return;
|
|
2623
|
+
add({
|
|
2624
|
+
family: safeFontFamily(font.family, fallbackFamily),
|
|
2625
|
+
source: font.source,
|
|
2626
|
+
weight: safeFontWeight(font.weight),
|
|
2627
|
+
format: safeFontFormat(font.format)
|
|
2628
|
+
});
|
|
2629
|
+
};
|
|
2630
|
+
const addBundled = (bundled) => add({
|
|
2631
|
+
family: bundled.family,
|
|
2632
|
+
source: bundledFontHref(basePath, bundled),
|
|
2633
|
+
weight: bundled.weight,
|
|
2634
|
+
format: "woff2",
|
|
2635
|
+
bundled
|
|
2636
|
+
});
|
|
2637
|
+
if (theme.bodyFont) addAuthored(theme.bodyFont, DOCUMENTATION_BUNDLED_BODY_FONT.family);
|
|
2638
|
+
else addBundled(DOCUMENTATION_BUNDLED_BODY_FONT);
|
|
2639
|
+
addAuthored(theme.headingFont, DOCUMENTATION_BUNDLED_BODY_FONT.family);
|
|
2640
|
+
if (theme.monoFont) addAuthored(theme.monoFont, DOCUMENTATION_BUNDLED_MONO_FONT.family);
|
|
2641
|
+
else addBundled(DOCUMENTATION_BUNDLED_MONO_FONT);
|
|
2642
|
+
return resolved;
|
|
2643
|
+
}
|
|
2644
|
+
function bundledFontHref(basePath, font) {
|
|
2645
|
+
return documentationPublicPath(basePath, `/assets/fonts/${font.fileName}`);
|
|
2646
|
+
}
|
|
2647
|
+
function readBundledFont(font) {
|
|
2648
|
+
const path = fileURLToPath2(new URL(`./fonts/${font.fileName}`, import.meta.url));
|
|
2649
|
+
if (!existsSync6(path)) {
|
|
2650
|
+
throw new Error(`${font.fileName} is missing from this deepspace installation; reinstall the package`);
|
|
2651
|
+
}
|
|
2652
|
+
return readFileSync5(path);
|
|
2653
|
+
}
|
|
2654
|
+
function safeFontFamily(value, fallback = DOCUMENTATION_BUNDLED_BODY_FONT.family) {
|
|
2655
|
+
return value && /^[a-z0-9 ,.'-]{1,80}$/i.test(value) ? value : fallback;
|
|
2656
|
+
}
|
|
2657
|
+
function validFontSource(value) {
|
|
2658
|
+
return /^(?:\/[a-z0-9_./%-]+|https:\/\/[^\s"'()<>]+)$/i.test(value);
|
|
2659
|
+
}
|
|
2660
|
+
function safeFontWeight(value) {
|
|
2661
|
+
if (typeof value === "number") return String(value);
|
|
2662
|
+
return /^(?:normal|bold|[1-9]00|[1-9]00\s+[1-9]00)$/i.test(String(value ?? "")) ? String(value) : "normal";
|
|
2663
|
+
}
|
|
2664
|
+
function safeFontFormat(value) {
|
|
2665
|
+
return value && /^[a-z0-9-]{2,20}$/i.test(value) ? value : "";
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2570
2668
|
// src/documentation/output.ts
|
|
2571
2669
|
import { createHash as createHash2 } from "crypto";
|
|
2572
2670
|
import {
|
|
2573
|
-
existsSync as
|
|
2671
|
+
existsSync as existsSync7,
|
|
2574
2672
|
mkdirSync,
|
|
2575
|
-
readFileSync as
|
|
2673
|
+
readFileSync as readFileSync6,
|
|
2576
2674
|
readdirSync as readdirSync2,
|
|
2577
2675
|
rmSync as rmSync2,
|
|
2578
2676
|
writeFileSync as writeFileSync2
|
|
@@ -2596,7 +2694,7 @@ var DocumentationOutput = class {
|
|
|
2596
2694
|
constructor(outputDir, appDir, sourceDir) {
|
|
2597
2695
|
this.outputDir = outputDir;
|
|
2598
2696
|
assertSafeOutput(appDir, sourceDir, outputDir);
|
|
2599
|
-
if (
|
|
2697
|
+
if (existsSync7(outputDir)) rmSync2(outputDir, { recursive: true, force: true });
|
|
2600
2698
|
mkdirSync(outputDir, { recursive: true });
|
|
2601
2699
|
}
|
|
2602
2700
|
files = /* @__PURE__ */ new Set();
|
|
@@ -2629,7 +2727,7 @@ var DocumentationOutput = class {
|
|
|
2629
2727
|
);
|
|
2630
2728
|
}
|
|
2631
2729
|
const mediaPath = `media/${normalizeRelativePath(relative5(sourceDir, sourcePath))}`;
|
|
2632
|
-
const content = extension === ".svg" ? sanitizeSvg(
|
|
2730
|
+
const content = extension === ".svg" ? sanitizeSvg(readFileSync6(sourcePath, "utf8"), sourcePath) : readFileSync6(sourcePath);
|
|
2633
2731
|
this.write(mediaPath, content);
|
|
2634
2732
|
}
|
|
2635
2733
|
};
|
|
@@ -2639,7 +2737,7 @@ var DocumentationOutput = class {
|
|
|
2639
2737
|
const hash = createHash2("sha256");
|
|
2640
2738
|
for (const file of [...this.files].sort()) {
|
|
2641
2739
|
hash.update(file);
|
|
2642
|
-
hash.update(
|
|
2740
|
+
hash.update(readFileSync6(join3(this.outputDir, file)));
|
|
2643
2741
|
}
|
|
2644
2742
|
return hash.digest("hex");
|
|
2645
2743
|
}
|
|
@@ -2978,6 +3076,9 @@ var DOCUMENTATION_BASE_CSS = String.raw`
|
|
|
2978
3076
|
--documentation-shadow-lg: 0 24px 80px rgba(15, 18, 28, .18), 0 6px 24px rgba(15, 18, 28, .08);
|
|
2979
3077
|
--documentation-header-height: 66px;
|
|
2980
3078
|
--documentation-sidebar-width: 292px;
|
|
3079
|
+
--documentation-assistant-width: 420px;
|
|
3080
|
+
/* Darkened against the light page; the dark theme lightens it instead. */
|
|
3081
|
+
--documentation-focus-ring: color-mix(in srgb, var(--documentation-accent) 82%, var(--documentation-text));
|
|
2981
3082
|
color-scheme: light;
|
|
2982
3083
|
font-family: var(--documentation-font-body);
|
|
2983
3084
|
}
|
|
@@ -3000,19 +3101,20 @@ var DOCUMENTATION_BASE_CSS = String.raw`
|
|
|
3000
3101
|
--documentation-code-text: #eef0f7;
|
|
3001
3102
|
--documentation-shadow-sm: 0 1px 2px rgba(0, 0, 0, .24);
|
|
3002
3103
|
--documentation-shadow-lg: 0 28px 90px rgba(0, 0, 0, .55), 0 8px 24px rgba(0, 0, 0, .35);
|
|
3104
|
+
--documentation-focus-ring: color-mix(in srgb, var(--documentation-accent) 74%, white);
|
|
3003
3105
|
color-scheme: dark;
|
|
3004
3106
|
}
|
|
3005
3107
|
|
|
3006
3108
|
* { box-sizing: border-box; }
|
|
3007
|
-
html { scroll-behavior: smooth; scroll-padding-top:
|
|
3008
|
-
body { margin: 0; background: var(--documentation-brand-bg); color: var(--documentation-text); font-family: var(--documentation-font-body); font-size:
|
|
3109
|
+
html { scroll-behavior: smooth; scroll-padding-top: 96px; scrollbar-gutter: stable; }
|
|
3110
|
+
body { margin: 0; background: var(--documentation-brand-bg); color: var(--documentation-text); font-family: var(--documentation-font-body); font-size: 17px; line-height: 1.65; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
|
3009
3111
|
:root[data-background-decoration="gradient"] body { background-image: radial-gradient(circle at 58% 7%, color-mix(in srgb, var(--documentation-accent) 7%, transparent), transparent 32%); background-attachment: fixed; }
|
|
3010
3112
|
:root[data-background-decoration="grid"] body { background-image: linear-gradient(color-mix(in srgb, var(--documentation-border) 26%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--documentation-border) 26%, transparent) 1px, transparent 1px); background-attachment: fixed; background-size: 32px 32px; }
|
|
3011
3113
|
body:has(.documentation-modal-layer), body:has(.documentation-mobile-nav) { overflow: hidden; }
|
|
3012
3114
|
button, input, textarea { font: inherit; }
|
|
3013
3115
|
button, a { -webkit-tap-highlight-color: transparent; }
|
|
3014
3116
|
a { color: inherit; }
|
|
3015
|
-
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 2px solid
|
|
3117
|
+
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 2px solid var(--documentation-focus-ring); outline-offset: 3px; }
|
|
3016
3118
|
::selection { background: color-mix(in srgb, var(--documentation-accent) 24%, transparent); }
|
|
3017
3119
|
|
|
3018
3120
|
.documentation-skip-link { position: fixed; z-index: 200; top: -64px; left: 16px; padding: 9px 13px; border-radius: 8px; background: var(--documentation-text); color: var(--documentation-bg); font-weight: 650; text-decoration: none; }
|
|
@@ -3020,54 +3122,64 @@ button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visib
|
|
|
3020
3122
|
.documentation-app.is-navigating::before { content: ""; position: fixed; z-index: 240; inset: 0 auto auto 0; width: 42%; height: 2px; background: linear-gradient(90deg, var(--documentation-accent), var(--documentation-accent-2)); box-shadow: 0 0 14px color-mix(in srgb, var(--documentation-accent-2) 48%, transparent); animation: documentation-navigation-progress .8s ease-in-out infinite alternate; }
|
|
3021
3123
|
::view-transition-old(documentation-article) { animation: documentation-page-out .11s ease-in both; }
|
|
3022
3124
|
::view-transition-new(documentation-article) { animation: documentation-page-in .16s ease-out both; }
|
|
3125
|
+
/* Only the article animates. Without these, the browser's default root
|
|
3126
|
+
* cross-fade snapshots the whole viewport and visibly fades over the fixed
|
|
3127
|
+
* assistant launcher/panel on every client navigation. */
|
|
3128
|
+
::view-transition-group(root) { animation: none; }
|
|
3129
|
+
::view-transition-old(root), ::view-transition-new(root) { animation: none; }
|
|
3130
|
+
::view-transition-old(documentation-assistant), ::view-transition-new(documentation-assistant),
|
|
3131
|
+
::view-transition-old(documentation-assistant-launcher), ::view-transition-new(documentation-assistant-launcher) { animation: none; }
|
|
3023
3132
|
|
|
3024
3133
|
`;
|
|
3025
3134
|
|
|
3026
3135
|
// src/documentation/runtime/styles/content.ts
|
|
3027
3136
|
var DOCUMENTATION_CONTENT_CSS = String.raw`
|
|
3028
|
-
.documentation-main { min-width: 0; margin-left: var(--documentation-sidebar-width); transition: margin-right .24s ease; }
|
|
3029
|
-
.documentation-reader-grid { display: grid; grid-template-columns: minmax(0,
|
|
3030
|
-
.documentation-
|
|
3031
|
-
.documentation-
|
|
3137
|
+
.documentation-main { min-width: 0; margin-left: var(--documentation-sidebar-width); margin-right: 0; transition: margin-right .24s ease; }
|
|
3138
|
+
.documentation-reader-grid { display: grid; grid-template-columns: minmax(0, 720px) 250px; justify-content: center; gap: 70px; width: 100%; padding: 62px 52px 96px; }
|
|
3139
|
+
.documentation-reader-column { display: flex; min-width: 0; min-height: calc(100vh - var(--documentation-header-height) - 158px); flex-direction: column; }
|
|
3140
|
+
.documentation-article { display: flex; min-width: 0; flex: 1; flex-direction: column; view-transition-name: documentation-article; }
|
|
3141
|
+
.documentation-breadcrumbs { display: none; align-items: center; gap: 5px; margin-bottom: 24px; color: var(--documentation-muted); font-size: 13px; }
|
|
3032
3142
|
.documentation-breadcrumbs span { display: inline-flex; align-items: center; gap: 5px; }
|
|
3033
3143
|
.documentation-breadcrumbs svg { width: 12px; height: 12px; }
|
|
3034
3144
|
.documentation-article-header { margin-bottom: 38px; }
|
|
3035
3145
|
.documentation-article-meta { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-height: 32px; margin-bottom: 7px; }
|
|
3036
|
-
.documentation-eyebrow { color: color-mix(in srgb, var(--documentation-accent) 76%, var(--documentation-text)); font-size:
|
|
3037
|
-
.documentation-contextual-actions { position: relative; display: inline-flex; flex: 0 0 auto; align-items: stretch; height:
|
|
3038
|
-
.documentation-contextual-actions button, .documentation-contextual-actions a, .documentation-contextual-actions summary { display: inline-flex; align-items: center; gap: 6px; min-width: 0; height:
|
|
3146
|
+
.documentation-eyebrow { color: color-mix(in srgb, var(--documentation-accent) 76%, var(--documentation-text)); font-size: 13px; font-weight: 700; letter-spacing: .035em; }
|
|
3147
|
+
.documentation-contextual-actions { position: relative; display: inline-flex; flex: 0 0 auto; align-items: stretch; height: 32px; border: 1px solid var(--documentation-border); border-radius: 8px; background: color-mix(in srgb, var(--documentation-surface) 92%, transparent); box-shadow: var(--documentation-shadow-sm); }
|
|
3148
|
+
.documentation-contextual-actions button, .documentation-contextual-actions a, .documentation-contextual-actions summary { display: inline-flex; align-items: center; gap: 6px; min-width: 0; height: 30px; padding: 0 10px; border: 0; background: transparent; color: var(--documentation-muted); cursor: pointer; font: 590 12.5px/1 var(--documentation-font-body); text-decoration: none; white-space: nowrap; }
|
|
3039
3149
|
.documentation-contextual-actions button:hover, .documentation-contextual-actions a:hover, .documentation-contextual-actions summary:hover { color: var(--documentation-text); }
|
|
3040
3150
|
.documentation-contextual-actions svg { flex: 0 0 auto; width: 13px; height: 13px; }
|
|
3041
3151
|
.documentation-contextual-actions details { position: relative; border-left: 1px solid var(--documentation-border); }
|
|
3042
|
-
.documentation-contextual-actions summary { width:
|
|
3152
|
+
.documentation-contextual-actions summary { width: 30px; padding: 0; justify-content: center; list-style: none; }
|
|
3043
3153
|
.documentation-contextual-actions summary::-webkit-details-marker { display: none; }
|
|
3044
3154
|
.documentation-contextual-actions details[open] summary { background: var(--documentation-panel); color: var(--documentation-text); }
|
|
3045
3155
|
.documentation-contextual-actions details[open] summary svg { transform: rotate(180deg); }
|
|
3046
|
-
.documentation-contextual-menu { position: absolute; z-index: 35; top: calc(100% + 7px); right: -1px; display: grid; width: min(
|
|
3047
|
-
.documentation-contextual-menu button, .documentation-contextual-menu a { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap:
|
|
3156
|
+
.documentation-contextual-menu { position: absolute; z-index: 35; top: calc(100% + 7px); right: -1px; display: grid; width: min(344px, calc(100vw - 32px)); max-height: min(510px, calc(100vh - 120px)); overflow: auto; padding: 6px; border: 1px solid var(--documentation-border-strong); border-radius: 12px; background: var(--documentation-surface-raised); box-shadow: var(--documentation-shadow-lg); }
|
|
3157
|
+
.documentation-contextual-menu button, .documentation-contextual-menu a { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap: 10px; width: 100%; height: auto; min-height: 52px; padding: 7px 8px; border-radius: 8px; text-align: left; white-space: normal; }
|
|
3048
3158
|
.documentation-contextual-menu button:hover, .documentation-contextual-menu a:hover { background: var(--documentation-panel); }
|
|
3049
3159
|
.documentation-contextual-action-icon { display: grid; place-items: center; width: 30px; height: 30px; border: 1px solid var(--documentation-border); border-radius: 7px; background: var(--documentation-surface); color: var(--documentation-text-soft); }
|
|
3050
3160
|
.documentation-contextual-action-icon svg { width: 15px; height: 15px; }
|
|
3051
3161
|
.documentation-contextual-action-copy { display: grid; min-width: 0; gap: 2px; }
|
|
3052
|
-
.documentation-contextual-action-copy strong {
|
|
3053
|
-
.documentation-contextual-action-copy small {
|
|
3162
|
+
.documentation-contextual-action-copy strong { color: var(--documentation-text); font-size: 13px; font-weight: 640; line-height: 1.25; }
|
|
3163
|
+
.documentation-contextual-action-copy small { color: var(--documentation-muted); font-size: 12px; font-weight: 450; line-height: 1.3; }
|
|
3054
3164
|
.documentation-contextual-menu .documentation-contextual-action-external { width: 12px; height: 12px; color: var(--documentation-faint); }
|
|
3055
|
-
.documentation-article-header h1 { margin: 0; color: var(--documentation-text); font-family: var(--documentation-font-heading); font-size: clamp(34px, 3vw,
|
|
3165
|
+
.documentation-article-header h1 { margin: 0; color: var(--documentation-text); font-family: var(--documentation-font-heading); font-size: clamp(34px, 3vw, 40px); font-weight: 650; letter-spacing: -.025em; line-height: 1.12; overflow-wrap: anywhere; }
|
|
3056
3166
|
.documentation-article-header h1:focus { outline: none; }
|
|
3057
|
-
.documentation-lede { max-width:
|
|
3167
|
+
.documentation-lede { max-width: 680px; margin: 14px 0 0; color: var(--documentation-text-soft); font-size: 19px; letter-spacing: -.01em; line-height: 1.55; }
|
|
3058
3168
|
|
|
3059
3169
|
.documentation-prose { color: var(--documentation-text-soft); }
|
|
3060
3170
|
.documentation-prose > :first-child { margin-top: 0; }
|
|
3061
|
-
.documentation-prose h1, .documentation-prose h2, .documentation-prose h3, .documentation-prose h4, .documentation-prose h5, .documentation-prose h6 { color: var(--documentation-text); font-family: var(--documentation-font-heading); scroll-margin-top:
|
|
3062
|
-
.documentation-prose h1 { margin:
|
|
3063
|
-
.documentation-prose h2 { margin:
|
|
3064
|
-
.documentation-prose h3 { margin:
|
|
3065
|
-
.documentation-prose h4 { margin:
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
.documentation-prose
|
|
3069
|
-
.documentation-prose
|
|
3070
|
-
.documentation-prose
|
|
3171
|
+
.documentation-prose h1, .documentation-prose h2, .documentation-prose h3, .documentation-prose h4, .documentation-prose h5, .documentation-prose h6 { position: relative; color: var(--documentation-text); font-family: var(--documentation-font-heading); scroll-margin-top: 96px; }
|
|
3172
|
+
.documentation-prose h1 { margin: 48px 0 18px; font-size: 30px; letter-spacing: -.025em; line-height: 1.2; }
|
|
3173
|
+
.documentation-prose h2 { margin: 50px 0 16px; padding-top: 5px; font-size: 25px; font-weight: 625; letter-spacing: -.025em; line-height: 1.28; }
|
|
3174
|
+
.documentation-prose h3 { margin: 34px 0 12px; font-size: 20px; font-weight: 620; letter-spacing: -.015em; line-height: 1.4; }
|
|
3175
|
+
.documentation-prose h4 { margin: 28px 0 10px; font-size: 17px; font-weight: 620; }
|
|
3176
|
+
/* Parked in the gutter so revealing it on hover never reflows the heading. The
|
|
3177
|
+
* bare class selector loses to the prose link rule, hence the descendant form. */
|
|
3178
|
+
.documentation-prose .documentation-heading-anchor { position: absolute; top: 0; left: -.82em; display: flex; align-items: center; height: 100%; padding-right: .25em; color: var(--documentation-faint); font-size: .8em; font-weight: 500; opacity: 0; text-decoration: none; transition: opacity .12s; }
|
|
3179
|
+
.documentation-prose :is(h1, h2, h3, h4, h5, h6):hover .documentation-heading-anchor, .documentation-prose .documentation-heading-anchor:focus-visible { opacity: 1; }
|
|
3180
|
+
.documentation-prose p { margin: 0 0 20px; }
|
|
3181
|
+
.documentation-prose ul, .documentation-prose ol { margin: 0 0 22px; padding-left: 26px; }
|
|
3182
|
+
.documentation-prose li { margin: 6px 0; padding-left: 3px; }
|
|
3071
3183
|
.documentation-prose li::marker { color: var(--documentation-faint); }
|
|
3072
3184
|
.documentation-prose strong { color: var(--documentation-text); font-weight: 610; }
|
|
3073
3185
|
.documentation-prose a { color: color-mix(in srgb, var(--documentation-accent) 78%, var(--documentation-text)); font-weight: 560; text-decoration-color: color-mix(in srgb, var(--documentation-accent) 38%, transparent); text-decoration-thickness: 1px; text-underline-offset: 3px; }
|
|
@@ -3076,35 +3188,57 @@ var DOCUMENTATION_CONTENT_CSS = String.raw`
|
|
|
3076
3188
|
.documentation-prose blockquote { margin: 25px 0; padding: 4px 0 4px 18px; border-left: 2px solid color-mix(in srgb, var(--documentation-accent) 45%, var(--documentation-border)); color: var(--documentation-muted); }
|
|
3077
3189
|
.documentation-prose blockquote p:last-child { margin-bottom: 0; }
|
|
3078
3190
|
.documentation-prose hr { margin: 44px 0; border: 0; border-top: 1px solid var(--documentation-border); }
|
|
3079
|
-
.documentation-prose :not(pre) > code, .documentation-assistant-message code { padding: 2px
|
|
3080
|
-
.documentation-
|
|
3081
|
-
.documentation-prose
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
.documentation-code-actions
|
|
3090
|
-
.documentation-code-actions
|
|
3091
|
-
.documentation-code-
|
|
3191
|
+
.documentation-prose :not(pre) > code, .documentation-assistant-message code { padding: 2px 6px; border-radius: 6px; background: var(--documentation-panel); color: var(--documentation-text); font: 520 .86em/1.4 var(--documentation-font-mono); overflow-wrap: anywhere; }
|
|
3192
|
+
.documentation-code-block { position: relative; margin: 24px 0; }
|
|
3193
|
+
.documentation-prose .documentation-code-block pre { margin: 0; }
|
|
3194
|
+
.documentation-prose pre { position: relative; overflow: auto; margin: 24px 0; padding: 20px; border: 1px solid color-mix(in srgb, var(--documentation-border-strong) 50%, #000); border-radius: 12px; background: linear-gradient(145deg, var(--documentation-code-panel), var(--documentation-code-bg)); color: var(--documentation-code-text); box-shadow: 0 12px 34px rgba(7, 9, 14, .12); font: 14px/1.65 var(--documentation-font-mono); tab-size: 2; }
|
|
3195
|
+
.documentation-prose pre code { display: block; min-width: max-content; background: transparent; }
|
|
3196
|
+
/* Actions overlay the code rather than floating inside its text flow, so no line
|
|
3197
|
+
* needs padding reserved for them and horizontal scrolling stays exact. */
|
|
3198
|
+
.documentation-code-actions { position: absolute; z-index: 2; top: 10px; right: 10px; display: inline-flex; gap: 4px; opacity: 0; transition: opacity .14s; }
|
|
3199
|
+
.documentation-code-block:hover .documentation-code-actions, .documentation-code-actions:focus-within { opacity: 1; }
|
|
3200
|
+
.documentation-code-actions button { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 1px solid rgba(255, 255, 255, .14); border-radius: 7px; background: color-mix(in srgb, var(--documentation-code-panel) 88%, transparent); color: #aeb5c6; cursor: pointer; backdrop-filter: blur(6px); }
|
|
3201
|
+
.documentation-code-actions button:hover { background: rgba(255, 255, 255, .14); color: #fff; }
|
|
3202
|
+
.documentation-code-actions svg { width: 15px; height: 15px; }
|
|
3203
|
+
.documentation-code-language { position: absolute; z-index: 1; top: 14px; left: 20px; color: #7f889c; font: 650 11.5px/1 var(--documentation-font-mono); letter-spacing: .06em; text-transform: uppercase; pointer-events: none; }
|
|
3204
|
+
.documentation-code-block:has(.documentation-code-language) pre { padding-top: 38px; }
|
|
3205
|
+
|
|
3092
3206
|
.hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-section, .hljs-link { color: #b7a7ff; }
|
|
3093
3207
|
.hljs-string, .hljs-title, .hljs-name, .hljs-type, .hljs-attribute, .hljs-symbol, .hljs-bullet, .hljs-addition { color: #73dfb4; }
|
|
3094
3208
|
.hljs-number, .hljs-meta, .hljs-built_in, .hljs-builtin-name, .hljs-params { color: #f0b96b; }
|
|
3095
3209
|
.hljs-comment, .hljs-quote, .hljs-deletion { color: #767f93; font-style: italic; }
|
|
3096
3210
|
.hljs-variable, .hljs-template-variable, .hljs-regexp { color: #ff95b4; }
|
|
3097
3211
|
|
|
3098
|
-
|
|
3212
|
+
/* Light code blocks re-tint every token group above; a partial override would
|
|
3213
|
+
* leave the dark palette's colors on a near-white background. */
|
|
3214
|
+
:root[data-code-mode="system"][data-theme="light"] {
|
|
3215
|
+
--documentation-code-plain: #252936;
|
|
3216
|
+
--documentation-code-keyword: #6f42c1;
|
|
3217
|
+
--documentation-code-string: #0a7d55;
|
|
3218
|
+
--documentation-code-number: #8a4b00;
|
|
3219
|
+
--documentation-code-comment: #636a78;
|
|
3220
|
+
--documentation-code-variable: #b3246b;
|
|
3221
|
+
}
|
|
3222
|
+
:root[data-code-mode="system"][data-theme="light"] .documentation-prose pre { border-color: var(--documentation-border); background: linear-gradient(145deg, #f7f8fb, #f1f3f7); color: var(--documentation-code-plain); box-shadow: 0 8px 26px rgba(15, 18, 28, .06); }
|
|
3223
|
+
:root[data-code-mode="system"][data-theme="light"] .documentation-code-actions button { border-color: rgba(17, 19, 26, .12); background: rgba(255, 255, 255, .82); color: #606675; }
|
|
3224
|
+
:root[data-code-mode="system"][data-theme="light"] .documentation-code-actions button:hover { background: #fff; color: #11131a; }
|
|
3225
|
+
:root[data-code-mode="system"][data-theme="light"] .documentation-code-language { color: #757c8c; }
|
|
3226
|
+
:root[data-code-mode="system"][data-theme="light"] :is(.hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-section, .hljs-link) { color: var(--documentation-code-keyword); }
|
|
3227
|
+
:root[data-code-mode="system"][data-theme="light"] :is(.hljs-string, .hljs-title, .hljs-name, .hljs-type, .hljs-attribute, .hljs-symbol, .hljs-bullet, .hljs-addition) { color: var(--documentation-code-string); }
|
|
3228
|
+
:root[data-code-mode="system"][data-theme="light"] :is(.hljs-number, .hljs-meta, .hljs-built_in, .hljs-builtin-name, .hljs-params) { color: var(--documentation-code-number); }
|
|
3229
|
+
:root[data-code-mode="system"][data-theme="light"] :is(.hljs-comment, .hljs-quote, .hljs-deletion) { color: var(--documentation-code-comment); }
|
|
3230
|
+
:root[data-code-mode="system"][data-theme="light"] :is(.hljs-variable, .hljs-template-variable, .hljs-regexp) { color: var(--documentation-code-variable); }
|
|
3231
|
+
|
|
3232
|
+
.documentation-prose table { display: block; width: 100%; overflow: auto; margin: 25px 0 29px; border: 1px solid var(--documentation-border); border-radius: 10px; border-collapse: separate; border-spacing: 0; background: var(--documentation-surface); font-size: 15px; }
|
|
3099
3233
|
.documentation-prose thead { background: var(--documentation-panel); }
|
|
3100
|
-
.documentation-prose th, .documentation-prose td { min-width: 130px; padding:
|
|
3234
|
+
.documentation-prose th, .documentation-prose td { min-width: 130px; padding: 11px 14px; border-right: 1px solid var(--documentation-border); border-bottom: 1px solid var(--documentation-border); text-align: left; vertical-align: top; }
|
|
3101
3235
|
.documentation-prose th:last-child, .documentation-prose td:last-child { border-right: 0; }
|
|
3102
3236
|
.documentation-prose tr:last-child td { border-bottom: 0; }
|
|
3103
|
-
.documentation-prose th { color: var(--documentation-text); font-size:
|
|
3237
|
+
.documentation-prose th { color: var(--documentation-text); font-size: 13px; font-weight: 700; letter-spacing: .02em; }
|
|
3104
3238
|
|
|
3105
3239
|
.documentation-callout { --callout-accent: var(--documentation-accent); position: relative; margin: 24px 0; padding: 16px 18px 16px 20px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--callout-accent) 25%, var(--documentation-border)); border-radius: 11px; background: linear-gradient(105deg, color-mix(in srgb, var(--callout-accent) 7%, var(--documentation-surface)), var(--documentation-surface)); }
|
|
3106
3240
|
.documentation-callout::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 2px; background: var(--callout-accent); }
|
|
3107
|
-
.documentation-callout > strong { display: block; margin-bottom: 3px; color: color-mix(in srgb, var(--callout-accent) 72%, var(--documentation-text)); font-size:
|
|
3241
|
+
.documentation-callout > strong { display: block; margin-bottom: 3px; color: color-mix(in srgb, var(--callout-accent) 72%, var(--documentation-text)); font-size: 14px; }
|
|
3108
3242
|
.documentation-callout > :last-child { margin-bottom: 0; }
|
|
3109
3243
|
.documentation-callout-warning { --callout-accent: #e58a21; }
|
|
3110
3244
|
.documentation-callout-tip { --callout-accent: #17a673; }
|
|
@@ -3129,15 +3263,16 @@ var DOCUMENTATION_CONTENT_CSS = String.raw`
|
|
|
3129
3263
|
.documentation-step h3 { margin-top: 0; }
|
|
3130
3264
|
.documentation-tabs { margin: 23px 0; overflow: hidden; border: 1px solid var(--documentation-border); border-radius: 11px; background: var(--documentation-surface); }
|
|
3131
3265
|
.documentation-tab-buttons { display: flex; gap: 2px; overflow-x: auto; padding: 6px; border-bottom: 1px solid var(--documentation-border); background: var(--documentation-panel); }
|
|
3132
|
-
.documentation-tab-buttons button { flex: 0 0 auto; padding: 6px
|
|
3266
|
+
.documentation-tab-buttons button { flex: 0 0 auto; padding: 6px 11px; border: 0; border-radius: 7px; background: transparent; color: var(--documentation-muted); cursor: pointer; font-size: 13.5px; font-weight: 620; }
|
|
3133
3267
|
.documentation-tab-buttons button[aria-selected="true"] { background: var(--documentation-surface); color: var(--documentation-text); box-shadow: var(--documentation-shadow-sm); }
|
|
3134
3268
|
.documentation-tab { padding: 16px 18px 2px; }
|
|
3135
3269
|
.documentation-tab > :first-child { margin-top: 0; }
|
|
3136
3270
|
.documentation-code-group { margin: 23px 0; overflow: hidden; border: 1px solid var(--documentation-border-strong); border-radius: 12px; background: var(--documentation-surface); }
|
|
3137
|
-
.documentation-code-group-title { padding: 8px 13px; border-bottom: 1px solid var(--documentation-border); background: var(--documentation-panel); color: var(--documentation-muted); font-size:
|
|
3271
|
+
.documentation-code-group-title { padding: 8px 13px; border-bottom: 1px solid var(--documentation-border); background: var(--documentation-panel); color: var(--documentation-muted); font-size: 12px; font-weight: 650; }
|
|
3138
3272
|
.documentation-code-group .documentation-tab-buttons { border-color: color-mix(in srgb, var(--documentation-border) 72%, transparent); background: var(--documentation-panel); }
|
|
3139
3273
|
.documentation-code-tab { padding: 0; }
|
|
3140
|
-
.documentation-code-group
|
|
3274
|
+
.documentation-code-group .documentation-code-block { margin: 0; }
|
|
3275
|
+
.documentation-prose .documentation-code-group pre { margin: 0; border: 0; border-radius: 0; box-shadow: none; }
|
|
3141
3276
|
|
|
3142
3277
|
.documentation-api-badge { display: flex; align-items: center; gap: 9px; margin: 0 0 25px; padding: 11px 13px; border: 1px solid var(--documentation-border); border-radius: 10px; background: var(--documentation-panel); }
|
|
3143
3278
|
.method { display: inline-grid; place-items: center; min-width: 52px; padding: 4px 7px; border-radius: 6px; background: #3178e8; color: white; font: 750 10px/1.3 var(--documentation-font-mono); letter-spacing: .035em; }
|
|
@@ -3155,26 +3290,25 @@ var DOCUMENTATION_CONTENT_CSS = String.raw`
|
|
|
3155
3290
|
.documentation-playground > button:disabled { opacity: .58; cursor: wait; }
|
|
3156
3291
|
.documentation-playground > pre { max-height: 320px; overflow: auto; margin: 14px 0 0; padding: 13px; border-radius: 8px; background: var(--documentation-code-bg); color: var(--documentation-code-text); font: 11.5px/1.55 var(--documentation-font-mono); white-space: pre-wrap; }
|
|
3157
3292
|
|
|
3158
|
-
.documentation-context-rail { position: sticky; top:
|
|
3293
|
+
.documentation-context-rail { position: sticky; top: 96px; align-self: start; max-height: calc(100vh - 120px); overflow: auto; padding-left: 18px; }
|
|
3159
3294
|
.documentation-outline { display: grid; gap: 2px; }
|
|
3160
|
-
.documentation-outline h2 { margin: 0 0
|
|
3161
|
-
.documentation-outline a { padding:
|
|
3295
|
+
.documentation-outline h2 { margin: 0 0 9px; color: var(--documentation-text); font-size: 13.5px; font-weight: 650; }
|
|
3296
|
+
.documentation-outline a { padding: 5px 0; color: var(--documentation-muted); font-size: 13.5px; line-height: 1.45; text-decoration: none; transition: color .12s; }
|
|
3162
3297
|
.documentation-outline a:hover, .documentation-outline a.is-active { color: var(--documentation-text); }
|
|
3163
|
-
.documentation-outline a.is-active { font-weight: 640; }
|
|
3164
|
-
.documentation-outline a.depth-3 { padding-left:
|
|
3165
|
-
|
|
3166
|
-
.documentation-
|
|
3167
|
-
.documentation-
|
|
3168
|
-
.documentation-
|
|
3169
|
-
.documentation-
|
|
3170
|
-
.documentation-
|
|
3298
|
+
.documentation-outline a.is-active { color: color-mix(in srgb, var(--documentation-accent) 74%, var(--documentation-text)); font-weight: 640; }
|
|
3299
|
+
.documentation-outline a.depth-3 { padding-left: 13px; }
|
|
3300
|
+
/* The outline for viewports that have no room for the sticky rail. */
|
|
3301
|
+
.documentation-outline-disclosure { display: none; margin: 0 0 32px; border: 1px solid var(--documentation-border); border-radius: 10px; background: var(--documentation-surface); }
|
|
3302
|
+
.documentation-outline-disclosure > summary { display: flex; align-items: center; gap: 8px; padding: 11px 14px; color: var(--documentation-text); cursor: pointer; font-size: 14px; font-weight: 650; list-style: none; }
|
|
3303
|
+
.documentation-outline-disclosure > summary::-webkit-details-marker { display: none; }
|
|
3304
|
+
.documentation-outline-disclosure > summary svg { width: 15px; height: 15px; color: var(--documentation-muted); }
|
|
3305
|
+
.documentation-outline-disclosure .documentation-outline { padding: 0 14px 12px; }
|
|
3171
3306
|
.documentation-pagination { display: grid; grid-template-columns: 1fr 1fr; gap: 13px; margin-top: auto; padding-top: 28px; }
|
|
3172
|
-
.documentation-
|
|
3173
|
-
.documentation-pagination a { display: flex; flex-direction: column; min-height: 86px; padding: 14px 15px; border: 1px solid var(--documentation-border); border-radius: 10px; background: var(--documentation-surface); text-decoration: none; transition: border-color .15s, transform .15s; }
|
|
3307
|
+
.documentation-pagination a { display: flex; flex-direction: column; min-height: 86px; padding: 14px 16px; border: 1px solid var(--documentation-border); border-radius: 10px; background: var(--documentation-surface); text-decoration: none; transition: border-color .15s, transform .15s; }
|
|
3174
3308
|
.documentation-pagination a:hover { border-color: color-mix(in srgb, var(--documentation-accent) 38%, var(--documentation-border)); transform: translateY(-1px); }
|
|
3175
3309
|
.documentation-pagination a:last-child { text-align: right; }
|
|
3176
|
-
.documentation-pagination small { margin-bottom: 7px; color: var(--documentation-faint); font-size:
|
|
3177
|
-
.documentation-pagination span { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--documentation-text); font-size:
|
|
3310
|
+
.documentation-pagination small { margin-bottom: 7px; color: var(--documentation-faint); font-size: 12px; font-weight: 650; text-transform: uppercase; letter-spacing: .05em; }
|
|
3311
|
+
.documentation-pagination span { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--documentation-text); font-size: 15px; font-weight: 650; }
|
|
3178
3312
|
.documentation-pagination a:last-child span { justify-content: flex-end; }
|
|
3179
3313
|
.documentation-pagination svg { flex: 0 0 auto; width: 15px; }
|
|
3180
3314
|
.documentation-pagination svg.is-back { transform: rotate(180deg); }
|
|
@@ -3189,7 +3323,7 @@ var DOCUMENTATION_NAVIGATION_CSS = String.raw`
|
|
|
3189
3323
|
.documentation-brand-mark::before { content: ""; position: absolute; inset: -7px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--documentation-accent-2) 15%, transparent), transparent 68%); }
|
|
3190
3324
|
.documentation-brand-mark svg { position: relative; width: 27px; height: 27px; }
|
|
3191
3325
|
.documentation-brand-name { overflow: hidden; font-size: 16px; font-weight: 720; letter-spacing: -.025em; text-overflow: ellipsis; white-space: nowrap; }
|
|
3192
|
-
.documentation-brand-product { padding-left: 10px; border-left: 1px solid var(--documentation-border-strong); color: var(--documentation-muted); font-size:
|
|
3326
|
+
.documentation-brand-product { padding-left: 10px; border-left: 1px solid var(--documentation-border-strong); color: var(--documentation-muted); font-size: 13px; font-weight: 600; letter-spacing: .04em; }
|
|
3193
3327
|
.documentation-brand-logo { max-width: 145px; max-height: 26px; object-fit: contain; object-position: left center; }
|
|
3194
3328
|
.documentation-brand-logo-dark { display: none; }
|
|
3195
3329
|
:root[data-theme="dark"] .documentation-brand-logo-light { display: none; }
|
|
@@ -3200,10 +3334,10 @@ var DOCUMENTATION_NAVIGATION_CSS = String.raw`
|
|
|
3200
3334
|
.documentation-search-trigger:hover { border-color: var(--documentation-border-strong); color: var(--documentation-text); transform: translateY(-1px); }
|
|
3201
3335
|
.documentation-search-trigger > span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3202
3336
|
.documentation-search-trigger svg { width: 16px; }
|
|
3203
|
-
.documentation-search-trigger kbd { padding: 2px
|
|
3337
|
+
.documentation-search-trigger kbd { padding: 2px 6px; border: 1px solid var(--documentation-border); border-radius: 5px; background: var(--documentation-panel); color: var(--documentation-faint); font: 600 12px/1.3 var(--documentation-font-mono); }
|
|
3204
3338
|
|
|
3205
3339
|
.documentation-top-links { display: flex; align-items: center; gap: 18px; height: 100%; padding: 0 24px 0 10px; }
|
|
3206
|
-
.documentation-top-links a { display: inline-flex; align-items: center; gap: 4px; color: var(--documentation-muted); font-size:
|
|
3340
|
+
.documentation-top-links a { display: inline-flex; align-items: center; gap: 4px; color: var(--documentation-muted); font-size: 14px; font-weight: 560; text-decoration: none; white-space: nowrap; }
|
|
3207
3341
|
.documentation-top-links a:hover { color: var(--documentation-text); }
|
|
3208
3342
|
.documentation-top-links svg { width: 12px; height: 12px; }
|
|
3209
3343
|
.documentation-mobile-actions { display: none; align-items: center; gap: 3px; padding-right: 12px; }
|
|
@@ -3214,15 +3348,15 @@ var DOCUMENTATION_NAVIGATION_CSS = String.raw`
|
|
|
3214
3348
|
.documentation-sidebar { position: fixed; z-index: 30; inset: var(--documentation-header-height) auto 0 0; display: flex; flex-direction: column; width: var(--documentation-sidebar-width); border-right: 1px solid var(--documentation-border); background: var(--documentation-bg); }
|
|
3215
3349
|
.documentation-page-tree { flex: 1; overflow: auto; padding: 26px 18px 36px 22px; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: var(--documentation-border-strong) transparent; }
|
|
3216
3350
|
.documentation-nav-section { margin: 0 0 25px; }
|
|
3217
|
-
.documentation-nav-section > h2 { margin: 0 0
|
|
3218
|
-
.documentation-nav-link { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height:
|
|
3351
|
+
.documentation-nav-section > h2 { margin: 0 0 8px; padding: 0 9px; color: var(--documentation-text); font-size: 14px; font-weight: 650; }
|
|
3352
|
+
.documentation-nav-link { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 34px; margin: 1px 0; padding: 6px 9px; border-radius: 8px; color: var(--documentation-muted); font-size: 14px; line-height: 1.4; text-decoration: none; transition: background .12s, color .12s; }
|
|
3219
3353
|
.documentation-nav-link > span { min-width: 0; overflow-wrap: anywhere; }
|
|
3220
3354
|
.documentation-nav-link > svg { flex: 0 0 auto; width: 12px; height: 12px; }
|
|
3221
3355
|
.documentation-nav-link:hover { background: var(--documentation-panel); color: var(--documentation-text); }
|
|
3222
3356
|
.documentation-nav-link.is-active { position: relative; background: linear-gradient(90deg, color-mix(in srgb, var(--documentation-accent) 11%, transparent), color-mix(in srgb, var(--documentation-accent-2) 5%, transparent)); color: color-mix(in srgb, var(--documentation-accent) 77%, var(--documentation-text)); font-weight: 650; }
|
|
3223
3357
|
.documentation-nav-link.is-active::before { content: ""; position: absolute; inset: 8px auto 8px -5px; width: 2px; border-radius: 4px; background: linear-gradient(var(--documentation-accent), var(--documentation-accent-2)); box-shadow: 0 0 10px color-mix(in srgb, var(--documentation-accent-2) 52%, transparent); }
|
|
3224
3358
|
.documentation-nav-folder { margin: 2px 0; }
|
|
3225
|
-
.documentation-nav-folder > summary { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 6px 9px; border-radius: 8px; color: var(--documentation-muted); cursor: pointer; font-size:
|
|
3359
|
+
.documentation-nav-folder > summary { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 6px 9px; border-radius: 8px; color: var(--documentation-muted); cursor: pointer; font-size: 14px; font-weight: 620; list-style: none; }
|
|
3226
3360
|
.documentation-nav-folder > summary::-webkit-details-marker { display: none; }
|
|
3227
3361
|
.documentation-nav-folder > summary:hover { background: var(--documentation-panel); color: var(--documentation-text); }
|
|
3228
3362
|
.documentation-nav-folder > summary svg { width: 13px; transition: transform .16s; }
|
|
@@ -3231,7 +3365,7 @@ var DOCUMENTATION_NAVIGATION_CSS = String.raw`
|
|
|
3231
3365
|
|
|
3232
3366
|
.documentation-sidebar-footer { flex: 0 0 auto; display: grid; gap: 11px; padding: 13px 20px 16px 22px; border-top: 1px solid var(--documentation-border); background: color-mix(in srgb, var(--documentation-panel) 46%, var(--documentation-bg)); }
|
|
3233
3367
|
.documentation-sidebar-footer > nav { display: flex; flex-wrap: wrap; gap: 8px 13px; }
|
|
3234
|
-
.documentation-sidebar-footer a, .documentation-sidebar-footer > span { color: var(--documentation-faint); font-size:
|
|
3368
|
+
.documentation-sidebar-footer a, .documentation-sidebar-footer > span { color: var(--documentation-faint); font-size: 12px; text-decoration: none; }
|
|
3235
3369
|
.documentation-sidebar-footer a:hover { color: var(--documentation-text); }
|
|
3236
3370
|
.documentation-theme-controls { display: inline-flex; width: max-content; padding: 2px; border: 1px solid var(--documentation-border); border-radius: 9px; background: var(--documentation-surface); box-shadow: var(--documentation-shadow-sm); }
|
|
3237
3371
|
.documentation-theme-controls button { display: grid; place-items: center; width: 28px; height: 25px; padding: 0; border: 0; border-radius: 6px; background: transparent; color: var(--documentation-faint); cursor: pointer; }
|
|
@@ -3250,23 +3384,27 @@ var DOCUMENTATION_OVERLAYS_CSS = String.raw`
|
|
|
3250
3384
|
.documentation-search-input > svg { flex: 0 0 auto; width: 18px; color: var(--documentation-muted); }
|
|
3251
3385
|
.documentation-search-input input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--documentation-text); font-size: 16px; }
|
|
3252
3386
|
.documentation-search-input input::placeholder { color: var(--documentation-faint); }
|
|
3253
|
-
.documentation-search-input kbd, .documentation-search-dialog footer kbd { padding: 2px
|
|
3387
|
+
.documentation-search-input kbd, .documentation-search-dialog footer kbd { padding: 2px 6px; border: 1px solid var(--documentation-border); border-radius: 5px; background: var(--documentation-panel); color: var(--documentation-faint); font: 600 11px/1.4 var(--documentation-font-mono); }
|
|
3254
3388
|
.documentation-search-results { min-height: 180px; max-height: min(56vh, 500px); overflow: auto; padding: 7px; }
|
|
3255
3389
|
.documentation-search-empty { display: grid; place-items: center; min-height: 180px; padding: 25px; color: var(--documentation-muted); text-align: center; }
|
|
3256
3390
|
.documentation-search-empty svg { width: 29px; height: 29px; margin-bottom: 8px; color: var(--documentation-accent); }
|
|
3257
|
-
.documentation-search-empty strong { color: var(--documentation-text); font-size:
|
|
3258
|
-
.documentation-search-empty span { font-size:
|
|
3259
|
-
.documentation-search-state { padding: 28px 16px; color: var(--documentation-muted); font-size:
|
|
3260
|
-
.documentation-search-result, .documentation-search-assistant { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; min-height: 64px; padding: 10px
|
|
3391
|
+
.documentation-search-empty strong { color: var(--documentation-text); font-size: 15px; }
|
|
3392
|
+
.documentation-search-empty span { font-size: 13px; }
|
|
3393
|
+
.documentation-search-state { padding: 28px 16px; color: var(--documentation-muted); font-size: 14px; text-align: center; }
|
|
3394
|
+
.documentation-search-result, .documentation-search-assistant { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; min-height: 64px; padding: 10px 12px; border: 0; border-radius: 9px; background: transparent; color: var(--documentation-text); cursor: pointer; text-align: left; text-decoration: none; }
|
|
3261
3395
|
.documentation-search-result.is-active, .documentation-search-assistant.is-active { background: var(--documentation-panel); }
|
|
3262
|
-
.documentation-search-
|
|
3263
|
-
.documentation-search-
|
|
3264
|
-
.documentation-search-
|
|
3396
|
+
.documentation-search-copy, .documentation-search-assistant > span { min-width: 0; flex: 1; display: grid; gap: 2px; }
|
|
3397
|
+
.documentation-search-copy strong, .documentation-search-assistant strong { overflow: hidden; font-size: 15px; font-weight: 660; text-overflow: ellipsis; white-space: nowrap; }
|
|
3398
|
+
.documentation-search-copy small, .documentation-search-assistant small { overflow: hidden; color: var(--documentation-muted); font-size: 13px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
|
|
3399
|
+
.documentation-search-crumbs { display: flex; align-items: center; gap: 5px; min-width: 0; overflow: hidden; color: var(--documentation-muted); font-size: 13px; line-height: 1.45; white-space: nowrap; }
|
|
3400
|
+
.documentation-search-crumbs svg { flex: 0 0 auto; width: 11px; height: 11px; color: var(--documentation-faint); }
|
|
3401
|
+
.documentation-search-kind { flex: 0 0 auto; display: grid; place-items: center; width: 26px; height: 26px; border-radius: 7px; background: var(--documentation-panel); color: var(--documentation-muted); }
|
|
3402
|
+
.documentation-search-kind svg { width: 14px; height: 14px; }
|
|
3265
3403
|
.documentation-search-result > svg, .documentation-search-assistant > svg:last-child { flex: 0 0 auto; width: 14px; color: var(--documentation-faint); }
|
|
3266
3404
|
.documentation-search-assistant { border-top: 1px solid var(--documentation-border); border-radius: 0 0 9px 9px; color: color-mix(in srgb, var(--documentation-accent) 76%, var(--documentation-text)); }
|
|
3267
3405
|
.documentation-search-assistant > svg:first-child { flex: 0 0 auto; width: 19px; }
|
|
3268
|
-
.documentation-search-result mark { border-radius: 3px; background: color-mix(in srgb, var(--documentation-accent) 18%, transparent); color: inherit; }
|
|
3269
|
-
.documentation-search-dialog > footer { display: flex; gap: 17px; padding:
|
|
3406
|
+
.documentation-search-result mark { border-radius: 3px; background: color-mix(in srgb, var(--documentation-accent) 18%, transparent); color: inherit; font-weight: 700; }
|
|
3407
|
+
.documentation-search-dialog > footer { display: flex; gap: 17px; padding: 9px 14px; border-top: 1px solid var(--documentation-border); background: var(--documentation-panel); color: var(--documentation-faint); font-size: 12px; }
|
|
3270
3408
|
.documentation-search-dialog > footer span { display: flex; align-items: center; gap: 3px; }
|
|
3271
3409
|
|
|
3272
3410
|
.documentation-mobile-nav { display: flex; flex-direction: column; width: min(342px, 88vw); height: 100%; border-right: 1px solid var(--documentation-border); background: var(--documentation-bg); box-shadow: var(--documentation-shadow-lg); animation: documentation-drawer-in .2s ease-out; }
|
|
@@ -3275,31 +3413,45 @@ var DOCUMENTATION_OVERLAYS_CSS = String.raw`
|
|
|
3275
3413
|
.documentation-mobile-nav > header .documentation-icon-button { margin-right: 12px; }
|
|
3276
3414
|
.documentation-mobile-nav > .documentation-page-tree { padding-top: 22px; }
|
|
3277
3415
|
.documentation-mobile-nav > footer { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 13px; padding: 13px 18px; border-top: 1px solid var(--documentation-border); }
|
|
3278
|
-
.documentation-mobile-nav > footer a { color: var(--documentation-muted); font-size:
|
|
3416
|
+
.documentation-mobile-nav > footer a { color: var(--documentation-muted); font-size: 13px; text-decoration: none; }
|
|
3279
3417
|
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3418
|
+
/* Sticky inside the reading column instead of fixed to the viewport: it tracks
|
|
3419
|
+
* the column's centre line, never covers the sidebar or outline, and scrolls
|
|
3420
|
+
* away above the pagination rather than sitting on top of it. */
|
|
3421
|
+
.documentation-launcher-dock { position: sticky; z-index: 40; bottom: 0; display: flex; justify-content: center; margin-top: auto; padding: 44px 0 16px; pointer-events: none; }
|
|
3422
|
+
.documentation-launcher-dock::before { content: ""; position: absolute; z-index: -1; inset: 0; background: linear-gradient(to bottom, transparent, var(--documentation-brand-bg) 58%); }
|
|
3423
|
+
.documentation-launcher-dock + .documentation-pagination { margin-top: 0; }
|
|
3424
|
+
.documentation-assistant-launcher { view-transition-name: documentation-assistant-launcher; position: relative; display: grid; grid-template-columns: fit-content(40%) minmax(0, 1fr) auto auto; align-items: center; gap: 0; width: min(452px, 100%); min-height: 48px; padding: 5px; border: 1px solid color-mix(in srgb, var(--documentation-border-strong) 92%, var(--documentation-accent)); border-radius: 13px; background: color-mix(in srgb, var(--documentation-surface-raised) 96%, transparent); color: var(--documentation-text); box-shadow: 0 18px 45px rgba(15, 18, 28, .11), 0 2px 8px rgba(15, 18, 28, .05); pointer-events: auto; backdrop-filter: blur(18px) saturate(1.1); transition: border-color .16s, box-shadow .16s, transform .16s; }
|
|
3425
|
+
.documentation-assistant-launcher:hover { border-color: color-mix(in srgb, var(--documentation-accent) 32%, var(--documentation-border-strong)); box-shadow: 0 20px 48px rgba(15, 18, 28, .14), 0 2px 8px rgba(15, 18, 28, .06); transform: translateY(-1px); }
|
|
3426
|
+
.documentation-assistant-launcher input { min-width: 0; height: 36px; padding: 0 12px; border: 0; outline: 0; background: transparent; color: var(--documentation-text); font-size: 14px; }
|
|
3283
3427
|
.documentation-assistant-launcher input::placeholder { color: var(--documentation-muted); }
|
|
3284
|
-
.documentation-launcher-
|
|
3285
|
-
|
|
3428
|
+
.documentation-launcher-send { display: grid; place-items: center; height: 36px; border: 0; border-radius: 9px; cursor: pointer; }
|
|
3429
|
+
/* The 40% cap lives on the grid track: a percentage max-width here would
|
|
3430
|
+
* resolve against that track instead of the launcher. */
|
|
3431
|
+
.documentation-launcher-agent { display: flex; align-items: center; gap: 4px; min-width: 0; height: 36px; padding: 0 13px 0 9px; border: 0; border-right: 1px solid var(--documentation-border); border-radius: 0; background: transparent; color: var(--documentation-text-soft); cursor: pointer; font-size: 12.5px; font-weight: 650; white-space: nowrap; }
|
|
3432
|
+
.documentation-launcher-agent-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
3286
3433
|
.documentation-launcher-agent:hover { color: var(--documentation-accent); }
|
|
3287
|
-
.documentation-launcher-
|
|
3288
|
-
.documentation-launcher-
|
|
3434
|
+
.documentation-launcher-hint { display: grid; grid-auto-flow: column; gap: 3px; padding-right: 8px; }
|
|
3435
|
+
.documentation-launcher-hint kbd { padding: 2px 5px; border: 1px solid var(--documentation-border); border-radius: 5px; background: var(--documentation-panel); color: var(--documentation-faint); font: 600 11px/1.3 var(--documentation-font-mono); }
|
|
3436
|
+
.documentation-launcher-send { width: 36px; padding: 0; background: var(--documentation-accent); color: #fff; }
|
|
3289
3437
|
.documentation-launcher-send:disabled { background: var(--documentation-panel); color: var(--documentation-faint); cursor: default; }
|
|
3290
3438
|
.documentation-launcher-send svg { width: 15px; }
|
|
3291
|
-
|
|
3439
|
+
/* Docked beside the article on desktop so the page being asked about stays
|
|
3440
|
+
* readable; the narrow breakpoints below restore the floating card and sheet. */
|
|
3441
|
+
.documentation-assistant { view-transition-name: documentation-assistant; position: fixed; z-index: 90; inset: var(--documentation-header-height) 0 0 auto; display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto; width: var(--documentation-assistant-width); overflow: hidden; border-left: 1px solid var(--documentation-border-strong); background: var(--documentation-surface); box-shadow: -18px 0 48px rgba(15, 18, 28, .06); animation: documentation-assistant-dock-in .2s ease-out; }
|
|
3442
|
+
.documentation-app.is-assistant-open .documentation-main { margin-right: var(--documentation-assistant-width); }
|
|
3443
|
+
.documentation-app.is-assistant-open .documentation-header { right: var(--documentation-assistant-width); }
|
|
3292
3444
|
.documentation-assistant > header { display: flex; align-items: center; justify-content: space-between; min-height: 54px; padding: 0 11px 0 18px; border-bottom: 1px solid var(--documentation-border); }
|
|
3293
3445
|
.documentation-assistant > header > div { display: flex; align-items: center; }
|
|
3294
3446
|
.documentation-assistant > header > div > span { display: grid; gap: 1px; }
|
|
3295
|
-
.documentation-assistant > header strong { font-size:
|
|
3296
|
-
.documentation-assistant > header small { color: var(--documentation-muted); font-size:
|
|
3447
|
+
.documentation-assistant > header strong { font-size: 14px; font-weight: 620; letter-spacing: -.01em; }
|
|
3448
|
+
.documentation-assistant > header small { color: var(--documentation-muted); font-size: 12px; }
|
|
3297
3449
|
.documentation-assistant > header button { display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--documentation-muted); cursor: pointer; }
|
|
3298
3450
|
.documentation-assistant > header button:hover { background: var(--documentation-panel); color: var(--documentation-text); }
|
|
3299
3451
|
.documentation-assistant > header button:focus-visible { outline-width: 1px; outline-offset: 1px; }
|
|
3300
3452
|
.documentation-assistant > header button svg { width: 15px; height: 15px; }
|
|
3301
3453
|
.documentation-assistant-messages { overflow: auto; padding: 20px 20px 14px; overscroll-behavior: contain; }
|
|
3302
|
-
.documentation-assistant-message { display: flex; align-items: flex-start; margin: 0 0 20px; color: var(--documentation-text-soft); font-size:
|
|
3454
|
+
.documentation-assistant-message { display: flex; align-items: flex-start; margin: 0 0 20px; color: var(--documentation-text-soft); font-size: 14.5px; line-height: 1.62; }
|
|
3303
3455
|
.documentation-assistant-message > div { min-width: 0; max-width: 590px; }
|
|
3304
3456
|
.documentation-assistant-message.is-user { justify-content: flex-end; margin-left: 54px; }
|
|
3305
3457
|
.documentation-assistant-message.is-user > div { padding: 8px 11px; border: 1px solid var(--documentation-border); border-radius: 10px; background: var(--documentation-panel); color: var(--documentation-text); }
|
|
@@ -3310,27 +3462,28 @@ var DOCUMENTATION_OVERLAYS_CSS = String.raw`
|
|
|
3310
3462
|
.documentation-assistant-markdown p { margin: 0 0 11px; }
|
|
3311
3463
|
.documentation-assistant-markdown ul, .documentation-assistant-markdown ol { margin: 0 0 12px; padding-left: 20px; }
|
|
3312
3464
|
.documentation-assistant-markdown li { margin: 3px 0; }
|
|
3313
|
-
.documentation-assistant-heading { display: block; margin: 15px 0 6px; color: var(--documentation-text); font-family: var(--documentation-font-heading); font-size:
|
|
3465
|
+
.documentation-assistant-heading { display: block; margin: 15px 0 6px; color: var(--documentation-text); font-family: var(--documentation-font-heading); font-size: 14.5px; }
|
|
3314
3466
|
.documentation-assistant-code { overflow: hidden; margin: 12px 0; border: 1px solid var(--documentation-border-strong); border-radius: 10px; background: var(--documentation-code-bg); color: var(--documentation-code-text); }
|
|
3315
|
-
.documentation-assistant-code figcaption { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 0 8px 0 12px; border-bottom: 1px solid rgba(255,255,255,.09); background: var(--documentation-code-panel); color: #aeb5c6; font: 600
|
|
3316
|
-
.documentation-assistant-code button { padding: 4px
|
|
3317
|
-
.documentation-assistant-code pre { overflow: auto; margin: 0; padding: 13px; font:
|
|
3467
|
+
.documentation-assistant-code figcaption { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: 0 8px 0 12px; border-bottom: 1px solid rgba(255,255,255,.09); background: var(--documentation-code-panel); color: #aeb5c6; font: 600 12px/1.3 var(--documentation-font-mono); }
|
|
3468
|
+
.documentation-assistant-code button { padding: 4px 8px; border: 1px solid rgba(255,255,255,.1); border-radius: 6px; background: rgba(255,255,255,.06); color: inherit; cursor: pointer; font-size: 12px; }
|
|
3469
|
+
.documentation-assistant-code pre { overflow: auto; margin: 0; padding: 13px; font: 13px/1.6 var(--documentation-font-mono); }
|
|
3318
3470
|
.documentation-assistant-code code { padding: 0; border: 0; background: transparent; color: inherit; font: inherit; white-space: pre; }
|
|
3319
|
-
.documentation-assistant-activity { display: inline-flex; align-items: center; gap: 8px; color: var(--documentation-muted); font-size:
|
|
3471
|
+
.documentation-assistant-activity { display: inline-flex; align-items: center; gap: 8px; color: var(--documentation-muted); font-size: 13px; }
|
|
3320
3472
|
.documentation-assistant-activity > span { width: 6px; height: 6px; border-radius: 50%; background: var(--documentation-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--documentation-accent) 10%, transparent); animation: documentation-activity 1.25s ease-in-out infinite; }
|
|
3321
3473
|
.documentation-assistant-suggestions { display: grid; gap: 7px; margin-top: 26px; }
|
|
3322
|
-
.documentation-assistant-suggestions p { margin: 0 0 1px; color: var(--documentation-faint); font-size:
|
|
3323
|
-
.documentation-assistant-suggestions button { min-height:
|
|
3474
|
+
.documentation-assistant-suggestions p { margin: 0 0 1px; color: var(--documentation-faint); font-size: 12px; font-weight: 650; letter-spacing: .035em; text-transform: uppercase; }
|
|
3475
|
+
.documentation-assistant-suggestions button { min-height: 40px; padding: 9px 12px; border: 1px solid var(--documentation-border); border-radius: 9px; background: var(--documentation-bg); color: var(--documentation-muted); cursor: pointer; font-size: 13.5px; text-align: left; transition: border-color .14s, background .14s, color .14s; }
|
|
3324
3476
|
.documentation-assistant-suggestions button:hover { border-color: var(--documentation-border-strong); background: var(--documentation-panel); color: var(--documentation-text); }
|
|
3325
3477
|
.documentation-assistant-composer { display: flex; align-items: flex-end; gap: 7px; margin: 0 16px 9px; padding: 7px; border: 1px solid var(--documentation-border-strong); border-radius: 11px; background: var(--documentation-bg); box-shadow: 0 3px 12px rgba(15, 18, 28, .045); }
|
|
3326
3478
|
.documentation-assistant-composer:focus-within { border-color: color-mix(in srgb, var(--documentation-accent) 52%, var(--documentation-border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--documentation-accent) 9%, transparent); }
|
|
3327
|
-
.documentation-assistant-composer textarea { min-height: 41px; max-height: 160px; flex: 1; padding: 4px 5px; resize: none; border: 0; outline: 0; background: transparent; color: var(--documentation-text); font-size:
|
|
3479
|
+
.documentation-assistant-composer textarea { min-height: 41px; max-height: 160px; flex: 1; padding: 4px 5px; resize: none; border: 0; outline: 0; background: transparent; color: var(--documentation-text); font-size: 14px; line-height: 1.5; }
|
|
3328
3480
|
.documentation-assistant-composer button { display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px; background: var(--documentation-accent); color: white; cursor: pointer; }
|
|
3329
3481
|
.documentation-assistant-composer button:disabled { background: var(--documentation-panel-strong); color: var(--documentation-faint); cursor: default; }
|
|
3330
|
-
.documentation-assistant > footer { padding: 0 18px
|
|
3482
|
+
.documentation-assistant > footer { padding: 0 18px 12px; color: var(--documentation-faint); font-size: 12px; text-align: center; }
|
|
3331
3483
|
@keyframes documentation-fade-in { from { opacity: 0; } }
|
|
3332
3484
|
@keyframes documentation-dialog-in { from { opacity: 0; transform: translateY(-8px) scale(.99); } }
|
|
3333
3485
|
@keyframes documentation-drawer-in { from { transform: translateX(-24px); } }
|
|
3486
|
+
@keyframes documentation-assistant-dock-in { from { transform: translateX(24px); opacity: .5; } }
|
|
3334
3487
|
@keyframes documentation-assistant-in { from { transform: translateX(-50%) translateY(18px) scale(.985); opacity: .7; } }
|
|
3335
3488
|
@keyframes documentation-page-out { to { opacity: 0; transform: translateY(-3px); } }
|
|
3336
3489
|
@keyframes documentation-page-in { from { opacity: 0; transform: translateY(4px); } }
|
|
@@ -3342,9 +3495,16 @@ var DOCUMENTATION_OVERLAYS_CSS = String.raw`
|
|
|
3342
3495
|
// src/documentation/runtime/styles/responsive.ts
|
|
3343
3496
|
var DOCUMENTATION_RESPONSIVE_CSS = String.raw`
|
|
3344
3497
|
@media (max-width: 1320px) {
|
|
3345
|
-
.documentation-reader-grid { grid-template-columns: minmax(0,
|
|
3498
|
+
.documentation-reader-grid { grid-template-columns: minmax(0, 680px) 224px; gap: 48px; padding-inline: 70px; }
|
|
3346
3499
|
.documentation-top-links { gap: 13px; padding-right: 16px; }
|
|
3347
|
-
.documentation-top-links a { font-size:
|
|
3500
|
+
.documentation-top-links a { font-size: 13px; }
|
|
3501
|
+
}
|
|
3502
|
+
|
|
3503
|
+
/* The rail's own cut-off is 1140px; a docked panel takes that much again out of
|
|
3504
|
+
* the row, so the same choice applies that much earlier while it is open. */
|
|
3505
|
+
@media (max-width: 1560px) {
|
|
3506
|
+
.documentation-app.is-assistant-open .documentation-reader-grid { grid-template-columns: minmax(0, 760px); }
|
|
3507
|
+
.documentation-app.is-assistant-open .documentation-context-rail { display: none; }
|
|
3348
3508
|
}
|
|
3349
3509
|
|
|
3350
3510
|
@media (max-width: 1140px) {
|
|
@@ -3353,6 +3513,11 @@ var DOCUMENTATION_RESPONSIVE_CSS = String.raw`
|
|
|
3353
3513
|
.documentation-header { grid-template-columns: var(--documentation-sidebar-width) 1fr auto; }
|
|
3354
3514
|
.documentation-top-links { display: none; }
|
|
3355
3515
|
.documentation-breadcrumbs { display: flex; }
|
|
3516
|
+
.documentation-outline-disclosure { display: block; }
|
|
3517
|
+
/* Too narrow to dock beside the article; fall back to the floating card. */
|
|
3518
|
+
.documentation-assistant { inset: auto auto 18px 50%; width: min(620px, calc(100vw - 36px)); height: min(570px, calc(100vh - 94px)); border: 1px solid var(--documentation-border-strong); border-radius: 16px; box-shadow: 0 28px 80px rgba(15, 18, 28, .18), 0 6px 22px rgba(15, 18, 28, .08); transform: translateX(-50%); animation: documentation-assistant-in .2s ease-out; }
|
|
3519
|
+
.documentation-app.is-assistant-open .documentation-main { margin-right: 0; }
|
|
3520
|
+
.documentation-app.is-assistant-open .documentation-header { right: 0; }
|
|
3356
3521
|
}
|
|
3357
3522
|
|
|
3358
3523
|
@media (max-width: 900px) {
|
|
@@ -3362,44 +3527,49 @@ var DOCUMENTATION_RESPONSIVE_CSS = String.raw`
|
|
|
3362
3527
|
.documentation-header-center, .documentation-sidebar { display: none; }
|
|
3363
3528
|
.documentation-mobile-actions { display: flex; }
|
|
3364
3529
|
.documentation-main { margin-left: 0; }
|
|
3365
|
-
.documentation-reader-grid { padding: 44px 30px
|
|
3530
|
+
.documentation-reader-grid { padding: 44px 30px 64px; }
|
|
3366
3531
|
.documentation-assistant { width: min(660px, calc(100vw - 24px)); }
|
|
3367
3532
|
}
|
|
3368
3533
|
|
|
3369
3534
|
@media (max-width: 600px) {
|
|
3370
|
-
body { font-size:
|
|
3535
|
+
body { font-size: 16px; }
|
|
3371
3536
|
.documentation-brand { padding-right: 8px; }
|
|
3372
3537
|
.documentation-brand-product { display: none; }
|
|
3373
3538
|
.documentation-mobile-actions { padding-right: 8px; }
|
|
3374
|
-
.documentation-icon-button { width:
|
|
3375
|
-
.documentation-reader-grid { padding: 31px 19px
|
|
3539
|
+
.documentation-icon-button { width: 44px; height: 44px; }
|
|
3540
|
+
.documentation-reader-grid { padding: 31px 19px 48px; }
|
|
3376
3541
|
.documentation-breadcrumbs { margin-bottom: 19px; overflow: hidden; white-space: nowrap; }
|
|
3377
3542
|
.documentation-breadcrumbs span { flex: 0 0 auto; }
|
|
3378
3543
|
.documentation-article-header { margin-bottom: 30px; }
|
|
3379
3544
|
.documentation-article-meta { align-items: flex-start; }
|
|
3380
3545
|
.documentation-eyebrow { padding-top: 8px; }
|
|
3381
3546
|
.documentation-contextual-primary button, .documentation-contextual-primary a { max-width: 112px; overflow: hidden; text-overflow: ellipsis; }
|
|
3382
|
-
.documentation-article-header h1 { font-size: 32px; line-height: 1.
|
|
3383
|
-
.documentation-lede { font-size:
|
|
3547
|
+
.documentation-article-header h1 { font-size: 32px; line-height: 1.15; }
|
|
3548
|
+
.documentation-lede { font-size: 18px; line-height: 1.52; }
|
|
3384
3549
|
.documentation-prose h2 { margin-top: 42px; font-size: 23px; }
|
|
3385
|
-
.documentation-prose h3 { font-size:
|
|
3386
|
-
.documentation-prose pre { margin-inline: -5px; padding: 17px; border-radius: 10px; font-size:
|
|
3387
|
-
.documentation-code-actions { margin-right: -9px; margin-top: -9px; }
|
|
3550
|
+
.documentation-prose h3 { font-size: 19px; }
|
|
3551
|
+
.documentation-prose pre { margin-inline: -5px; padding: 17px; border-radius: 10px; font-size: 13px; }
|
|
3388
3552
|
.documentation-pagination { grid-template-columns: 1fr; }
|
|
3389
|
-
.documentation-app.has-assistant .documentation-pagination { margin-bottom: 124px; transform: translateY(124px); }
|
|
3390
|
-
.documentation-feedback { align-items: flex-start; flex-wrap: wrap; }
|
|
3391
|
-
.documentation-feedback > span { width: 100%; margin-bottom: 2px; }
|
|
3392
3553
|
.documentation-search-layer { padding: 8px; align-items: stretch; }
|
|
3393
3554
|
.documentation-search-dialog { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; height: 100%; border-radius: 12px; }
|
|
3394
3555
|
.documentation-search-results { max-height: none; }
|
|
3395
3556
|
.documentation-search-dialog > footer { justify-content: center; }
|
|
3396
|
-
.documentation-
|
|
3397
|
-
.documentation-
|
|
3398
|
-
.documentation-
|
|
3557
|
+
.documentation-launcher-dock { padding-bottom: 12px; }
|
|
3558
|
+
.documentation-launcher-agent { padding: 0 9px; }
|
|
3559
|
+
.documentation-launcher-agent .documentation-launcher-agent-name { display: none; }
|
|
3560
|
+
.documentation-launcher-hint { display: none; }
|
|
3561
|
+
.documentation-assistant { inset: auto auto 0 0; width: 100%; height: calc(100vh - 8px); transform: none; border-width: 1px 0 0; border-radius: 18px 18px 0 0; }
|
|
3399
3562
|
.documentation-assistant-suggestions { grid-template-columns: 1fr; }
|
|
3400
3563
|
.documentation-playground-title { align-items: flex-start; flex-direction: column; }
|
|
3401
3564
|
}
|
|
3402
3565
|
|
|
3566
|
+
/* Hover-only affordances: touch users get no reveal, so keep the space clear. */
|
|
3567
|
+
@media (hover: none) {
|
|
3568
|
+
.documentation-prose .documentation-heading-anchor { display: none; }
|
|
3569
|
+
.documentation-code-actions { opacity: 1; }
|
|
3570
|
+
.documentation-launcher-hint { display: none; }
|
|
3571
|
+
}
|
|
3572
|
+
|
|
3403
3573
|
@media (prefers-reduced-motion: reduce) {
|
|
3404
3574
|
html { scroll-behavior: auto; }
|
|
3405
3575
|
*, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .001ms !important; }
|
|
@@ -3414,17 +3584,19 @@ function renderPage(options, assets = {}, runtime = createPageRuntime(options))
|
|
|
3414
3584
|
const { config, page } = options;
|
|
3415
3585
|
const { data: runtimeData, document: runtimeDocument } = runtime;
|
|
3416
3586
|
const theme = runtimeData.config.theme;
|
|
3417
|
-
const accent =
|
|
3587
|
+
const accent = documentationAccent(theme);
|
|
3418
3588
|
const background = validCssColor(theme.background) ? theme.background : "#fbfcfe";
|
|
3419
3589
|
const backgroundDark = validCssColor(theme.backgroundDark) ? theme.backgroundDark : "#0c0e14";
|
|
3420
3590
|
const defaultMode = theme.defaultMode ?? "system";
|
|
3421
3591
|
const bodyFont = cssFontStack(theme.bodyFont?.family);
|
|
3422
3592
|
const headingFont = cssFontStack(theme.headingFont?.family ?? theme.bodyFont?.family);
|
|
3423
3593
|
const monoFont = cssMonoFontStack(theme.monoFont?.family);
|
|
3424
|
-
const
|
|
3425
|
-
const
|
|
3594
|
+
const fonts = resolveDocumentationFonts(theme, options.basePath);
|
|
3595
|
+
const fontFaces = renderFontFaces(fonts);
|
|
3596
|
+
const fontPreloads = renderFontPreloads(fonts);
|
|
3426
3597
|
const markup = assets.markup ?? renderDefaultDocumentation(runtimeData);
|
|
3427
3598
|
const assetRoot = documentationPublicPath(options.basePath, "/assets");
|
|
3599
|
+
const favicon = theme.favicon ?? documentationPublicPath(options.basePath, "/assets/favicon.svg");
|
|
3428
3600
|
return `<!doctype html>
|
|
3429
3601
|
<html lang="en" data-theme-mode="${defaultMode}" data-theme-strict="${theme.strictMode ? "true" : "false"}" data-code-mode="${theme.codeBlockMode ?? "dark"}" data-background-decoration="${theme.backgroundDecoration ?? "none"}" data-eyebrow-style="${theme.eyebrowStyle ?? "section"}">
|
|
3430
3602
|
<head>
|
|
@@ -3441,8 +3613,11 @@ function renderPage(options, assets = {}, runtime = createPageRuntime(options))
|
|
|
3441
3613
|
<meta property="og:description" content="${escapeHtml(runtimeDocument.openGraph["og:description"] ?? "")}">
|
|
3442
3614
|
${runtimeDocument.openGraph["og:url"] ? `<meta property="og:url" content="${escapeHtml(runtimeDocument.openGraph["og:url"])}">` : ""}
|
|
3443
3615
|
${config.seo.ogImage ? `<meta property="og:image" content="${escapeHtml(config.seo.ogImage)}">` : ""}
|
|
3616
|
+
<meta name="twitter:card" content="${config.seo.ogImage ? "summary_large_image" : "summary"}">
|
|
3617
|
+
<meta name="theme-color" media="(prefers-color-scheme: light)" content="${background}">
|
|
3618
|
+
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="${backgroundDark}">
|
|
3444
3619
|
${renderCustomMeta(config.seo.metaTags)}
|
|
3445
|
-
|
|
3620
|
+
<link rel="icon" href="${escapeHtml(favicon)}">
|
|
3446
3621
|
${fontPreloads}
|
|
3447
3622
|
<link rel="stylesheet" href="${assetRoot}/documentation.css">
|
|
3448
3623
|
${(assets.customStylesheets ?? []).map((href) => `<link rel="stylesheet" href="${escapeHtml(href)}">`).join("\n ")}
|
|
@@ -3456,25 +3631,21 @@ function renderPage(options, assets = {}, runtime = createPageRuntime(options))
|
|
|
3456
3631
|
</body>
|
|
3457
3632
|
</html>`;
|
|
3458
3633
|
}
|
|
3459
|
-
function renderFontFaces(
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
if (!font?.source || !validFontSource(font.source)) return [];
|
|
3464
|
-
const key = `${font.family}:${font.source}:${font.weight ?? "normal"}`;
|
|
3465
|
-
if (seen.has(key)) return [];
|
|
3466
|
-
seen.add(key);
|
|
3467
|
-
const family = safeFontFamily(font.family);
|
|
3468
|
-
const weight = typeof font.weight === "number" || /^(?:normal|bold|[1-9]00|[1-9]00\s+[1-9]00)$/i.test(String(font.weight)) ? String(font.weight ?? "normal") : "normal";
|
|
3469
|
-
const format = font.format && /^[a-z0-9-]{2,20}$/i.test(font.format) ? ` format("${font.format}")` : "";
|
|
3470
|
-
return [`@font-face{font-family:"${family}";src:url("${font.source}")${format};font-weight:${weight};font-display:swap}`];
|
|
3634
|
+
function renderFontFaces(fonts) {
|
|
3635
|
+
return fonts.map((font) => {
|
|
3636
|
+
const format = font.format ? ` format("${font.format}")` : "";
|
|
3637
|
+
return `@font-face{font-family:"${font.family}";src:url("${font.source}")${format};font-weight:${font.weight};font-display:swap}`;
|
|
3471
3638
|
}).join("");
|
|
3472
3639
|
}
|
|
3473
|
-
function renderFontPreloads(
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
return
|
|
3640
|
+
function renderFontPreloads(fonts) {
|
|
3641
|
+
return fonts.map((font) => `<link rel="preload" href="${escapeHtml(font.source)}" as="font" type="font/woff2" crossorigin>`).join("\n ");
|
|
3642
|
+
}
|
|
3643
|
+
function documentationAccent(theme) {
|
|
3644
|
+
return validCssColor(theme.accent) ? theme.accent : "#635bff";
|
|
3645
|
+
}
|
|
3646
|
+
function renderDocumentationFavicon(theme) {
|
|
3647
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16 2.5c.5 7.7 5.8 13 13.5 13.5-7.7.5-13 5.8-13.5 13.5C15.5 21.8 10.2 16.5 2.5 16 10.2 15.5 15.5 10.2 16 2.5Z" fill="${escapeHtml(documentationAccent(theme))}"/></svg>
|
|
3648
|
+
`;
|
|
3478
3649
|
}
|
|
3479
3650
|
function renderCustomMeta(metaTags) {
|
|
3480
3651
|
if (!metaTags) return "";
|
|
@@ -3617,19 +3788,13 @@ function validCssColor(value) {
|
|
|
3617
3788
|
return /^(?:#[0-9a-f]{3,8}|(?:rgb|hsl)a?\([0-9.,%\s]+\)|[a-z]{3,20})$/i.test(value);
|
|
3618
3789
|
}
|
|
3619
3790
|
function cssFontStack(value) {
|
|
3620
|
-
const family = safeFontFamily(value
|
|
3791
|
+
const family = safeFontFamily(value, DOCUMENTATION_BUNDLED_BODY_FONT.family);
|
|
3621
3792
|
return `${family},ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif`;
|
|
3622
3793
|
}
|
|
3623
3794
|
function cssMonoFontStack(value) {
|
|
3624
|
-
const family = safeFontFamily(value
|
|
3795
|
+
const family = safeFontFamily(value, DOCUMENTATION_BUNDLED_MONO_FONT.family);
|
|
3625
3796
|
return `${family},ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace`;
|
|
3626
3797
|
}
|
|
3627
|
-
function safeFontFamily(value) {
|
|
3628
|
-
return /^[a-z0-9 ,.'-]{1,80}$/i.test(value) ? value : "Inter";
|
|
3629
|
-
}
|
|
3630
|
-
function validFontSource(value) {
|
|
3631
|
-
return /^(?:\/[a-z0-9_./%-]+|https:\/\/[^\s"'()<>]+)$/i.test(value);
|
|
3632
|
-
}
|
|
3633
3798
|
function themeBootstrap() {
|
|
3634
3799
|
try {
|
|
3635
3800
|
const stored = localStorage.getItem("deepspace-documentation-theme");
|
|
@@ -3696,6 +3861,10 @@ function buildDocumentation(options) {
|
|
|
3696
3861
|
} : {}, notFoundRuntime));
|
|
3697
3862
|
write("assets/documentation.css", DOCUMENTATION_CSS.trimStart());
|
|
3698
3863
|
write("assets/documentation-theme.js", DOCUMENTATION_THEME_BOOTSTRAP);
|
|
3864
|
+
for (const font of resolveDocumentationFonts(renderConfig.theme, basePath)) {
|
|
3865
|
+
if (font.bundled) write(`assets/fonts/${font.bundled.fileName}`, readBundledFont(font.bundled));
|
|
3866
|
+
}
|
|
3867
|
+
if (!renderConfig.theme.favicon) write("assets/favicon.svg", renderDocumentationFavicon(renderConfig.theme));
|
|
3699
3868
|
if (!customRuntime) write("assets/documentation-runtime.js", buildDocumentationRuntime().trimStart());
|
|
3700
3869
|
write("search.json", stableJson(createSearchEntries(validation.graph.pages)));
|
|
3701
3870
|
write("assistant-index.json", stableJson(createAssistantChunks(validation.graph.pages)));
|
|
@@ -3748,7 +3917,7 @@ function buildDocumentation(options) {
|
|
|
3748
3917
|
}
|
|
3749
3918
|
function buildDocumentationRuntime() {
|
|
3750
3919
|
const entry = runtimeEntry("documentation-runtime.js", "runtime/auto-client.tsx");
|
|
3751
|
-
if (entry.endsWith(".js")) return
|
|
3920
|
+
if (entry.endsWith(".js")) return readFileSync7(entry, "utf8");
|
|
3752
3921
|
const result = buildSync3({
|
|
3753
3922
|
entryPoints: [entry],
|
|
3754
3923
|
bundle: true,
|
|
@@ -3768,7 +3937,7 @@ function buildDocumentationRuntime() {
|
|
|
3768
3937
|
}
|
|
3769
3938
|
|
|
3770
3939
|
// src/documentation/vite.ts
|
|
3771
|
-
import { existsSync as
|
|
3940
|
+
import { existsSync as existsSync8, readdirSync as readdirSync3, realpathSync as realpathSync3, rmSync as rmSync3 } from "fs";
|
|
3772
3941
|
import { relative as relative6, resolve as resolve8, sep as sep5 } from "path";
|
|
3773
3942
|
var IGNORED_DOCUMENTATION_WATCH_PATH = /^(?:\.deepspace|\.git|\.wrangler|dist|node_modules|public\/_documentation(?:-root)?|src\/router\.ts)(?:\/|$)/;
|
|
3774
3943
|
function deepSpaceDocumentation() {
|
|
@@ -3776,7 +3945,7 @@ function deepSpaceDocumentation() {
|
|
|
3776
3945
|
let outputDir = resolve8(appDir, ".deepspace", "documentation");
|
|
3777
3946
|
let result = null;
|
|
3778
3947
|
const rebuild = () => {
|
|
3779
|
-
if (!
|
|
3948
|
+
if (!existsSync8(resolve8(appDir, DOCUMENTATION_CONFIG_FILE))) {
|
|
3780
3949
|
rmSync3(outputDir, { recursive: true, force: true });
|
|
3781
3950
|
rmSync3(`${outputDir}-root`, { recursive: true, force: true });
|
|
3782
3951
|
result = null;
|