@scrymore/scry-sbcov 0.2.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 (47) hide show
  1. package/README.md +410 -0
  2. package/bin/scry-sbcov.js +3 -0
  3. package/dist/analyzers/git-analyzer.d.ts +49 -0
  4. package/dist/analyzers/git-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/git-analyzer.js +265 -0
  6. package/dist/analyzers/git-analyzer.js.map +1 -0
  7. package/dist/cli/config.d.ts +12 -0
  8. package/dist/cli/config.d.ts.map +1 -0
  9. package/dist/cli/config.js +197 -0
  10. package/dist/cli/config.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +164 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/analyzer.d.ts +19 -0
  16. package/dist/core/analyzer.d.ts.map +1 -0
  17. package/dist/core/analyzer.js +117 -0
  18. package/dist/core/analyzer.js.map +1 -0
  19. package/dist/core/coverage-calculator.d.ts +38 -0
  20. package/dist/core/coverage-calculator.d.ts.map +1 -0
  21. package/dist/core/coverage-calculator.js +335 -0
  22. package/dist/core/coverage-calculator.js.map +1 -0
  23. package/dist/core/report-generator.d.ts +10 -0
  24. package/dist/core/report-generator.d.ts.map +1 -0
  25. package/dist/core/report-generator.js +477 -0
  26. package/dist/core/report-generator.js.map +1 -0
  27. package/dist/core/story-executor.d.ts +22 -0
  28. package/dist/core/story-executor.d.ts.map +1 -0
  29. package/dist/core/story-executor.js +379 -0
  30. package/dist/core/story-executor.js.map +1 -0
  31. package/dist/detectors/component-detector.d.ts +15 -0
  32. package/dist/detectors/component-detector.d.ts.map +1 -0
  33. package/dist/detectors/component-detector.js +632 -0
  34. package/dist/detectors/component-detector.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/parsers/story-parser.d.ts +18 -0
  40. package/dist/parsers/story-parser.d.ts.map +1 -0
  41. package/dist/parsers/story-parser.js +353 -0
  42. package/dist/parsers/story-parser.js.map +1 -0
  43. package/dist/types/index.d.ts +502 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +6 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/package.json +79 -0
@@ -0,0 +1,477 @@
1
+ /**
2
+ * Report Generator
3
+ * Assembles the final JSON report and applies quality gates
4
+ */
5
+ import { getExpectedStoryPath } from '../parsers/story-parser.js';
6
+ import { calculateAggregateCoverage, calculateNewCodeCoverage } from './coverage-calculator.js';
7
+ /**
8
+ * Generate the full coverage report
9
+ */
10
+ export function generateReport(coverageResults, storyFiles, gitAnalysis, executionResults, config) {
11
+ // Calculate aggregate coverage metrics
12
+ const aggregateCoverage = calculateAggregateCoverage(coverageResults);
13
+ // Calculate new code metrics
14
+ const newCodeMetrics = calculateNewCodeCoverage(coverageResults);
15
+ // Build component coverage details
16
+ const components = buildComponentCoverage(coverageResults, executionResults);
17
+ // Identify missing scenarios
18
+ const missingScenarios = identifyMissingScenarios(coverageResults);
19
+ // Identify uncovered components
20
+ const uncoveredComponents = identifyUncoveredComponents(coverageResults);
21
+ // Build summary
22
+ const summary = buildSummary(coverageResults, storyFiles, aggregateCoverage, executionResults);
23
+ // Build git context
24
+ const gitContext = buildGitContext(gitAnalysis);
25
+ // Build new code analysis
26
+ const newCode = buildNewCodeAnalysis(gitAnalysis, newCodeMetrics);
27
+ // Build config for report
28
+ const reportConfig = buildReportConfig(config);
29
+ // Apply quality gates
30
+ const qualityGate = applyQualityGate(aggregateCoverage, newCodeMetrics, executionResults, config);
31
+ return {
32
+ version: '1.0.0',
33
+ generatedAt: new Date().toISOString(),
34
+ git: gitContext,
35
+ config: reportConfig,
36
+ summary,
37
+ newCode,
38
+ execution: executionResults,
39
+ components,
40
+ missingScenarios,
41
+ uncoveredComponents,
42
+ qualityGate,
43
+ };
44
+ }
45
+ /**
46
+ * Build component coverage details
47
+ */
48
+ function buildComponentCoverage(coverageResults, executionResults) {
49
+ return coverageResults.map(result => {
50
+ const { component, storyFile, stories, propCoverage, scenarioCoverage, metrics, changeStatus } = result;
51
+ // Build prop coverage
52
+ const props = propCoverage.map(pc => ({
53
+ name: pc.prop.name,
54
+ type: pc.prop.type,
55
+ required: pc.prop.required,
56
+ hasDefault: pc.prop.hasDefault,
57
+ defaultValue: pc.prop.defaultValue,
58
+ description: pc.prop.description,
59
+ isCovered: pc.isCovered,
60
+ coveredBy: pc.coveredBy,
61
+ variants: pc.variantCoverage ? {
62
+ type: pc.prop.variants?.type || 'union',
63
+ totalVariants: pc.variantCoverage.totalVariants,
64
+ coveredVariants: pc.variantCoverage.coveredVariants,
65
+ coverage: pc.variantCoverage.coverage,
66
+ values: pc.variantCoverage.values,
67
+ } : null,
68
+ isNew: changeStatus.newProps.includes(pc.prop.name),
69
+ }));
70
+ // Build scenario coverage
71
+ const scenarios = scenarioCoverage.map(sc => ({
72
+ id: sc.scenario.id,
73
+ name: sc.scenario.name,
74
+ detectedBy: sc.scenario.detectedBy,
75
+ controllingProps: sc.scenario.controllingProps,
76
+ isCovered: sc.isCovered,
77
+ coveredBy: sc.coveredBy,
78
+ priority: sc.scenario.priority,
79
+ }));
80
+ // Calculate health from execution results
81
+ const health = calculateComponentHealth(component.componentName, stories, executionResults);
82
+ return {
83
+ filePath: component.filePath,
84
+ relativePath: component.relativePath,
85
+ componentName: component.componentName,
86
+ componentType: component.componentType,
87
+ storyFile: storyFile?.relativePath || null,
88
+ hasStories: stories.length > 0,
89
+ storyCount: stories.length,
90
+ storyNames: stories.map(s => s.storyName),
91
+ props,
92
+ scenarios,
93
+ coverage: {
94
+ propCoverage: metrics.propCoverage,
95
+ variantCoverage: metrics.variantCoverage,
96
+ scenarioCoverage: metrics.scenarioCoverage,
97
+ overallScore: metrics.overallScore,
98
+ },
99
+ health,
100
+ changeStatus,
101
+ };
102
+ });
103
+ }
104
+ /**
105
+ * Calculate component health from execution results
106
+ */
107
+ function calculateComponentHealth(componentName, stories, executionResults) {
108
+ if (!executionResults || !executionResults.executed) {
109
+ return {
110
+ totalStories: stories.length,
111
+ passing: 0,
112
+ failing: 0,
113
+ skipped: 0,
114
+ status: 'unknown',
115
+ };
116
+ }
117
+ const componentStories = executionResults.stories.filter(s => s.componentName === componentName);
118
+ const passing = componentStories.filter(s => s.status === 'passed').length;
119
+ const failing = componentStories.filter(s => s.status === 'failed').length;
120
+ const skipped = componentStories.filter(s => s.status === 'skipped').length;
121
+ let status;
122
+ if (failing === 0) {
123
+ status = 'healthy';
124
+ }
125
+ else if (failing < componentStories.length) {
126
+ status = 'degraded';
127
+ }
128
+ else {
129
+ status = 'broken';
130
+ }
131
+ return {
132
+ totalStories: componentStories.length,
133
+ passing,
134
+ failing,
135
+ skipped,
136
+ status,
137
+ };
138
+ }
139
+ /**
140
+ * Identify missing scenarios
141
+ */
142
+ function identifyMissingScenarios(coverageResults) {
143
+ const missing = [];
144
+ for (const result of coverageResults) {
145
+ const { component, stories, propCoverage, scenarioCoverage, changeStatus } = result;
146
+ const hasStories = stories.length > 0;
147
+ // No stories at all
148
+ if (!hasStories) {
149
+ missing.push({
150
+ componentName: component.componentName,
151
+ componentPath: component.relativePath,
152
+ description: `Component has no stories`,
153
+ reason: 'no_stories',
154
+ priority: 'critical',
155
+ suggestedArgs: {},
156
+ suggestedStoryName: 'Default',
157
+ affectsNewCode: changeStatus.status !== 'unchanged',
158
+ });
159
+ continue;
160
+ }
161
+ // Uncovered variants
162
+ for (const prop of propCoverage) {
163
+ if (prop.variantCoverage) {
164
+ for (const variant of prop.variantCoverage.values) {
165
+ if (!variant.isCovered) {
166
+ missing.push({
167
+ componentName: component.componentName,
168
+ componentPath: component.relativePath,
169
+ description: `${component.componentName} with ${prop.prop.name}='${variant.value}' is not covered by any story`,
170
+ reason: 'uncovered_variant',
171
+ priority: 'medium',
172
+ suggestedArgs: { [prop.prop.name]: variant.value },
173
+ suggestedStoryName: toPascalCase(variant.value),
174
+ affectsNewCode: changeStatus.status !== 'unchanged',
175
+ });
176
+ }
177
+ }
178
+ }
179
+ // New props that aren't covered
180
+ if (changeStatus.newProps.includes(prop.prop.name) && !prop.isCovered) {
181
+ missing.push({
182
+ componentName: component.componentName,
183
+ componentPath: component.relativePath,
184
+ description: `New prop '${prop.prop.name}' has no story coverage`,
185
+ reason: 'new_prop_uncovered',
186
+ priority: 'high',
187
+ suggestedArgs: buildSuggestedArgs(prop.prop.name, prop.prop.type),
188
+ suggestedStoryName: `With${toPascalCase(prop.prop.name)}`,
189
+ affectsNewCode: true,
190
+ });
191
+ }
192
+ // Required props that aren't covered
193
+ if (prop.prop.required && !prop.isCovered && !changeStatus.newProps.includes(prop.prop.name)) {
194
+ missing.push({
195
+ componentName: component.componentName,
196
+ componentPath: component.relativePath,
197
+ description: `Required prop '${prop.prop.name}' is not explicitly tested`,
198
+ reason: 'required_prop_uncovered',
199
+ priority: 'medium',
200
+ suggestedArgs: buildSuggestedArgs(prop.prop.name, prop.prop.type),
201
+ suggestedStoryName: `With${toPascalCase(prop.prop.name)}`,
202
+ affectsNewCode: changeStatus.status !== 'unchanged',
203
+ });
204
+ }
205
+ }
206
+ // Uncovered scenarios
207
+ for (const scenario of scenarioCoverage) {
208
+ if (!scenario.isCovered) {
209
+ const controllingProp = scenario.scenario.controllingProps[0];
210
+ missing.push({
211
+ componentName: component.componentName,
212
+ componentPath: component.relativePath,
213
+ description: `Scenario '${scenario.scenario.name}' is not covered`,
214
+ reason: 'uncovered_state',
215
+ priority: scenario.scenario.priority,
216
+ suggestedArgs: { [controllingProp]: true },
217
+ suggestedStoryName: toPascalCase(scenario.scenario.id.replace('-state', '')),
218
+ affectsNewCode: changeStatus.status !== 'unchanged',
219
+ });
220
+ }
221
+ }
222
+ }
223
+ // Sort by priority
224
+ const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
225
+ missing.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
226
+ return missing;
227
+ }
228
+ /**
229
+ * Identify uncovered components
230
+ */
231
+ function identifyUncoveredComponents(coverageResults) {
232
+ const uncovered = [];
233
+ for (const result of coverageResults) {
234
+ if (result.stories.length > 0)
235
+ continue;
236
+ const { component, changeStatus } = result;
237
+ const propCount = component.props.length;
238
+ const requiredPropCount = component.props.filter(p => p.required).length;
239
+ const detectedScenarios = component.scenarios.map(s => s.name);
240
+ // Estimate complexity
241
+ let complexity = 'low';
242
+ if (propCount > 10 || requiredPropCount > 5 || detectedScenarios.length > 3) {
243
+ complexity = 'high';
244
+ }
245
+ else if (propCount > 5 || requiredPropCount > 2 || detectedScenarios.length > 1) {
246
+ complexity = 'medium';
247
+ }
248
+ uncovered.push({
249
+ componentName: component.componentName,
250
+ filePath: component.filePath,
251
+ relativePath: component.relativePath,
252
+ componentType: component.componentType,
253
+ propCount,
254
+ requiredPropCount,
255
+ detectedScenarios,
256
+ isNew: changeStatus.status === 'new',
257
+ expectedStoryPath: getExpectedStoryPath(component.relativePath),
258
+ complexity,
259
+ });
260
+ }
261
+ // Sort by: new first, then by complexity
262
+ uncovered.sort((a, b) => {
263
+ if (a.isNew !== b.isNew)
264
+ return a.isNew ? -1 : 1;
265
+ const complexityOrder = { high: 0, medium: 1, low: 2 };
266
+ return complexityOrder[a.complexity] - complexityOrder[b.complexity];
267
+ });
268
+ return uncovered;
269
+ }
270
+ /**
271
+ * Build coverage summary
272
+ */
273
+ function buildSummary(coverageResults, storyFiles, aggregateCoverage, executionResults) {
274
+ const totalComponents = coverageResults.length;
275
+ const componentsWithStories = coverageResults.filter(r => r.stories.length > 0).length;
276
+ const componentsWithoutStories = totalComponents - componentsWithStories;
277
+ const totalStories = storyFiles.reduce((acc, f) => acc + f.stories.length, 0);
278
+ const metrics = {
279
+ componentCoverage: aggregateCoverage.componentCoverage,
280
+ propCoverage: aggregateCoverage.propCoverage,
281
+ variantCoverage: aggregateCoverage.variantCoverage,
282
+ scenarioCoverage: aggregateCoverage.scenarioCoverage,
283
+ };
284
+ const health = buildHealthSummary(executionResults);
285
+ return {
286
+ totalComponents,
287
+ componentsWithStories,
288
+ componentsWithoutStories,
289
+ totalStoryFiles: storyFiles.length,
290
+ totalStories,
291
+ metrics,
292
+ health,
293
+ };
294
+ }
295
+ /**
296
+ * Build health summary
297
+ */
298
+ function buildHealthSummary(executionResults) {
299
+ if (!executionResults || !executionResults.executed) {
300
+ return {
301
+ status: 'not_executed',
302
+ passingStories: 0,
303
+ failingStories: 0,
304
+ passRate: 0,
305
+ };
306
+ }
307
+ const { passed, failed, total } = executionResults.summary;
308
+ const passRate = total > 0 ? (passed / total) * 100 : 0;
309
+ let status;
310
+ if (failed === 0) {
311
+ status = 'healthy';
312
+ }
313
+ else if (passRate >= 90) {
314
+ status = 'degraded';
315
+ }
316
+ else {
317
+ status = 'broken';
318
+ }
319
+ return {
320
+ status,
321
+ passingStories: passed,
322
+ failingStories: failed,
323
+ passRate,
324
+ };
325
+ }
326
+ /**
327
+ * Build git context
328
+ */
329
+ function buildGitContext(gitAnalysis) {
330
+ if (!gitAnalysis || !gitAnalysis.enabled) {
331
+ return {
332
+ commitSha: '',
333
+ branch: '',
334
+ baseBranch: null,
335
+ baseCommitSha: null,
336
+ };
337
+ }
338
+ return {
339
+ commitSha: gitAnalysis.currentCommitSha,
340
+ branch: gitAnalysis.currentBranch,
341
+ baseBranch: gitAnalysis.baseBranch,
342
+ baseCommitSha: gitAnalysis.baseCommitSha,
343
+ };
344
+ }
345
+ /**
346
+ * Build new code analysis
347
+ */
348
+ function buildNewCodeAnalysis(gitAnalysis, metrics) {
349
+ const enabled = gitAnalysis?.enabled ?? false;
350
+ const since = enabled
351
+ ? `${gitAnalysis.baseBranch} (${gitAnalysis.baseCommitSha.substring(0, 7)})`
352
+ : '';
353
+ return {
354
+ enabled,
355
+ since,
356
+ newComponents: metrics.newComponents,
357
+ modifiedComponents: metrics.modifiedComponents,
358
+ newComponentPaths: metrics.newComponentPaths,
359
+ modifiedComponentPaths: metrics.modifiedComponentPaths,
360
+ };
361
+ }
362
+ /**
363
+ * Build report config
364
+ */
365
+ function buildReportConfig(config) {
366
+ return {
367
+ include: config.include,
368
+ exclude: config.exclude,
369
+ storyPatterns: config.storyPatterns,
370
+ newCodeAnalysis: config.enableGitAnalysis,
371
+ baseBranch: config.enableGitAnalysis ? config.baseBranch : null,
372
+ thresholds: config.thresholds,
373
+ };
374
+ }
375
+ /**
376
+ * Apply quality gate checks
377
+ */
378
+ function applyQualityGate(aggregateCoverage, newCodeMetrics, executionResults, config) {
379
+ const checks = [];
380
+ // Component coverage check
381
+ checks.push({
382
+ name: 'Component Coverage',
383
+ threshold: config.thresholds.componentCoverage,
384
+ actual: aggregateCoverage.componentCoverage,
385
+ passed: aggregateCoverage.componentCoverage >= config.thresholds.componentCoverage,
386
+ message: aggregateCoverage.componentCoverage >= config.thresholds.componentCoverage
387
+ ? `${aggregateCoverage.componentCoverage.toFixed(1)}% >= ${config.thresholds.componentCoverage}% threshold`
388
+ : `${aggregateCoverage.componentCoverage.toFixed(1)}% < ${config.thresholds.componentCoverage}% threshold`,
389
+ });
390
+ // Prop coverage check
391
+ checks.push({
392
+ name: 'Prop Coverage',
393
+ threshold: config.thresholds.propCoverage,
394
+ actual: aggregateCoverage.propCoverage,
395
+ passed: aggregateCoverage.propCoverage >= config.thresholds.propCoverage,
396
+ message: aggregateCoverage.propCoverage >= config.thresholds.propCoverage
397
+ ? `${aggregateCoverage.propCoverage.toFixed(1)}% >= ${config.thresholds.propCoverage}% threshold`
398
+ : `${aggregateCoverage.propCoverage.toFixed(1)}% < ${config.thresholds.propCoverage}% threshold`,
399
+ });
400
+ // Variant coverage check
401
+ checks.push({
402
+ name: 'Variant Coverage',
403
+ threshold: config.thresholds.variantCoverage,
404
+ actual: aggregateCoverage.variantCoverage,
405
+ passed: aggregateCoverage.variantCoverage >= config.thresholds.variantCoverage,
406
+ message: aggregateCoverage.variantCoverage >= config.thresholds.variantCoverage
407
+ ? `${aggregateCoverage.variantCoverage.toFixed(1)}% >= ${config.thresholds.variantCoverage}% threshold`
408
+ : `${aggregateCoverage.variantCoverage.toFixed(1)}% < ${config.thresholds.variantCoverage}% threshold`,
409
+ });
410
+ // New code coverage check (only if git analysis is enabled)
411
+ if (config.enableGitAnalysis) {
412
+ const newCodeCoverage = newCodeMetrics.newComponents.coverage;
413
+ checks.push({
414
+ name: 'New Code Coverage',
415
+ threshold: config.thresholds.newCodeCoverage,
416
+ actual: newCodeCoverage,
417
+ passed: newCodeCoverage >= config.thresholds.newCodeCoverage,
418
+ message: newCodeCoverage >= config.thresholds.newCodeCoverage
419
+ ? `${newCodeCoverage.toFixed(1)}% >= ${config.thresholds.newCodeCoverage}% threshold`
420
+ : `${newCodeCoverage.toFixed(1)}% < ${config.thresholds.newCodeCoverage}% threshold`,
421
+ });
422
+ }
423
+ // Execution check (no new failures)
424
+ if (executionResults?.executed) {
425
+ const newFailures = executionResults.regression?.newFailures.length || 0;
426
+ checks.push({
427
+ name: 'No New Failures',
428
+ threshold: 0,
429
+ actual: newFailures,
430
+ passed: newFailures === 0,
431
+ message: newFailures === 0
432
+ ? 'No new story failures introduced'
433
+ : `${newFailures} new story failure(s) introduced`,
434
+ });
435
+ }
436
+ const passed = checks.every(c => c.passed);
437
+ return {
438
+ passed,
439
+ checks,
440
+ };
441
+ }
442
+ /**
443
+ * Convert a string to PascalCase
444
+ */
445
+ function toPascalCase(str) {
446
+ return str
447
+ .split(/[-_\s]+/)
448
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
449
+ .join('');
450
+ }
451
+ /**
452
+ * Build suggested args for a prop
453
+ */
454
+ function buildSuggestedArgs(propName, propType) {
455
+ const args = {};
456
+ if (propType.includes('boolean')) {
457
+ args[propName] = true;
458
+ }
459
+ else if (propType.includes('string')) {
460
+ args[propName] = 'Example value';
461
+ }
462
+ else if (propType.includes('number')) {
463
+ args[propName] = 42;
464
+ }
465
+ else if (propType.includes('|')) {
466
+ // Union type - use first value
467
+ const match = propType.match(/'([^']+)'/);
468
+ if (match) {
469
+ args[propName] = match[1];
470
+ }
471
+ }
472
+ else {
473
+ args[propName] = '[value]';
474
+ }
475
+ return args;
476
+ }
477
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Story Executor
3
+ * Executes stories in a real browser to detect runtime failures using Playwright
4
+ */
5
+ import type { ParsedStoryFile, ExecutionConfig, ExecutionResults, RegressionAnalysis } from '../types/index.js';
6
+ /**
7
+ * Execute stories and capture failures
8
+ */
9
+ export declare function executeStories(storyFiles: ParsedStoryFile[], config: ExecutionConfig, verbose?: boolean): Promise<ExecutionResults>;
10
+ /**
11
+ * Compare execution results with a baseline for regression analysis
12
+ */
13
+ export declare function analyzeRegression(currentResults: ExecutionResults, baselineResults: ExecutionResults | null, baselineRef: string): RegressionAnalysis;
14
+ /**
15
+ * Load baseline results from a file
16
+ */
17
+ export declare function loadBaseline(baselinePath: string): ExecutionResults | null;
18
+ /**
19
+ * Check if Playwright is available
20
+ */
21
+ export declare function isPlaywrightAvailable(): Promise<boolean>;
22
+ //# sourceMappingURL=story-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-executor.d.ts","sourceRoot":"","sources":["../../src/core/story-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EAIf,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAgB3B;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,UAAQ,GACd,OAAO,CAAC,gBAAgB,CAAC,CAyG3B;AAkQD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,gBAAgB,EAChC,eAAe,EAAE,gBAAgB,GAAG,IAAI,EACxC,WAAW,EAAE,MAAM,GAClB,kBAAkB,CAyCpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAa1E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG9D"}