react-docs-module 0.1.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.
Files changed (100) hide show
  1. package/README.md +279 -0
  2. package/ai-chat.tsx +222 -0
  3. package/chat-api.ts +90 -0
  4. package/cn.ts +15 -0
  5. package/config.ts +29 -0
  6. package/dist/ai-chat.d.ts +12 -0
  7. package/dist/ai-chat.js +72 -0
  8. package/dist/ai-chat.js.map +1 -0
  9. package/dist/chat-api.d.ts +16 -0
  10. package/dist/chat-api.js +62 -0
  11. package/dist/chat-api.js.map +1 -0
  12. package/dist/cn.d.ts +4 -0
  13. package/dist/cn.js +14 -0
  14. package/dist/cn.js.map +1 -0
  15. package/dist/config.d.ts +14 -0
  16. package/dist/config.js +15 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/doc-pagination.d.ts +13 -0
  19. package/dist/doc-pagination.js +8 -0
  20. package/dist/doc-pagination.js.map +1 -0
  21. package/dist/docs-index.d.ts +7 -0
  22. package/dist/docs-index.js +11 -0
  23. package/dist/docs-index.js.map +1 -0
  24. package/dist/docs-page.d.ts +15 -0
  25. package/dist/docs-page.js +38 -0
  26. package/dist/docs-page.js.map +1 -0
  27. package/dist/docs-sidebar.d.ts +18 -0
  28. package/dist/docs-sidebar.d.ts.map +1 -0
  29. package/dist/docs-sidebar.js +27 -0
  30. package/dist/docs-sidebar.js.map +1 -0
  31. package/dist/documentation-layout.d.ts +15 -0
  32. package/dist/documentation-layout.js +20 -0
  33. package/dist/documentation-layout.js.map +1 -0
  34. package/dist/heading.d.ts +10 -0
  35. package/dist/heading.js +16 -0
  36. package/dist/heading.js.map +1 -0
  37. package/dist/index.d.ts +18 -0
  38. package/dist/index.js +19 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/mdx/callouts.d.ts +8 -0
  41. package/dist/mdx/callouts.js +8 -0
  42. package/dist/mdx/callouts.js.map +1 -0
  43. package/dist/mdx/code-block.d.ts +8 -0
  44. package/dist/mdx/code-block.js +29 -0
  45. package/dist/mdx/code-block.js.map +1 -0
  46. package/dist/mdx/components.d.ts +13 -0
  47. package/dist/mdx/components.js +21 -0
  48. package/dist/mdx/components.js.map +1 -0
  49. package/dist/mdx.d.ts +20 -0
  50. package/dist/mdx.js +109 -0
  51. package/dist/mdx.js.map +1 -0
  52. package/dist/search-index.d.ts +10 -0
  53. package/dist/search-index.js +38 -0
  54. package/dist/search-index.js.map +1 -0
  55. package/dist/search.d.ts +6 -0
  56. package/dist/search.js +142 -0
  57. package/dist/search.js.map +1 -0
  58. package/dist/table-of-contents-provider.d.ts +4 -0
  59. package/dist/table-of-contents-provider.js +30 -0
  60. package/dist/table-of-contents-provider.js.map +1 -0
  61. package/dist/table-of-contents.d.ts +11 -0
  62. package/dist/table-of-contents.js +9 -0
  63. package/dist/table-of-contents.js.map +1 -0
  64. package/dist/theme-context.d.ts +20 -0
  65. package/dist/theme-context.js +28 -0
  66. package/dist/theme-context.js.map +1 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -0
  68. package/dist/ui/button.d.ts +12 -0
  69. package/dist/ui/button.js +34 -0
  70. package/dist/ui/button.js.map +1 -0
  71. package/dist/ui/dialog.d.ts +17 -0
  72. package/dist/ui/dialog.js +22 -0
  73. package/dist/ui/dialog.js.map +1 -0
  74. package/dist/ui/input.d.ts +4 -0
  75. package/dist/ui/input.js +9 -0
  76. package/dist/ui/input.js.map +1 -0
  77. package/dist/util.d.ts +59 -0
  78. package/dist/util.js +96 -0
  79. package/dist/util.js.map +1 -0
  80. package/doc-pagination.tsx +67 -0
  81. package/docs-index.tsx +17 -0
  82. package/docs-page.tsx +68 -0
  83. package/docs-sidebar.tsx +165 -0
  84. package/documentation-layout.tsx +99 -0
  85. package/heading.tsx +63 -0
  86. package/index.ts +28 -0
  87. package/mdx/callouts.tsx +29 -0
  88. package/mdx/code-block.tsx +89 -0
  89. package/mdx/components.tsx +55 -0
  90. package/mdx.ts +138 -0
  91. package/package.json +99 -0
  92. package/search-index.ts +52 -0
  93. package/search.tsx +273 -0
  94. package/table-of-contents-provider.tsx +43 -0
  95. package/table-of-contents.tsx +44 -0
  96. package/theme-context.tsx +57 -0
  97. package/ui/button.tsx +56 -0
  98. package/ui/dialog.tsx +108 -0
  99. package/ui/input.tsx +22 -0
  100. package/util.ts +169 -0
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { vscDarkPlus } from "react-syntax-highlighter/dist/esm/styles/prism";
4
+ import { useState } from "react";
5
+ import { Prism } from "react-syntax-highlighter";
6
+ const SyntaxHighlighter = Prism;
7
+ export function CodeBlock({ children, className, inline }) {
8
+ const [copied, setCopied] = useState(false);
9
+ if (inline) {
10
+ return (_jsx("code", { className: "bg-gray-800/50 px-1.5 py-0.5 rounded text-sm font-mono", children: children }));
11
+ }
12
+ const language = className?.replace("language-", "") || "text";
13
+ const copyCode = () => {
14
+ navigator.clipboard.writeText(String(children));
15
+ setCopied(true);
16
+ setTimeout(() => setCopied(false), 2000);
17
+ };
18
+ return (_jsxs("div", { className: "relative bg-gray-800/50 rounded-lg overflow-x-auto w-full my-4 group", style: { maxWidth: "100%" }, children: [_jsx("button", { onClick: copyCode, className: "absolute right-2 top-2 p-2 rounded-md bg-gray-700/50 invisible group-hover:visible hover:bg-gray-700 transition-colors", "aria-label": "Copy code", children: copied ? (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "text-green-500", children: _jsx("path", { d: "M20 6L9 17l-5-5" }) })) : (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "text-gray-400", children: [_jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }), _jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })] })) }), _jsx(SyntaxHighlighter, { language: language, style: vscDarkPlus, customStyle: {
19
+ margin: 0,
20
+ background: "transparent",
21
+ fontSize: "1.1rem",
22
+ lineHeight: "1.4",
23
+ padding: "1.5rem",
24
+ borderRadius: "0.5rem",
25
+ maxWidth: "100%",
26
+ overflowX: "auto",
27
+ }, wrapLongLines: false, children: children })] }));
28
+ }
29
+ //# sourceMappingURL=code-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.js","sourceRoot":"","sources":["../../mdx/code-block.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAA0B,MAAM,0BAA0B,CAAC;AACzE,MAAM,iBAAiB,GAAG,KAAgD,CAAC;AAQ3E,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAkB;IACvE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CACL,eAAM,SAAS,EAAC,wDAAwD,YACrE,QAAQ,GACJ,CACR,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;IAE/D,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAC,sEAAsE,EAChF,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,aAE3B,iBACE,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,wHAAwH,gBACvH,WAAW,YAErB,MAAM,CAAC,CAAC,CAAC,CACR,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,SAAS,EAAC,gBAAgB,YAE1B,eAAM,CAAC,EAAC,iBAAiB,GAAG,GACxB,CACP,CAAC,CAAC,CAAC,CACF,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,SAAS,EAAC,eAAe,aAEzB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,GAAG,EACzD,eAAM,CAAC,EAAC,yDAAyD,GAAG,IAChE,CACP,GACM,EACT,KAAC,iBAAiB,IAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE;oBACX,MAAM,EAAE,CAAC;oBACT,UAAU,EAAE,aAAa;oBACzB,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,KAAK;oBACjB,OAAO,EAAE,QAAQ;oBACjB,YAAY,EAAE,QAAQ;oBACtB,QAAQ,EAAE,MAAM;oBAChB,SAAS,EAAE,MAAM;iBAClB,EACD,aAAa,EAAE,KAAK,YAEnB,QAAQ,GACS,IAChB,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Info, Warning } from "./callouts";
2
+ import { HTMLAttributes } from "react";
3
+ export declare const mdxComponents: {
4
+ Info: typeof Info;
5
+ Warning: typeof Warning;
6
+ h1: ({ children, ...props }: HTMLAttributes<HTMLHeadingElement>) => import("react/jsx-runtime").JSX.Element;
7
+ h2: ({ children, ...props }: HTMLAttributes<HTMLHeadingElement>) => import("react/jsx-runtime").JSX.Element;
8
+ h3: ({ children, ...props }: HTMLAttributes<HTMLHeadingElement>) => import("react/jsx-runtime").JSX.Element;
9
+ pre: (props: any) => import("react/jsx-runtime").JSX.Element;
10
+ code: (props: HTMLAttributes<HTMLElement>) => import("react/jsx-runtime").JSX.Element;
11
+ img: ({ src, alt, width: _width, height: _height, ...props }: React.ImgHTMLAttributes<HTMLImageElement>) => import("react/jsx-runtime").JSX.Element | null;
12
+ };
13
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Heading } from "../heading";
3
+ import { Info, Warning } from "./callouts";
4
+ import { CodeBlock } from "./code-block";
5
+ import { slugify } from "../cn";
6
+ import Image from "next/image";
7
+ export const mdxComponents = {
8
+ Info,
9
+ Warning,
10
+ h1: ({ children, ...props }) => (_jsx(Heading, { level: 1, id: slugify(String(children)), ...props, children: children })),
11
+ h2: ({ children, ...props }) => (_jsx(Heading, { level: 2, id: slugify(String(children)), ...props, children: children })),
12
+ h3: ({ children, ...props }) => (_jsx(Heading, { level: 3, id: slugify(String(children)), ...props, children: children })),
13
+ pre: (props) => _jsx(CodeBlock, { ...props.children.props }),
14
+ code: (props) => (_jsx("code", { ...props, className: `${props.className || ""} bg-gray-800/50 px-1.5 py-0.5 rounded text-sm font-mono` })),
15
+ img: ({ src, alt, width: _width, height: _height, ...props }) => {
16
+ if (!src)
17
+ return null;
18
+ return (_jsx(Image, { src: src, alt: alt || "", width: 0, height: 0, sizes: "100vw", style: { width: "100%", height: "auto" }, className: "max-w-[400px] aspect-auto mx-auto rounded-lg", ...props }));
19
+ },
20
+ };
21
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../mdx/components.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI;IACJ,OAAO;IACP,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAsC,EAAE,EAAE,CAAC,CAClE,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAM,KAAK,YACxD,QAAQ,GACD,CACX;IACD,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAsC,EAAE,EAAE,CAAC,CAClE,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAM,KAAK,YACxD,QAAQ,GACD,CACX;IACD,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAsC,EAAE,EAAE,CAAC,CAClE,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAM,KAAK,YACxD,QAAQ,GACD,CACX;IACD,GAAG,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAC,SAAS,OAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAI;IAC5D,IAAI,EAAE,CAAC,KAAkC,EAAE,EAAE,CAAC,CAC5C,kBACM,KAAK,EACT,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,EAC/B,yDAAyD,GAC3D,CACH;IACD,GAAG,EAAE,CAAC,EACJ,GAAG,EACH,GAAG,EACH,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,GAAG,KAAK,EACkC,EAAE,EAAE;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,CACL,KAAC,KAAK,IACJ,GAAG,EAAE,GAAa,EAClB,GAAG,EAAE,GAAG,IAAI,EAAE,EACd,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACxC,SAAS,EAAC,8CAA8C,KACpD,KAAK,GACT,CACH,CAAC;IACJ,CAAC;CACF,CAAC"}
package/dist/mdx.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { ReactDocsConfig } from "./config";
2
+ interface Heading {
3
+ id: string;
4
+ text: string;
5
+ level: number;
6
+ }
7
+ export declare function getDocBySlug(docsConfig: ReactDocsConfig, slug: string): Promise<{
8
+ frontmatter: {
9
+ [key: string]: any;
10
+ };
11
+ content: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
12
+ headings: Heading[];
13
+ }>;
14
+ export declare function getAllDocs(docsConfig: ReactDocsConfig): {
15
+ slug: string;
16
+ frontmatter: any;
17
+ }[];
18
+ export declare function getAllDocsContent(docsConfig: ReactDocsConfig): string;
19
+ export {};
20
+ //# sourceMappingURL=mdx.d.ts.map
package/dist/mdx.js ADDED
@@ -0,0 +1,109 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import matter from "gray-matter";
4
+ import { MDXRemote } from "next-mdx-remote/rsc";
5
+ import { mdxComponents } from "./mdx/components";
6
+ function slugify(str) {
7
+ return String(str)
8
+ .toLowerCase()
9
+ .trim()
10
+ .replace(/[^\w\s-]/g, '')
11
+ .replace(/[\s_-]+/g, '-')
12
+ .replace(/^-+|-+$/g, '');
13
+ }
14
+ function extractHeadings(source) {
15
+ const headings = [];
16
+ const lines = source.split("\n");
17
+ let inCodeBlock = false;
18
+ for (let i = 0; i < lines.length; i++) {
19
+ const line = lines[i];
20
+ // Check for code block delimiters
21
+ if (line.trim().startsWith("```")) {
22
+ inCodeBlock = !inCodeBlock;
23
+ continue;
24
+ }
25
+ // Skip if we're inside a code block
26
+ if (inCodeBlock)
27
+ continue;
28
+ // Match headings, but only if they're not inside a code block
29
+ const headingMatch = line.match(/^(#{1,3})\s+(.+)$/);
30
+ if (headingMatch) {
31
+ const level = headingMatch[1].length;
32
+ const text = headingMatch[2];
33
+ const id = slugify(text);
34
+ headings.push({ level, text, id });
35
+ }
36
+ }
37
+ return headings;
38
+ }
39
+ export async function getDocBySlug(docsConfig, slug) {
40
+ const directory = path.join(process.cwd(), docsConfig.contentPath);
41
+ const fullPath = path.join(directory, `${slug}.mdx`);
42
+ const fileContents = fs.readFileSync(fullPath, "utf8");
43
+ const { data: frontmatter, content: source } = matter(fileContents);
44
+ const headings = extractHeadings(source);
45
+ return {
46
+ frontmatter,
47
+ content: await MDXRemote({
48
+ source,
49
+ components: mdxComponents,
50
+ }),
51
+ headings,
52
+ };
53
+ }
54
+ export function getAllDocs(docsConfig) {
55
+ const docs = [];
56
+ function traverseDirectory(currentPath, baseDir) {
57
+ const files = fs.readdirSync(currentPath);
58
+ for (const file of files) {
59
+ const fullPath = path.join(currentPath, file);
60
+ const stat = fs.statSync(fullPath);
61
+ if (stat.isDirectory()) {
62
+ traverseDirectory(fullPath, baseDir);
63
+ }
64
+ else if (file.endsWith(".mdx")) {
65
+ const relativePath = path.relative(baseDir, fullPath);
66
+ const slug = relativePath.replace(/\.mdx$/, "");
67
+ const fileContents = fs.readFileSync(fullPath, "utf8");
68
+ const { data: frontmatter } = matter(fileContents);
69
+ docs.push({
70
+ slug,
71
+ frontmatter,
72
+ });
73
+ }
74
+ }
75
+ }
76
+ const docsDirectory = path.join(process.cwd(), docsConfig.contentPath);
77
+ traverseDirectory(docsDirectory, docsDirectory);
78
+ return docs;
79
+ }
80
+ // Cache for docs content
81
+ const docsContentCache = new Map();
82
+ export function getAllDocsContent(docsConfig) {
83
+ const cacheKey = docsConfig.contentPath;
84
+ if (docsContentCache.has(cacheKey)) {
85
+ return docsContentCache.get(cacheKey);
86
+ }
87
+ const content = [];
88
+ function traverseDirectory(currentPath) {
89
+ const files = fs.readdirSync(currentPath);
90
+ for (const file of files) {
91
+ const fullPath = path.join(currentPath, file);
92
+ const stat = fs.statSync(fullPath);
93
+ if (stat.isDirectory()) {
94
+ traverseDirectory(fullPath);
95
+ }
96
+ else if (file.endsWith(".mdx")) {
97
+ const fileContents = fs.readFileSync(fullPath, "utf8");
98
+ const { content: mdxContent } = matter(fileContents);
99
+ content.push(mdxContent);
100
+ }
101
+ }
102
+ }
103
+ const docsDirectory = path.join(process.cwd(), docsConfig.contentPath);
104
+ traverseDirectory(docsDirectory);
105
+ const joinedContent = content.join('\n\n---\n\n');
106
+ docsContentCache.set(cacheKey, joinedContent);
107
+ return joinedContent;
108
+ }
109
+ //# sourceMappingURL=mdx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx.js","sourceRoot":"","sources":["../mdx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ReactDocsConfig } from "./config";
2
+ export interface SearchResult {
3
+ title: string;
4
+ content: string;
5
+ url: string;
6
+ snippet?: string;
7
+ score?: number;
8
+ }
9
+ export declare function buildSearchIndex(config: ReactDocsConfig): SearchResult[];
10
+ //# sourceMappingURL=search-index.d.ts.map
@@ -0,0 +1,38 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import matter from "gray-matter";
4
+ export function buildSearchIndex(config) {
5
+ const docsDirectory = path.join(process.cwd(), config.contentPath);
6
+ const searchIndex = [];
7
+ function processDirectory(dir, baseUrl = "") {
8
+ const items = fs.readdirSync(dir);
9
+ items.forEach((item) => {
10
+ const fullPath = path.join(dir, item);
11
+ const stat = fs.statSync(fullPath);
12
+ if (stat.isDirectory()) {
13
+ processDirectory(fullPath, `${baseUrl}${item}/`);
14
+ }
15
+ else if (item.endsWith(".mdx")) {
16
+ const fileContents = fs.readFileSync(fullPath, "utf8");
17
+ const { data: frontmatter, content } = matter(fileContents);
18
+ const slug = item.replace(/\.mdx$/, "");
19
+ const url = config.basePath + `/${baseUrl}${slug}`;
20
+ // Clean up the content by removing markdown syntax
21
+ const cleanContent = content
22
+ .replace(/```[\s\S]*?```/g, "") // Remove code blocks
23
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1") // Remove markdown links but keep text
24
+ .replace(/[#*`_]/g, "") // Remove markdown syntax
25
+ .replace(/\n+/g, " ") // Replace newlines with spaces
26
+ .trim();
27
+ searchIndex.push({
28
+ title: frontmatter.title || slug,
29
+ content: cleanContent,
30
+ url,
31
+ });
32
+ }
33
+ });
34
+ }
35
+ processDirectory(docsDirectory);
36
+ return searchIndex;
37
+ }
38
+ //# sourceMappingURL=search-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-index.js","sourceRoot":"","sources":["../search-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AAWjC,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,WAAW,GAAmB,EAAE,CAAC;IAEvC,SAAS,gBAAgB,CAAC,GAAW,EAAE,UAAkB,EAAE;QACzD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACvD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;gBAEnD,mDAAmD;gBACnD,MAAM,YAAY,GAAG,OAAO;qBACzB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,qBAAqB;qBACpD,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,sCAAsC;qBAC9E,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,yBAAyB;qBAChD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,+BAA+B;qBACpD,IAAI,EAAE,CAAC;gBAEV,WAAW,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,IAAI;oBAChC,OAAO,EAAE,YAAY;oBACrB,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAChC,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ReactDocsConfig } from "./config";
2
+ export interface SearchProps {
3
+ config: ReactDocsConfig;
4
+ }
5
+ export declare function Search({ config }: SearchProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=search.d.ts.map
package/dist/search.js ADDED
@@ -0,0 +1,142 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useState } from "react";
4
+ import { useRouter } from "next/navigation";
5
+ import { Button } from "./ui/button";
6
+ import { Input } from "./ui/input";
7
+ import { Dialog, DialogContent, DialogTitle } from "./ui/dialog";
8
+ import { AIChat, AIChatOption } from "./ai-chat";
9
+ import { useDocsColors } from "./theme-context";
10
+ // Singleton to cache search index
11
+ class SearchIndexCache {
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.searchIndex = null;
15
+ this.loading = false;
16
+ this.callbacks = [];
17
+ }
18
+ static getInstance(config) {
19
+ const key = config.searchApiPath;
20
+ if (!SearchIndexCache.instances.has(key)) {
21
+ SearchIndexCache.instances.set(key, new SearchIndexCache(config));
22
+ }
23
+ return SearchIndexCache.instances.get(key);
24
+ }
25
+ async getSearchIndex() {
26
+ if (this.searchIndex) {
27
+ return this.searchIndex;
28
+ }
29
+ if (this.loading) {
30
+ return new Promise((resolve) => {
31
+ this.callbacks.push(resolve);
32
+ });
33
+ }
34
+ this.loading = true;
35
+ try {
36
+ const response = await fetch(this.config.searchApiPath);
37
+ const data = await response.json();
38
+ this.searchIndex = data;
39
+ this.callbacks.forEach(callback => callback(data));
40
+ this.callbacks = [];
41
+ return data;
42
+ }
43
+ finally {
44
+ this.loading = false;
45
+ }
46
+ }
47
+ }
48
+ SearchIndexCache.instances = new Map();
49
+ function highlightText(text, query) {
50
+ if (!query)
51
+ return text;
52
+ const parts = text.split(new RegExp(`(${query})`, "gi"));
53
+ return parts.map((part, i) => part.toLowerCase() === query.toLowerCase() ?
54
+ _jsx("mark", { className: "bg-yellow-500/20 text-yellow-200 rounded px-0.5", children: part }, i) :
55
+ part);
56
+ }
57
+ export function Search({ config }) {
58
+ const [open, setOpen] = useState(false);
59
+ const [isMac, setIsMac] = useState(false);
60
+ const [query, setQuery] = useState("");
61
+ const [results, setResults] = useState([]);
62
+ const [searchIndex, setSearchIndex] = useState([]);
63
+ const [isLoading, setIsLoading] = useState(false);
64
+ const [showAIChat, setShowAIChat] = useState(false);
65
+ const router = useRouter();
66
+ const colors = useDocsColors();
67
+ useEffect(() => {
68
+ // Detect if user is on macOS
69
+ setIsMac(navigator.platform.toUpperCase().indexOf('MAC') >= 0);
70
+ // Load search index using cache
71
+ const cache = SearchIndexCache.getInstance(config);
72
+ cache.getSearchIndex().then((data) => setSearchIndex(data));
73
+ const down = (e) => {
74
+ if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
75
+ e.preventDefault();
76
+ setOpen(true);
77
+ }
78
+ if (e.key === "Escape") {
79
+ setOpen(false);
80
+ }
81
+ };
82
+ document.addEventListener("keydown", down);
83
+ return () => document.removeEventListener("keydown", down);
84
+ }, [config]);
85
+ useEffect(() => {
86
+ const search = async () => {
87
+ setIsLoading(true);
88
+ // Only search if query has 2 or more characters
89
+ if (!query.trim() || query.length < 2) {
90
+ setResults([]);
91
+ setIsLoading(false);
92
+ return;
93
+ }
94
+ const searchQuery = query.toLowerCase();
95
+ const filtered = searchIndex
96
+ .map(item => {
97
+ const titleMatch = item.title.toLowerCase().includes(searchQuery);
98
+ const contentMatch = item.content.toLowerCase().includes(searchQuery);
99
+ if (!titleMatch && !contentMatch)
100
+ return null;
101
+ // Find the best content snippet
102
+ let snippet = item.content;
103
+ if (contentMatch) {
104
+ const index = item.content.toLowerCase().indexOf(searchQuery);
105
+ const start = Math.max(0, index - 100);
106
+ const end = Math.min(item.content.length, index + 100);
107
+ snippet = (start > 0 ? "..." : "") +
108
+ item.content.slice(start, end) +
109
+ (end < item.content.length ? "..." : "");
110
+ }
111
+ return {
112
+ ...item,
113
+ snippet,
114
+ score: titleMatch ? 2 : 1,
115
+ };
116
+ })
117
+ .filter((item) => item !== null)
118
+ .sort((a, b) => b.score - a.score);
119
+ setResults(filtered);
120
+ setIsLoading(false);
121
+ };
122
+ const debounce = setTimeout(search, 200);
123
+ return () => clearTimeout(debounce);
124
+ }, [query, searchIndex]);
125
+ const handleSelect = (result) => {
126
+ router.push(result.url);
127
+ setOpen(false);
128
+ };
129
+ const handleAIChat = () => {
130
+ setShowAIChat(true);
131
+ };
132
+ return (_jsxs("div", { className: "relative w-full", children: [_jsxs(Button, { variant: "outline", className: "relative w-full justify-start text-sm text-muted-foreground bg-gray-800/50 hover:bg-gray-800 border-0 hover:text-gray-100", style: {
133
+ '--ring-color': colors.primary,
134
+ }, onClick: () => setOpen(true), children: [_jsxs("span", { className: "inline-flex items-center", children: [_jsx("svg", { className: "mr-2 h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), "Search documentation or ask AI..."] }), _jsxs("kbd", { className: "pointer-events-none absolute right-2 top-[50%] translate-y-[-50%] inline-flex h-5 select-none items-center gap-1 rounded border border-gray-700 bg-gray-800 px-1.5 font-mono text-[10px] font-medium text-gray-400", children: [isMac ? (_jsx("span", { className: "text-xs", children: "\u2318" })) : (_jsx("span", { className: "text-xs", children: "Ctrl" })), "+ K"] })] }), _jsx(Dialog, { open: open, onOpenChange: (isOpen) => {
135
+ setOpen(isOpen);
136
+ if (!isOpen) {
137
+ setShowAIChat(false);
138
+ setQuery("");
139
+ }
140
+ }, children: _jsxs(DialogContent, { className: "fixed top-20 left-1/2 -translate-x-1/2 w-full max-w-2xl shadow-2xl backdrop-blur-sm bg-gray-900/95 border border-gray-800 rounded-lg overflow-hidden", style: { maxHeight: 'calc(100vh - 6rem)' }, children: [_jsx(DialogTitle, { className: "absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0", style: { clip: 'rect(0, 0, 0, 0)' }, children: "Search Documentation" }), !showAIChat ? (_jsxs("div", { className: "flex flex-col", style: { maxHeight: 'calc(100vh - 6rem)' }, children: [_jsx("div", { className: "shrink-0 p-4 border-b border-gray-800", children: _jsx(Input, { placeholder: "Search documentation or ask AI...", className: "w-full bg-gray-800/50 border-gray-700", value: query, onChange: (e) => setQuery(e.target.value), autoFocus: true }) }), _jsx("div", { className: "min-h-0 overflow-y-auto", children: _jsx("div", { className: "p-4 space-y-4", children: isLoading ? (_jsx("div", { className: "text-sm text-gray-400", children: "Searching..." })) : query.length < 2 ? (_jsx("div", { className: "text-sm text-gray-400", children: "Enter at least 2 characters to search..." })) : (_jsxs(_Fragment, { children: [query.length >= 2 && _jsx(AIChatOption, { query: query, onClick: handleAIChat }), results.length > 0 ? (_jsx("div", { className: "space-y-4", children: results.map((result) => (_jsxs("button", { className: "block w-full text-left p-4 rounded-lg hover:bg-gray-800/50 transition-colors", onClick: () => handleSelect(result), children: [_jsx("h3", { className: "text-sm font-medium text-white mb-1", children: highlightText(result.title, query) }), _jsx("p", { className: "text-sm text-gray-400 line-clamp-2", children: highlightText(result.snippet, query) })] }, result.url))) })) : (_jsx("div", { className: "text-sm text-gray-400", children: "No documentation results found" }))] })) }) })] })) : (_jsx("div", { className: "overflow-y-auto", style: { maxHeight: 'calc(100vh - 6rem)' }, children: _jsx("div", { className: "p-4", children: _jsx(AIChat, { query: query, onBack: () => setShowAIChat(false), config: config }) }) }))] }) })] }));
141
+ }
142
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../search.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function TableOfContentsProvider({ children }: {
2
+ children: React.ReactNode;
3
+ }): import("react").ReactNode;
4
+ //# sourceMappingURL=table-of-contents-provider.d.ts.map
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ export function TableOfContentsProvider({ children }) {
4
+ useEffect(() => {
5
+ const observer = new IntersectionObserver((entries) => {
6
+ entries.forEach((entry) => {
7
+ if (entry.isIntersecting) {
8
+ // Remove active class from all links
9
+ document.querySelectorAll('[data-heading-id]').forEach(el => {
10
+ el.classList.remove('text-white');
11
+ el.classList.add('text-gray-400');
12
+ });
13
+ // Add active class to current heading's link
14
+ const link = document.querySelector(`[data-heading-id="${entry.target.id}"]`);
15
+ if (link) {
16
+ link.classList.remove('text-gray-400');
17
+ link.classList.add('text-white');
18
+ }
19
+ }
20
+ });
21
+ }, { rootMargin: "-80px 0px -80% 0px" });
22
+ // Observe all headings
23
+ document.querySelectorAll("h1, h2, h3").forEach((heading) => {
24
+ observer.observe(heading);
25
+ });
26
+ return () => observer.disconnect();
27
+ }, []);
28
+ return children;
29
+ }
30
+ //# sourceMappingURL=table-of-contents-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents-provider.js","sourceRoot":"","sources":["../table-of-contents-provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,EAGT;IACC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,EAAE,EAAE;YACV,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACzB,qCAAqC;oBACrC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;wBAC1D,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAClC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;oBAEH,6CAA6C;oBAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CACjC,qBAAqB,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CACzC,CAAC;oBACF,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;wBACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,UAAU,EAAE,oBAAoB,EAAE,CACrC,CAAC;QAEF,uBAAuB;QACvB,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface Heading {
2
+ id: string;
3
+ text: string;
4
+ level: number;
5
+ }
6
+ interface Props {
7
+ headings: Heading[];
8
+ }
9
+ export declare function TableOfContents({ headings }: Props): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=table-of-contents.d.ts.map
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TableOfContentsProvider } from "./table-of-contents-provider";
3
+ function TableOfContentsList({ headings }) {
4
+ return (_jsxs("nav", { className: "sticky top-8 z-0 max-h-[calc(100vh-4rem)] overflow-y-auto", children: [_jsx("h4", { className: "text-sm font-semibold mb-4 text-gray-400", children: "On this page" }), _jsx("ul", { className: "space-y-2.5", children: headings.map(({ id, text, level }) => (_jsx("li", { style: { paddingLeft: `${(level - 1) * 16}px` }, className: "text-sm", children: _jsx("a", { href: `#${id}`, className: "hover:text-white transition-colors text-gray-400 block", "data-heading-id": id, children: text }) }, id))) })] }));
5
+ }
6
+ export function TableOfContents({ headings }) {
7
+ return (_jsx(TableOfContentsProvider, { children: _jsx(TableOfContentsList, { headings: headings }) }));
8
+ }
9
+ //# sourceMappingURL=table-of-contents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents.js","sourceRoot":"","sources":["../table-of-contents.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAYvE,SAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAS;IAC9C,OAAO,CACL,eAAK,SAAS,EAAC,2DAA2D,aACxE,aAAI,SAAS,EAAC,0CAA0C,6BAAkB,EAC1E,aAAI,SAAS,EAAC,aAAa,YACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACrC,aAEE,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAC/C,SAAS,EAAC,SAAS,YAEnB,YACE,IAAI,EAAE,IAAI,EAAE,EAAE,EACd,SAAS,EAAC,wDAAwD,qBACjD,EAAE,YAElB,IAAI,GACH,IAVC,EAAE,CAWJ,CACN,CAAC,GACC,IACD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAS;IACjD,OAAO,CACL,KAAC,uBAAuB,cACtB,KAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,GAAI,GACnB,CAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import type { DocsJsonConfig } from "./util";
3
+ export interface ThemeColors {
4
+ primary: string;
5
+ light?: string;
6
+ dark?: string;
7
+ }
8
+ export interface DocsTheme {
9
+ colors: ThemeColors;
10
+ name: string;
11
+ theme: string;
12
+ }
13
+ export interface DocsThemeProviderProps {
14
+ config: DocsJsonConfig;
15
+ children: React.ReactNode;
16
+ }
17
+ export declare function DocsThemeProvider({ config, children }: DocsThemeProviderProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function useDocsTheme(): DocsTheme;
19
+ export declare function useDocsColors(): ThemeColors;
20
+ //# sourceMappingURL=theme-context.d.ts.map
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext } from "react";
4
+ const DocsThemeContext = createContext(null);
5
+ export function DocsThemeProvider({ config, children }) {
6
+ const theme = {
7
+ colors: config.colors,
8
+ name: config.name,
9
+ theme: config.theme,
10
+ };
11
+ return (_jsx(DocsThemeContext.Provider, { value: theme, children: _jsx("div", { style: {
12
+ '--docs-primary': theme.colors.primary,
13
+ '--docs-primary-light': theme.colors.light || theme.colors.primary,
14
+ '--docs-primary-dark': theme.colors.dark || theme.colors.primary,
15
+ }, children: children }) }));
16
+ }
17
+ export function useDocsTheme() {
18
+ const context = useContext(DocsThemeContext);
19
+ if (!context) {
20
+ throw new Error('useDocsTheme must be used within a DocsThemeProvider');
21
+ }
22
+ return context;
23
+ }
24
+ export function useDocsColors() {
25
+ const theme = useDocsTheme();
26
+ return theme.colors;
27
+ }
28
+ //# sourceMappingURL=theme-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-context.js","sourceRoot":"","sources":["../theme-context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAezD,MAAM,gBAAgB,GAAG,aAAa,CAAmB,IAAI,CAAC,CAAC;AAO/D,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA0B;IAC5E,MAAM,KAAK,GAAc;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IAEF,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACrC,cACE,KAAK,EAAE;gBACL,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;gBACtC,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;gBAClE,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;aAC1C,YAEvB,QAAQ,GACL,GACoB,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC"}