@urbicon-ui/docs-gen 6.1.4
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 +92 -0
- package/dist/cli/CLI.d.ts +10 -0
- package/dist/cli/CLI.d.ts.map +1 -0
- package/dist/cli/CLI.js +340 -0
- package/dist/cli/CLI.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/discovery/ComponentFinder.d.ts +43 -0
- package/dist/core/discovery/ComponentFinder.d.ts.map +1 -0
- package/dist/core/discovery/ComponentFinder.js +421 -0
- package/dist/core/discovery/ComponentFinder.js.map +1 -0
- package/dist/core/discovery/FileStructureAnalyzer.d.ts +15 -0
- package/dist/core/discovery/FileStructureAnalyzer.d.ts.map +1 -0
- package/dist/core/discovery/FileStructureAnalyzer.js +35 -0
- package/dist/core/discovery/FileStructureAnalyzer.js.map +1 -0
- package/dist/core/discovery/MetadataExtractor.d.ts +15 -0
- package/dist/core/discovery/MetadataExtractor.d.ts.map +1 -0
- package/dist/core/discovery/MetadataExtractor.js +47 -0
- package/dist/core/discovery/MetadataExtractor.js.map +1 -0
- package/dist/core/discovery/index.d.ts +2 -0
- package/dist/core/discovery/index.d.ts.map +1 -0
- package/dist/core/discovery/index.js +2 -0
- package/dist/core/discovery/index.js.map +1 -0
- package/dist/core/enrichment/APIDataGenerator.d.ts +77 -0
- package/dist/core/enrichment/APIDataGenerator.d.ts.map +1 -0
- package/dist/core/enrichment/APIDataGenerator.js +663 -0
- package/dist/core/enrichment/APIDataGenerator.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +2 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +6 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/extraction/ExtractionCoordinator.d.ts +53 -0
- package/dist/core/extraction/ExtractionCoordinator.d.ts.map +1 -0
- package/dist/core/extraction/ExtractionCoordinator.js +352 -0
- package/dist/core/extraction/ExtractionCoordinator.js.map +1 -0
- package/dist/core/extraction/index.d.ts +2 -0
- package/dist/core/extraction/index.d.ts.map +1 -0
- package/dist/core/extraction/index.js +2 -0
- package/dist/core/extraction/index.js.map +1 -0
- package/dist/core/generation/GenerationCoordinator.d.ts +51 -0
- package/dist/core/generation/GenerationCoordinator.d.ts.map +1 -0
- package/dist/core/generation/GenerationCoordinator.js +206 -0
- package/dist/core/generation/GenerationCoordinator.js.map +1 -0
- package/dist/core/generation/index.d.ts +2 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/generation/index.js +2 -0
- package/dist/core/generation/index.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline/ErrorHandler.d.ts +129 -0
- package/dist/core/pipeline/ErrorHandler.d.ts.map +1 -0
- package/dist/core/pipeline/ErrorHandler.js +321 -0
- package/dist/core/pipeline/ErrorHandler.js.map +1 -0
- package/dist/core/pipeline/PipelineOrchestrator.d.ts +45 -0
- package/dist/core/pipeline/PipelineOrchestrator.d.ts.map +1 -0
- package/dist/core/pipeline/PipelineOrchestrator.js +216 -0
- package/dist/core/pipeline/PipelineOrchestrator.js.map +1 -0
- package/dist/core/pipeline/index.d.ts +1 -0
- package/dist/core/pipeline/index.d.ts.map +1 -0
- package/dist/core/pipeline/index.js +2 -0
- package/dist/core/pipeline/index.js.map +1 -0
- package/dist/extractors/BaseExtractor.d.ts +33 -0
- package/dist/extractors/BaseExtractor.d.ts.map +1 -0
- package/dist/extractors/BaseExtractor.js +68 -0
- package/dist/extractors/BaseExtractor.js.map +1 -0
- package/dist/extractors/ExtractorFactory.d.ts +35 -0
- package/dist/extractors/ExtractorFactory.d.ts.map +1 -0
- package/dist/extractors/ExtractorFactory.js +88 -0
- package/dist/extractors/ExtractorFactory.js.map +1 -0
- package/dist/extractors/documentation/index.d.ts +1 -0
- package/dist/extractors/documentation/index.d.ts.map +1 -0
- package/dist/extractors/documentation/index.js +2 -0
- package/dist/extractors/documentation/index.js.map +1 -0
- package/dist/extractors/index.d.ts +1 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +2 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/typescript/ExamplesExtractor.d.ts +32 -0
- package/dist/extractors/typescript/ExamplesExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/ExamplesExtractor.js +209 -0
- package/dist/extractors/typescript/ExamplesExtractor.js.map +1 -0
- package/dist/extractors/typescript/InheritanceExtractor.d.ts +45 -0
- package/dist/extractors/typescript/InheritanceExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/InheritanceExtractor.js +368 -0
- package/dist/extractors/typescript/InheritanceExtractor.js.map +1 -0
- package/dist/extractors/typescript/LocalTypesExtractor.d.ts +20 -0
- package/dist/extractors/typescript/LocalTypesExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/LocalTypesExtractor.js +100 -0
- package/dist/extractors/typescript/LocalTypesExtractor.js.map +1 -0
- package/dist/extractors/typescript/PropsExtractor.d.ts +142 -0
- package/dist/extractors/typescript/PropsExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/PropsExtractor.js +709 -0
- package/dist/extractors/typescript/PropsExtractor.js.map +1 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts +74 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts.map +1 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.js +249 -0
- package/dist/extractors/typescript/TypeScriptBaseExtractor.js.map +1 -0
- package/dist/extractors/typescript/index.d.ts +1 -0
- package/dist/extractors/typescript/index.d.ts.map +1 -0
- package/dist/extractors/typescript/index.js +2 -0
- package/dist/extractors/typescript/index.js.map +1 -0
- package/dist/extractors/variants/TailwindVariantsParser.d.ts +16 -0
- package/dist/extractors/variants/TailwindVariantsParser.d.ts.map +1 -0
- package/dist/extractors/variants/TailwindVariantsParser.js +53 -0
- package/dist/extractors/variants/TailwindVariantsParser.js.map +1 -0
- package/dist/extractors/variants/VariantsExtractor.d.ts +45 -0
- package/dist/extractors/variants/VariantsExtractor.d.ts.map +1 -0
- package/dist/extractors/variants/VariantsExtractor.js +340 -0
- package/dist/extractors/variants/VariantsExtractor.js.map +1 -0
- package/dist/extractors/variants/index.d.ts +2 -0
- package/dist/extractors/variants/index.d.ts.map +1 -0
- package/dist/extractors/variants/index.js +2 -0
- package/dist/extractors/variants/index.js.map +1 -0
- package/dist/generators/api/APIFileGenerator.d.ts +32 -0
- package/dist/generators/api/APIFileGenerator.d.ts.map +1 -0
- package/dist/generators/api/APIFileGenerator.js +450 -0
- package/dist/generators/api/APIFileGenerator.js.map +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.d.ts +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.d.ts.map +1 -0
- package/dist/generators/api/TypeDefinitionGenerator.js +2 -0
- package/dist/generators/api/TypeDefinitionGenerator.js.map +1 -0
- package/dist/generators/api/index.d.ts +2 -0
- package/dist/generators/api/index.d.ts.map +1 -0
- package/dist/generators/api/index.js +2 -0
- package/dist/generators/api/index.js.map +1 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +4 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/llm/LLMDocumentationGenerator.d.ts +34 -0
- package/dist/generators/llm/LLMDocumentationGenerator.d.ts.map +1 -0
- package/dist/generators/llm/LLMDocumentationGenerator.js +480 -0
- package/dist/generators/llm/LLMDocumentationGenerator.js.map +1 -0
- package/dist/generators/llm/LLMFormatter.d.ts +4 -0
- package/dist/generators/llm/LLMFormatter.d.ts.map +1 -0
- package/dist/generators/llm/LLMFormatter.js +8 -0
- package/dist/generators/llm/LLMFormatter.js.map +1 -0
- package/dist/generators/llm/LlmsFullAssembler.d.ts +20 -0
- package/dist/generators/llm/LlmsFullAssembler.d.ts.map +1 -0
- package/dist/generators/llm/LlmsFullAssembler.js +63 -0
- package/dist/generators/llm/LlmsFullAssembler.js.map +1 -0
- package/dist/generators/llm/index.d.ts +1 -0
- package/dist/generators/llm/index.d.ts.map +1 -0
- package/dist/generators/llm/index.js +2 -0
- package/dist/generators/llm/index.js.map +1 -0
- package/dist/generators/mcp/MCPCatalogAssembler.d.ts +27 -0
- package/dist/generators/mcp/MCPCatalogAssembler.d.ts.map +1 -0
- package/dist/generators/mcp/MCPCatalogAssembler.js +147 -0
- package/dist/generators/mcp/MCPCatalogAssembler.js.map +1 -0
- package/dist/generators/mcp/MCPCatalogGenerator.d.ts +55 -0
- package/dist/generators/mcp/MCPCatalogGenerator.d.ts.map +1 -0
- package/dist/generators/mcp/MCPCatalogGenerator.js +153 -0
- package/dist/generators/mcp/MCPCatalogGenerator.js.map +1 -0
- package/dist/generators/svelte/PageGenerator.d.ts +82 -0
- package/dist/generators/svelte/PageGenerator.d.ts.map +1 -0
- package/dist/generators/svelte/PageGenerator.js +557 -0
- package/dist/generators/svelte/PageGenerator.js.map +1 -0
- package/dist/generators/svelte/PlaygroundPresets.d.ts +2 -0
- package/dist/generators/svelte/PlaygroundPresets.d.ts.map +1 -0
- package/dist/generators/svelte/PlaygroundPresets.js +4 -0
- package/dist/generators/svelte/PlaygroundPresets.js.map +1 -0
- package/dist/generators/svelte/SectionMerger.d.ts +38 -0
- package/dist/generators/svelte/SectionMerger.d.ts.map +1 -0
- package/dist/generators/svelte/SectionMerger.js +154 -0
- package/dist/generators/svelte/SectionMerger.js.map +1 -0
- package/dist/generators/svelte/TemplateEngine.d.ts +91 -0
- package/dist/generators/svelte/TemplateEngine.d.ts.map +1 -0
- package/dist/generators/svelte/TemplateEngine.js +500 -0
- package/dist/generators/svelte/TemplateEngine.js.map +1 -0
- package/dist/generators/svelte/index.d.ts +8 -0
- package/dist/generators/svelte/index.d.ts.map +1 -0
- package/dist/generators/svelte/index.js +11 -0
- package/dist/generators/svelte/index.js.map +1 -0
- package/dist/generators/svelte/renderers/ApiRenderer.d.ts +17 -0
- package/dist/generators/svelte/renderers/ApiRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/ApiRenderer.js +44 -0
- package/dist/generators/svelte/renderers/ApiRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.d.ts +33 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.js +137 -0
- package/dist/generators/svelte/renderers/ExampleRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.d.ts +9 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.js +45 -0
- package/dist/generators/svelte/renderers/OverviewRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts +35 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.js +319 -0
- package/dist/generators/svelte/renderers/PlaygroundRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/TypesRenderer.d.ts +9 -0
- package/dist/generators/svelte/renderers/TypesRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/TypesRenderer.js +23 -0
- package/dist/generators/svelte/renderers/TypesRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/UsageRenderer.d.ts +14 -0
- package/dist/generators/svelte/renderers/UsageRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/UsageRenderer.js +91 -0
- package/dist/generators/svelte/renderers/UsageRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.d.ts +43 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.js +277 -0
- package/dist/generators/svelte/renderers/VariantsRenderer.js.map +1 -0
- package/dist/generators/svelte/renderers/index.d.ts +8 -0
- package/dist/generators/svelte/renderers/index.d.ts.map +1 -0
- package/dist/generators/svelte/renderers/index.js +8 -0
- package/dist/generators/svelte/renderers/index.js.map +1 -0
- package/dist/generators/svelte/types.d.ts +13 -0
- package/dist/generators/svelte/types.d.ts.map +1 -0
- package/dist/generators/svelte/types.js +2 -0
- package/dist/generators/svelte/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/SvelteDocsParser.d.ts +44 -0
- package/dist/parsers/SvelteDocsParser.d.ts.map +1 -0
- package/dist/parsers/SvelteDocsParser.js +141 -0
- package/dist/parsers/SvelteDocsParser.js.map +1 -0
- package/dist/parsers/index.d.ts +2 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +6 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/schema/ConfigurationBuilder.d.ts +55 -0
- package/dist/schema/ConfigurationBuilder.d.ts.map +1 -0
- package/dist/schema/ConfigurationBuilder.js +447 -0
- package/dist/schema/ConfigurationBuilder.js.map +1 -0
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/configuration.d.ts +255 -0
- package/dist/types/configuration.d.ts.map +1 -0
- package/dist/types/configuration.js +2 -0
- package/dist/types/configuration.js.map +1 -0
- package/dist/types/core.d.ts +96 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/docs-config.d.ts +5 -0
- package/dist/types/docs-config.d.ts.map +1 -0
- package/dist/types/docs-config.js +51 -0
- package/dist/types/docs-config.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/validation.d.ts +321 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/utils/DeploymentManager.d.ts +80 -0
- package/dist/utils/DeploymentManager.d.ts.map +1 -0
- package/dist/utils/DeploymentManager.js +360 -0
- package/dist/utils/DeploymentManager.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface MCPCatalogAssemblerConfig {
|
|
2
|
+
staticDirs: string[];
|
|
3
|
+
recipesDir: string;
|
|
4
|
+
outputPath: string;
|
|
5
|
+
version: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Assembles the final component-catalog.json from per-package _catalog.json
|
|
9
|
+
* files and extracted recipe data.
|
|
10
|
+
*/
|
|
11
|
+
export declare class MCPCatalogAssembler {
|
|
12
|
+
private config;
|
|
13
|
+
constructor(config: MCPCatalogAssemblerConfig);
|
|
14
|
+
assemble(): Promise<{
|
|
15
|
+
outputPath: string;
|
|
16
|
+
componentCount: number;
|
|
17
|
+
recipeCount: number;
|
|
18
|
+
}>;
|
|
19
|
+
private collectComponents;
|
|
20
|
+
private extractRecipes;
|
|
21
|
+
private extractRecipeFromMeta;
|
|
22
|
+
private extractRecipeCode;
|
|
23
|
+
private extractString;
|
|
24
|
+
private extractArray;
|
|
25
|
+
private slugToTitle;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=MCPCatalogAssembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPCatalogAssembler.d.ts","sourceRoot":"","sources":["../../../src/generators/mcp/MCPCatalogAssembler.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,EAAE,yBAAyB;IAIvC,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;YA4BhF,iBAAiB;YAuBjB,cAAc;YAwBd,qBAAqB;IA0BnC,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
/** Head of a `const recipeCode =` declaration — locates the live-preview code in a recipe page. */
|
|
5
|
+
const RECIPE_CODE_START_RE = /const\s+recipeCode\s*=\s*\n?\s*/;
|
|
6
|
+
/** Template-literal concatenation seam (`` ` `` + `` ` ``) inside a recipeCode block. */
|
|
7
|
+
const RECIPE_CODE_CONCAT_RE = /`\s*\+\s*\n?\s*`/;
|
|
8
|
+
/**
|
|
9
|
+
* Assembles the final component-catalog.json from per-package _catalog.json
|
|
10
|
+
* files and extracted recipe data.
|
|
11
|
+
*/
|
|
12
|
+
export class MCPCatalogAssembler {
|
|
13
|
+
config;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
}
|
|
17
|
+
async assemble() {
|
|
18
|
+
const components = await this.collectComponents();
|
|
19
|
+
const recipes = await this.extractRecipes();
|
|
20
|
+
const allTags = [...new Set(components.flatMap((c) => c.tags))].sort();
|
|
21
|
+
const catalog = {
|
|
22
|
+
generated: new Date().toISOString(),
|
|
23
|
+
version: this.config.version,
|
|
24
|
+
components,
|
|
25
|
+
recipes,
|
|
26
|
+
tags: allTags
|
|
27
|
+
};
|
|
28
|
+
await fs.mkdir(path.dirname(this.config.outputPath), { recursive: true });
|
|
29
|
+
await fs.writeFile(this.config.outputPath, JSON.stringify(catalog, null, 2), 'utf-8');
|
|
30
|
+
console.log(`📦 MCP catalog assembled: ${components.length} components, ${recipes.length} recipes → ${this.config.outputPath}`);
|
|
31
|
+
return {
|
|
32
|
+
outputPath: this.config.outputPath,
|
|
33
|
+
componentCount: components.length,
|
|
34
|
+
recipeCount: recipes.length
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async collectComponents() {
|
|
38
|
+
const allEntries = [];
|
|
39
|
+
for (const dir of this.config.staticDirs) {
|
|
40
|
+
// glob() returns [] for a missing directory (it does not throw), so a
|
|
41
|
+
// target that hasn't been generated is tolerated. But a _catalog.json
|
|
42
|
+
// that exists yet is unreadable or malformed is a real build fault — let
|
|
43
|
+
// it throw rather than silently ship a catalog with a whole package's
|
|
44
|
+
// components missing (the failure mode that hid stale auth metadata).
|
|
45
|
+
const catalogFiles = await glob(path.join(dir, '**/_catalog.json'), { absolute: true });
|
|
46
|
+
for (const file of catalogFiles) {
|
|
47
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
48
|
+
const entries = JSON.parse(content);
|
|
49
|
+
allEntries.push(...entries);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Sort alphabetically by name
|
|
53
|
+
allEntries.sort((a, b) => a.name.localeCompare(b.name));
|
|
54
|
+
return allEntries;
|
|
55
|
+
}
|
|
56
|
+
async extractRecipes() {
|
|
57
|
+
const recipes = [];
|
|
58
|
+
try {
|
|
59
|
+
const metaFiles = await glob(path.join(this.config.recipesDir, '*/meta.ts'), {
|
|
60
|
+
absolute: true
|
|
61
|
+
});
|
|
62
|
+
for (const metaPath of metaFiles) {
|
|
63
|
+
try {
|
|
64
|
+
const recipe = await this.extractRecipeFromMeta(metaPath);
|
|
65
|
+
if (recipe)
|
|
66
|
+
recipes.push(recipe);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
console.warn(`⚠️ Could not extract recipe from ${metaPath}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
console.warn('⚠️ Could not read recipes directory');
|
|
75
|
+
}
|
|
76
|
+
recipes.sort((a, b) => a.id.localeCompare(b.id));
|
|
77
|
+
return recipes;
|
|
78
|
+
}
|
|
79
|
+
async extractRecipeFromMeta(metaPath) {
|
|
80
|
+
const recipeDir = path.dirname(metaPath);
|
|
81
|
+
const id = path.basename(recipeDir);
|
|
82
|
+
// Read structured metadata from meta.ts
|
|
83
|
+
const metaContent = await fs.readFile(metaPath, 'utf-8');
|
|
84
|
+
const title = this.extractString(metaContent, 'title') || this.slugToTitle(id);
|
|
85
|
+
const description = this.extractString(metaContent, 'description') || '';
|
|
86
|
+
const components = this.extractArray(metaContent, 'components');
|
|
87
|
+
const features = this.extractArray(metaContent, 'features');
|
|
88
|
+
// Read recipeCode from +page.svelte (still embedded for live preview)
|
|
89
|
+
const pagePath = path.join(recipeDir, '+page.svelte');
|
|
90
|
+
let code = '';
|
|
91
|
+
try {
|
|
92
|
+
const pageContent = await fs.readFile(pagePath, 'utf-8');
|
|
93
|
+
code = this.extractRecipeCode(pageContent);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// No page = no code
|
|
97
|
+
}
|
|
98
|
+
if (!code)
|
|
99
|
+
return null;
|
|
100
|
+
return { id, title, description, components, code, features };
|
|
101
|
+
}
|
|
102
|
+
extractRecipeCode(content) {
|
|
103
|
+
const startMatch = content.match(RECIPE_CODE_START_RE);
|
|
104
|
+
if (!startMatch)
|
|
105
|
+
return '';
|
|
106
|
+
const startIdx = (startMatch.index ?? 0) + startMatch[0].length;
|
|
107
|
+
const rest = content.slice(startIdx);
|
|
108
|
+
let depth = 0;
|
|
109
|
+
let endIdx = -1;
|
|
110
|
+
for (let i = 0; i < rest.length; i++) {
|
|
111
|
+
if (rest[i] === '`') {
|
|
112
|
+
depth = depth === 0 ? 1 : 0;
|
|
113
|
+
}
|
|
114
|
+
if (depth === 0 && rest[i] === ';') {
|
|
115
|
+
endIdx = i;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (endIdx === -1)
|
|
120
|
+
return '';
|
|
121
|
+
const raw = rest.slice(0, endIdx);
|
|
122
|
+
const parts = raw.split(RECIPE_CODE_CONCAT_RE);
|
|
123
|
+
return parts.map((p) => p.replace(/^\s*`|`\s*$/g, '')).join('');
|
|
124
|
+
}
|
|
125
|
+
extractString(content, key) {
|
|
126
|
+
const match = content.match(new RegExp(`${key}:\\s*\\n?\\s*['"]([\\s\\S]*?)['"]\\s*[,}]`));
|
|
127
|
+
if (!match?.[1])
|
|
128
|
+
return '';
|
|
129
|
+
return match[1].replace(/'\s*\+\s*\n?\s*'/g, '').trim();
|
|
130
|
+
}
|
|
131
|
+
extractArray(content, key) {
|
|
132
|
+
const match = content.match(new RegExp(`${key}:\\s*\\[([^\\]]+)\\]`, 's'));
|
|
133
|
+
if (!match?.[1])
|
|
134
|
+
return [];
|
|
135
|
+
return match[1]
|
|
136
|
+
.split(',')
|
|
137
|
+
.map((s) => s.trim().replace(/^['"]|['"]$/g, ''))
|
|
138
|
+
.filter((s) => s.length > 0);
|
|
139
|
+
}
|
|
140
|
+
slugToTitle(slug) {
|
|
141
|
+
return slug
|
|
142
|
+
.split('-')
|
|
143
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
144
|
+
.join(' ');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=MCPCatalogAssembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPCatalogAssembler.js","sourceRoot":"","sources":["../../../src/generators/mcp/MCPCatalogAssembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { APIData, EnrichedComponentInfo } from '../../types';
|
|
2
|
+
export interface ComponentCatalogEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
package: string;
|
|
6
|
+
group: 'primitives' | 'components' | 'core';
|
|
7
|
+
description: string;
|
|
8
|
+
tags: string[];
|
|
9
|
+
import: string;
|
|
10
|
+
llmTxtPath: string;
|
|
11
|
+
variants: {
|
|
12
|
+
name: string;
|
|
13
|
+
values: string[];
|
|
14
|
+
default?: string;
|
|
15
|
+
}[];
|
|
16
|
+
keyProps: string[];
|
|
17
|
+
/** Non-primitive prop types (objects, arrays, unions) — omits string/boolean/number */
|
|
18
|
+
keyPropTypes: Record<string, string>;
|
|
19
|
+
slots: string[];
|
|
20
|
+
hasExamples: boolean;
|
|
21
|
+
relatedComponents: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface RecipeEntry {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
components: string[];
|
|
28
|
+
code: string;
|
|
29
|
+
features: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface ComponentCatalog {
|
|
32
|
+
generated: string;
|
|
33
|
+
version: string;
|
|
34
|
+
components: ComponentCatalogEntry[];
|
|
35
|
+
recipes: RecipeEntry[];
|
|
36
|
+
tags: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generates per-package catalog entries as JSON for MCP server consumption.
|
|
40
|
+
* The output is a partial catalog that gets assembled into the final
|
|
41
|
+
* component-catalog.json by MCPCatalogAssembler.
|
|
42
|
+
*/
|
|
43
|
+
export declare class MCPCatalogGenerator {
|
|
44
|
+
private packageName;
|
|
45
|
+
private llmOutputPath;
|
|
46
|
+
constructor(packageName: string, llmOutputPath: string);
|
|
47
|
+
generate(enrichedComponents: EnrichedComponentInfo[], apiData: APIData): Promise<{
|
|
48
|
+
path: string;
|
|
49
|
+
count: number;
|
|
50
|
+
}>;
|
|
51
|
+
private buildEntry;
|
|
52
|
+
private extractSlots;
|
|
53
|
+
private toSlug;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=MCPCatalogGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPCatalogGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/mcp/MCPCatalogGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAoB,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uFAAuF;IACvF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAyBD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAKhD,QAAQ,CACZ,kBAAkB,EAAE,qBAAqB,EAAE,EAC3C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAoB3C,OAAO,CAAC,UAAU;IA8ElB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,MAAM;CAOf"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
/** Internal docs-infrastructure components — excluded from the public catalog */
|
|
4
|
+
const INTERNAL_COMPONENTS = new Set([
|
|
5
|
+
'ApiReference',
|
|
6
|
+
'CodeExample',
|
|
7
|
+
'CodePanel',
|
|
8
|
+
'DocsLayout',
|
|
9
|
+
'InfoCard',
|
|
10
|
+
'PlaygroundConfigurator',
|
|
11
|
+
'Section',
|
|
12
|
+
'TableOfContents',
|
|
13
|
+
'TypesReference'
|
|
14
|
+
]);
|
|
15
|
+
/**
|
|
16
|
+
* Package → origin tag. Components from these packages carry an extra discovery
|
|
17
|
+
* tag (alongside their functional tag) so the whole surface is filterable in one
|
|
18
|
+
* query, e.g. `find_components({ tags: ['auth'] })`. Keep in sync with the
|
|
19
|
+
* `find_components` tool description.
|
|
20
|
+
*/
|
|
21
|
+
const ORIGIN_TAGS = {
|
|
22
|
+
'@urbicon-ui/auth': 'auth'
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Generates per-package catalog entries as JSON for MCP server consumption.
|
|
26
|
+
* The output is a partial catalog that gets assembled into the final
|
|
27
|
+
* component-catalog.json by MCPCatalogAssembler.
|
|
28
|
+
*/
|
|
29
|
+
export class MCPCatalogGenerator {
|
|
30
|
+
packageName;
|
|
31
|
+
llmOutputPath;
|
|
32
|
+
constructor(packageName, llmOutputPath) {
|
|
33
|
+
this.packageName = packageName;
|
|
34
|
+
this.llmOutputPath = llmOutputPath;
|
|
35
|
+
}
|
|
36
|
+
async generate(enrichedComponents, apiData) {
|
|
37
|
+
const entries = [];
|
|
38
|
+
for (const component of enrichedComponents) {
|
|
39
|
+
if (INTERNAL_COMPONENTS.has(component.name))
|
|
40
|
+
continue;
|
|
41
|
+
const compApi = apiData.components[component.name];
|
|
42
|
+
if (!compApi)
|
|
43
|
+
continue;
|
|
44
|
+
const entry = this.buildEntry(component, compApi);
|
|
45
|
+
entries.push(entry);
|
|
46
|
+
}
|
|
47
|
+
const outputPath = path.join(this.llmOutputPath, '_catalog.json');
|
|
48
|
+
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
49
|
+
await fs.writeFile(outputPath, JSON.stringify(entries, null, 2), 'utf-8');
|
|
50
|
+
return { path: outputPath, count: entries.length };
|
|
51
|
+
}
|
|
52
|
+
buildEntry(component, compApi) {
|
|
53
|
+
const group = (compApi.group || 'primitives');
|
|
54
|
+
const slug = this.toSlug(component.name);
|
|
55
|
+
const llmTxtPath = group ? `${group}/${slug}/llm.txt` : `${slug}/llm.txt`;
|
|
56
|
+
// Origin tag: every `@urbicon-ui/auth` component is discoverable via the
|
|
57
|
+
// `auth` tag (`find_components({ tags: ['auth'] })`) on top of its functional
|
|
58
|
+
// tag (form/feedback/data). Derived from the package — not duplicated into
|
|
59
|
+
// each component's JSDoc — so future auth components inherit it automatically.
|
|
60
|
+
// Appended (not prepended) so `tags[0]` stays the functional tag that drives
|
|
61
|
+
// catalog grouping (format-catalog.ts); the filter checks every tag, not the
|
|
62
|
+
// first, so position doesn't affect discoverability.
|
|
63
|
+
const originTag = ORIGIN_TAGS[this.packageName];
|
|
64
|
+
const jsdocTags = component.tags || [];
|
|
65
|
+
const tags = originTag && !jsdocTags.includes(originTag) ? [...jsdocTags, originTag] : jsdocTags;
|
|
66
|
+
const variants = compApi.variants.map((v) => ({
|
|
67
|
+
name: v.name,
|
|
68
|
+
values: v.values,
|
|
69
|
+
...(v.defaultValue ? { default: v.defaultValue } : {})
|
|
70
|
+
}));
|
|
71
|
+
// Key props: top 8 most important direct props (not variant-source, not inherited)
|
|
72
|
+
const directProps = compApi.props.filter((p) => p.source.type === 'direct' || p.source.type === 'variant');
|
|
73
|
+
const keyProps = directProps.slice(0, 8).map((p) => p.name);
|
|
74
|
+
// Non-primitive prop types — helps LLMs understand complex APIs without extra calls
|
|
75
|
+
const PRIMITIVE_TYPES = new Set([
|
|
76
|
+
'string',
|
|
77
|
+
'boolean',
|
|
78
|
+
'number',
|
|
79
|
+
'undefined',
|
|
80
|
+
'null',
|
|
81
|
+
'Snippet',
|
|
82
|
+
'MintProp'
|
|
83
|
+
]);
|
|
84
|
+
const keyPropTypes = {};
|
|
85
|
+
for (const p of directProps) {
|
|
86
|
+
if (p.name.startsWith('...'))
|
|
87
|
+
continue;
|
|
88
|
+
if (p.name === 'class' || p.name === 'unstyled' || p.name === 'slotClasses')
|
|
89
|
+
continue;
|
|
90
|
+
const baseType = p.type.replace(/\s*\|?\s*undefined$/, '').trim();
|
|
91
|
+
if (!baseType || PRIMITIVE_TYPES.has(baseType))
|
|
92
|
+
continue;
|
|
93
|
+
// Keep compound types, arrays, generics, unions with non-primitives
|
|
94
|
+
if (/^(string|boolean|number)(\s*\|\s*(string|boolean|number))*$/.test(baseType))
|
|
95
|
+
continue;
|
|
96
|
+
keyPropTypes[p.name] = baseType;
|
|
97
|
+
}
|
|
98
|
+
const slots = this.extractSlots(compApi);
|
|
99
|
+
const relatedComponents = (component.relatedComponents || []).filter((r) => r !== component.name);
|
|
100
|
+
return {
|
|
101
|
+
name: component.name,
|
|
102
|
+
slug,
|
|
103
|
+
package: this.packageName,
|
|
104
|
+
group,
|
|
105
|
+
description: component.description || '',
|
|
106
|
+
tags,
|
|
107
|
+
import: `import { ${component.name} } from '${this.packageName}';`,
|
|
108
|
+
llmTxtPath,
|
|
109
|
+
variants,
|
|
110
|
+
keyProps,
|
|
111
|
+
keyPropTypes,
|
|
112
|
+
slots,
|
|
113
|
+
hasExamples: compApi.examples.length > 0,
|
|
114
|
+
relatedComponents
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
extractSlots(compApi) {
|
|
118
|
+
const slotNames = new Set();
|
|
119
|
+
for (const v of compApi.variants) {
|
|
120
|
+
if (v.name === 'slot' || v.name === 'slots') {
|
|
121
|
+
for (const val of v.values) {
|
|
122
|
+
if (val.trim())
|
|
123
|
+
slotNames.add(val);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const prop of compApi.props) {
|
|
128
|
+
if (prop.name === 'slotClasses' && prop.type) {
|
|
129
|
+
const match = prop.type.match(/Record<['"]([\w\s|']+)['"],/);
|
|
130
|
+
if (match?.[1]) {
|
|
131
|
+
const keys = match[1]
|
|
132
|
+
.split(/[|']/)
|
|
133
|
+
.filter(Boolean)
|
|
134
|
+
.map((s) => s.trim());
|
|
135
|
+
keys
|
|
136
|
+
.filter((k) => k)
|
|
137
|
+
.forEach((k) => {
|
|
138
|
+
slotNames.add(k);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return Array.from(slotNames);
|
|
144
|
+
}
|
|
145
|
+
toSlug(input) {
|
|
146
|
+
return input
|
|
147
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
148
|
+
.replace(/_/g, '-')
|
|
149
|
+
.replace(/\s+/g, '-')
|
|
150
|
+
.toLowerCase();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=MCPCatalogGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPCatalogGenerator.js","sourceRoot":"","sources":["../../../src/generators/mcp/MCPCatalogGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { APIData, EnrichedComponentInfo, GeneratedOutput, SvelteOutputConfig } from '@/types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates Svelte documentation pages from API data and enriched component information
|
|
4
|
+
* This is the main generator for Session 5 - creates pages that match the existing docs structure
|
|
5
|
+
*/
|
|
6
|
+
export declare class SveltePageGenerator {
|
|
7
|
+
private config;
|
|
8
|
+
private overviewRenderer;
|
|
9
|
+
private playgroundRenderer;
|
|
10
|
+
private exampleRenderer;
|
|
11
|
+
private variantsRenderer;
|
|
12
|
+
private apiRenderer;
|
|
13
|
+
private typesRenderer;
|
|
14
|
+
private usageRenderer;
|
|
15
|
+
private templateEngine;
|
|
16
|
+
private svelteDocsParser;
|
|
17
|
+
private sectionMerger;
|
|
18
|
+
constructor(config: SvelteOutputConfig);
|
|
19
|
+
private toSlug;
|
|
20
|
+
/**
|
|
21
|
+
* Generate Svelte documentation pages for all components
|
|
22
|
+
*/
|
|
23
|
+
generate(enrichedComponents: EnrichedComponentInfo[], apiData: APIData): Promise<GeneratedOutput>;
|
|
24
|
+
/**
|
|
25
|
+
* Generate the main index page with component overview
|
|
26
|
+
*/
|
|
27
|
+
private generateIndexPage;
|
|
28
|
+
/**
|
|
29
|
+
* Generate the main component page
|
|
30
|
+
*/
|
|
31
|
+
private generateComponentPage;
|
|
32
|
+
/**
|
|
33
|
+
* Generate navigation data for the documentation
|
|
34
|
+
*/
|
|
35
|
+
private generateNavigationData;
|
|
36
|
+
/**
|
|
37
|
+
* Generate sections from component documentation using hybrid approach:
|
|
38
|
+
* 1. Parse docs.svelte for docsConfig and custom sections
|
|
39
|
+
* 2. Generate auto-sections based on config
|
|
40
|
+
* 3. Merge auto + custom sections intelligently
|
|
41
|
+
*/
|
|
42
|
+
private generateSections;
|
|
43
|
+
/**
|
|
44
|
+
* Generate auto-sections based on SvelteDocsConfig
|
|
45
|
+
*/
|
|
46
|
+
private generateAutoSections;
|
|
47
|
+
/**
|
|
48
|
+
* Map section ID to section type for rendering
|
|
49
|
+
*/
|
|
50
|
+
private mapToSectionType;
|
|
51
|
+
/**
|
|
52
|
+
* Collect and merge script data from all sections
|
|
53
|
+
*/
|
|
54
|
+
private collectScriptData;
|
|
55
|
+
/**
|
|
56
|
+
* Group components by specified strategy
|
|
57
|
+
*/
|
|
58
|
+
private groupComponents;
|
|
59
|
+
/**
|
|
60
|
+
* Build navigation tree for ToC
|
|
61
|
+
*/
|
|
62
|
+
private buildNavigationTree;
|
|
63
|
+
/**
|
|
64
|
+
* Generate navigation for a single page
|
|
65
|
+
*/
|
|
66
|
+
private generatePageNavigation;
|
|
67
|
+
/**
|
|
68
|
+
* Heuristically extract Section anchors from docs.svelte for ToC without full parsing.
|
|
69
|
+
* Looks for `<Section id="..." title="...">` occurrences and returns id/title pairs.
|
|
70
|
+
*/
|
|
71
|
+
private extractCustomSectionsForNavigation;
|
|
72
|
+
private slugToTitle;
|
|
73
|
+
/**
|
|
74
|
+
* Determine if usage notes should be included
|
|
75
|
+
*/
|
|
76
|
+
private shouldIncludeUsageNotes;
|
|
77
|
+
/**
|
|
78
|
+
* Calculate total size of generated files
|
|
79
|
+
*/
|
|
80
|
+
private calculateTotalSize;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=PageGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/svelte/PageGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,OAAO,EAEP,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,MAAM,SAAS,CAAC;AAOjB;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,kBAAkB;IAetC,OAAO,CAAC,MAAM;IAQd;;OAEG;IACG,QAAQ,CACb,kBAAkB,EAAE,qBAAqB,EAAE,EAC3C,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,eAAe,CAAC;IAuD3B;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;YACW,qBAAqB;IAgGnC;;OAEG;YACW,sBAAsB;IAkCpC;;;;;OAKG;YACW,gBAAgB;IA8D9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoH5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACF,OAAO,CAAC,iBAAiB;IAqD1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoCvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;OAEG;IACF,OAAO,CAAC,sBAAsB;IAQ9B;;;OAGG;YACW,kCAAkC;IAiChD,OAAO,CAAC,WAAW;IAOpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;YACW,kBAAkB;CAchC"}
|