@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.
Files changed (129) hide show
  1. package/README.md +23 -4
  2. package/bin/terra-docs.mjs +187 -0
  3. package/lib-dist/components/NotFound.js +2 -2
  4. package/lib-dist/components/NotFound.js.map +1 -1
  5. package/lib-dist/components/StaticWorkspace.d.ts.map +1 -1
  6. package/lib-dist/components/StaticWorkspace.js +6 -0
  7. package/lib-dist/components/StaticWorkspace.js.map +1 -1
  8. package/lib-dist/components/navigation.d.ts +1 -0
  9. package/lib-dist/components/navigation.d.ts.map +1 -1
  10. package/lib-dist/components/navigation.js.map +1 -1
  11. package/lib-dist/components/terra/Workspace.d.ts.map +1 -1
  12. package/lib-dist/components/terra/Workspace.js.map +1 -1
  13. package/lib-dist/components/terra/editor/TerraContentEditor.d.ts +2 -1
  14. package/lib-dist/components/terra/editor/TerraContentEditor.d.ts.map +1 -1
  15. package/lib-dist/components/terra/editor/TerraContentEditor.js +2 -2
  16. package/lib-dist/components/terra/editor/TerraContentEditor.js.map +1 -1
  17. package/lib-dist/components/terra/editor/_blocks.d.ts.map +1 -1
  18. package/lib-dist/components/terra/editor/_blocks.js +5 -5
  19. package/lib-dist/components/terra/editor/_blocks.js.map +1 -1
  20. package/lib-dist/components/terra/editor/docs/BlockContext.js +1 -1
  21. package/lib-dist/components/terra/editor/docs/BlockContext.js.map +1 -1
  22. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js +1 -1
  23. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js.map +1 -1
  24. package/lib-dist/components/terra/editor/docs/TerraToolbar.js +1 -1
  25. package/lib-dist/components/terra/editor/docs/TerraToolbar.js.map +1 -1
  26. package/lib-dist/components/terra/editor/docs/_Callout.js +1 -1
  27. package/lib-dist/components/terra/editor/docs/_Callout.js.map +1 -1
  28. package/lib-dist/components/terra/editor/docs/_CodeBlock.d.ts.map +1 -1
  29. package/lib-dist/components/terra/editor/docs/_CodeBlock.js +4 -5
  30. package/lib-dist/components/terra/editor/docs/_CodeBlock.js.map +1 -1
  31. package/lib-dist/components/terra/editor/docs/_DocsCode.d.ts.map +1 -1
  32. package/lib-dist/components/terra/editor/docs/_DocsCode.js +4 -4
  33. package/lib-dist/components/terra/editor/docs/_DocsCode.js.map +1 -1
  34. package/lib-dist/components/terra/editor/docs/_DocsImage.js +3 -3
  35. package/lib-dist/components/terra/editor/docs/_DocsImage.js.map +1 -1
  36. package/lib-dist/components/terra/editor/docs/_Math.js +3 -3
  37. package/lib-dist/components/terra/editor/docs/_Math.js.map +1 -1
  38. package/lib-dist/components/terra/editor/docs/_Nodes.d.ts.map +1 -1
  39. package/lib-dist/components/terra/editor/docs/_Nodes.js.map +1 -1
  40. package/lib-dist/components/terra/editor/docs/_Table.js +2 -2
  41. package/lib-dist/components/terra/editor/docs/_Table.js.map +1 -1
  42. package/lib-dist/components/terra/editor/docs/_Tabs.js +1 -1
  43. package/lib-dist/components/terra/editor/docs/_Tabs.js.map +1 -1
  44. package/lib-dist/components/terra/editor/docs/_TsDocs.js +1 -1
  45. package/lib-dist/components/terra/editor/docs/_TsDocs.js.map +1 -1
  46. package/lib-dist/components/terra/flow/Nodes.d.ts +1 -2
  47. package/lib-dist/components/terra/flow/Nodes.d.ts.map +1 -1
  48. package/lib-dist/components/terra/flow/Nodes.js +3 -3
  49. package/lib-dist/components/terra/flow/Nodes.js.map +1 -1
  50. package/lib-dist/components/terra/flow/_chrome.d.ts +1 -3
  51. package/lib-dist/components/terra/flow/_chrome.d.ts.map +1 -1
  52. package/lib-dist/components/terra/flow/_chrome.js +5 -5
  53. package/lib-dist/components/terra/flow/_chrome.js.map +1 -1
  54. package/lib-dist/components/terra/pages/docs/_attachments.d.ts.map +1 -1
  55. package/lib-dist/components/terra/pages/docs/_attachments.js +7 -7
  56. package/lib-dist/components/terra/pages/docs/_attachments.js.map +1 -1
  57. package/lib-dist/components/terra/pages/docs/_blocks.d.ts.map +1 -1
  58. package/lib-dist/components/terra/pages/docs/_blocks.js +5 -5
  59. package/lib-dist/components/terra/pages/docs/_blocks.js.map +1 -1
  60. package/lib-dist/components/terra/pages/docs/_editable.d.ts +1 -2
  61. package/lib-dist/components/terra/pages/docs/_editable.d.ts.map +1 -1
  62. package/lib-dist/components/terra/pages/docs/_editable.js +2 -2
  63. package/lib-dist/components/terra/pages/docs/_editable.js.map +1 -1
  64. package/lib-dist/components/terra/pages/docs/_export-dialog.js +5 -5
  65. package/lib-dist/components/terra/pages/docs/_export-dialog.js.map +1 -1
  66. package/lib-dist/components/terra/pages/docs/_main.d.ts.map +1 -1
  67. package/lib-dist/components/terra/pages/docs/_main.js +11 -11
  68. package/lib-dist/components/terra/pages/docs/_main.js.map +1 -1
  69. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js +1 -1
  70. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js.map +1 -1
  71. package/lib-dist/components/terra/pages/docs/_sidebar.d.ts.map +1 -1
  72. package/lib-dist/components/terra/pages/docs/_sidebar.js +12 -12
  73. package/lib-dist/components/terra/pages/docs/_sidebar.js.map +1 -1
  74. package/lib-dist/components/terra/pages/docs/_toc.d.ts.map +1 -1
  75. package/lib-dist/components/terra/pages/docs/_toc.js +1 -1
  76. package/lib-dist/components/terra/pages/docs/_toc.js.map +1 -1
  77. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js +1 -1
  78. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js.map +1 -1
  79. package/lib-dist/components/terra/pages/docs/_toolbar.d.ts +1 -2
  80. package/lib-dist/components/terra/pages/docs/_toolbar.d.ts.map +1 -1
  81. package/lib-dist/components/terra/pages/docs/_toolbar.js +12 -13
  82. package/lib-dist/components/terra/pages/docs/_toolbar.js.map +1 -1
  83. package/lib-dist/components/terra/pages/docs/_tree.d.ts +1 -4
  84. package/lib-dist/components/terra/pages/docs/_tree.d.ts.map +1 -1
  85. package/lib-dist/components/terra/pages/docs/_tree.js +3 -3
  86. package/lib-dist/components/terra/pages/docs/_tree.js.map +1 -1
  87. package/lib-dist/components/terra/ui.d.ts +1 -1
  88. package/lib-dist/components/terra/ui.d.ts.map +1 -1
  89. package/lib-dist/components/terra/ui.js +1 -1
  90. package/lib-dist/components/terra/ui.js.map +1 -1
  91. package/lib-dist/lib/markdown-model.d.ts.map +1 -1
  92. package/lib-dist/lib/markdown-model.js +7 -8
  93. package/lib-dist/lib/markdown-model.js.map +1 -1
  94. package/lib-dist/lib/terra/docs/state.d.ts +0 -1
  95. package/lib-dist/lib/terra/docs/state.d.ts.map +1 -1
  96. package/lib-dist/lib/terra/docs/state.js +0 -1
  97. package/lib-dist/lib/terra/docs/state.js.map +1 -1
  98. package/lib-dist/lib/terra/docs/workspace.d.ts +1 -4
  99. package/lib-dist/lib/terra/docs/workspace.d.ts.map +1 -1
  100. package/lib-dist/lib/terra/docs/workspace.js +0 -1
  101. package/lib-dist/lib/terra/docs/workspace.js.map +1 -1
  102. package/lib-dist/lib/terra/flow/powerSource.d.ts +1 -2
  103. package/lib-dist/lib/terra/flow/powerSource.d.ts.map +1 -1
  104. package/lib-dist/lib/terra/flow/powerSource.js.map +1 -1
  105. package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts.map +1 -1
  106. package/lib-dist/lib/terra/runtime/content/document-markdown.js.map +1 -1
  107. package/lib-dist/lib/terra/runtime/content/markdown.js.map +1 -1
  108. package/lib-dist/lib/terra/runtime/content.d.ts.map +1 -1
  109. package/lib-dist/lib/terra/runtime/content.js.map +1 -1
  110. package/lib-dist/lib/terra/runtime/nodes.d.ts.map +1 -1
  111. package/lib-dist/lib/terra/runtime/nodes.js.map +1 -1
  112. package/lib-dist/lib/workspace-types.d.ts +3 -0
  113. package/lib-dist/lib/workspace-types.d.ts.map +1 -1
  114. package/package.json +42 -34
  115. package/site/astro.config.mjs +71 -0
  116. package/site/base-path-remark-plugin.mjs +31 -0
  117. package/site/docs-content-plugin.mjs +73 -0
  118. package/site/src/components/DocsSiteSearch.tsx +108 -0
  119. package/site/src/lib/catalog.ts +151 -0
  120. package/site/src/pages/404.astro +38 -0
  121. package/site/src/pages/[...slug].astro +49 -0
  122. package/site/src/styles/search.css +56 -0
  123. package/src/components/NotFound.tsx +2 -2
  124. package/src/components/SiteLayout.astro +9 -1
  125. package/src/components/navigation.tsx +1 -0
  126. package/lib-dist/lib/docs-catalog.d.ts +0 -5
  127. package/lib-dist/lib/docs-catalog.d.ts.map +0 -1
  128. package/lib-dist/lib/docs-catalog.js +0 -75
  129. 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/terra-original';
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>
@@ -10,6 +10,7 @@ export type DocsNavNode = {
10
10
  description?: string;
11
11
  updatedAt?: string;
12
12
  attachments?: DocsAttachment[];
13
+ hue?: number | null;
13
14
  children?: DocsNavNode[];
14
15
  };
15
16
 
@@ -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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"}