@auto-engineer/generate-react-client 1.112.2 → 1.113.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.
package/package.json
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"debug": "^4.4.1",
|
|
22
|
-
"@auto-engineer/file-upload": "1.
|
|
23
|
-
"@auto-engineer/message-bus": "1.
|
|
22
|
+
"@auto-engineer/file-upload": "1.113.0",
|
|
23
|
+
"@auto-engineer/message-bus": "1.113.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/debug": "^4.1.12"
|
|
27
27
|
},
|
|
28
|
-
"version": "1.
|
|
28
|
+
"version": "1.113.0",
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "tsc && tsx ../../scripts/fix-esm-imports.ts && cp -r starter dist/",
|
|
31
31
|
"test-cli": "tsx test-cli.ts",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare function buildThemeSystemPrompt(): string;
|
|
2
|
-
export declare function buildThemeUserPrompt(modelJson: unknown): string;
|
|
3
|
-
export declare function parseThemeCss(text: string): string;
|
|
4
|
-
export declare function generateThemeCss(modelJson: unknown): Promise<string>;
|
|
5
|
-
//# sourceMappingURL=generate-theme.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-theme.d.ts","sourceRoot":"","sources":["../../src/generate-theme.ts"],"names":[],"mappings":"AAoKA,wBAAgB,sBAAsB,IAAI,MAAM,CAgE/C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAmD/D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAsBD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB1E"}
|
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
2
|
-
import { generateText } from 'ai';
|
|
3
|
-
import createDebug from 'debug';
|
|
4
|
-
const debug = createDebug('auto:generate-react-client:theme');
|
|
5
|
-
function requireEnv(name) {
|
|
6
|
-
const value = process.env[name];
|
|
7
|
-
if (!value) {
|
|
8
|
-
throw new Error(`Missing required environment variable: ${name}`);
|
|
9
|
-
}
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
|
-
function createModel() {
|
|
13
|
-
const name = requireEnv('CUSTOM_PROVIDER_NAME');
|
|
14
|
-
const baseURL = requireEnv('CUSTOM_PROVIDER_BASE_URL');
|
|
15
|
-
const apiKey = requireEnv('CUSTOM_PROVIDER_API_KEY');
|
|
16
|
-
const model = requireEnv('CUSTOM_PROVIDER_DEFAULT_MODEL');
|
|
17
|
-
return createOpenAICompatible({ name, baseURL, apiKey }).chatModel(model);
|
|
18
|
-
}
|
|
19
|
-
const TEMPLATE_CSS = `@import "tailwindcss";
|
|
20
|
-
@import "tw-animate-css";
|
|
21
|
-
|
|
22
|
-
@custom-variant dark (&:is(.dark *));
|
|
23
|
-
|
|
24
|
-
@theme inline {
|
|
25
|
-
--color-background: var(--background);
|
|
26
|
-
--color-foreground: var(--foreground);
|
|
27
|
-
--color-card: var(--card);
|
|
28
|
-
--color-card-foreground: var(--card-foreground);
|
|
29
|
-
--color-popover: var(--popover);
|
|
30
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
31
|
-
--color-primary: var(--primary);
|
|
32
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
33
|
-
--color-secondary: var(--secondary);
|
|
34
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
35
|
-
--color-muted: var(--muted);
|
|
36
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
37
|
-
--color-accent: var(--accent);
|
|
38
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
39
|
-
--color-destructive: var(--destructive);
|
|
40
|
-
--color-destructive-foreground: var(--destructive-foreground);
|
|
41
|
-
--color-border: var(--border);
|
|
42
|
-
--color-input: var(--input);
|
|
43
|
-
--color-ring: var(--ring);
|
|
44
|
-
--color-chart-1: var(--chart-1);
|
|
45
|
-
--color-chart-2: var(--chart-2);
|
|
46
|
-
--color-chart-3: var(--chart-3);
|
|
47
|
-
--color-chart-4: var(--chart-4);
|
|
48
|
-
--color-chart-5: var(--chart-5);
|
|
49
|
-
--color-sidebar: var(--sidebar);
|
|
50
|
-
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
51
|
-
--color-sidebar-primary: var(--sidebar-primary);
|
|
52
|
-
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
53
|
-
--color-sidebar-accent: var(--sidebar-accent);
|
|
54
|
-
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
55
|
-
--color-sidebar-border: var(--sidebar-border);
|
|
56
|
-
--color-sidebar-ring: var(--sidebar-ring);
|
|
57
|
-
--radius-sm: calc(var(--radius) - 4px);
|
|
58
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
59
|
-
--radius-lg: var(--radius);
|
|
60
|
-
--radius-xl: calc(var(--radius) + 4px);
|
|
61
|
-
--font-sans: var(--font-sans);
|
|
62
|
-
--font-heading: var(--font-heading);
|
|
63
|
-
--shadow-xs: var(--shadow-xs);
|
|
64
|
-
--shadow-sm: var(--shadow-sm);
|
|
65
|
-
--shadow-md: var(--shadow-md);
|
|
66
|
-
--shadow-lg: var(--shadow-lg);
|
|
67
|
-
--shadow-2xl: var(--shadow-2xl);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
:root {
|
|
71
|
-
--radius: 0.625rem;
|
|
72
|
-
--font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
|
|
73
|
-
--font-heading: "Inter", ui-sans-serif, system-ui, sans-serif;
|
|
74
|
-
--spacing: 0.25rem;
|
|
75
|
-
--tracking-tight: -0.025em;
|
|
76
|
-
--tracking-wide: 0.025em;
|
|
77
|
-
--leading-normal: 1.5;
|
|
78
|
-
--leading-relaxed: 1.75;
|
|
79
|
-
--shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 5%);
|
|
80
|
-
--shadow-sm: 0 1px 3px 0 oklch(0 0 0 / 10%), 0 1px 2px -1px oklch(0 0 0 / 10%);
|
|
81
|
-
--shadow-md: 0 4px 6px -1px oklch(0 0 0 / 10%), 0 2px 4px -2px oklch(0 0 0 / 10%);
|
|
82
|
-
--shadow-lg: 0 10px 15px -3px oklch(0 0 0 / 10%), 0 4px 6px -4px oklch(0 0 0 / 10%);
|
|
83
|
-
--shadow-2xl: 0 25px 50px -12px oklch(0 0 0 / 25%);
|
|
84
|
-
--background: oklch(1 0 0);
|
|
85
|
-
--foreground: oklch(0.145 0 0);
|
|
86
|
-
--card: oklch(1 0 0);
|
|
87
|
-
--card-foreground: oklch(0.145 0 0);
|
|
88
|
-
--popover: oklch(1 0 0);
|
|
89
|
-
--popover-foreground: oklch(0.145 0 0);
|
|
90
|
-
--primary: oklch(0.205 0 0);
|
|
91
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
92
|
-
--secondary: oklch(0.97 0 0);
|
|
93
|
-
--secondary-foreground: oklch(0.205 0 0);
|
|
94
|
-
--muted: oklch(0.97 0 0);
|
|
95
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
96
|
-
--accent: oklch(0.97 0 0);
|
|
97
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
98
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
99
|
-
--border: oklch(0.922 0 0);
|
|
100
|
-
--input: oklch(0.922 0 0);
|
|
101
|
-
--ring: oklch(0.708 0 0);
|
|
102
|
-
--chart-1: oklch(0.646 0.222 41.116);
|
|
103
|
-
--chart-2: oklch(0.6 0.118 184.704);
|
|
104
|
-
--chart-3: oklch(0.398 0.07 227.392);
|
|
105
|
-
--chart-4: oklch(0.828 0.189 84.429);
|
|
106
|
-
--chart-5: oklch(0.769 0.188 70.08);
|
|
107
|
-
--sidebar: oklch(0.985 0 0);
|
|
108
|
-
--sidebar-foreground: oklch(0.145 0 0);
|
|
109
|
-
--sidebar-primary: oklch(0.205 0 0);
|
|
110
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
111
|
-
--sidebar-accent: oklch(0.97 0 0);
|
|
112
|
-
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
113
|
-
--sidebar-border: oklch(0.922 0 0);
|
|
114
|
-
--sidebar-ring: oklch(0.708 0 0);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.dark {
|
|
118
|
-
--background: oklch(0.129 0.042 264.695);
|
|
119
|
-
--foreground: oklch(0.985 0 0);
|
|
120
|
-
--card: oklch(0.205 0 0);
|
|
121
|
-
--card-foreground: oklch(0.985 0 0);
|
|
122
|
-
--popover: oklch(0.205 0 0);
|
|
123
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
124
|
-
--primary: oklch(0.922 0 0);
|
|
125
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
126
|
-
--secondary: oklch(0.269 0 0);
|
|
127
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
128
|
-
--muted: oklch(0.269 0 0);
|
|
129
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
130
|
-
--accent: oklch(0.269 0 0);
|
|
131
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
132
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
133
|
-
--border: oklch(1 0 0 / 10%);
|
|
134
|
-
--input: oklch(1 0 0 / 15%);
|
|
135
|
-
--ring: oklch(0.556 0 0);
|
|
136
|
-
--chart-1: oklch(0.488 0.243 264.376);
|
|
137
|
-
--chart-2: oklch(0.696 0.17 162.48);
|
|
138
|
-
--chart-3: oklch(0.769 0.188 70.08);
|
|
139
|
-
--chart-4: oklch(0.627 0.265 303.9);
|
|
140
|
-
--chart-5: oklch(0.645 0.246 16.439);
|
|
141
|
-
--sidebar: oklch(0.205 0 0);
|
|
142
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
143
|
-
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
144
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
145
|
-
--sidebar-accent: oklch(0.269 0 0);
|
|
146
|
-
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
147
|
-
--sidebar-border: oklch(1 0 0 / 10%);
|
|
148
|
-
--sidebar-ring: oklch(0.556 0 0);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
@layer base {
|
|
152
|
-
* {
|
|
153
|
-
@apply border-border outline-ring/50;
|
|
154
|
-
}
|
|
155
|
-
body {
|
|
156
|
-
@apply bg-background text-foreground;
|
|
157
|
-
}
|
|
158
|
-
}`;
|
|
159
|
-
export function buildThemeSystemPrompt() {
|
|
160
|
-
return `You are a design system specialist who generates themed CSS for web applications. Given a narrative model describing an application's domain, you infer the app's personality and generate a complete index.css with appropriate theming.
|
|
161
|
-
|
|
162
|
-
## Color Personality Mapping
|
|
163
|
-
- Blue/Indigo (hue 240-270) = trust, professionalism, enterprise (banking, finance, corporate)
|
|
164
|
-
- Green (hue 140-160) = growth, nature, health, wellness (fitness, healthcare, eco)
|
|
165
|
-
- Gold/Amber (hue 70-90) = luxury, premium, sophisticated (fashion, jewelry, high-end)
|
|
166
|
-
- Pink/Rose (hue 340-360) = fun, creative, playful (social, kids, entertainment)
|
|
167
|
-
- Red/Orange (hue 15-45) = energy, urgency, action (sports, gaming, deals)
|
|
168
|
-
- Purple (hue 280-310) = creativity, wisdom, innovation (education, AI, art)
|
|
169
|
-
- Teal/Cyan (hue 180-200) = modern, clean, technical (dev tools, SaaS, analytics)
|
|
170
|
-
|
|
171
|
-
## Color Rules
|
|
172
|
-
- All colors MUST use oklch(L C H) format
|
|
173
|
-
- Greys should be slightly saturated with the dominant hue (warm or cool, never pure grey with chroma 0 for primary/accent colors)
|
|
174
|
-
- Background/foreground must have >= 4.5:1 contrast ratio (WCAG AA)
|
|
175
|
-
- Never use true black; use very dark saturated tones
|
|
176
|
-
- Light mode: background L=0.97-1.0, foreground L=0.1-0.2
|
|
177
|
-
- Dark mode: background L=0.1-0.15 with blue-tinted hue, use alpha transparency for borders
|
|
178
|
-
|
|
179
|
-
## Border Radius
|
|
180
|
-
- 0rem = stark/brutalist
|
|
181
|
-
- 0.25rem = formal/serious
|
|
182
|
-
- 0.5-0.625rem = neutral/balanced
|
|
183
|
-
- 0.75-1rem = playful/friendly
|
|
184
|
-
|
|
185
|
-
## Font Selection (Google Fonts)
|
|
186
|
-
Pick a Google Font that matches the domain personality:
|
|
187
|
-
- Neutral sans-serif (Inter, DM Sans) for utility/SaaS apps
|
|
188
|
-
- Rounded sans-serif (Nunito, Quicksand) for playful/consumer apps
|
|
189
|
-
- Serif (Playfair Display, Lora) for elegant/editorial apps
|
|
190
|
-
- Monospace-influenced (Space Grotesk, JetBrains Mono) for developer tools
|
|
191
|
-
- Only use typefaces with 5+ weights available
|
|
192
|
-
- You may use the same font for both --font-sans and --font-heading, or pick a complementary heading font
|
|
193
|
-
|
|
194
|
-
## Shadow System
|
|
195
|
-
5 elevation levels (xs, sm, md, lg, 2xl):
|
|
196
|
-
- Use two-part shadows (direct light + ambient) for higher elevations
|
|
197
|
-
- Flat/minimal shadows for serious/professional apps
|
|
198
|
-
- Deeper/more dramatic shadows for playful/consumer apps
|
|
199
|
-
|
|
200
|
-
## Spacing Density
|
|
201
|
-
- --spacing base unit: 0.25rem (dense/compact for dashboards) vs 0.3rem (comfortable for content-heavy)
|
|
202
|
-
|
|
203
|
-
## Typography
|
|
204
|
-
- --tracking-tight: tighter letter-spacing for headlines (e.g., -0.025em to -0.05em)
|
|
205
|
-
- --tracking-wide: wider letter-spacing for all-caps or labels (e.g., 0.025em to 0.1em)
|
|
206
|
-
- --leading-normal: base line height (1.5 for readable text)
|
|
207
|
-
- --leading-relaxed: generous line height for content-heavy apps (1.625-1.75)
|
|
208
|
-
- Values should match the app's content density
|
|
209
|
-
|
|
210
|
-
## Output Format
|
|
211
|
-
Output a COMPLETE index.css inside a \`\`\`css code block. The CSS must:
|
|
212
|
-
1. Start with a Google Fonts @import at the very top (before @import "tailwindcss")
|
|
213
|
-
2. Keep @import "tailwindcss" and @import "tw-animate-css"
|
|
214
|
-
3. Keep @custom-variant dark (&:is(.dark *))
|
|
215
|
-
4. In @theme inline, keep ALL existing --color-* variable mappings and --radius-* calculations, and ADD: --font-sans, --font-heading, --shadow-xs, --shadow-sm, --shadow-md, --shadow-lg, --shadow-2xl
|
|
216
|
-
5. In :root, set ALL CSS variables with themed oklch values, PLUS: --font-sans, --font-heading, --spacing, --tracking-tight, --tracking-wide, --leading-normal, --leading-relaxed, --shadow-xs through --shadow-2xl
|
|
217
|
-
6. In .dark, set ALL CSS variables with dark mode oklch values
|
|
218
|
-
7. Keep the @layer base block unchanged
|
|
219
|
-
|
|
220
|
-
Here is the template CSS structure to follow (change the values, keep the structure):
|
|
221
|
-
|
|
222
|
-
${TEMPLATE_CSS}`;
|
|
223
|
-
}
|
|
224
|
-
export function buildThemeUserPrompt(modelJson) {
|
|
225
|
-
const model = modelJson;
|
|
226
|
-
const lines = [];
|
|
227
|
-
lines.push('Here is the narrative model for the application:\n');
|
|
228
|
-
const narratives = model.narratives;
|
|
229
|
-
if (Array.isArray(narratives)) {
|
|
230
|
-
for (const narrative of narratives) {
|
|
231
|
-
lines.push(`## Narrative: ${narrative.name ?? 'Unnamed'}`);
|
|
232
|
-
if (narrative.description) {
|
|
233
|
-
lines.push(`Description: ${narrative.description}`);
|
|
234
|
-
}
|
|
235
|
-
const slices = narrative.slices;
|
|
236
|
-
if (Array.isArray(slices)) {
|
|
237
|
-
for (const slice of slices) {
|
|
238
|
-
lines.push(` - Slice: ${slice.name ?? 'Unnamed'} (type: ${slice.type ?? 'unknown'})`);
|
|
239
|
-
if (slice.description) {
|
|
240
|
-
lines.push(` Description: ${slice.description}`);
|
|
241
|
-
}
|
|
242
|
-
const messages = slice.messages;
|
|
243
|
-
if (messages) {
|
|
244
|
-
const msgTypes = ['commands', 'events', 'states', 'queries'];
|
|
245
|
-
for (const msgType of msgTypes) {
|
|
246
|
-
const items = messages[msgType];
|
|
247
|
-
if (Array.isArray(items) && items.length > 0) {
|
|
248
|
-
const names = items.map((m) => m.name ?? 'unnamed').join(', ');
|
|
249
|
-
lines.push(` ${msgType}: ${names}`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
lines.push('');
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
if (model.name) {
|
|
259
|
-
lines.push(`Application name: ${model.name}`);
|
|
260
|
-
}
|
|
261
|
-
if (model.description) {
|
|
262
|
-
lines.push(`Application description: ${model.description}`);
|
|
263
|
-
}
|
|
264
|
-
lines.push('\nBased on these narratives, infer the application domain and personality, then generate a themed index.css.');
|
|
265
|
-
return lines.join('\n');
|
|
266
|
-
}
|
|
267
|
-
export function parseThemeCss(text) {
|
|
268
|
-
const fencedMatch = text.match(/```css\s*\n([\s\S]*?)```/);
|
|
269
|
-
if (fencedMatch) {
|
|
270
|
-
return validateCss(fencedMatch[1].trim());
|
|
271
|
-
}
|
|
272
|
-
const bareFencedMatch = text.match(/```\s*\n([\s\S]*?)```/);
|
|
273
|
-
if (bareFencedMatch) {
|
|
274
|
-
return validateCss(bareFencedMatch[1].trim());
|
|
275
|
-
}
|
|
276
|
-
if (text.includes('@import "tailwindcss"') && text.includes('@theme inline')) {
|
|
277
|
-
return validateCss(text.trim());
|
|
278
|
-
}
|
|
279
|
-
throw new Error('Could not extract CSS from AI response');
|
|
280
|
-
}
|
|
281
|
-
function validateCss(css) {
|
|
282
|
-
const required = [
|
|
283
|
-
'@import "tailwindcss"',
|
|
284
|
-
'@theme inline',
|
|
285
|
-
':root',
|
|
286
|
-
'.dark',
|
|
287
|
-
'@layer base',
|
|
288
|
-
'--background',
|
|
289
|
-
'--primary',
|
|
290
|
-
'oklch',
|
|
291
|
-
];
|
|
292
|
-
const missing = required.filter((token) => !css.includes(token));
|
|
293
|
-
if (missing.length > 0) {
|
|
294
|
-
throw new Error(`Generated CSS is missing required sections: ${missing.join(', ')}`);
|
|
295
|
-
}
|
|
296
|
-
return css;
|
|
297
|
-
}
|
|
298
|
-
export async function generateThemeCss(modelJson) {
|
|
299
|
-
debug('Starting theme generation from narrative model');
|
|
300
|
-
const systemPrompt = buildThemeSystemPrompt();
|
|
301
|
-
const userPrompt = buildThemeUserPrompt(modelJson);
|
|
302
|
-
debug('System prompt length: %d chars', systemPrompt.length);
|
|
303
|
-
debug('User prompt length: %d chars', userPrompt.length);
|
|
304
|
-
const { text } = await generateText({
|
|
305
|
-
model: createModel(),
|
|
306
|
-
messages: [
|
|
307
|
-
{ role: 'system', content: systemPrompt },
|
|
308
|
-
{ role: 'user', content: userPrompt },
|
|
309
|
-
],
|
|
310
|
-
});
|
|
311
|
-
debug('Received AI response, length: %d chars', text.length);
|
|
312
|
-
const css = parseThemeCss(text);
|
|
313
|
-
debug('Successfully parsed and validated theme CSS');
|
|
314
|
-
return css;
|
|
315
|
-
}
|
|
316
|
-
//# sourceMappingURL=generate-theme.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-theme.js","sourceRoot":"","sources":["../../src/generate-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAsB,MAAM,IAAI,CAAC;AACtD,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,MAAM,KAAK,GAAG,WAAW,CAAC,kCAAkC,CAAC,CAAC;AAE9D,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAE1D,OAAO,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAA6B,CAAC;AACxG,CAAC;AAED,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2InB,CAAC;AAEH,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DP,YAAY,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAkB;IACrD,MAAM,KAAK,GAAG,SAAoC,CAAC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAwD,CAAC;IAClF,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAoD,CAAC;YAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,SAAS,WAAW,KAAK,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;oBACvF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,KAAK,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBACtD,CAAC;oBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAsE,CAAC;oBAC9F,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;wBACtE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;4BAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;4BAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;4BACzC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CACR,8GAA8G,CAC/G,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC5D,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7E,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,QAAQ,GAAG;QACf,uBAAuB;QACvB,eAAe;QACf,OAAO;QACP,OAAO;QACP,aAAa;QACb,cAAc;QACd,WAAW;QACX,OAAO;KACR,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAkB;IACvD,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEnD,KAAK,CAAC,gCAAgC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7D,KAAK,CAAC,8BAA8B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,WAAW,EAAE;QACpB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;SACtC;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7D,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAChC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC;AACb,CAAC"}
|