jamdesk 1.1.13 → 1.1.15
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/dist/commands/spellcheck.d.ts.map +1 -1
- package/dist/commands/spellcheck.js +2 -3
- package/dist/commands/spellcheck.js.map +1 -1
- package/package.json +1 -1
- package/vendored/app/layout.tsx +6 -11
- package/vendored/components/FontAwesomeLoader.tsx +36 -0
- package/vendored/components/snippets/generated/ar__SnippetIntro.tsx +43 -0
- package/vendored/components/snippets/generated/es__SnippetIntro.tsx +43 -0
- package/vendored/components/snippets/generated/ja__SnippetIntro.tsx +43 -0
- package/vendored/components/snippets/generated/ko__SnippetIntro.tsx +43 -0
- package/vendored/lib/docs-types.ts +9 -0
- package/vendored/schema/docs-schema.json +4735 -4700
- package/vendored/components/snippets/generated/CodeLink.tsx +0 -25
- package/vendored/components/snippets/generated/HeaderAPI.tsx +0 -44
- package/vendored/components/snippets/generated/PlansAvailable.tsx +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spellcheck.d.ts","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"spellcheck.d.ts","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJ1E"}
|
|
@@ -32,10 +32,9 @@ export async function spellcheck(options) {
|
|
|
32
32
|
}
|
|
33
33
|
const spin = !json ? spinner('Checking spelling...') : null;
|
|
34
34
|
// Build ignore words from all sources
|
|
35
|
-
const
|
|
36
|
-
const spellcheckConfig = configAny.spellcheck;
|
|
35
|
+
const spellcheckConfig = config.spellcheck;
|
|
37
36
|
const userIgnoreWords = spellcheckConfig?.ignore ?? [];
|
|
38
|
-
const projectName =
|
|
37
|
+
const projectName = config.name;
|
|
39
38
|
const ignoreWords = buildIgnoreWords(TECH_WORDS, projectName, userIgnoreWords);
|
|
40
39
|
const spell = createSpellchecker(ignoreWords);
|
|
41
40
|
// Phase 1: Find all misspellings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spellcheck.js","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,4BAA4B,CAAC;AAQpC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjC,iBAAiB;IACjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5D,sCAAsC;IACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"spellcheck.js","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jamdesk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.15",
|
|
4
4
|
"description": "CLI for Jamdesk — build, preview, and deploy documentation sites from MDX. Dev server with hot reload, 50+ components, OpenAPI support, AI search, and Mintlify migration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jamdesk",
|
package/vendored/app/layout.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import { ThemeProvider } from '@/components/theme/ThemeProvider';
|
|
|
6
6
|
import { LayoutWrapper } from '@/components/layout/LayoutWrapper';
|
|
7
7
|
import { CodeBlockCopyButton } from '@/components/CodeBlockCopyButton';
|
|
8
8
|
import { HeaderLinkCopy } from '@/components/HeaderLinkCopy';
|
|
9
|
+
import { FontAwesomeLoader, FA_CSS_HREF } from '@/components/FontAwesomeLoader';
|
|
9
10
|
import { getDocsConfig } from '@/lib/docs';
|
|
10
11
|
import { getDocsConfig as getIsrDocsConfig } from '@/lib/docs-isr';
|
|
11
12
|
import { isIsrMode, getProjectFromRequest, getHostAtDocs } from '@/lib/page-isr-helpers';
|
|
@@ -356,23 +357,16 @@ export default async function RootLayout({
|
|
|
356
357
|
)}
|
|
357
358
|
{/* Font Awesome CSS for navigation icons - self-hosted web fonts */}
|
|
358
359
|
{/* Loaded async (preload + script injection) to avoid render-blocking 40KB CSS */}
|
|
359
|
-
<link
|
|
360
|
-
rel="preload"
|
|
361
|
-
href="/_jd/fonts/fontawesome/css/all.min.css"
|
|
362
|
-
as="style"
|
|
363
|
-
/>
|
|
360
|
+
<link rel="preload" href={FA_CSS_HREF} as="style" />
|
|
364
361
|
{/* Preload FA font files to avoid waterfall: CSS → font discovery → download */}
|
|
365
362
|
<link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-light-300.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
|
|
366
363
|
<link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
|
|
367
364
|
<script
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
"l.href='/_jd/fonts/fontawesome/css/all.min.css';" +
|
|
371
|
-
"document.head.appendChild(l);"
|
|
372
|
-
}}
|
|
365
|
+
// eslint-disable-next-line react/no-danger -- static trusted content, no user input
|
|
366
|
+
dangerouslySetInnerHTML={{ __html: `var l=document.createElement('link');l.rel='stylesheet';l.href='${FA_CSS_HREF}';document.head.appendChild(l);window.__FA_CSS_LOADED__=true;` }}
|
|
373
367
|
/>
|
|
374
368
|
<noscript>
|
|
375
|
-
<link rel="stylesheet" href=
|
|
369
|
+
<link rel="stylesheet" href={FA_CSS_HREF} />
|
|
376
370
|
</noscript>
|
|
377
371
|
{/* DNS prefetch for KaTeX CDN - only when latex is enabled */}
|
|
378
372
|
{config.styling?.latex && (
|
|
@@ -529,6 +523,7 @@ export default async function RootLayout({
|
|
|
529
523
|
{/* Client components for copy buttons after hydration */}
|
|
530
524
|
<CodeBlockCopyButton />
|
|
531
525
|
<HeaderLinkCopy />
|
|
526
|
+
<FontAwesomeLoader />
|
|
532
527
|
</ThemeProvider>
|
|
533
528
|
{/* Crisp Chat */}
|
|
534
529
|
{config.integrations?.crisp?.websiteId &&
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
export const FA_CSS_HREF = '/_jd/fonts/fontawesome/css/all.min.css';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Ensures Font Awesome CSS is loaded in the document head.
|
|
9
|
+
*
|
|
10
|
+
* On normal pages, the inline script in layout.tsx's <head> loads the
|
|
11
|
+
* stylesheet during initial HTML parsing. But on 404 pages, Next.js renders
|
|
12
|
+
* a minimal error shell (<html id="__next_error__">) that omits the root
|
|
13
|
+
* layout's <head> content. The RSC payload later adds the script tag via
|
|
14
|
+
* React hydration, but inline scripts injected by React after initial load
|
|
15
|
+
* don't execute. This component acts as a fallback, injecting the stylesheet
|
|
16
|
+
* link via useEffect so icons render on 404 pages too.
|
|
17
|
+
*/
|
|
18
|
+
export function FontAwesomeLoader() {
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
// Inline script in <head> sets this flag — skip DOM query on normal pages
|
|
21
|
+
if ((window as Window & { __FA_CSS_LOADED__?: boolean }).__FA_CSS_LOADED__) return;
|
|
22
|
+
|
|
23
|
+
// 404 error shell path: check if stylesheet exists (handles browser-normalized absolute URLs)
|
|
24
|
+
const existing = document.querySelector(
|
|
25
|
+
`link[rel="stylesheet"][href$="${FA_CSS_HREF}"]`
|
|
26
|
+
);
|
|
27
|
+
if (existing) return;
|
|
28
|
+
|
|
29
|
+
const link = document.createElement('link');
|
|
30
|
+
link.rel = 'stylesheet';
|
|
31
|
+
link.href = FA_CSS_HREF;
|
|
32
|
+
document.head.appendChild(link);
|
|
33
|
+
}, []);
|
|
34
|
+
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Helper component for rendering plain MDX snippets
|
|
18
|
+
// Content is from project snippets (controlled source), not user input
|
|
19
|
+
const PlainMdxSnippet = ({ content }: { content: string }) => {
|
|
20
|
+
const formattedContent = content
|
|
21
|
+
.split('\n\n')
|
|
22
|
+
.map((paragraph) => {
|
|
23
|
+
let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
24
|
+
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
25
|
+
html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
26
|
+
return html;
|
|
27
|
+
})
|
|
28
|
+
.filter(p => p.trim());
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="snippet-content">
|
|
32
|
+
{formattedContent.map((p, i) => (
|
|
33
|
+
<p key={i} dangerouslySetInnerHTML={{ __html: p }} />
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const SnippetIntro = () => {
|
|
40
|
+
return <PlainMdxSnippet content={"أحد المبادئ الأساسية في تطوير البرمجيات هو مبدأ DRY (Don't Repeat\nYourself). وهذا مبدأ ينطبق على التوثيق أيضًا.\nإذا وجدت نفسك تكرر المحتوى نفسه في عدة أماكن، ففكّر في إنشاء مقتطف\nمخصص (snippet) للحفاظ على content الخاص بك متزامنًا."} />;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default SnippetIntro;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Helper component for rendering plain MDX snippets
|
|
18
|
+
// Content is from project snippets (controlled source), not user input
|
|
19
|
+
const PlainMdxSnippet = ({ content }: { content: string }) => {
|
|
20
|
+
const formattedContent = content
|
|
21
|
+
.split('\n\n')
|
|
22
|
+
.map((paragraph) => {
|
|
23
|
+
let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
24
|
+
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
25
|
+
html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
26
|
+
return html;
|
|
27
|
+
})
|
|
28
|
+
.filter(p => p.trim());
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="snippet-content">
|
|
32
|
+
{formattedContent.map((p, i) => (
|
|
33
|
+
<p key={i} dangerouslySetInnerHTML={{ __html: p }} />
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const SnippetIntro = () => {
|
|
40
|
+
return <PlainMdxSnippet content={"Uno de los principios fundamentales del desarrollo de software es DRY (Don't Repeat Yourself). Este es un principio que también se aplica a la documentación. Si te encuentras repitiendo el mismo contenido en varios lugares, deberías considerar crear un snippet personalizado para mantener tu contenido sincronizado."} />;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default SnippetIntro;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Helper component for rendering plain MDX snippets
|
|
18
|
+
// Content is from project snippets (controlled source), not user input
|
|
19
|
+
const PlainMdxSnippet = ({ content }: { content: string }) => {
|
|
20
|
+
const formattedContent = content
|
|
21
|
+
.split('\n\n')
|
|
22
|
+
.map((paragraph) => {
|
|
23
|
+
let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
24
|
+
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
25
|
+
html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
26
|
+
return html;
|
|
27
|
+
})
|
|
28
|
+
.filter(p => p.trim());
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="snippet-content">
|
|
32
|
+
{formattedContent.map((p, i) => (
|
|
33
|
+
<p key={i} dangerouslySetInnerHTML={{ __html: p }} />
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const SnippetIntro = () => {
|
|
40
|
+
return <PlainMdxSnippet content={"ソフトウェア開発の中核となる原則の一つに、DRY(Don't Repeat Yourself)があります。この原則はドキュメントにも当てはまります。同じ内容を複数の場所で繰り返している場合は、内容を常に同期させておけるように、カスタムスニペットの作成を検討してください。"} />;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default SnippetIntro;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Helper component for rendering plain MDX snippets
|
|
18
|
+
// Content is from project snippets (controlled source), not user input
|
|
19
|
+
const PlainMdxSnippet = ({ content }: { content: string }) => {
|
|
20
|
+
const formattedContent = content
|
|
21
|
+
.split('\n\n')
|
|
22
|
+
.map((paragraph) => {
|
|
23
|
+
let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
24
|
+
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
25
|
+
html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
26
|
+
return html;
|
|
27
|
+
})
|
|
28
|
+
.filter(p => p.trim());
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="snippet-content">
|
|
32
|
+
{formattedContent.map((p, i) => (
|
|
33
|
+
<p key={i} dangerouslySetInnerHTML={{ __html: p }} />
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const SnippetIntro = () => {
|
|
40
|
+
return <PlainMdxSnippet content={"소프트웨어 개발의 핵심 원칙 중 하나는 DRY(Don't Repeat Yourself)입니다. 이 원칙은 문서 작성에도 그대로 적용됩니다. 동일한 content를 여러 곳에서 반복해서 작성하고 있다면, content를 일관되게 유지할 수 있도록 커스텀 스니펫을 만드는 것을 고려해야 합니다."} />;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default SnippetIntro;
|
|
@@ -733,6 +733,14 @@ export interface AnalyticsConfig {
|
|
|
733
733
|
enabled?: boolean;
|
|
734
734
|
}
|
|
735
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Spellcheck configuration for the jamdesk spellcheck command
|
|
738
|
+
*/
|
|
739
|
+
export interface SpellcheckConfig {
|
|
740
|
+
/** Words to ignore during spellcheck (product names, technical terms, etc.) */
|
|
741
|
+
ignore?: string[];
|
|
742
|
+
}
|
|
743
|
+
|
|
736
744
|
// =============================================================================
|
|
737
745
|
// MAIN DOCS CONFIG
|
|
738
746
|
// =============================================================================
|
|
@@ -798,6 +806,7 @@ export interface DocsConfig {
|
|
|
798
806
|
metadata?: MetadataConfig;
|
|
799
807
|
analytics?: AnalyticsConfig;
|
|
800
808
|
chat?: ChatConfig;
|
|
809
|
+
spellcheck?: SpellcheckConfig;
|
|
801
810
|
|
|
802
811
|
// Mintlify compatibility fields (normalized at load time)
|
|
803
812
|
modeToggle?: ModeToggleConfig;
|