@buoy-design/scanners 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/__tests__/fixtures/react-components.d.ts +5 -0
  2. package/dist/__tests__/fixtures/react-components.d.ts.map +1 -0
  3. package/dist/__tests__/fixtures/react-components.js +36 -0
  4. package/dist/__tests__/fixtures/react-components.js.map +1 -0
  5. package/dist/__tests__/setup.d.ts +2 -0
  6. package/dist/__tests__/setup.d.ts.map +1 -0
  7. package/dist/__tests__/setup.js +78 -0
  8. package/dist/__tests__/setup.js.map +1 -0
  9. package/dist/base/index.d.ts +2 -0
  10. package/dist/base/index.d.ts.map +1 -0
  11. package/dist/base/index.js +2 -0
  12. package/dist/base/index.js.map +1 -0
  13. package/dist/base/scanner.d.ts +28 -0
  14. package/dist/base/scanner.d.ts.map +1 -0
  15. package/dist/base/scanner.js +7 -0
  16. package/dist/base/scanner.js.map +1 -0
  17. package/dist/figma/client.d.ts +98 -0
  18. package/dist/figma/client.d.ts.map +1 -0
  19. package/dist/figma/client.js +54 -0
  20. package/dist/figma/client.js.map +1 -0
  21. package/dist/figma/component-scanner.d.ts +22 -0
  22. package/dist/figma/component-scanner.d.ts.map +1 -0
  23. package/dist/figma/component-scanner.js +174 -0
  24. package/dist/figma/component-scanner.js.map +1 -0
  25. package/dist/figma/index.d.ts +3 -0
  26. package/dist/figma/index.d.ts.map +1 -0
  27. package/dist/figma/index.js +3 -0
  28. package/dist/figma/index.js.map +1 -0
  29. package/dist/git/angular-scanner.d.ts +18 -0
  30. package/dist/git/angular-scanner.d.ts.map +1 -0
  31. package/dist/git/angular-scanner.js +244 -0
  32. package/dist/git/angular-scanner.js.map +1 -0
  33. package/dist/git/index.d.ts +8 -0
  34. package/dist/git/index.d.ts.map +1 -0
  35. package/dist/git/index.js +8 -0
  36. package/dist/git/index.js.map +1 -0
  37. package/dist/git/react-scanner.d.ts +29 -0
  38. package/dist/git/react-scanner.d.ts.map +1 -0
  39. package/dist/git/react-scanner.js +469 -0
  40. package/dist/git/react-scanner.js.map +1 -0
  41. package/dist/git/react-scanner.test.d.ts +2 -0
  42. package/dist/git/react-scanner.test.d.ts.map +1 -0
  43. package/dist/git/react-scanner.test.js +107 -0
  44. package/dist/git/react-scanner.test.js.map +1 -0
  45. package/dist/git/svelte-scanner.d.ts +30 -0
  46. package/dist/git/svelte-scanner.d.ts.map +1 -0
  47. package/dist/git/svelte-scanner.js +344 -0
  48. package/dist/git/svelte-scanner.js.map +1 -0
  49. package/dist/git/template-scanner.d.ts +16 -0
  50. package/dist/git/template-scanner.d.ts.map +1 -0
  51. package/dist/git/template-scanner.js +227 -0
  52. package/dist/git/template-scanner.js.map +1 -0
  53. package/dist/git/token-scanner.d.ts +43 -0
  54. package/dist/git/token-scanner.d.ts.map +1 -0
  55. package/dist/git/token-scanner.js +444 -0
  56. package/dist/git/token-scanner.js.map +1 -0
  57. package/dist/git/vue-scanner.d.ts +26 -0
  58. package/dist/git/vue-scanner.d.ts.map +1 -0
  59. package/dist/git/vue-scanner.js +296 -0
  60. package/dist/git/vue-scanner.js.map +1 -0
  61. package/dist/git/webcomponent-scanner.d.ts +22 -0
  62. package/dist/git/webcomponent-scanner.d.ts.map +1 -0
  63. package/dist/git/webcomponent-scanner.js +312 -0
  64. package/dist/git/webcomponent-scanner.js.map +1 -0
  65. package/dist/index.d.ts +7 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +12 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/plugin-adapter.d.ts +11 -0
  70. package/dist/plugin-adapter.d.ts.map +1 -0
  71. package/dist/plugin-adapter.js +21 -0
  72. package/dist/plugin-adapter.js.map +1 -0
  73. package/dist/storybook/extractor.d.ts +20 -0
  74. package/dist/storybook/extractor.d.ts.map +1 -0
  75. package/dist/storybook/extractor.js +146 -0
  76. package/dist/storybook/extractor.js.map +1 -0
  77. package/dist/storybook/index.d.ts +2 -0
  78. package/dist/storybook/index.d.ts.map +1 -0
  79. package/dist/storybook/index.js +2 -0
  80. package/dist/storybook/index.js.map +1 -0
  81. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-scanner.d.ts","sourceRoot":"","sources":["../../src/git/token-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,YAAa,SAAQ,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAClE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAgF9C,aAAa,IAAI,MAAM;YAIT,cAAc;YAgBd,kBAAkB;IAuBhC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,mBAAmB;YAiCb,iBAAiB;IA4E/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAiEvB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,444 @@
1
+ import { Scanner } from '../base/scanner.js';
2
+ import { createTokenId } from '@buoy-design/core';
3
+ import { glob } from 'glob';
4
+ import { readFile } from 'fs/promises';
5
+ import { relative, extname } from 'path';
6
+ export class TokenScanner extends Scanner {
7
+ async scan() {
8
+ const startTime = Date.now();
9
+ const tokenMap = new Map(); // Dedupe by ID
10
+ const errors = [];
11
+ const scannedFiles = new Set();
12
+ // Helper to add tokens with deduplication
13
+ const addTokens = (newTokens) => {
14
+ for (const token of newTokens) {
15
+ if (!tokenMap.has(token.id)) {
16
+ tokenMap.set(token.id, token);
17
+ }
18
+ }
19
+ };
20
+ // Helper to scan a file (with tracking to avoid re-scanning)
21
+ const scanFile = async (file) => {
22
+ if (scannedFiles.has(file))
23
+ return;
24
+ scannedFiles.add(file);
25
+ const ext = extname(file);
26
+ if (ext === '.json') {
27
+ addTokens(await this.parseJsonTokenFile(file));
28
+ }
29
+ else if (ext === '.css' || ext === '.scss') {
30
+ addTokens(await this.parseCssVariables(file));
31
+ }
32
+ };
33
+ // Scan explicitly configured files first (higher priority)
34
+ if (this.config.files && this.config.files.length > 0) {
35
+ for (const pattern of this.config.files) {
36
+ const matches = await glob(pattern, {
37
+ cwd: this.config.projectRoot,
38
+ absolute: true,
39
+ });
40
+ for (const file of matches) {
41
+ try {
42
+ await scanFile(file);
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ errors.push({ file, message, code: 'PARSE_ERROR' });
47
+ }
48
+ }
49
+ }
50
+ }
51
+ else {
52
+ // Only scan default patterns if no explicit files configured
53
+ // Scan JSON token files
54
+ const jsonFiles = await this.findTokenFiles(['**/*.tokens.json', '**/tokens.json', '**/tokens/**/*.json']);
55
+ for (const file of jsonFiles) {
56
+ try {
57
+ await scanFile(file);
58
+ }
59
+ catch (err) {
60
+ const message = err instanceof Error ? err.message : String(err);
61
+ errors.push({ file, message, code: 'JSON_PARSE_ERROR' });
62
+ }
63
+ }
64
+ // Scan CSS files for variables
65
+ const cssFiles = await this.findTokenFiles(['**/*.css', '**/*.scss']);
66
+ for (const file of cssFiles) {
67
+ try {
68
+ await scanFile(file);
69
+ }
70
+ catch (err) {
71
+ const message = err instanceof Error ? err.message : String(err);
72
+ errors.push({ file, message, code: 'CSS_PARSE_ERROR' });
73
+ }
74
+ }
75
+ }
76
+ const tokens = Array.from(tokenMap.values());
77
+ const stats = {
78
+ filesScanned: scannedFiles.size,
79
+ itemsFound: tokens.length,
80
+ duration: Date.now() - startTime,
81
+ };
82
+ return { items: tokens, errors, stats };
83
+ }
84
+ getSourceType() {
85
+ return 'tokens';
86
+ }
87
+ async findTokenFiles(patterns) {
88
+ const allFiles = [];
89
+ const ignore = this.config.exclude || ['**/node_modules/**', '**/dist/**'];
90
+ for (const pattern of patterns) {
91
+ const matches = await glob(pattern, {
92
+ cwd: this.config.projectRoot,
93
+ ignore,
94
+ absolute: true,
95
+ });
96
+ allFiles.push(...matches);
97
+ }
98
+ return [...new Set(allFiles)];
99
+ }
100
+ async parseJsonTokenFile(filePath) {
101
+ const content = await readFile(filePath, 'utf-8');
102
+ const data = JSON.parse(content);
103
+ const relativePath = relative(this.config.projectRoot, filePath);
104
+ const tokens = [];
105
+ const processTokens = (obj, prefix = '') => {
106
+ for (const [key, value] of Object.entries(obj)) {
107
+ const tokenName = prefix ? `${prefix}.${key}` : key;
108
+ if (this.isTokenValue(value)) {
109
+ const token = this.createTokenFromJson(tokenName, value, relativePath);
110
+ if (token)
111
+ tokens.push(token);
112
+ }
113
+ else if (typeof value === 'object' && value !== null) {
114
+ processTokens(value, tokenName);
115
+ }
116
+ }
117
+ };
118
+ processTokens(data);
119
+ return tokens;
120
+ }
121
+ isTokenValue(value) {
122
+ if (typeof value !== 'object' || value === null)
123
+ return false;
124
+ const obj = value;
125
+ // Check for common token formats
126
+ // Style Dictionary format: { value: "...", type: "..." }
127
+ if ('value' in obj)
128
+ return true;
129
+ // Direct value format: { $value: "..." }
130
+ if ('$value' in obj)
131
+ return true;
132
+ return false;
133
+ }
134
+ createTokenFromJson(name, value, filePath) {
135
+ const rawValue = (value.value || value.$value);
136
+ const type = (value.type || value.$type || this.inferCategory(name, rawValue));
137
+ if (rawValue === undefined)
138
+ return null;
139
+ const source = {
140
+ type: 'json',
141
+ path: filePath,
142
+ key: name,
143
+ };
144
+ const tokenValue = this.parseTokenValue(type, rawValue);
145
+ return {
146
+ id: createTokenId(source, name),
147
+ name,
148
+ category: this.normalizeCategory(type),
149
+ value: tokenValue,
150
+ source,
151
+ aliases: [],
152
+ usedBy: [],
153
+ metadata: {
154
+ description: value.description,
155
+ },
156
+ scannedAt: new Date(),
157
+ };
158
+ }
159
+ async parseCssVariables(filePath) {
160
+ const content = await readFile(filePath, 'utf-8');
161
+ const relativePath = relative(this.config.projectRoot, filePath);
162
+ const tokens = [];
163
+ // Remove CSS comments before parsing to avoid matching inside comments
164
+ const contentWithoutComments = this.stripCssComments(content);
165
+ // Extract CSS custom properties using a robust parser
166
+ const cssVariables = this.extractCssVariables(contentWithoutComments, content);
167
+ for (const { name, value, lineNumber } of cssVariables) {
168
+ const prefix = this.config.cssVariablePrefix;
169
+ // Skip if prefix is configured and doesn't match
170
+ if (prefix && !name.startsWith(prefix.replace(/^--/, ''))) {
171
+ continue;
172
+ }
173
+ const cleanName = name.trim();
174
+ const cleanValue = value.trim();
175
+ const source = {
176
+ type: 'css',
177
+ path: relativePath,
178
+ line: lineNumber,
179
+ };
180
+ const category = this.inferCategory(cleanName, cleanValue);
181
+ const tokenValue = this.parseTokenValue(category, cleanValue);
182
+ tokens.push({
183
+ id: createTokenId(source, cleanName),
184
+ name: `--${cleanName}`,
185
+ category: this.normalizeCategory(category),
186
+ value: tokenValue,
187
+ source,
188
+ aliases: [],
189
+ usedBy: [],
190
+ metadata: {},
191
+ scannedAt: new Date(),
192
+ });
193
+ }
194
+ // Extract SCSS variables using a robust parser
195
+ const scssVariables = this.extractScssVariables(contentWithoutComments, content);
196
+ for (const { name, value, lineNumber } of scssVariables) {
197
+ const cleanName = name.trim();
198
+ const cleanValue = value.trim();
199
+ const source = {
200
+ type: 'css',
201
+ path: relativePath,
202
+ line: lineNumber,
203
+ };
204
+ const category = this.inferCategory(cleanName, cleanValue);
205
+ const tokenValue = this.parseTokenValue(category, cleanValue);
206
+ tokens.push({
207
+ id: createTokenId(source, cleanName),
208
+ name: `$${cleanName}`,
209
+ category: this.normalizeCategory(category),
210
+ value: tokenValue,
211
+ source,
212
+ aliases: [],
213
+ usedBy: [],
214
+ metadata: {},
215
+ scannedAt: new Date(),
216
+ });
217
+ }
218
+ return tokens;
219
+ }
220
+ /**
221
+ * Strip CSS comments from content, preserving line structure
222
+ * for accurate line number calculation
223
+ */
224
+ stripCssComments(content) {
225
+ let result = '';
226
+ let i = 0;
227
+ while (i < content.length) {
228
+ // Check for comment start
229
+ if (content[i] === '/' && content[i + 1] === '*') {
230
+ // Find comment end
231
+ let j = i + 2;
232
+ while (j < content.length && !(content[j] === '*' && content[j + 1] === '/')) {
233
+ // Preserve newlines so line numbers stay accurate
234
+ if (content[j] === '\n') {
235
+ result += '\n';
236
+ }
237
+ j++;
238
+ }
239
+ // Skip past closing */
240
+ i = j + 2;
241
+ }
242
+ else {
243
+ result += content[i];
244
+ i++;
245
+ }
246
+ }
247
+ return result;
248
+ }
249
+ /**
250
+ * Extract CSS custom properties handling:
251
+ * - Multi-line values (gradients, box-shadows)
252
+ * - Values containing semicolons in url() or content strings
253
+ */
254
+ extractCssVariables(contentWithoutComments, originalContent) {
255
+ const results = [];
256
+ // Match the variable declaration start: --name:
257
+ const varStartRegex = /--([a-zA-Z0-9-_]+)\s*:/g;
258
+ let match;
259
+ while ((match = varStartRegex.exec(contentWithoutComments)) !== null) {
260
+ const name = match[1];
261
+ if (!name)
262
+ continue;
263
+ const valueStart = match.index + match[0].length;
264
+ const value = this.extractCssValue(contentWithoutComments, valueStart);
265
+ if (value !== null) {
266
+ // Calculate line number from original content
267
+ const lineNumber = originalContent.slice(0, match.index).split('\n').length;
268
+ results.push({ name, value, lineNumber });
269
+ }
270
+ }
271
+ return results;
272
+ }
273
+ /**
274
+ * Extract SCSS variables handling multi-line values and strings
275
+ */
276
+ extractScssVariables(contentWithoutComments, originalContent) {
277
+ const results = [];
278
+ // Match the variable declaration start: $name:
279
+ const varStartRegex = /\$([a-zA-Z0-9-_]+)\s*:/g;
280
+ let match;
281
+ while ((match = varStartRegex.exec(contentWithoutComments)) !== null) {
282
+ const name = match[1];
283
+ if (!name)
284
+ continue;
285
+ const valueStart = match.index + match[0].length;
286
+ const value = this.extractCssValue(contentWithoutComments, valueStart);
287
+ if (value !== null) {
288
+ // Calculate line number from original content
289
+ const lineNumber = originalContent.slice(0, match.index).split('\n').length;
290
+ results.push({ name, value, lineNumber });
291
+ }
292
+ }
293
+ return results;
294
+ }
295
+ /**
296
+ * Extract a CSS value starting at the given position, handling:
297
+ * - Nested parentheses (for url(), calc(), etc.)
298
+ * - Quoted strings (which may contain semicolons)
299
+ * - Multi-line values
300
+ * Returns null if no valid value found
301
+ */
302
+ extractCssValue(content, startIndex) {
303
+ let i = startIndex;
304
+ let value = '';
305
+ let parenDepth = 0;
306
+ let inString = null; // null, '"', or "'"
307
+ // Skip leading whitespace
308
+ while (i < content.length && /\s/.test(content[i])) {
309
+ i++;
310
+ }
311
+ while (i < content.length) {
312
+ const char = content[i];
313
+ // Handle string literals
314
+ if (inString) {
315
+ value += char;
316
+ if (char === inString && content[i - 1] !== '\\') {
317
+ inString = null;
318
+ }
319
+ i++;
320
+ continue;
321
+ }
322
+ // Check for string start
323
+ if (char === '"' || char === "'") {
324
+ inString = char;
325
+ value += char;
326
+ i++;
327
+ continue;
328
+ }
329
+ // Track parentheses depth
330
+ if (char === '(') {
331
+ parenDepth++;
332
+ value += char;
333
+ i++;
334
+ continue;
335
+ }
336
+ if (char === ')') {
337
+ parenDepth--;
338
+ value += char;
339
+ i++;
340
+ continue;
341
+ }
342
+ // Semicolon ends the value only if we're not inside parentheses or strings
343
+ if (char === ';' && parenDepth === 0) {
344
+ break;
345
+ }
346
+ // Handle closing brace (end of rule block) - value ends without semicolon
347
+ if (char === '}' && parenDepth === 0) {
348
+ break;
349
+ }
350
+ value += char;
351
+ i++;
352
+ }
353
+ const trimmed = value.trim();
354
+ return trimmed.length > 0 ? trimmed : null;
355
+ }
356
+ inferCategory(name, value) {
357
+ const nameLower = name.toLowerCase();
358
+ const valueStr = String(value).toLowerCase();
359
+ // Infer from name
360
+ if (nameLower.includes('color') || nameLower.includes('background') || nameLower.includes('fill')) {
361
+ return 'color';
362
+ }
363
+ if (nameLower.includes('spacing') || nameLower.includes('gap') || nameLower.includes('margin') || nameLower.includes('padding')) {
364
+ return 'spacing';
365
+ }
366
+ if (nameLower.includes('font') || nameLower.includes('text') || nameLower.includes('typography')) {
367
+ return 'typography';
368
+ }
369
+ if (nameLower.includes('shadow') || nameLower.includes('elevation')) {
370
+ return 'shadow';
371
+ }
372
+ if (nameLower.includes('border') || nameLower.includes('radius')) {
373
+ return 'border';
374
+ }
375
+ if (nameLower.includes('size') || nameLower.includes('width') || nameLower.includes('height')) {
376
+ return 'sizing';
377
+ }
378
+ if (nameLower.includes('animation') || nameLower.includes('duration') || nameLower.includes('timing')) {
379
+ return 'motion';
380
+ }
381
+ // Infer from value
382
+ if (valueStr.startsWith('#') || valueStr.startsWith('rgb') || valueStr.startsWith('hsl')) {
383
+ return 'color';
384
+ }
385
+ if (/^\d+(px|rem|em)$/.test(valueStr)) {
386
+ return 'spacing';
387
+ }
388
+ return 'other';
389
+ }
390
+ normalizeCategory(type) {
391
+ const lower = type.toLowerCase();
392
+ const mapping = {
393
+ color: 'color',
394
+ colours: 'color',
395
+ spacing: 'spacing',
396
+ space: 'spacing',
397
+ typography: 'typography',
398
+ font: 'typography',
399
+ shadow: 'shadow',
400
+ boxshadow: 'shadow',
401
+ border: 'border',
402
+ borderradius: 'border',
403
+ sizing: 'sizing',
404
+ size: 'sizing',
405
+ motion: 'motion',
406
+ animation: 'motion',
407
+ duration: 'motion',
408
+ };
409
+ return mapping[lower] || 'other';
410
+ }
411
+ parseTokenValue(category, rawValue) {
412
+ const valueStr = String(rawValue).trim();
413
+ if (category === 'color') {
414
+ return {
415
+ type: 'color',
416
+ hex: this.normalizeColor(valueStr),
417
+ };
418
+ }
419
+ if (category === 'spacing' || category === 'sizing') {
420
+ const match = valueStr.match(/^(\d+(?:\.\d+)?)(px|rem|em)?$/);
421
+ if (match && match[1]) {
422
+ return {
423
+ type: 'spacing',
424
+ value: parseFloat(match[1]),
425
+ unit: match[2] || 'px',
426
+ };
427
+ }
428
+ }
429
+ // Default to raw value
430
+ return {
431
+ type: 'raw',
432
+ value: valueStr,
433
+ };
434
+ }
435
+ normalizeColor(value) {
436
+ // Already a hex color
437
+ if (/^#[0-9a-fA-F]{3,8}$/.test(value)) {
438
+ return value.toLowerCase();
439
+ }
440
+ // Could add rgb/hsl conversion here
441
+ return value;
442
+ }
443
+ }
444
+ //# sourceMappingURL=token-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-scanner.js","sourceRoot":"","sources":["../../src/git/token-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Scanner, ScanResult, ScannerConfig } from '../base/scanner.js';
2
+ import type { Component } from '@buoy-design/core';
3
+ export interface VueScannerConfig extends ScannerConfig {
4
+ designSystemPackage?: string;
5
+ }
6
+ export declare class VueComponentScanner extends Scanner<Component, VueScannerConfig> {
7
+ scan(): Promise<ScanResult<Component>>;
8
+ getSourceType(): string;
9
+ private findComponentFiles;
10
+ private parseFile;
11
+ /**
12
+ * Extract matched content with proper brace balancing.
13
+ * Handles nested braces like: { cb: () => { value: string } }
14
+ */
15
+ private extractBalancedBraces;
16
+ /**
17
+ * Parse TypeScript props string into individual prop definitions.
18
+ * Handles complex types like: { cb: () => void, data: { nested: string } }
19
+ */
20
+ private parseTypeProps;
21
+ private extractProps;
22
+ private parseObjectProps;
23
+ private extractDependencies;
24
+ private hasDeprecatedComment;
25
+ }
26
+ //# sourceMappingURL=vue-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue-scanner.d.ts","sourceRoot":"","sources":["../../src/git/vue-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAA6B,MAAM,mBAAmB,CAAC;AAM9E,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,mBAAoB,SAAQ,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA6B5C,aAAa,IAAI,MAAM;YAIT,kBAAkB;YAyBlB,SAAS;IA0CvB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0DtB,OAAO,CAAC,YAAY;IAwEpB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,oBAAoB;CAG7B"}