sourcey 3.4.10 → 3.5.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 (156) hide show
  1. package/README.md +13 -12
  2. package/dist/cli.js +46 -4
  3. package/dist/components/changelog/ChangelogPage.d.ts +5 -0
  4. package/dist/components/changelog/ChangelogPage.d.ts.map +1 -0
  5. package/dist/components/changelog/ChangelogPage.js +8 -0
  6. package/dist/components/changelog/EntryList.d.ts +5 -0
  7. package/dist/components/changelog/EntryList.d.ts.map +1 -0
  8. package/dist/components/changelog/EntryList.js +6 -0
  9. package/dist/components/changelog/TypeBadge.d.ts +6 -0
  10. package/dist/components/changelog/TypeBadge.d.ts.map +1 -0
  11. package/dist/components/changelog/TypeBadge.js +14 -0
  12. package/dist/components/changelog/VersionCard.d.ts +6 -0
  13. package/dist/components/changelog/VersionCard.d.ts.map +1 -0
  14. package/dist/components/changelog/VersionCard.js +25 -0
  15. package/dist/components/layout/Head.d.ts.map +1 -1
  16. package/dist/components/layout/Head.js +15 -3
  17. package/dist/components/layout/Page.d.ts.map +1 -1
  18. package/dist/components/layout/Page.js +12 -6
  19. package/dist/components/openapi/Introduction.d.ts.map +1 -1
  20. package/dist/components/openapi/Introduction.js +1 -1
  21. package/dist/components/openapi/MediaTypeDetails.d.ts +11 -0
  22. package/dist/components/openapi/MediaTypeDetails.d.ts.map +1 -0
  23. package/dist/components/openapi/MediaTypeDetails.js +54 -0
  24. package/dist/components/openapi/Parameters.d.ts.map +1 -1
  25. package/dist/components/openapi/Parameters.js +6 -1
  26. package/dist/components/openapi/RequestBody.d.ts.map +1 -1
  27. package/dist/components/openapi/RequestBody.js +5 -1
  28. package/dist/components/openapi/Responses.d.ts.map +1 -1
  29. package/dist/components/openapi/Responses.js +1 -1
  30. package/dist/components/openapi/Security.d.ts.map +1 -1
  31. package/dist/components/openapi/Security.js +3 -2
  32. package/dist/components/openapi/Tags.d.ts.map +1 -1
  33. package/dist/components/openapi/Tags.js +8 -1
  34. package/dist/config.d.ts +50 -1
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +50 -4
  37. package/dist/core/changelog-normalizer.d.ts +8 -0
  38. package/dist/core/changelog-normalizer.d.ts.map +1 -0
  39. package/dist/core/changelog-normalizer.js +531 -0
  40. package/dist/core/doxygen-loader.d.ts.map +1 -1
  41. package/dist/core/doxygen-loader.js +2 -0
  42. package/dist/core/loader.js +2 -0
  43. package/dist/core/markdown-loader.d.ts +21 -0
  44. package/dist/core/markdown-loader.d.ts.map +1 -1
  45. package/dist/core/markdown-loader.js +53 -28
  46. package/dist/core/mcp-normalizer.d.ts.map +1 -1
  47. package/dist/core/navigation.d.ts +2 -2
  48. package/dist/core/navigation.d.ts.map +1 -1
  49. package/dist/core/navigation.js +5 -1
  50. package/dist/core/normalizer.d.ts.map +1 -1
  51. package/dist/core/normalizer.js +102 -4
  52. package/dist/core/parser.d.ts +2 -2
  53. package/dist/core/parser.d.ts.map +1 -1
  54. package/dist/core/parser.js +23 -16
  55. package/dist/core/search-indexer.d.ts +3 -2
  56. package/dist/core/search-indexer.d.ts.map +1 -1
  57. package/dist/core/search-indexer.js +50 -17
  58. package/dist/core/tag-utils.d.ts +5 -0
  59. package/dist/core/tag-utils.d.ts.map +1 -0
  60. package/dist/core/tag-utils.js +22 -0
  61. package/dist/core/types.d.ts +82 -4
  62. package/dist/core/types.d.ts.map +1 -1
  63. package/dist/core/types.js +1 -1
  64. package/dist/dev-server.d.ts +2 -0
  65. package/dist/dev-server.d.ts.map +1 -1
  66. package/dist/dev-server.js +81 -210
  67. package/dist/index.d.ts +6 -10
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +115 -247
  70. package/dist/init.d.ts.map +1 -1
  71. package/dist/init.js +7 -3
  72. package/dist/og/fonts/Inter-Bold.ttf +0 -0
  73. package/dist/og/fonts/Inter-Regular.ttf +0 -0
  74. package/dist/og/generate-og-image.d.ts +10 -0
  75. package/dist/og/generate-og-image.d.ts.map +1 -0
  76. package/dist/og/generate-og-image.js +198 -0
  77. package/dist/renderer/changelog-feed.d.ts +18 -0
  78. package/dist/renderer/changelog-feed.d.ts.map +1 -0
  79. package/dist/renderer/changelog-feed.js +91 -0
  80. package/dist/renderer/context.d.ts +27 -7
  81. package/dist/renderer/context.d.ts.map +1 -1
  82. package/dist/renderer/html-builder.d.ts +10 -1
  83. package/dist/renderer/html-builder.d.ts.map +1 -1
  84. package/dist/renderer/html-builder.js +58 -5
  85. package/dist/renderer/llms.d.ts.map +1 -1
  86. package/dist/renderer/llms.js +133 -24
  87. package/dist/site-assembly.d.ts +25 -0
  88. package/dist/site-assembly.d.ts.map +1 -0
  89. package/dist/site-assembly.js +467 -0
  90. package/dist/site-url.d.ts +12 -0
  91. package/dist/site-url.d.ts.map +1 -0
  92. package/dist/site-url.js +67 -0
  93. package/dist/themes/default/sourcey.css +237 -1
  94. package/dist/utils/code-samples.d.ts.map +1 -1
  95. package/dist/utils/code-samples.js +53 -12
  96. package/dist/utils/markdown.d.ts +6 -0
  97. package/dist/utils/markdown.d.ts.map +1 -1
  98. package/dist/utils/markdown.js +11 -2
  99. package/dist/vite-plugin.d.ts +2 -0
  100. package/dist/vite-plugin.d.ts.map +1 -1
  101. package/dist/vite-plugin.js +6 -2
  102. package/package.json +6 -3
  103. package/dist/cli.js.map +0 -1
  104. package/dist/client/copy.js +0 -21
  105. package/dist/client/index.js.map +0 -1
  106. package/dist/components/App.js.map +0 -1
  107. package/dist/components/layout/Head.js.map +0 -1
  108. package/dist/components/layout/Header.js.map +0 -1
  109. package/dist/components/layout/Page.js.map +0 -1
  110. package/dist/components/layout/Sidebar.js.map +0 -1
  111. package/dist/components/layout/TableOfContents.js.map +0 -1
  112. package/dist/components/openapi/CodeSamples.js.map +0 -1
  113. package/dist/components/openapi/Definition.js.map +0 -1
  114. package/dist/components/openapi/EndpointBar.js.map +0 -1
  115. package/dist/components/openapi/Introduction.js.map +0 -1
  116. package/dist/components/openapi/Operation.js.map +0 -1
  117. package/dist/components/openapi/Parameters.js.map +0 -1
  118. package/dist/components/openapi/RequestBody.js.map +0 -1
  119. package/dist/components/openapi/Responses.js.map +0 -1
  120. package/dist/components/openapi/Security.js.map +0 -1
  121. package/dist/components/openapi/Tags.js.map +0 -1
  122. package/dist/components/schema/ExampleView.js.map +0 -1
  123. package/dist/components/schema/SchemaDatatype.js.map +0 -1
  124. package/dist/components/schema/SchemaView.js.map +0 -1
  125. package/dist/components/ui/Badge.js.map +0 -1
  126. package/dist/components/ui/CopyButton.js.map +0 -1
  127. package/dist/components/ui/Logo.js.map +0 -1
  128. package/dist/components/ui/Markdown.js.map +0 -1
  129. package/dist/components/ui/SectionLabel.js.map +0 -1
  130. package/dist/components/ui/SocialIcon.js.map +0 -1
  131. package/dist/config.js.map +0 -1
  132. package/dist/core/converter.js.map +0 -1
  133. package/dist/core/doxygen-loader.js.map +0 -1
  134. package/dist/core/loader.js.map +0 -1
  135. package/dist/core/markdown-loader.js.map +0 -1
  136. package/dist/core/navigation.js.map +0 -1
  137. package/dist/core/normalizer.js.map +0 -1
  138. package/dist/core/parser.js.map +0 -1
  139. package/dist/core/search-indexer.js.map +0 -1
  140. package/dist/core/types.js.map +0 -1
  141. package/dist/dev-server.js.map +0 -1
  142. package/dist/index.js.map +0 -1
  143. package/dist/init.js.map +0 -1
  144. package/dist/renderer/context.js.map +0 -1
  145. package/dist/renderer/html-builder.js.map +0 -1
  146. package/dist/renderer/static-renderer.js.map +0 -1
  147. package/dist/utils/code-samples.js.map +0 -1
  148. package/dist/utils/copy-svg.js.map +0 -1
  149. package/dist/utils/example-generator.js.map +0 -1
  150. package/dist/utils/highlighter.js.map +0 -1
  151. package/dist/utils/html-id.js.map +0 -1
  152. package/dist/utils/http.js.map +0 -1
  153. package/dist/utils/icons.js.map +0 -1
  154. package/dist/utils/lang-icons.js.map +0 -1
  155. package/dist/utils/markdown.js.map +0 -1
  156. package/dist/vite-plugin.js.map +0 -1
@@ -1,8 +1,10 @@
1
1
  import { htmlId } from "../utils/html-id.js";
2
+ import { toPublicPath } from "../site-url.js";
2
3
  export function generateLlmsTxt(pages, navigation, site) {
3
4
  const lines = [];
4
5
  const title = resolveSiteTitle(pages, site);
5
6
  const summary = resolveSiteSummary(pages, site);
7
+ const href = (page) => toPublicPath(page.outputPath, site.baseUrl, site.prettyUrls);
6
8
  lines.push(`# ${title}`);
7
9
  lines.push("");
8
10
  if (summary) {
@@ -19,22 +21,33 @@ export function generateLlmsTxt(pages, navigation, site) {
19
21
  if (page.currentPage.kind === "markdown" && page.currentPage.markdown) {
20
22
  const doc = page.currentPage.markdown;
21
23
  const desc = doc.description || excerpt(stripHtml(doc.html));
22
- lines.push(`- [${doc.title}](${page.outputPath})${desc ? `: ${desc}` : ""}`);
24
+ lines.push(`- [${doc.title}](${href(page)})${desc ? `: ${desc}` : ""}`);
23
25
  continue;
24
26
  }
25
- const spec = page.currentPage.spec ?? page.spec;
26
- const overview = spec.info.description ? firstLine(spec.info.description) : `${spec.operations.length} documented operations`;
27
- lines.push(`- [${spec.info.title}](${page.outputPath})${overview ? `: ${overview}` : ""}`);
27
+ if (page.currentPage.kind === "changelog" && page.currentPage.changelog && !page.currentPage.changelog.permalinkVersionId) {
28
+ const doc = page.currentPage.changelog;
29
+ const desc = doc.description || excerpt(summarizeChangelog(doc));
30
+ lines.push(`- [${doc.title}](${href(page)})${desc ? `: ${desc}` : ""}`);
31
+ continue;
32
+ }
33
+ const spec = page.currentPage.kind === "spec" ? page.currentPage.spec : page.spec;
34
+ const overview = spec.info.summary
35
+ ? firstLine(spec.info.summary)
36
+ : spec.info.description
37
+ ? firstLine(spec.info.description)
38
+ : `${spec.operations.length} documented operations`;
39
+ lines.push(`- [${spec.info.title}](${href(page)})${overview ? `: ${overview}` : ""}`);
28
40
  for (const op of spec.operations) {
29
41
  if (op.hidden)
30
42
  continue;
31
43
  const opLabel = op.summary ?? operationDisplayName(op);
32
44
  const opSummary = [operationKind(op), firstLine(op.description)].filter(Boolean).join(" — ");
33
- lines.push(`- [${opLabel}](${page.outputPath}#${operationAnchor(op)})${opSummary ? `: ${opSummary}` : ""}`);
45
+ lines.push(`- [${opLabel}](${href(page)}#${operationAnchor(op)})${opSummary ? `: ${opSummary}` : ""}`);
34
46
  }
35
47
  }
36
48
  lines.push("");
37
49
  }
50
+ appendChangelogSummary(lines, pages);
38
51
  return lines.join("\n");
39
52
  }
40
53
  export function generateLlmsFullTxt(pages, navigation, site) {
@@ -55,20 +68,25 @@ export function generateLlmsFullTxt(pages, navigation, site) {
55
68
  lines.push("");
56
69
  for (const page of tabPages) {
57
70
  if (page.currentPage.kind === "markdown" && page.currentPage.markdown) {
58
- appendMarkdownPage(lines, page);
71
+ appendMarkdownPage(lines, page, site);
72
+ }
73
+ else if (page.currentPage.kind === "changelog" && page.currentPage.changelog && !page.currentPage.changelog.permalinkVersionId) {
74
+ appendChangelogPage(lines, page, site);
59
75
  }
60
76
  else {
61
- appendSpecPage(lines, page);
77
+ appendSpecPage(lines, page, site);
62
78
  }
63
79
  }
64
80
  }
65
81
  return lines.join("\n");
66
82
  }
67
- function appendMarkdownPage(lines, page) {
83
+ function appendMarkdownPage(lines, page, site) {
84
+ if (page.currentPage.kind !== "markdown")
85
+ return;
68
86
  const doc = page.currentPage.markdown;
69
87
  lines.push(`### ${doc.title}`);
70
88
  lines.push("");
71
- lines.push(`Path: \`${page.outputPath}\``);
89
+ lines.push(`Path: \`${toPublicPath(page.outputPath, site.baseUrl, site.prettyUrls)}\``);
72
90
  lines.push("");
73
91
  if (doc.description) {
74
92
  lines.push(doc.description);
@@ -80,15 +98,73 @@ function appendMarkdownPage(lines, page) {
80
98
  lines.push("");
81
99
  }
82
100
  }
83
- function appendSpecPage(lines, page) {
84
- const spec = page.currentPage.spec ?? page.spec;
101
+ function appendChangelogPage(lines, page, site) {
102
+ if (page.currentPage.kind !== "changelog")
103
+ return;
104
+ const doc = page.currentPage.changelog;
105
+ lines.push(`### ${doc.title}`);
106
+ lines.push("");
107
+ lines.push(`Path: \`${toPublicPath(page.outputPath, site.baseUrl, site.prettyUrls)}\``);
108
+ lines.push("");
109
+ if (doc.description) {
110
+ lines.push(doc.description);
111
+ lines.push("");
112
+ }
113
+ for (const version of doc.changelog.versions) {
114
+ const heading = version.date
115
+ ? `${version.version ?? "Unreleased"} (${version.date})`
116
+ : (version.version ?? "Unreleased");
117
+ lines.push(`#### ${heading}`);
118
+ lines.push("");
119
+ if (version.summary) {
120
+ lines.push(version.summary);
121
+ lines.push("");
122
+ }
123
+ for (const section of version.sections) {
124
+ for (const entry of section.entries) {
125
+ lines.push(`- ${section.label}: ${entry.text}`);
126
+ }
127
+ }
128
+ lines.push("");
129
+ }
130
+ }
131
+ function appendChangelogSummary(lines, pages) {
132
+ const changelogPages = pages.filter((page) => page.currentPage.kind === "changelog" && !page.currentPage.changelog?.permalinkVersionId);
133
+ if (!changelogPages.length)
134
+ return;
135
+ lines.push("## Changelog");
136
+ lines.push("");
137
+ for (const page of changelogPages) {
138
+ if (page.currentPage.kind !== "changelog")
139
+ continue;
140
+ const doc = page.currentPage.changelog;
141
+ for (const version of doc.changelog.versions) {
142
+ const heading = version.date
143
+ ? `${version.version ?? "Unreleased"} (${version.date})`
144
+ : (version.version ?? "Unreleased");
145
+ lines.push(`### ${heading}`);
146
+ for (const section of version.sections) {
147
+ for (const entry of section.entries) {
148
+ lines.push(`${section.label}: ${entry.text}`);
149
+ }
150
+ }
151
+ lines.push("");
152
+ }
153
+ }
154
+ }
155
+ function appendSpecPage(lines, page, site) {
156
+ const spec = page.currentPage.kind === "spec" ? page.currentPage.spec : page.spec;
85
157
  lines.push(`### ${spec.info.title}`);
86
158
  lines.push("");
87
- lines.push(`Path: \`${page.outputPath}\``);
159
+ lines.push(`Path: \`${toPublicPath(page.outputPath, site.baseUrl, site.prettyUrls)}\``);
88
160
  if (spec.info.version) {
89
161
  lines.push(`Version: ${spec.info.version}`);
90
162
  }
91
163
  lines.push("");
164
+ if (spec.info.summary) {
165
+ lines.push(spec.info.summary);
166
+ lines.push("");
167
+ }
92
168
  if (spec.info.description) {
93
169
  lines.push(spec.info.description);
94
170
  lines.push("");
@@ -128,7 +204,9 @@ function appendOperation(lines, op) {
128
204
  lines.push("Parameters:");
129
205
  for (const param of op.parameters) {
130
206
  const req = param.required ? "required" : "optional";
131
- const type = param.schema ? formatSchemaType(param.schema) : "unknown";
207
+ const type = param.schema
208
+ ? formatSchemaType(param.schema)
209
+ : firstContentSchemaType(param.content);
132
210
  const desc = param.description ? ` — ${firstLine(param.description)}` : "";
133
211
  lines.push(`- \`${param.name}\` (${param.in}, ${type}, ${req})${desc}`);
134
212
  }
@@ -160,22 +238,34 @@ function resolveSiteTitle(pages, site) {
160
238
  if (site.name && site.name !== "API Reference")
161
239
  return site.name;
162
240
  const specPages = pages.filter((page) => page.currentPage.kind === "spec");
163
- if (specPages.length === 1) {
164
- const spec = specPages[0].currentPage.spec ?? specPages[0].spec;
241
+ if (specPages.length === 1 && specPages[0].currentPage.kind === "spec") {
242
+ const spec = specPages[0].currentPage.spec;
165
243
  if (spec.info.title)
166
244
  return spec.info.title;
167
245
  }
168
- const firstMarkdown = pages.find((page) => page.currentPage.kind === "markdown" && page.currentPage.markdown);
169
- if (firstMarkdown?.currentPage.markdown?.title)
170
- return firstMarkdown.currentPage.markdown.title;
246
+ for (const page of pages) {
247
+ if (page.currentPage.kind === "markdown" && page.currentPage.markdown.title) {
248
+ return page.currentPage.markdown.title;
249
+ }
250
+ if (page.currentPage.kind === "changelog" && page.currentPage.changelog.title) {
251
+ return page.currentPage.changelog.title;
252
+ }
253
+ }
171
254
  return site.name || "Documentation";
172
255
  }
173
256
  function resolveSiteSummary(pages, site) {
174
- const firstMarkdown = pages.find((page) => page.currentPage.kind === "markdown" && page.currentPage.markdown?.description);
175
- if (firstMarkdown?.currentPage.markdown?.description)
176
- return firstMarkdown.currentPage.markdown.description;
257
+ for (const page of pages) {
258
+ if (page.currentPage.kind === "markdown" && page.currentPage.markdown.description) {
259
+ return page.currentPage.markdown.description;
260
+ }
261
+ if (page.currentPage.kind === "changelog" && page.currentPage.changelog.description) {
262
+ return page.currentPage.changelog.description;
263
+ }
264
+ }
177
265
  const firstSpec = pages.find((page) => page.currentPage.kind === "spec");
178
- const spec = firstSpec ? (firstSpec.currentPage.spec ?? firstSpec.spec) : undefined;
266
+ const spec = firstSpec?.currentPage.kind === "spec" ? firstSpec.currentPage.spec : undefined;
267
+ if (spec?.info.summary)
268
+ return spec.info.summary;
179
269
  if (spec?.info.description)
180
270
  return spec.info.description;
181
271
  return site.name ? `${site.name} documentation generated by Sourcey.` : undefined;
@@ -201,9 +291,28 @@ function operationKind(op) {
201
291
  function operationAnchor(op) {
202
292
  return `operation-${htmlId(op.path)}-${htmlId(op.method)}`;
203
293
  }
294
+ function summarizeChangelog(page) {
295
+ return page.changelog.versions
296
+ .slice(0, 2)
297
+ .flatMap((version) => version.sections.flatMap((section) => section.entries.map((entry) => entry.text)))
298
+ .join(" ");
299
+ }
204
300
  function formatResponse(response) {
205
- const desc = response.description ? firstLine(response.description) : "";
206
- return desc ? `${response.statusCode}: ${desc}` : response.statusCode;
301
+ const parts = [
302
+ response.summary ? firstLine(response.summary) : "",
303
+ response.description ? firstLine(response.description) : "",
304
+ ].filter(Boolean);
305
+ return parts.length ? `${response.statusCode}: ${parts.join(" - ")}` : response.statusCode;
306
+ }
307
+ function firstContentSchemaType(content) {
308
+ if (!content)
309
+ return "unknown";
310
+ for (const [mediaType, entry] of Object.entries(content)) {
311
+ if (entry.schema)
312
+ return formatSchemaType(entry.schema);
313
+ return mediaType;
314
+ }
315
+ return "unknown";
207
316
  }
208
317
  function formatSchemaType(schema) {
209
318
  if (Array.isArray(schema.type))
@@ -0,0 +1,25 @@
1
+ import type { PrettyUrls, ResolvedConfig, ResolvedTab } from "./config.js";
2
+ import type { DocsPage } from "./core/markdown-loader.js";
3
+ import type { SiteTab } from "./core/navigation.js";
4
+ import type { ChangelogDiagnostic, NormalizedSpec } from "./core/types.js";
5
+ import type { SitePage } from "./renderer/html-builder.js";
6
+ import type { SiteConfig } from "./renderer/context.js";
7
+ export interface SiteAssembly {
8
+ siteTabs: SiteTab[];
9
+ primarySpec: NormalizedSpec;
10
+ specsBySlug: Map<string, NormalizedSpec>;
11
+ pageMap: Map<string, SitePage>;
12
+ changelogDiagnostics: ChangelogDiagnostic[];
13
+ extraFiles: Map<string, string | Buffer>;
14
+ }
15
+ export declare function assembleSite(config: ResolvedConfig): Promise<SiteAssembly>;
16
+ export declare function collectDocsPagesByTab(pageMap: Map<string, SitePage>, tabs: ResolvedTab[]): Map<string, DocsPage[]>;
17
+ export declare function rebuildMarkdownTabNavigation(pageMap: Map<string, SitePage>, siteTabs: SiteTab[], tabs: ResolvedTab[], tabSlug: string, prettyUrls: PrettyUrls): void;
18
+ export declare function enforceChangelogDiagnostics(diagnostics: ChangelogDiagnostic[], strictChangelog?: boolean): void;
19
+ export declare function formatChangelogDiagnostic(diagnostic: ChangelogDiagnostic): string;
20
+ export declare function formatChangelogFailure(diagnostic: ChangelogDiagnostic): string;
21
+ export declare function formatChangelogDiagnostics(diagnostics: ChangelogDiagnostic[]): string[];
22
+ export declare function buildSiteConfig(config: ResolvedConfig): Promise<SiteConfig>;
23
+ export declare function createMinimalSpec(): NormalizedSpec;
24
+ export declare function resolveInternalLinks(pages: SitePage[], config: ResolvedConfig): void;
25
+ //# sourceMappingURL=site-assembly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-assembly.d.ts","sourceRoot":"","sources":["../src/site-assembly.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAiB,QAAQ,EAAgB,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAA8B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAgGhF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,IAAI,EAAE,WAAW,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAgBzB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,IAAI,CAsBN;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,EAAE,EAClC,eAAe,UAAQ,GACtB,IAAI,CAYN;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAIjF;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAI9E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAEvF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BjF;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAUlD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuEpF"}