@terra-symposium/docs 0.1.71 → 0.1.73
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/README.md +23 -4
- package/bin/terra-docs.mjs +187 -0
- package/lib-dist/components/NotFound.js +2 -2
- package/lib-dist/components/NotFound.js.map +1 -1
- package/lib-dist/components/StaticWorkspace.d.ts.map +1 -1
- package/lib-dist/components/StaticWorkspace.js +6 -0
- package/lib-dist/components/StaticWorkspace.js.map +1 -1
- package/lib-dist/components/navigation.d.ts +1 -0
- package/lib-dist/components/navigation.d.ts.map +1 -1
- package/lib-dist/components/navigation.js.map +1 -1
- package/lib-dist/components/terra/Workspace.d.ts.map +1 -1
- package/lib-dist/components/terra/Workspace.js.map +1 -1
- package/lib-dist/components/terra/editor/TerraContentEditor.d.ts +2 -1
- package/lib-dist/components/terra/editor/TerraContentEditor.d.ts.map +1 -1
- package/lib-dist/components/terra/editor/TerraContentEditor.js +2 -2
- package/lib-dist/components/terra/editor/TerraContentEditor.js.map +1 -1
- package/lib-dist/components/terra/editor/_blocks.d.ts.map +1 -1
- package/lib-dist/components/terra/editor/_blocks.js +5 -5
- package/lib-dist/components/terra/editor/_blocks.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/BlockContext.js +1 -1
- package/lib-dist/components/terra/editor/docs/BlockContext.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js +1 -1
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/TerraToolbar.js +1 -1
- package/lib-dist/components/terra/editor/docs/TerraToolbar.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Callout.js +1 -1
- package/lib-dist/components/terra/editor/docs/_Callout.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_CodeBlock.d.ts.map +1 -1
- package/lib-dist/components/terra/editor/docs/_CodeBlock.js +4 -5
- package/lib-dist/components/terra/editor/docs/_CodeBlock.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_DocsCode.d.ts.map +1 -1
- package/lib-dist/components/terra/editor/docs/_DocsCode.js +4 -4
- package/lib-dist/components/terra/editor/docs/_DocsCode.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_DocsImage.js +3 -3
- package/lib-dist/components/terra/editor/docs/_DocsImage.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Math.js +3 -3
- package/lib-dist/components/terra/editor/docs/_Math.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Nodes.d.ts.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Nodes.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Table.js +2 -2
- package/lib-dist/components/terra/editor/docs/_Table.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_Tabs.js +1 -1
- package/lib-dist/components/terra/editor/docs/_Tabs.js.map +1 -1
- package/lib-dist/components/terra/editor/docs/_TsDocs.js +1 -1
- package/lib-dist/components/terra/editor/docs/_TsDocs.js.map +1 -1
- package/lib-dist/components/terra/flow/Nodes.d.ts +1 -2
- package/lib-dist/components/terra/flow/Nodes.d.ts.map +1 -1
- package/lib-dist/components/terra/flow/Nodes.js +3 -3
- package/lib-dist/components/terra/flow/Nodes.js.map +1 -1
- package/lib-dist/components/terra/flow/_chrome.d.ts +1 -3
- package/lib-dist/components/terra/flow/_chrome.d.ts.map +1 -1
- package/lib-dist/components/terra/flow/_chrome.js +5 -5
- package/lib-dist/components/terra/flow/_chrome.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_attachments.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_attachments.js +7 -7
- package/lib-dist/components/terra/pages/docs/_attachments.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_blocks.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_blocks.js +5 -5
- package/lib-dist/components/terra/pages/docs/_blocks.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_editable.d.ts +1 -2
- package/lib-dist/components/terra/pages/docs/_editable.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_editable.js +2 -2
- package/lib-dist/components/terra/pages/docs/_editable.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_export-dialog.js +5 -5
- package/lib-dist/components/terra/pages/docs/_export-dialog.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_main.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_main.js +11 -11
- package/lib-dist/components/terra/pages/docs/_main.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js +1 -1
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_sidebar.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_sidebar.js +12 -12
- package/lib-dist/components/terra/pages/docs/_sidebar.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_toc.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_toc.js +1 -1
- package/lib-dist/components/terra/pages/docs/_toc.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js +1 -1
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_toolbar.d.ts +1 -2
- package/lib-dist/components/terra/pages/docs/_toolbar.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_toolbar.js +12 -13
- package/lib-dist/components/terra/pages/docs/_toolbar.js.map +1 -1
- package/lib-dist/components/terra/pages/docs/_tree.d.ts +1 -4
- package/lib-dist/components/terra/pages/docs/_tree.d.ts.map +1 -1
- package/lib-dist/components/terra/pages/docs/_tree.js +3 -3
- package/lib-dist/components/terra/pages/docs/_tree.js.map +1 -1
- package/lib-dist/components/terra/ui.d.ts +1 -1
- package/lib-dist/components/terra/ui.d.ts.map +1 -1
- package/lib-dist/components/terra/ui.js +1 -1
- package/lib-dist/components/terra/ui.js.map +1 -1
- package/lib-dist/lib/markdown-model.d.ts.map +1 -1
- package/lib-dist/lib/markdown-model.js +7 -8
- package/lib-dist/lib/markdown-model.js.map +1 -1
- package/lib-dist/lib/terra/docs/state.d.ts +0 -1
- package/lib-dist/lib/terra/docs/state.d.ts.map +1 -1
- package/lib-dist/lib/terra/docs/state.js +0 -1
- package/lib-dist/lib/terra/docs/state.js.map +1 -1
- package/lib-dist/lib/terra/docs/workspace.d.ts +1 -4
- package/lib-dist/lib/terra/docs/workspace.d.ts.map +1 -1
- package/lib-dist/lib/terra/docs/workspace.js +0 -1
- package/lib-dist/lib/terra/docs/workspace.js.map +1 -1
- package/lib-dist/lib/terra/flow/powerSource.d.ts +1 -2
- package/lib-dist/lib/terra/flow/powerSource.d.ts.map +1 -1
- package/lib-dist/lib/terra/flow/powerSource.js.map +1 -1
- package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts.map +1 -1
- package/lib-dist/lib/terra/runtime/content/document-markdown.js.map +1 -1
- package/lib-dist/lib/terra/runtime/content/markdown.js.map +1 -1
- package/lib-dist/lib/terra/runtime/content.d.ts.map +1 -1
- package/lib-dist/lib/terra/runtime/content.js.map +1 -1
- package/lib-dist/lib/terra/runtime/nodes.d.ts.map +1 -1
- package/lib-dist/lib/terra/runtime/nodes.js.map +1 -1
- package/lib-dist/lib/workspace-types.d.ts +3 -0
- package/lib-dist/lib/workspace-types.d.ts.map +1 -1
- package/package.json +42 -34
- package/site/astro.config.mjs +71 -0
- package/site/base-path-remark-plugin.mjs +31 -0
- package/site/docs-content-plugin.mjs +73 -0
- package/site/src/components/DocsSiteSearch.tsx +108 -0
- package/site/src/lib/catalog.ts +151 -0
- package/site/src/pages/404.astro +38 -0
- package/site/src/pages/[...slug].astro +49 -0
- package/site/src/styles/search.css +56 -0
- package/src/components/NotFound.tsx +2 -2
- package/src/components/SiteLayout.astro +9 -1
- package/src/components/navigation.tsx +1 -0
- package/lib-dist/lib/docs-catalog.d.ts +0 -5
- package/lib-dist/lib/docs-catalog.d.ts.map +0 -1
- package/lib-dist/lib/docs-catalog.js +0 -75
- package/lib-dist/lib/docs-catalog.js.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
import type { DocsNavNode } from '../../../src/components/navigation.js';
|
|
4
|
+
|
|
5
|
+
type SidebarFrontmatter = {
|
|
6
|
+
label?: string;
|
|
7
|
+
order?: number;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type DocsFrontmatter = {
|
|
12
|
+
title?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
hue?: number | null;
|
|
15
|
+
label?: string;
|
|
16
|
+
order?: number;
|
|
17
|
+
hidden?: boolean;
|
|
18
|
+
visibility?: 'visible' | 'hidden';
|
|
19
|
+
sidebar?: SidebarFrontmatter;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type ContentModule = {
|
|
23
|
+
Content?: unknown;
|
|
24
|
+
default?: unknown;
|
|
25
|
+
frontmatter?: DocsFrontmatter;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type SitePage = {
|
|
29
|
+
file: string;
|
|
30
|
+
slug: string;
|
|
31
|
+
title: string;
|
|
32
|
+
sidebarLabel?: string;
|
|
33
|
+
description: string;
|
|
34
|
+
hue?: number | null;
|
|
35
|
+
hidden: boolean;
|
|
36
|
+
order: number;
|
|
37
|
+
content: unknown;
|
|
38
|
+
markdown: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const modules = import.meta.glob<ContentModule>('/docs/**/*.{md,mdx}', { eager: true });
|
|
42
|
+
const sources = import.meta.glob<string>('/docs/**/*.{md,mdx}', {
|
|
43
|
+
query: '?raw',
|
|
44
|
+
import: 'default',
|
|
45
|
+
eager: true,
|
|
46
|
+
});
|
|
47
|
+
const base = import.meta.env.BASE_URL;
|
|
48
|
+
|
|
49
|
+
function titleFromSource(source: string, slug: string): string {
|
|
50
|
+
const body = source.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, '');
|
|
51
|
+
const heading = /^#\s+(.+?)\s*#*\s*$/m.exec(body)?.[1]?.trim();
|
|
52
|
+
if (heading) return heading;
|
|
53
|
+
const name = slug.split('/').at(-1) || 'Overview';
|
|
54
|
+
return name.replace(/[-_]+/g, ' ').replace(/\b\p{L}/gu, (letter) => letter.toUpperCase());
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function routeForFile(file: string): string {
|
|
58
|
+
const relative = file.replace(/^\/?docs\//, '').replace(/\.(?:md|mdx)$/i, '');
|
|
59
|
+
return relative.replace(/(?:^|\/)index$/i, '').replace(/^\/+|\/+$/g, '');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const routes = new Map<string, string>();
|
|
63
|
+
export const sitePages: SitePage[] = Object.entries(modules)
|
|
64
|
+
.map(([file, module]) => {
|
|
65
|
+
const slug = routeForFile(file);
|
|
66
|
+
const previous = routes.get(slug);
|
|
67
|
+
if (previous) {
|
|
68
|
+
throw new Error(`Duplicate Docs route "${slug || '/'}": ${previous} and ${file}`);
|
|
69
|
+
}
|
|
70
|
+
routes.set(slug, file);
|
|
71
|
+
const markdown = sources[file] ?? '';
|
|
72
|
+
const frontmatter = module.frontmatter ?? {};
|
|
73
|
+
return {
|
|
74
|
+
file,
|
|
75
|
+
slug,
|
|
76
|
+
title: frontmatter.title ?? titleFromSource(markdown, slug),
|
|
77
|
+
...((frontmatter.sidebar?.label ?? frontmatter.label) ? { sidebarLabel: frontmatter.sidebar?.label ?? frontmatter.label } : {}),
|
|
78
|
+
description: frontmatter.description ?? '',
|
|
79
|
+
...(frontmatter.hue !== undefined ? { hue: frontmatter.hue } : {}),
|
|
80
|
+
hidden: frontmatter.sidebar?.hidden ?? frontmatter.hidden ?? frontmatter.visibility === 'hidden',
|
|
81
|
+
order: frontmatter.sidebar?.order ?? frontmatter.order ?? Number.MAX_SAFE_INTEGER,
|
|
82
|
+
content: module.Content ?? module.default,
|
|
83
|
+
markdown: markdown.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, ''),
|
|
84
|
+
};
|
|
85
|
+
})
|
|
86
|
+
.sort((left, right) => left.order - right.order || left.file.localeCompare(right.file));
|
|
87
|
+
|
|
88
|
+
if (sitePages.length === 0) {
|
|
89
|
+
throw new Error('No Markdown files found in docs/. Add docs/index.md to start a Terra Docs site.');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
type MutableNode = Omit<DocsNavNode, 'children'> & { children: Map<string, MutableNode> };
|
|
93
|
+
const rootNodes = new Map<string, MutableNode>();
|
|
94
|
+
|
|
95
|
+
function label(value: string): string {
|
|
96
|
+
return value.replace(/[-_]+/g, ' ').replace(/\b\p{L}/gu, (letter) => letter.toUpperCase());
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
for (const page of sitePages.filter((item) => !item.hidden && item.slug !== '404')) {
|
|
100
|
+
const segments = page.slug.split('/').filter(Boolean);
|
|
101
|
+
let currentNodes = rootNodes;
|
|
102
|
+
let current: MutableNode | undefined;
|
|
103
|
+
let prefix = '';
|
|
104
|
+
if (segments.length === 0) {
|
|
105
|
+
const overview = currentNodes.get('overview') ?? {
|
|
106
|
+
id: 'overview', title: 'Overview', children: new Map(),
|
|
107
|
+
};
|
|
108
|
+
if (!currentNodes.has('overview')) currentNodes.set('overview', overview);
|
|
109
|
+
Object.assign(overview, pageMetadata(page, pageHref('', base)));
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
for (const segment of segments) {
|
|
113
|
+
prefix = prefix ? `${prefix}/${segment}` : segment;
|
|
114
|
+
let node = currentNodes.get(segment);
|
|
115
|
+
if (!node) {
|
|
116
|
+
node = { id: prefix, title: label(segment), children: new Map() };
|
|
117
|
+
currentNodes.set(segment, node);
|
|
118
|
+
}
|
|
119
|
+
current = node;
|
|
120
|
+
currentNodes = node.children;
|
|
121
|
+
}
|
|
122
|
+
if (current) Object.assign(current, pageMetadata(page, pageHref(page.slug, base)));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function pageMetadata(page: SitePage, href: string): Partial<MutableNode> {
|
|
126
|
+
return {
|
|
127
|
+
id: page.slug || 'index',
|
|
128
|
+
title: page.sidebarLabel ?? page.title,
|
|
129
|
+
href,
|
|
130
|
+
...(page.description ? { description: page.description } : {}),
|
|
131
|
+
...(page.hue !== undefined ? { hue: page.hue } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function materialize(nodes: Map<string, MutableNode>): DocsNavNode[] {
|
|
136
|
+
return [...nodes.values()].map(({ children, ...node }) => ({
|
|
137
|
+
...node,
|
|
138
|
+
...(children.size ? { children: materialize(children) } : {}),
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const siteNavigation = materialize(rootNodes);
|
|
143
|
+
|
|
144
|
+
export function pageHref(slug: string, base = '/'): string {
|
|
145
|
+
const prefix = base === '/' ? '' : `/${base.replace(/^\/+|\/+$/g, '')}`;
|
|
146
|
+
return slug ? `${prefix}/${slug}/` : `${prefix}/`;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function pageForSlug(slug: string): SitePage | undefined {
|
|
150
|
+
return sitePages.find((page) => page.slug === slug);
|
|
151
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsNotFound from '../../../src/components/NotFound.astro';
|
|
3
|
+
import DocsSiteLayout from '../../../src/components/SiteLayout.astro';
|
|
4
|
+
import { pageForSlug, pageHref, siteNavigation } from '../lib/catalog.js';
|
|
5
|
+
|
|
6
|
+
const title = import.meta.env.PUBLIC_TERRA_DOCS_TITLE ?? 'Documentation';
|
|
7
|
+
const description = import.meta.env.PUBLIC_TERRA_DOCS_DESCRIPTION ?? '';
|
|
8
|
+
const base = import.meta.env.BASE_URL;
|
|
9
|
+
const page = pageForSlug('404');
|
|
10
|
+
const PageContent = page?.content;
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="utf-8" />
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
17
|
+
<meta name="robots" content="noindex" />
|
|
18
|
+
<title>Page not found · {title}</title>
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
{PageContent ? (
|
|
22
|
+
<DocsSiteLayout
|
|
23
|
+
title={title}
|
|
24
|
+
homeHref={pageHref('', base)}
|
|
25
|
+
description={description}
|
|
26
|
+
pageTitle={page.title}
|
|
27
|
+
nodes={siteNavigation}
|
|
28
|
+
currentPath={`${base}404/`}
|
|
29
|
+
rootPath={pageHref('', base)}
|
|
30
|
+
searchBase={base}
|
|
31
|
+
>
|
|
32
|
+
<PageContent />
|
|
33
|
+
</DocsSiteLayout>
|
|
34
|
+
) : (
|
|
35
|
+
<DocsNotFound appName={title} homeHref={pageHref('', base)} />
|
|
36
|
+
)}
|
|
37
|
+
</body>
|
|
38
|
+
</html>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsSiteLayout from '../../../src/components/SiteLayout.astro';
|
|
3
|
+
import { pageForSlug, pageHref, siteNavigation, sitePages } from '../lib/catalog.js';
|
|
4
|
+
|
|
5
|
+
const title = import.meta.env.PUBLIC_TERRA_DOCS_TITLE ?? 'Documentation';
|
|
6
|
+
const description = import.meta.env.PUBLIC_TERRA_DOCS_DESCRIPTION ?? '';
|
|
7
|
+
const base = import.meta.env.BASE_URL;
|
|
8
|
+
|
|
9
|
+
export function getStaticPaths() {
|
|
10
|
+
return sitePages.filter((page) => page.slug !== '404').map((page) => ({
|
|
11
|
+
params: { slug: page.slug || undefined },
|
|
12
|
+
props: { slug: page.slug },
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { slug = '' } = Astro.props;
|
|
17
|
+
const page = pageForSlug(slug);
|
|
18
|
+
const PageContent = page?.content;
|
|
19
|
+
const currentPath = pageHref(slug, base);
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
{page && PageContent ? (
|
|
23
|
+
<html lang="en">
|
|
24
|
+
<head>
|
|
25
|
+
<meta charset="utf-8" />
|
|
26
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
27
|
+
{page.description ? <meta name="description" content={page.description} /> : description ? <meta name="description" content={description} /> : null}
|
|
28
|
+
<title>{page.title} · {title}</title>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<DocsSiteLayout
|
|
32
|
+
title={title}
|
|
33
|
+
homeHref={pageHref('', base)}
|
|
34
|
+
description={description}
|
|
35
|
+
pageTitle={page.title}
|
|
36
|
+
nodes={siteNavigation}
|
|
37
|
+
currentPath={currentPath}
|
|
38
|
+
rootPath={pageHref('', base)}
|
|
39
|
+
searchBase={base}
|
|
40
|
+
>
|
|
41
|
+
<div class="terra-docs-page-content"><PageContent /></div>
|
|
42
|
+
</DocsSiteLayout>
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|
|
45
|
+
) : null}
|
|
46
|
+
|
|
47
|
+
<style is:global>
|
|
48
|
+
.terra-docs-page-content { max-width: 100%; }
|
|
49
|
+
</style>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
.terra-docs-search {
|
|
2
|
+
position: fixed;
|
|
3
|
+
top: 0.65rem;
|
|
4
|
+
right: 1rem;
|
|
5
|
+
z-index: 80;
|
|
6
|
+
font: inherit;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.terra-docs-search-trigger {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: 0.55rem;
|
|
13
|
+
min-height: 2.4rem;
|
|
14
|
+
padding: 0.35rem 0.55rem;
|
|
15
|
+
border: 1px solid rgb(var(--primary-6));
|
|
16
|
+
border-radius: 0.45rem;
|
|
17
|
+
background: rgb(var(--primary-2));
|
|
18
|
+
color: rgb(var(--primary-11));
|
|
19
|
+
font-size: 0.85rem;
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.terra-docs-search-trigger:hover { background: rgb(var(--primary-3)); }
|
|
24
|
+
.terra-docs-search-trigger > span:first-child { font-size: 1.25rem; line-height: 1; }
|
|
25
|
+
.terra-docs-search-trigger kbd { padding: 0.05rem 0.25rem; border: 1px solid rgb(var(--primary-6)); border-radius: 0.25rem; font-size: 0.7rem; }
|
|
26
|
+
|
|
27
|
+
.terra-docs-search-dialog {
|
|
28
|
+
width: min(42rem, calc(100vw - 2rem));
|
|
29
|
+
max-width: none;
|
|
30
|
+
max-height: min(75vh, 42rem);
|
|
31
|
+
padding: 0;
|
|
32
|
+
border: 1px solid rgb(var(--primary-7));
|
|
33
|
+
border-radius: 0.75rem;
|
|
34
|
+
background: rgb(var(--primary-2));
|
|
35
|
+
color: rgb(var(--primary-12));
|
|
36
|
+
box-shadow: 0 1.5rem 5rem rgb(0 0 0 / 0.35);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.terra-docs-search-dialog::backdrop { background: rgb(0 0 0 / 0.58); backdrop-filter: blur(2px); }
|
|
40
|
+
.terra-docs-search-panel { overflow: hidden; }
|
|
41
|
+
.terra-docs-search-input-row { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; border-bottom: 1px solid rgb(var(--primary-5)); }
|
|
42
|
+
.terra-docs-search-input-row > span { font-size: 1.3rem; }
|
|
43
|
+
.terra-docs-search-input-row input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: inherit; font: inherit; }
|
|
44
|
+
.terra-docs-search-input-row button { border: 1px solid rgb(var(--primary-6)); border-radius: 0.3rem; background: transparent; color: inherit; font-size: 0.7rem; cursor: pointer; }
|
|
45
|
+
.terra-docs-search-results { max-height: calc(75vh - 4rem); overflow: auto; padding: 0.5rem; }
|
|
46
|
+
.terra-docs-search-results > p { padding: 1rem; color: rgb(var(--primary-10)); font-size: 0.9rem; }
|
|
47
|
+
.terra-docs-search-results > a { display: grid; gap: 0.25rem; padding: 0.75rem; border-radius: 0.45rem; color: inherit; text-decoration: none; }
|
|
48
|
+
.terra-docs-search-results > a:hover, .terra-docs-search-results > a:focus { outline: 0; background: rgb(var(--primary-4)); }
|
|
49
|
+
.terra-docs-search-results > a span, .terra-docs-search-results > a small { color: rgb(var(--primary-10)); }
|
|
50
|
+
.terra-docs-search-results > a small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
51
|
+
|
|
52
|
+
@media (max-width: 640px) {
|
|
53
|
+
.terra-docs-search { top: 0.5rem; right: 0.5rem; }
|
|
54
|
+
.terra-docs-search-trigger { min-height: 2.1rem; }
|
|
55
|
+
.terra-docs-search-trigger kbd { display: none; }
|
|
56
|
+
}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
CardFooter,
|
|
9
9
|
CardHeader,
|
|
10
10
|
CardHeading,
|
|
11
|
-
} from '@terra-symposium/styling/ui
|
|
11
|
+
} from '@terra-symposium/styling/ui';
|
|
12
12
|
|
|
13
13
|
export type DocsNotFoundProps = {
|
|
14
14
|
appName?: string;
|
|
@@ -26,7 +26,7 @@ export function DocsNotFound({
|
|
|
26
26
|
<main className="terra-docs-workspace flex items-center justify-center bg-background px-5 text-primary-12">
|
|
27
27
|
<Card variant="primary-outline" size="sm" className="w-full text-center sm:max-w-lg">
|
|
28
28
|
<CardHeader className="items-center text-center">
|
|
29
|
-
<Badge variant="destructive" size="sm" rounded="md" aria-label="Error 404">
|
|
29
|
+
<Badge variant="destructive-default" size="sm" rounded="md" aria-label="Error 404">
|
|
30
30
|
404
|
|
31
31
|
</Badge>
|
|
32
32
|
<CardHeading as="h1" className="font-serif text-4xl italic tracking-tight">
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { DocsStaticWorkspace } from '../../lib-dist/components/StaticWorkspace.js';
|
|
3
3
|
import '../../lib-dist/style.css';
|
|
4
|
+
import { DocsSiteSearch } from '../../site/src/components/DocsSiteSearch.js';
|
|
5
|
+
import '../../site/src/styles/search.css';
|
|
4
6
|
import type { DocsAttachment, DocsSection, DocsNavNode } from '../../lib-dist/lib/index.js';
|
|
5
7
|
|
|
6
8
|
type Props = {
|
|
@@ -16,9 +18,10 @@ type Props = {
|
|
|
16
18
|
content?: unknown;
|
|
17
19
|
attachments?: DocsAttachment[];
|
|
18
20
|
updatedAt?: string;
|
|
21
|
+
searchBase?: string;
|
|
19
22
|
};
|
|
20
23
|
|
|
21
|
-
const { title, homeHref = '/', description, pageTitle, nodes = [], sections, currentPath, rootPath = '/', markdown = '', content, attachments = [], updatedAt } = Astro.props;
|
|
24
|
+
const { title, homeHref = '/', description, pageTitle, nodes = [], sections, currentPath, rootPath = '/', markdown = '', content, attachments = [], updatedAt, searchBase = '/' } = Astro.props;
|
|
22
25
|
const staticContent = Astro.slots.has('default');
|
|
23
26
|
---
|
|
24
27
|
|
|
@@ -40,3 +43,8 @@ const staticContent = Astro.slots.has('default');
|
|
|
40
43
|
>
|
|
41
44
|
<slot />
|
|
42
45
|
</DocsStaticWorkspace>
|
|
46
|
+
<DocsSiteSearch client:load base={searchBase} />
|
|
47
|
+
|
|
48
|
+
<style is:global>
|
|
49
|
+
.terra-docs-page-content { max-width: 100%; }
|
|
50
|
+
</style>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { DocsHostTreeNode } from './host.js';
|
|
2
|
-
import type { DocsLocalPage } from '../components/LocalDocsWorkspace.js';
|
|
3
|
-
export declare const docsPages: DocsLocalPage[];
|
|
4
|
-
export declare const docsTree: DocsHostTreeNode[];
|
|
5
|
-
//# sourceMappingURL=docs-catalog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docs-catalog.d.ts","sourceRoot":"","sources":["../../src/lib/docs-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAYzE,eAAO,MAAM,SAAS,EAAE,aAAa,EAuBnC,CAAC;AAoBH,eAAO,MAAM,QAAQ,EAAE,gBAAgB,EA0BpC,CAAC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/// <reference types="vite/client" />
|
|
2
|
-
const modules = import.meta.glob('../content/docs/**/*.md', { eager: true });
|
|
3
|
-
const sources = import.meta.glob('../content/docs/**/*.md', {
|
|
4
|
-
query: '?raw',
|
|
5
|
-
import: 'default',
|
|
6
|
-
eager: true,
|
|
7
|
-
});
|
|
8
|
-
export const docsPages = Object.entries(modules).map(([file, module]) => {
|
|
9
|
-
const slug = file
|
|
10
|
-
.replace('../content/docs/', '')
|
|
11
|
-
.replace(/(?:^|\/)index\.md$/, '')
|
|
12
|
-
.replace(/\.md$/, '');
|
|
13
|
-
const id = slug || 'index';
|
|
14
|
-
const title = module.frontmatter?.title ??
|
|
15
|
-
(id === 'index'
|
|
16
|
-
? 'Terra Docs'
|
|
17
|
-
: id
|
|
18
|
-
.split('/')
|
|
19
|
-
.at(-1)
|
|
20
|
-
.replace(/-/g, ' ')
|
|
21
|
-
.replace(/\b\w/g, (value) => value.toUpperCase()));
|
|
22
|
-
return {
|
|
23
|
-
id,
|
|
24
|
-
path: `content/docs/${id === 'index' ? 'index' : slug}.md`,
|
|
25
|
-
pathname: id === 'index' ? '/' : `/${slug}/`,
|
|
26
|
-
title,
|
|
27
|
-
...(module.frontmatter?.description ? { description: module.frontmatter.description } : {}),
|
|
28
|
-
markdown: String(sources[file] ?? '').replace(/^---\s*\n[\s\S]*?\n---\s*\n/, ''),
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
const sections = [
|
|
32
|
-
{
|
|
33
|
-
id: 'start-here',
|
|
34
|
-
title: 'Start here',
|
|
35
|
-
groups: [{ id: 'guides', title: 'Guides', ids: ['index', 'getting-started'] }],
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: 'configure',
|
|
39
|
-
title: 'Configure',
|
|
40
|
-
groups: [{ id: 'guides', title: 'Guides', ids: ['configuration', 'storage', 'deploy'] }],
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
id: 'reference',
|
|
44
|
-
title: 'Reference',
|
|
45
|
-
groups: [{ id: 'guides', title: 'Guides', ids: ['component', 'development'] }],
|
|
46
|
-
},
|
|
47
|
-
];
|
|
48
|
-
export const docsTree = sections.map((section) => ({
|
|
49
|
-
type: 'branch',
|
|
50
|
-
origName: section.id,
|
|
51
|
-
title: section.title,
|
|
52
|
-
path: section.id,
|
|
53
|
-
children: section.groups.map((group) => ({
|
|
54
|
-
type: 'branch',
|
|
55
|
-
origName: `${section.id}/${group.id}`,
|
|
56
|
-
title: group.title,
|
|
57
|
-
path: `${section.id}/${group.id}`,
|
|
58
|
-
children: group.ids.flatMap((id) => {
|
|
59
|
-
const page = docsPages.find((entry) => entry.id === id);
|
|
60
|
-
return page
|
|
61
|
-
? [
|
|
62
|
-
{
|
|
63
|
-
type: 'leaf',
|
|
64
|
-
origName: page.id,
|
|
65
|
-
title: page.title,
|
|
66
|
-
path: page.path,
|
|
67
|
-
url: page.pathname,
|
|
68
|
-
permission: 'read',
|
|
69
|
-
},
|
|
70
|
-
]
|
|
71
|
-
: [];
|
|
72
|
-
}),
|
|
73
|
-
})),
|
|
74
|
-
}));
|
|
75
|
-
//# sourceMappingURL=docs-catalog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docs-catalog.js","sourceRoot":"","sources":["../../src/lib/docs-catalog.ts"],"names":[],"mappings":"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"}
|