@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.
Files changed (263) hide show
  1. package/README.md +92 -0
  2. package/dist/cli/CLI.d.ts +10 -0
  3. package/dist/cli/CLI.d.ts.map +1 -0
  4. package/dist/cli/CLI.js +340 -0
  5. package/dist/cli/CLI.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +7 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/core/discovery/ComponentFinder.d.ts +43 -0
  11. package/dist/core/discovery/ComponentFinder.d.ts.map +1 -0
  12. package/dist/core/discovery/ComponentFinder.js +421 -0
  13. package/dist/core/discovery/ComponentFinder.js.map +1 -0
  14. package/dist/core/discovery/FileStructureAnalyzer.d.ts +15 -0
  15. package/dist/core/discovery/FileStructureAnalyzer.d.ts.map +1 -0
  16. package/dist/core/discovery/FileStructureAnalyzer.js +35 -0
  17. package/dist/core/discovery/FileStructureAnalyzer.js.map +1 -0
  18. package/dist/core/discovery/MetadataExtractor.d.ts +15 -0
  19. package/dist/core/discovery/MetadataExtractor.d.ts.map +1 -0
  20. package/dist/core/discovery/MetadataExtractor.js +47 -0
  21. package/dist/core/discovery/MetadataExtractor.js.map +1 -0
  22. package/dist/core/discovery/index.d.ts +2 -0
  23. package/dist/core/discovery/index.d.ts.map +1 -0
  24. package/dist/core/discovery/index.js +2 -0
  25. package/dist/core/discovery/index.js.map +1 -0
  26. package/dist/core/enrichment/APIDataGenerator.d.ts +77 -0
  27. package/dist/core/enrichment/APIDataGenerator.d.ts.map +1 -0
  28. package/dist/core/enrichment/APIDataGenerator.js +663 -0
  29. package/dist/core/enrichment/APIDataGenerator.js.map +1 -0
  30. package/dist/core/enrichment/index.d.ts +2 -0
  31. package/dist/core/enrichment/index.d.ts.map +1 -0
  32. package/dist/core/enrichment/index.js +6 -0
  33. package/dist/core/enrichment/index.js.map +1 -0
  34. package/dist/core/extraction/ExtractionCoordinator.d.ts +53 -0
  35. package/dist/core/extraction/ExtractionCoordinator.d.ts.map +1 -0
  36. package/dist/core/extraction/ExtractionCoordinator.js +352 -0
  37. package/dist/core/extraction/ExtractionCoordinator.js.map +1 -0
  38. package/dist/core/extraction/index.d.ts +2 -0
  39. package/dist/core/extraction/index.d.ts.map +1 -0
  40. package/dist/core/extraction/index.js +2 -0
  41. package/dist/core/extraction/index.js.map +1 -0
  42. package/dist/core/generation/GenerationCoordinator.d.ts +51 -0
  43. package/dist/core/generation/GenerationCoordinator.d.ts.map +1 -0
  44. package/dist/core/generation/GenerationCoordinator.js +206 -0
  45. package/dist/core/generation/GenerationCoordinator.js.map +1 -0
  46. package/dist/core/generation/index.d.ts +2 -0
  47. package/dist/core/generation/index.d.ts.map +1 -0
  48. package/dist/core/generation/index.js +2 -0
  49. package/dist/core/generation/index.js.map +1 -0
  50. package/dist/core/index.d.ts +7 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +16 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/pipeline/ErrorHandler.d.ts +129 -0
  55. package/dist/core/pipeline/ErrorHandler.d.ts.map +1 -0
  56. package/dist/core/pipeline/ErrorHandler.js +321 -0
  57. package/dist/core/pipeline/ErrorHandler.js.map +1 -0
  58. package/dist/core/pipeline/PipelineOrchestrator.d.ts +45 -0
  59. package/dist/core/pipeline/PipelineOrchestrator.d.ts.map +1 -0
  60. package/dist/core/pipeline/PipelineOrchestrator.js +216 -0
  61. package/dist/core/pipeline/PipelineOrchestrator.js.map +1 -0
  62. package/dist/core/pipeline/index.d.ts +1 -0
  63. package/dist/core/pipeline/index.d.ts.map +1 -0
  64. package/dist/core/pipeline/index.js +2 -0
  65. package/dist/core/pipeline/index.js.map +1 -0
  66. package/dist/extractors/BaseExtractor.d.ts +33 -0
  67. package/dist/extractors/BaseExtractor.d.ts.map +1 -0
  68. package/dist/extractors/BaseExtractor.js +68 -0
  69. package/dist/extractors/BaseExtractor.js.map +1 -0
  70. package/dist/extractors/ExtractorFactory.d.ts +35 -0
  71. package/dist/extractors/ExtractorFactory.d.ts.map +1 -0
  72. package/dist/extractors/ExtractorFactory.js +88 -0
  73. package/dist/extractors/ExtractorFactory.js.map +1 -0
  74. package/dist/extractors/documentation/index.d.ts +1 -0
  75. package/dist/extractors/documentation/index.d.ts.map +1 -0
  76. package/dist/extractors/documentation/index.js +2 -0
  77. package/dist/extractors/documentation/index.js.map +1 -0
  78. package/dist/extractors/index.d.ts +1 -0
  79. package/dist/extractors/index.d.ts.map +1 -0
  80. package/dist/extractors/index.js +2 -0
  81. package/dist/extractors/index.js.map +1 -0
  82. package/dist/extractors/typescript/ExamplesExtractor.d.ts +32 -0
  83. package/dist/extractors/typescript/ExamplesExtractor.d.ts.map +1 -0
  84. package/dist/extractors/typescript/ExamplesExtractor.js +209 -0
  85. package/dist/extractors/typescript/ExamplesExtractor.js.map +1 -0
  86. package/dist/extractors/typescript/InheritanceExtractor.d.ts +45 -0
  87. package/dist/extractors/typescript/InheritanceExtractor.d.ts.map +1 -0
  88. package/dist/extractors/typescript/InheritanceExtractor.js +368 -0
  89. package/dist/extractors/typescript/InheritanceExtractor.js.map +1 -0
  90. package/dist/extractors/typescript/LocalTypesExtractor.d.ts +20 -0
  91. package/dist/extractors/typescript/LocalTypesExtractor.d.ts.map +1 -0
  92. package/dist/extractors/typescript/LocalTypesExtractor.js +100 -0
  93. package/dist/extractors/typescript/LocalTypesExtractor.js.map +1 -0
  94. package/dist/extractors/typescript/PropsExtractor.d.ts +142 -0
  95. package/dist/extractors/typescript/PropsExtractor.d.ts.map +1 -0
  96. package/dist/extractors/typescript/PropsExtractor.js +709 -0
  97. package/dist/extractors/typescript/PropsExtractor.js.map +1 -0
  98. package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts +74 -0
  99. package/dist/extractors/typescript/TypeScriptBaseExtractor.d.ts.map +1 -0
  100. package/dist/extractors/typescript/TypeScriptBaseExtractor.js +249 -0
  101. package/dist/extractors/typescript/TypeScriptBaseExtractor.js.map +1 -0
  102. package/dist/extractors/typescript/index.d.ts +1 -0
  103. package/dist/extractors/typescript/index.d.ts.map +1 -0
  104. package/dist/extractors/typescript/index.js +2 -0
  105. package/dist/extractors/typescript/index.js.map +1 -0
  106. package/dist/extractors/variants/TailwindVariantsParser.d.ts +16 -0
  107. package/dist/extractors/variants/TailwindVariantsParser.d.ts.map +1 -0
  108. package/dist/extractors/variants/TailwindVariantsParser.js +53 -0
  109. package/dist/extractors/variants/TailwindVariantsParser.js.map +1 -0
  110. package/dist/extractors/variants/VariantsExtractor.d.ts +45 -0
  111. package/dist/extractors/variants/VariantsExtractor.d.ts.map +1 -0
  112. package/dist/extractors/variants/VariantsExtractor.js +340 -0
  113. package/dist/extractors/variants/VariantsExtractor.js.map +1 -0
  114. package/dist/extractors/variants/index.d.ts +2 -0
  115. package/dist/extractors/variants/index.d.ts.map +1 -0
  116. package/dist/extractors/variants/index.js +2 -0
  117. package/dist/extractors/variants/index.js.map +1 -0
  118. package/dist/generators/api/APIFileGenerator.d.ts +32 -0
  119. package/dist/generators/api/APIFileGenerator.d.ts.map +1 -0
  120. package/dist/generators/api/APIFileGenerator.js +450 -0
  121. package/dist/generators/api/APIFileGenerator.js.map +1 -0
  122. package/dist/generators/api/TypeDefinitionGenerator.d.ts +1 -0
  123. package/dist/generators/api/TypeDefinitionGenerator.d.ts.map +1 -0
  124. package/dist/generators/api/TypeDefinitionGenerator.js +2 -0
  125. package/dist/generators/api/TypeDefinitionGenerator.js.map +1 -0
  126. package/dist/generators/api/index.d.ts +2 -0
  127. package/dist/generators/api/index.d.ts.map +1 -0
  128. package/dist/generators/api/index.js +2 -0
  129. package/dist/generators/api/index.js.map +1 -0
  130. package/dist/generators/index.d.ts +5 -0
  131. package/dist/generators/index.d.ts.map +1 -0
  132. package/dist/generators/index.js +4 -0
  133. package/dist/generators/index.js.map +1 -0
  134. package/dist/generators/llm/LLMDocumentationGenerator.d.ts +34 -0
  135. package/dist/generators/llm/LLMDocumentationGenerator.d.ts.map +1 -0
  136. package/dist/generators/llm/LLMDocumentationGenerator.js +480 -0
  137. package/dist/generators/llm/LLMDocumentationGenerator.js.map +1 -0
  138. package/dist/generators/llm/LLMFormatter.d.ts +4 -0
  139. package/dist/generators/llm/LLMFormatter.d.ts.map +1 -0
  140. package/dist/generators/llm/LLMFormatter.js +8 -0
  141. package/dist/generators/llm/LLMFormatter.js.map +1 -0
  142. package/dist/generators/llm/LlmsFullAssembler.d.ts +20 -0
  143. package/dist/generators/llm/LlmsFullAssembler.d.ts.map +1 -0
  144. package/dist/generators/llm/LlmsFullAssembler.js +63 -0
  145. package/dist/generators/llm/LlmsFullAssembler.js.map +1 -0
  146. package/dist/generators/llm/index.d.ts +1 -0
  147. package/dist/generators/llm/index.d.ts.map +1 -0
  148. package/dist/generators/llm/index.js +2 -0
  149. package/dist/generators/llm/index.js.map +1 -0
  150. package/dist/generators/mcp/MCPCatalogAssembler.d.ts +27 -0
  151. package/dist/generators/mcp/MCPCatalogAssembler.d.ts.map +1 -0
  152. package/dist/generators/mcp/MCPCatalogAssembler.js +147 -0
  153. package/dist/generators/mcp/MCPCatalogAssembler.js.map +1 -0
  154. package/dist/generators/mcp/MCPCatalogGenerator.d.ts +55 -0
  155. package/dist/generators/mcp/MCPCatalogGenerator.d.ts.map +1 -0
  156. package/dist/generators/mcp/MCPCatalogGenerator.js +153 -0
  157. package/dist/generators/mcp/MCPCatalogGenerator.js.map +1 -0
  158. package/dist/generators/svelte/PageGenerator.d.ts +82 -0
  159. package/dist/generators/svelte/PageGenerator.d.ts.map +1 -0
  160. package/dist/generators/svelte/PageGenerator.js +557 -0
  161. package/dist/generators/svelte/PageGenerator.js.map +1 -0
  162. package/dist/generators/svelte/PlaygroundPresets.d.ts +2 -0
  163. package/dist/generators/svelte/PlaygroundPresets.d.ts.map +1 -0
  164. package/dist/generators/svelte/PlaygroundPresets.js +4 -0
  165. package/dist/generators/svelte/PlaygroundPresets.js.map +1 -0
  166. package/dist/generators/svelte/SectionMerger.d.ts +38 -0
  167. package/dist/generators/svelte/SectionMerger.d.ts.map +1 -0
  168. package/dist/generators/svelte/SectionMerger.js +154 -0
  169. package/dist/generators/svelte/SectionMerger.js.map +1 -0
  170. package/dist/generators/svelte/TemplateEngine.d.ts +91 -0
  171. package/dist/generators/svelte/TemplateEngine.d.ts.map +1 -0
  172. package/dist/generators/svelte/TemplateEngine.js +500 -0
  173. package/dist/generators/svelte/TemplateEngine.js.map +1 -0
  174. package/dist/generators/svelte/index.d.ts +8 -0
  175. package/dist/generators/svelte/index.d.ts.map +1 -0
  176. package/dist/generators/svelte/index.js +11 -0
  177. package/dist/generators/svelte/index.js.map +1 -0
  178. package/dist/generators/svelte/renderers/ApiRenderer.d.ts +17 -0
  179. package/dist/generators/svelte/renderers/ApiRenderer.d.ts.map +1 -0
  180. package/dist/generators/svelte/renderers/ApiRenderer.js +44 -0
  181. package/dist/generators/svelte/renderers/ApiRenderer.js.map +1 -0
  182. package/dist/generators/svelte/renderers/ExampleRenderer.d.ts +33 -0
  183. package/dist/generators/svelte/renderers/ExampleRenderer.d.ts.map +1 -0
  184. package/dist/generators/svelte/renderers/ExampleRenderer.js +137 -0
  185. package/dist/generators/svelte/renderers/ExampleRenderer.js.map +1 -0
  186. package/dist/generators/svelte/renderers/OverviewRenderer.d.ts +9 -0
  187. package/dist/generators/svelte/renderers/OverviewRenderer.d.ts.map +1 -0
  188. package/dist/generators/svelte/renderers/OverviewRenderer.js +45 -0
  189. package/dist/generators/svelte/renderers/OverviewRenderer.js.map +1 -0
  190. package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts +35 -0
  191. package/dist/generators/svelte/renderers/PlaygroundRenderer.d.ts.map +1 -0
  192. package/dist/generators/svelte/renderers/PlaygroundRenderer.js +319 -0
  193. package/dist/generators/svelte/renderers/PlaygroundRenderer.js.map +1 -0
  194. package/dist/generators/svelte/renderers/TypesRenderer.d.ts +9 -0
  195. package/dist/generators/svelte/renderers/TypesRenderer.d.ts.map +1 -0
  196. package/dist/generators/svelte/renderers/TypesRenderer.js +23 -0
  197. package/dist/generators/svelte/renderers/TypesRenderer.js.map +1 -0
  198. package/dist/generators/svelte/renderers/UsageRenderer.d.ts +14 -0
  199. package/dist/generators/svelte/renderers/UsageRenderer.d.ts.map +1 -0
  200. package/dist/generators/svelte/renderers/UsageRenderer.js +91 -0
  201. package/dist/generators/svelte/renderers/UsageRenderer.js.map +1 -0
  202. package/dist/generators/svelte/renderers/VariantsRenderer.d.ts +43 -0
  203. package/dist/generators/svelte/renderers/VariantsRenderer.d.ts.map +1 -0
  204. package/dist/generators/svelte/renderers/VariantsRenderer.js +277 -0
  205. package/dist/generators/svelte/renderers/VariantsRenderer.js.map +1 -0
  206. package/dist/generators/svelte/renderers/index.d.ts +8 -0
  207. package/dist/generators/svelte/renderers/index.d.ts.map +1 -0
  208. package/dist/generators/svelte/renderers/index.js +8 -0
  209. package/dist/generators/svelte/renderers/index.js.map +1 -0
  210. package/dist/generators/svelte/types.d.ts +13 -0
  211. package/dist/generators/svelte/types.d.ts.map +1 -0
  212. package/dist/generators/svelte/types.js +2 -0
  213. package/dist/generators/svelte/types.js.map +1 -0
  214. package/dist/index.d.ts +5 -0
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +4 -0
  217. package/dist/index.js.map +1 -0
  218. package/dist/parsers/SvelteDocsParser.d.ts +44 -0
  219. package/dist/parsers/SvelteDocsParser.d.ts.map +1 -0
  220. package/dist/parsers/SvelteDocsParser.js +141 -0
  221. package/dist/parsers/SvelteDocsParser.js.map +1 -0
  222. package/dist/parsers/index.d.ts +2 -0
  223. package/dist/parsers/index.d.ts.map +1 -0
  224. package/dist/parsers/index.js +6 -0
  225. package/dist/parsers/index.js.map +1 -0
  226. package/dist/schema/ConfigurationBuilder.d.ts +55 -0
  227. package/dist/schema/ConfigurationBuilder.d.ts.map +1 -0
  228. package/dist/schema/ConfigurationBuilder.js +447 -0
  229. package/dist/schema/ConfigurationBuilder.js.map +1 -0
  230. package/dist/schema/index.d.ts +1 -0
  231. package/dist/schema/index.d.ts.map +1 -0
  232. package/dist/schema/index.js +2 -0
  233. package/dist/schema/index.js.map +1 -0
  234. package/dist/tsconfig.tsbuildinfo +1 -0
  235. package/dist/types/configuration.d.ts +255 -0
  236. package/dist/types/configuration.d.ts.map +1 -0
  237. package/dist/types/configuration.js +2 -0
  238. package/dist/types/configuration.js.map +1 -0
  239. package/dist/types/core.d.ts +96 -0
  240. package/dist/types/core.d.ts.map +1 -0
  241. package/dist/types/core.js +2 -0
  242. package/dist/types/core.js.map +1 -0
  243. package/dist/types/docs-config.d.ts +5 -0
  244. package/dist/types/docs-config.d.ts.map +1 -0
  245. package/dist/types/docs-config.js +51 -0
  246. package/dist/types/docs-config.js.map +1 -0
  247. package/dist/types/index.d.ts +6 -0
  248. package/dist/types/index.d.ts.map +1 -0
  249. package/dist/types/index.js +9 -0
  250. package/dist/types/index.js.map +1 -0
  251. package/dist/types/validation.d.ts +321 -0
  252. package/dist/types/validation.d.ts.map +1 -0
  253. package/dist/types/validation.js +2 -0
  254. package/dist/types/validation.js.map +1 -0
  255. package/dist/utils/DeploymentManager.d.ts +80 -0
  256. package/dist/utils/DeploymentManager.d.ts.map +1 -0
  257. package/dist/utils/DeploymentManager.js +360 -0
  258. package/dist/utils/DeploymentManager.js.map +1 -0
  259. package/dist/utils/index.d.ts +1 -0
  260. package/dist/utils/index.d.ts.map +1 -0
  261. package/dist/utils/index.js +2 -0
  262. package/dist/utils/index.js.map +1 -0
  263. package/package.json +74 -0
@@ -0,0 +1,368 @@
1
+ import * as ts from 'typescript';
2
+ import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
3
+ /**
4
+ * Resolves interface inheritance, including HTML attributes, external types, and Omit patterns
5
+ */
6
+ export class InheritanceExtractor extends TypeScriptBaseExtractor {
7
+ config;
8
+ knownInterfaces;
9
+ constructor(tsConfig) {
10
+ super(tsConfig);
11
+ const ext = tsConfig?.extraction?.inheritance;
12
+ this.config = {
13
+ resolveExternalTypes: true,
14
+ includeHTMLAttributes: true,
15
+ maxDepth: 5,
16
+ knownInterfaces: [],
17
+ ...ext
18
+ };
19
+ // Build known interfaces map
20
+ this.knownInterfaces = new Map();
21
+ this.config.knownInterfaces?.forEach((iface) => {
22
+ this.knownInterfaces.set(iface.name, iface);
23
+ });
24
+ // Add default known interfaces
25
+ this.addDefaultKnownInterfaces();
26
+ }
27
+ /**
28
+ * Extract inheritance information from component interface
29
+ */
30
+ async extract(input) {
31
+ const startTime = Date.now();
32
+ if (!this.validateInput(input)) {
33
+ return this.handleError(new Error('Invalid input for inheritance extraction'), input);
34
+ }
35
+ try {
36
+ console.log(`🔗 Extracting inheritance for ${input.componentName}`);
37
+ const sourceFile = await this.getSourceFile(input.filePath);
38
+ if (!sourceFile) {
39
+ return this.handleError(new Error(`Could not load source file: ${input.filePath}`), input);
40
+ }
41
+ // Find the main interface
42
+ const interfaceName = input.interfaceName || `${input.componentName}Props`;
43
+ const mainInterface = this.findInterface(sourceFile, interfaceName);
44
+ if (!mainInterface) {
45
+ const warning = this.addWarning('no_interface', `No ${interfaceName} interface found`, `Create a ${interfaceName} interface to document inheritance`);
46
+ return this.createSuccessResult([], [warning], input.filePath, Date.now() - startTime);
47
+ }
48
+ console.log(`✅ Found ${interfaceName} interface`);
49
+ // Extract inheritance information
50
+ const inheritance = await this.extractInheritanceFromInterface(mainInterface, sourceFile, 0);
51
+ console.log(`🔗 Extracted ${inheritance.length} inheritance sources`);
52
+ const duration = Date.now() - startTime;
53
+ return this.createSuccessResult(inheritance, [], input.filePath, duration);
54
+ }
55
+ catch (error) {
56
+ return this.handleError(error, input);
57
+ }
58
+ }
59
+ // ==========================================
60
+ // INHERITANCE EXTRACTION
61
+ // ==========================================
62
+ async extractInheritanceFromInterface(interfaceNode, sourceFile, depth) {
63
+ if (depth >= this.config.maxDepth) {
64
+ console.warn(`⚠️ Max inheritance depth (${this.config.maxDepth}) reached`);
65
+ return [];
66
+ }
67
+ const inheritance = [];
68
+ if (!interfaceNode.heritageClauses) {
69
+ return inheritance;
70
+ }
71
+ for (const heritageClause of interfaceNode.heritageClauses) {
72
+ for (const heritageType of heritageClause.types) {
73
+ const inheritanceInfo = await this.processHeritageType(heritageType, sourceFile, depth + 1);
74
+ if (inheritanceInfo) {
75
+ inheritance.push(inheritanceInfo);
76
+ }
77
+ }
78
+ }
79
+ return inheritance;
80
+ }
81
+ async processHeritageType(heritageType, sourceFile, depth) {
82
+ const typeName = heritageType.expression.getText();
83
+ console.log(`🔍 Processing heritage type: ${typeName} (depth: ${depth})`);
84
+ // Handle different inheritance patterns
85
+ if (this.isOmitPattern(heritageType)) {
86
+ return this.handleOmitPattern(heritageType);
87
+ }
88
+ if (this.isHTMLAttributes(typeName)) {
89
+ return this.handleHTMLAttributes(typeName);
90
+ }
91
+ if (this.isKnownInterface(typeName)) {
92
+ return this.handleKnownInterface(typeName);
93
+ }
94
+ // Try to find local interface
95
+ const localInterface = this.findInterface(sourceFile, typeName);
96
+ if (localInterface) {
97
+ return this.handleLocalInterface(localInterface, typeName, sourceFile, depth);
98
+ }
99
+ // Handle external types if enabled
100
+ if (this.config.resolveExternalTypes) {
101
+ return this.handleExternalType(typeName, heritageType);
102
+ }
103
+ // Create placeholder for unresolved inheritance
104
+ console.log(`❓ Creating placeholder for unresolved type: ${typeName}`);
105
+ return {
106
+ typeName,
107
+ source: 'unknown',
108
+ props: []
109
+ };
110
+ }
111
+ // ==========================================
112
+ // INHERITANCE PATTERN HANDLERS
113
+ // ==========================================
114
+ handleOmitPattern(heritageType) {
115
+ const fullType = heritageType.getText();
116
+ console.log(`✂️ Handling Omit pattern: ${fullType}`);
117
+ // Parse Omit<BaseType, Keys> pattern
118
+ const match = fullType.match(/Omit<([^,]+),\s*([^>]+)>/);
119
+ if (!match) {
120
+ throw new Error(`Invalid Omit pattern: ${fullType}`);
121
+ }
122
+ const baseType = (match[1] || '').trim();
123
+ const omittedKeys = (match[2] || '').trim();
124
+ // Extract omitted key names
125
+ const omittedKeyList = this.parseOmittedKeys(omittedKeys);
126
+ let props = [];
127
+ let url;
128
+ // Handle base type
129
+ if (this.isHTMLAttributes(baseType)) {
130
+ const elementType = this.extractElementType(baseType);
131
+ url = `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${elementType.toLowerCase()}`;
132
+ props = [
133
+ {
134
+ name: `...${elementType}Attributes`,
135
+ type: 'HTMLAttributes',
136
+ required: false,
137
+ description: `HTML ${elementType.toLowerCase()} attributes${omittedKeyList.length > 0 ? ` (excluding: ${omittedKeyList.join(', ')})` : ''}`,
138
+ source: {
139
+ type: 'inherited',
140
+ name: baseType,
141
+ package: 'svelte/elements'
142
+ }
143
+ }
144
+ ];
145
+ }
146
+ return {
147
+ typeName: fullType,
148
+ source: 'omit-pattern',
149
+ props,
150
+ ...(url ? { url } : {})
151
+ };
152
+ }
153
+ handleHTMLAttributes(typeName) {
154
+ console.log(`🌐 Handling HTML attributes: ${typeName}`);
155
+ const elementType = this.extractElementType(typeName);
156
+ const url = `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${elementType.toLowerCase()}`;
157
+ const props = [
158
+ {
159
+ name: `...${elementType}Attributes`,
160
+ type: 'HTMLAttributes',
161
+ required: false,
162
+ description: `All standard HTML ${elementType.toLowerCase()} attributes`,
163
+ source: {
164
+ type: 'inherited',
165
+ name: typeName,
166
+ package: 'svelte/elements',
167
+ ...(url ? { url } : {})
168
+ }
169
+ }
170
+ ];
171
+ return {
172
+ typeName,
173
+ source: 'html-attributes',
174
+ props,
175
+ ...(url ? { url } : {})
176
+ };
177
+ }
178
+ handleKnownInterface(typeName) {
179
+ const knownInterface = this.knownInterfaces.get(typeName);
180
+ console.log(`📚 Handling known interface: ${typeName} from ${knownInterface.package}`);
181
+ const props = [
182
+ {
183
+ name: `...${typeName}`,
184
+ type: typeName,
185
+ required: false,
186
+ description: knownInterface.description || `Properties from ${typeName}`,
187
+ source: {
188
+ type: 'inherited',
189
+ name: typeName,
190
+ package: knownInterface.package,
191
+ ...(knownInterface.url ? { url: knownInterface.url } : {})
192
+ }
193
+ }
194
+ ];
195
+ return {
196
+ typeName,
197
+ source: knownInterface.package,
198
+ props,
199
+ ...(knownInterface.url ? { url: knownInterface.url } : {})
200
+ };
201
+ }
202
+ async handleLocalInterface(interfaceNode, typeName, sourceFile, depth) {
203
+ console.log(`📋 Handling local interface: ${typeName}`);
204
+ const props = [];
205
+ // Extract props from local interface
206
+ for (const member of interfaceNode.members) {
207
+ if (ts.isPropertySignature(member)) {
208
+ const prop = this.extractPropFromMember(member);
209
+ if (prop) {
210
+ prop.source = {
211
+ type: 'inherited',
212
+ name: typeName
213
+ };
214
+ props.push(prop);
215
+ }
216
+ }
217
+ }
218
+ // Recursively extract inheritance from this interface
219
+ const nestedInheritance = await this.extractInheritanceFromInterface(interfaceNode, sourceFile, depth);
220
+ // Flatten nested inheritance props
221
+ nestedInheritance.forEach((inheritance) => {
222
+ props.push(...inheritance.props);
223
+ });
224
+ return {
225
+ typeName,
226
+ source: 'local-interface',
227
+ props
228
+ };
229
+ }
230
+ handleExternalType(typeName, _heritageType) {
231
+ console.log(`🌍 Handling external type: ${typeName}`);
232
+ // Try to resolve common external types
233
+ const packageName = this.getPackageForType(typeName);
234
+ const url = this.getUrlForType(typeName);
235
+ const props = [
236
+ {
237
+ name: `...${typeName}`,
238
+ type: typeName,
239
+ required: false,
240
+ description: `Properties inherited from ${typeName}`,
241
+ source: {
242
+ type: 'inherited',
243
+ name: typeName,
244
+ ...(packageName ? { package: packageName } : {}),
245
+ ...(url ? { url } : {})
246
+ }
247
+ }
248
+ ];
249
+ return {
250
+ typeName,
251
+ source: packageName || 'external',
252
+ props,
253
+ ...(url ? { url } : {})
254
+ };
255
+ }
256
+ // ==========================================
257
+ // UTILITY METHODS
258
+ // ==========================================
259
+ isOmitPattern(heritageType) {
260
+ return heritageType.expression.getText().startsWith('Omit');
261
+ }
262
+ isHTMLAttributes(typeName) {
263
+ return typeName.includes('HTML') && typeName.includes('Attributes');
264
+ }
265
+ isKnownInterface(typeName) {
266
+ return this.knownInterfaces.has(typeName);
267
+ }
268
+ extractElementType(typeName) {
269
+ const match = typeName?.match(/HTML(\w+)Attributes/);
270
+ return match?.[1] ? match[1] : 'Element';
271
+ }
272
+ parseOmittedKeys(omittedKeys) {
273
+ // Handle union types: 'key1' | 'key2' | 'key3'
274
+ const keys = omittedKeys
275
+ .split('|')
276
+ .map((key) => key.trim().replace(/['"]/g, ''))
277
+ .filter((key) => key.length > 0);
278
+ return keys;
279
+ }
280
+ getPackageForType(typeName) {
281
+ const packageMap = {
282
+ Snippet: 'svelte',
283
+ ComponentEvents: 'svelte',
284
+ MintProp: '@urbicon-ui/blocks',
285
+ ComponentIntent: '@urbicon-ui/blocks',
286
+ ComponentSize: '@urbicon-ui/blocks',
287
+ HTMLButtonAttributes: 'svelte/elements',
288
+ HTMLInputAttributes: 'svelte/elements',
289
+ HTMLDivAttributes: 'svelte/elements'
290
+ };
291
+ return packageMap[typeName];
292
+ }
293
+ getUrlForType(typeName) {
294
+ const urlMap = {
295
+ Snippet: 'https://svelte.dev/docs/svelte/snippet',
296
+ ComponentEvents: 'https://svelte.dev/docs/svelte/component-events',
297
+ MintProp: '/docs/mint-system',
298
+ ComponentIntent: '/docs/design-tokens#intent',
299
+ ComponentSize: '/docs/design-tokens#size'
300
+ };
301
+ return urlMap[typeName];
302
+ }
303
+ extractPropFromMember(member) {
304
+ const propName = this.getPropertyName(member);
305
+ if (!propName)
306
+ return null;
307
+ const propType = this.getTypeString(member.type);
308
+ const isRequired = this.isPropertyRequired(member);
309
+ const description = this.extractJSDocComment(member) || `${propName} property`;
310
+ return {
311
+ name: propName,
312
+ type: propType,
313
+ required: isRequired,
314
+ description,
315
+ source: { type: 'inherited' } // Will be updated by caller
316
+ };
317
+ }
318
+ addDefaultKnownInterfaces() {
319
+ const defaultInterfaces = [
320
+ {
321
+ name: 'Snippet',
322
+ package: 'svelte',
323
+ url: 'https://svelte.dev/docs/svelte/snippet',
324
+ description: 'Svelte snippet for reusable content'
325
+ },
326
+ {
327
+ name: 'ComponentEvents',
328
+ package: 'svelte',
329
+ url: 'https://svelte.dev/docs/svelte/component-events',
330
+ description: 'Svelte component event handlers'
331
+ },
332
+ {
333
+ name: 'MintProp',
334
+ package: '@urbicon-ui/blocks',
335
+ url: '/docs/mint-system',
336
+ description: 'Urbicon Mint micro-interaction system'
337
+ },
338
+ {
339
+ name: 'ComponentIntent',
340
+ package: '@urbicon-ui/blocks',
341
+ url: '/docs/design-tokens#intent',
342
+ description: 'Urbicon component intent colors'
343
+ },
344
+ {
345
+ name: 'ComponentSize',
346
+ package: '@urbicon-ui/blocks',
347
+ url: '/docs/design-tokens#size',
348
+ description: 'Urbicon component sizes'
349
+ }
350
+ ];
351
+ defaultInterfaces.forEach((iface) => {
352
+ this.knownInterfaces.set(iface.name, iface);
353
+ });
354
+ }
355
+ /**
356
+ * Add a known interface configuration
357
+ */
358
+ addKnownInterface(config) {
359
+ this.knownInterfaces.set(config.name, config);
360
+ }
361
+ /**
362
+ * Clear any caches
363
+ */
364
+ clearCache() {
365
+ // No persistent cache in this implementation
366
+ }
367
+ }
368
+ //# sourceMappingURL=InheritanceExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InheritanceExtractor.js","sourceRoot":"","sources":["../../../src/extractors/typescript/InheritanceExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { TypeDefinition } from '../../types';
2
+ import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
3
+ interface LocalTypesExtractionInput {
4
+ filePath: string;
5
+ componentName: string;
6
+ packageName: string;
7
+ }
8
+ /**
9
+ * Extracts exported local type/interface definitions from a component's index.ts file.
10
+ * Focus: concrete business-relevant types (e.g., MenuItemType, MenuObjectOption, ...)
11
+ * Does not follow re-exports in this first iteration.
12
+ */
13
+ export declare class LocalTypesExtractor extends TypeScriptBaseExtractor<LocalTypesExtractionInput, TypeDefinition[]> {
14
+ extract(input: LocalTypesExtractionInput): Promise<import("../..").ExtractionResult<TypeDefinition[]>>;
15
+ private collectExportedTypesFromSource;
16
+ private hasExportModifier;
17
+ private findVariantsFile;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=LocalTypesExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalTypesExtractor.d.ts","sourceRoot":"","sources":["../../../src/extractors/typescript/LocalTypesExtractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,UAAU,yBAAyB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,yBAAyB,EACzB,cAAc,EAAE,CACjB;IACO,OAAO,CAAC,KAAK,EAAE,yBAAyB;IA4B9C,OAAO,CAAC,8BAA8B;IAyCtC,OAAO,CAAC,iBAAiB;YAMX,gBAAgB;CAuB/B"}
@@ -0,0 +1,100 @@
1
+ import * as path from 'node:path';
2
+ import * as ts from 'typescript';
3
+ import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
4
+ /**
5
+ * Extracts exported local type/interface definitions from a component's index.ts file.
6
+ * Focus: concrete business-relevant types (e.g., MenuItemType, MenuObjectOption, ...)
7
+ * Does not follow re-exports in this first iteration.
8
+ */
9
+ export class LocalTypesExtractor extends TypeScriptBaseExtractor {
10
+ async extract(input) {
11
+ const start = Date.now();
12
+ try {
13
+ const sourceFile = await this.getSourceFile(input.filePath);
14
+ if (!sourceFile) {
15
+ return this.createSuccessResult([], [], input.filePath, Date.now() - start);
16
+ }
17
+ const typeDefs = [];
18
+ // collect from component index/source file
19
+ this.collectExportedTypesFromSource(sourceFile, typeDefs, input.packageName);
20
+ // optionally collect types from variants file (e.g., menu.variants.ts)
21
+ const variantsFilePath = await this.findVariantsFile(input.filePath, input.componentName);
22
+ if (variantsFilePath) {
23
+ const variantsSource = await this.getSourceFile(variantsFilePath);
24
+ if (variantsSource) {
25
+ this.collectExportedTypesFromSource(variantsSource, typeDefs, input.packageName);
26
+ }
27
+ }
28
+ return this.createSuccessResult(typeDefs, [], input.filePath, Date.now() - start);
29
+ }
30
+ catch (error) {
31
+ return this.handleError(error, input);
32
+ }
33
+ }
34
+ collectExportedTypesFromSource(sourceFile, out, packageName) {
35
+ const existing = new Set(out.map((t) => t.name));
36
+ sourceFile.forEachChild((node) => {
37
+ // type alias: export type Name = ...
38
+ if (ts.isTypeAliasDeclaration(node) && this.hasExportModifier(node)) {
39
+ const name = node.name?.getText() || '';
40
+ if (!name || existing.has(name))
41
+ return;
42
+ const rhs = node.type?.getText() || 'unknown';
43
+ out.push({
44
+ name,
45
+ type: 'type',
46
+ definition: rhs,
47
+ package: packageName,
48
+ documentation: this.extractJSDocComment(node) || ''
49
+ });
50
+ existing.add(name);
51
+ }
52
+ // interface: export interface Name { ... }
53
+ if (ts.isInterfaceDeclaration(node) && this.hasExportModifier(node)) {
54
+ const name = node.name?.getText() || '';
55
+ if (!name || existing.has(name))
56
+ return;
57
+ const body = node.members?.length
58
+ ? sourceFile.text.slice(node.members.pos, node.members.end)
59
+ : ' {}';
60
+ out.push({
61
+ name,
62
+ type: 'interface',
63
+ definition: body.trim(),
64
+ package: packageName,
65
+ documentation: this.extractJSDocComment(node) || ''
66
+ });
67
+ existing.add(name);
68
+ }
69
+ });
70
+ }
71
+ hasExportModifier(node) {
72
+ if (!ts.canHaveModifiers(node))
73
+ return false;
74
+ const modifiers = ts.getModifiers(node);
75
+ return (modifiers ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
76
+ }
77
+ async findVariantsFile(componentFilePath, componentName) {
78
+ const dir = path.dirname(componentFilePath);
79
+ const patterns = [
80
+ `${componentName.toLowerCase()}.variants.ts`,
81
+ `${componentName}.variants.ts`,
82
+ 'variants.ts',
83
+ `${componentName.toLowerCase()}.variants.js`,
84
+ `${componentName}.variants.js`
85
+ ];
86
+ for (const p of patterns) {
87
+ const candidate = path.join(dir, p);
88
+ try {
89
+ const sf = await this.getSourceFile(candidate);
90
+ if (sf)
91
+ return candidate;
92
+ }
93
+ catch {
94
+ // ignore
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+ }
100
+ //# sourceMappingURL=LocalTypesExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalTypesExtractor.js","sourceRoot":"","sources":["../../../src/extractors/typescript/LocalTypesExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import type { ExtractionResult, PropInfo, TypeScriptExtractionConfig } from '../../types';
2
+ import { TypeScriptBaseExtractor } from './TypeScriptBaseExtractor';
3
+ interface PropsExtractionInput {
4
+ filePath: string;
5
+ componentName: string;
6
+ /** Optional list of variant prop keys (from VariantsExtractor) to exclude in Omit<... , keyof Variants> */
7
+ variantKeys?: string[];
8
+ }
9
+ /**
10
+ * Extracts props from TypeScript interfaces using AST parsing
11
+ * Supports JSDoc comments, type analysis, and prop categorization
12
+ */
13
+ export declare class PropsExtractor extends TypeScriptBaseExtractor<PropsExtractionInput, PropInfo[]> {
14
+ config: TypeScriptExtractionConfig;
15
+ private currentVariantKeys;
16
+ constructor(tsConfig?: Record<string, unknown>);
17
+ /**
18
+ * Extract props from TypeScript interface
19
+ */
20
+ extract(input: PropsExtractionInput): Promise<ExtractionResult<PropInfo[]>>;
21
+ /**
22
+ * Extract the component description from the JSDoc on the *Props declaration.
23
+ * Checks @description tag first, then falls back to leading prose text.
24
+ */
25
+ extractDescription(input: {
26
+ filePath: string;
27
+ componentName: string;
28
+ }): Promise<string | null>;
29
+ /**
30
+ * Extract all @tag values from the *Props declaration JSDoc.
31
+ */
32
+ extractTags(input: {
33
+ filePath: string;
34
+ componentName: string;
35
+ }): Promise<string[]>;
36
+ /**
37
+ * Extract all @related values from the *Props declaration JSDoc.
38
+ */
39
+ extractRelated(input: {
40
+ filePath: string;
41
+ componentName: string;
42
+ }): Promise<string[]>;
43
+ /**
44
+ * Extract the `@stability` tag from the *Props declaration JSDoc.
45
+ * Accepts `experimental | beta | stable | deprecated`; unknown
46
+ * values are dropped so a typo doesn't silently propagate into the
47
+ * Editorial badge.
48
+ */
49
+ extractStability(input: {
50
+ filePath: string;
51
+ componentName: string;
52
+ }): Promise<'experimental' | 'beta' | 'stable' | 'deprecated' | null>;
53
+ /**
54
+ * Locate the component's props declaration. Either:
55
+ * - an `interface FooProps { ... }` → kind: 'interface'
56
+ * - a `type FooProps = A | B | …` → kind: 'union'
57
+ *
58
+ * `node` is the AST node whose members get walked for props; `jsDocHost`
59
+ * is the declaration that owns the leading JSDoc block (for an interface
60
+ * they're the same; for a union the JSDoc lives on the type-alias, not
61
+ * on the `UnionTypeNode` itself). Other type-alias shapes (intersection,
62
+ * single reference, mapped types, etc.) aren't supported here and fall
63
+ * through to `null`.
64
+ */
65
+ private findPropsDeclaration;
66
+ /**
67
+ * Extract props from a discriminated-union type alias.
68
+ *
69
+ * Algorithm (generic — no hard-coded discriminator name):
70
+ * 1. Resolve each union member to a local interface. Members that
71
+ * can't be resolved (anonymous type literals, external refs,
72
+ * intersections, etc.) are dropped with a warning.
73
+ * 2. Extract props from each resolved interface (reusing the
74
+ * interface path so heritage / Omit / variants are honoured).
75
+ * 3. Detect the discriminator: a property that exists in every
76
+ * member with a single string-literal type, and whose literal
77
+ * value differs across members.
78
+ * 4. Merge the per-member prop sets:
79
+ * - Props that appear in every member → unconditional.
80
+ * - Props that appear in only some members → `conditionalOn`
81
+ * records the discriminator and the values where they apply.
82
+ * - The discriminator prop itself is collapsed into one entry
83
+ * whose `values` array enumerates every literal it can take.
84
+ */
85
+ private extractPropsFromUnion;
86
+ /**
87
+ * Pick the most informative occurrence of a prop across union members.
88
+ * Prefers occurrences whose type isn't `never`, whose description isn't
89
+ * an auto-generated placeholder (`'<name> property'`), and which carry
90
+ * a `defaultValue` over those that don't. This keeps
91
+ * `<Badge variant="dot" removable>` extracting as `removable: boolean`
92
+ * (from `BadgeStandardProps`) rather than `removable?: never` (from
93
+ * `BadgeDotProps`) — and, when collapsing the discriminator, picks the
94
+ * arm whose `@default` JSDoc is set so the docs site renders a real
95
+ * default value in the API table.
96
+ */
97
+ private pickInformativeOccurrence;
98
+ /**
99
+ * Resolve a union-member type to a local interface declaration. Currently
100
+ * supports plain TypeReferenceNode shapes (`A`, `Foo<T>`). Returns null for
101
+ * anonymous type literals, intersections, external references the file
102
+ * doesn't import directly, etc.
103
+ */
104
+ private resolveUnionMemberInterface;
105
+ /**
106
+ * Detect the discriminator property. A discriminator must:
107
+ * - exist in every union member,
108
+ * - have a string-literal-union type in each member (one or more
109
+ * `'x' | 'y'` values),
110
+ * - have non-overlapping value-sets across members (so the literal
111
+ * uniquely identifies which member a value belongs to).
112
+ *
113
+ * Returns null if no such property exists.
114
+ */
115
+ private detectDiscriminator;
116
+ private extractPropsFromInterface;
117
+ private extractPropFromMember;
118
+ private extractInheritedProps;
119
+ private handleVariantInheritance;
120
+ private handleOmitPattern;
121
+ private handleHTMLAttributes;
122
+ private extractPropsFromLocalInterface;
123
+ private isVariantInterface;
124
+ private isOmitPattern;
125
+ /**
126
+ * Parse the keys argument of `Omit<X, K>` into a flat string-literal list.
127
+ * Handles `'a'`, `'a' | 'b' | 'c'`, double-quoted, and ignores `keyof T`
128
+ * patterns (those are handled separately via `currentVariantKeys`).
129
+ */
130
+ private extractOmittedLiteralKeys;
131
+ private isHTMLAttributes;
132
+ private extractElementType;
133
+ private getPackageForType;
134
+ private extractJSDocExamples;
135
+ private sortProps;
136
+ /**
137
+ * Clear any caches
138
+ */
139
+ clearCache(): void;
140
+ }
141
+ export {};
142
+ //# sourceMappingURL=PropsExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropsExtractor.d.ts","sourceRoot":"","sources":["../../../src/extractors/typescript/PropsExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAMD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,uBAAuB,CAAC,oBAAoB,EAAE,QAAQ,EAAE,CAAC;IACpF,MAAM,EAAE,0BAA0B,CAAC;IAC1C,OAAO,CAAC,kBAAkB,CAAgB;gBAE9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAe9C;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;IA2DjF;;;OAGG;IACG,kBAAkB,CAAC,KAAK,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa1B;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUxF;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU3F;;;;;OAKG;IACG,gBAAgB,CAAC,KAAK,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC;IA0BrE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;;;;;;;;;;;;;OAkBG;YACW,qBAAqB;IA0HnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;YAwCb,yBAAyB;IAuCvC,OAAO,CAAC,qBAAqB;YAiFf,qBAAqB;IA2CnC,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,iBAAiB;IA6EzB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAIrB;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}