@nexart/ui-renderer 0.4.0 → 0.7.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @nexart/ui-renderer
2
2
 
3
- Version: 0.4.0
3
+ Version: 0.7.0
4
4
 
5
5
  **Declarative and Code Mode System Authoring SDK for NexArt Protocol**
6
6
 
@@ -19,30 +19,32 @@ Version: 0.4.0
19
19
 
20
20
  ---
21
21
 
22
- ## PROTOCOL LOCK — v1.0.0 (MIRROR)
22
+ ## PROTOCOL LOCK — v1.2.0 (MIRROR)
23
23
 
24
24
  | Property | Value |
25
25
  |----------|-------|
26
26
  | Protocol Name | NexArt Code Mode |
27
- | Version | v1.0.0 |
28
- | Status | **HARD LOCKED** |
27
+ | Version | v1.2.0 |
28
+ | Status | **STABLE** |
29
+ | Phase | 3 |
29
30
  | This SDK | Mirror only — NOT authoritative |
30
- | Canonical Authority | @nexart/codemode-sdk |
31
- | Lock Date | December 2024 |
31
+ | Canonical Authority | @nexart/codemode-sdk v1.4.0 |
32
+ | Lock Date | January 2026 |
32
33
 
33
- **This SDK mirrors the frozen v1.0.0 protocol surface. Any future protocol change requires v2.0.0 in @nexart/codemode-sdk first.**
34
+ **This SDK mirrors the v1.2.0 protocol surface. Any future protocol change requires v2.0.0 in @nexart/codemode-sdk first.**
34
35
 
35
36
  This SDK mirrors:
36
37
  - Execution model (Static and Loop modes)
37
- - VAR[0..9] specification (exactly 10 read-only variables)
38
+ - VAR[0..9] specification (0-10 input, always 10 at runtime)
38
39
  - Determinism behavior (seed + VAR → consistent preview)
39
- - Time semantics (t, frameCount, time, tGlobal)
40
+ - Time semantics (t, frameCount, time, tGlobal, totalFrames)
40
41
  - Forbidden patterns list (13 patterns)
41
42
  - Error message format (`[Code Mode Protocol Error]`)
43
+ - v1.2.0 features: curveVertex, bezierVertex, pixel system, createGraphics
42
44
 
43
45
  ---
44
46
 
45
- ## Protocol Alignment (v1.0.0)
47
+ ## Protocol Alignment (v1.2.0)
46
48
 
47
49
  This SDK mirrors NexArt Protocol behavior. It is NOT canonical.
48
50
 
@@ -83,43 +85,47 @@ The following patterns are rejected (mirroring @nexart/codemode-sdk exactly):
83
85
  - `document.*`, `window.*` — DOM access forbidden
84
86
  - `import`, `require()` — external imports forbidden
85
87
 
86
- ### VAR Protocol — LOCKED v1.0.0 (MIRROR)
88
+ ### VAR Protocol — v1.2.0 (MIRROR of SDK v1.4.0)
87
89
 
88
- VAR[0..9] is a read-only array of 10 protocol variables (0-100 recommended).
90
+ VAR[0..9] is a read-only array of 10 protocol variables (0-100 strict range).
89
91
 
90
- **VAR Specification (FROZEN — mirrors @nexart/codemode-sdk):**
92
+ **VAR Specification (mirrors @nexart/codemode-sdk v1.4.0):**
91
93
 
92
94
  | Property | Value | Enforcement |
93
95
  |----------|-------|-------------|
94
- | Count | Exactly 10 (VAR[0]..VAR[9]) | HARD — throws if not 10 |
95
- | Type | number | HARD throws if non-number |
96
- | Range | 0-100 recommended | SOFTwarns, does NOT clamp |
97
- | Mutability | Read-only | HARD — frozen, writes blocked |
96
+ | Input count | 0-10 (VAR[0]..VAR[9]) | HARD — throws if > 10 |
97
+ | Runtime count | Always 10 | Padded with zeros |
98
+ | Type | finite number | HARDthrows if non-number |
99
+ | Range | 0-100 | HARD — throws if out of range |
100
+ | Mutability | Read-only | HARD — frozen, writes throw |
98
101
  | Injection | Before execution | Guaranteed |
99
102
  | Lifecycle | Stable for entire render | Guaranteed |
100
103
  | Default | All zeros | If not provided |
101
104
 
102
- **This specification is INTENTIONAL and MUST NOT be extended in v1.x.**
103
-
104
- **DO NOT** add support for dynamic-length VAR arrays.
105
- **DO NOT** allow user-defined VAR counts.
105
+ **This specification mirrors @nexart/codemode-sdk v1.4.0 exactly.**
106
106
 
107
107
  ```typescript
108
108
  // Correct usage
109
109
  const size = map(VAR[0], 0, 100, 10, 200);
110
110
  const count = floor(map(VAR[1], 0, 100, 5, 50));
111
111
 
112
+ // VAR[5] returns 0 if input had fewer than 6 elements
113
+ const value = VAR[5]; // Returns 0 if not provided
114
+
112
115
  // Error: VAR is read-only
113
- VAR[0] = 50; // Blocked with warning
116
+ VAR[0] = 50; // Throws: "[Code Mode Protocol Error] VAR is read-only..."
114
117
  ```
115
118
 
116
119
  **Error examples:**
117
120
  ```typescript
118
- // Protocol error: wrong length
119
- vars: [50, 50, 50] // "[Code Mode Protocol Error] VAR array must have exactly 10 elements"
121
+ // Protocol error: too many elements
122
+ vars: [1,2,3,4,5,6,7,8,9,10,11] // Throws: "VAR array must have at most 10 elements, got 11"
120
123
 
121
- // Warning only: out of range (not clamped)
122
- vars: [150, 50, 50, 50, 50, 50, 50, 50, 50, 50] // Warns but allows
124
+ // Protocol error: out of range
125
+ vars: [150, 50, 50] // Throws: "VAR[0] = 150 is out of range. Values must be 0-100."
126
+
127
+ // Valid: fewer than 10 elements (padded with zeros)
128
+ vars: [50, 75, 25] // Works! VAR[3..9] will be 0
123
129
  ```
124
130
 
125
131
  ---
@@ -142,15 +148,59 @@ Opinionated presets with guardrails. Provides consistent, protocol-aligned backg
142
148
 
143
149
  ### `primitive`
144
150
 
145
- Declarative generative components. Structured parameters, no raw code.
151
+ Declarative generative components. Structured parameters, no raw code. **30 primitives available:**
152
+
153
+ **Basic Shapes:**
154
+ - `dots` — Grid/random dot patterns
155
+ - `lines` — Vertical wavy lines
156
+ - `waves` — Horizontal wave patterns
157
+ - `stripes` — Simple horizontal stripes
158
+ - `circles` — Concentric pulsing circles
159
+ - `grid` — Rotating square grid
160
+
161
+ **Geometric:**
162
+ - `polygons` — Random rotating polygons (3-7 sides)
163
+ - `diamonds` — Diamond grid with noise rotation
164
+ - `hexgrid` — Honeycomb hexagonal grid
165
+ - `stars` — Scattered rotating star shapes
166
+ - `concentricSquares` — Nested rotating squares
167
+
168
+ **Radial:**
169
+ - `spirals` — Multiple expanding spirals
170
+ - `rays` — Lines emanating from center
171
+ - `orbits` — Wobbling orbital rings
172
+ - `rings` — Alternating concentric rings
173
+ - `arcs` — Random partial circles
174
+ - `radialLines` — Lines from inner to outer radius
175
+ - `petals` — Flower petal pattern
176
+
177
+ **Flow & Motion:**
178
+ - `flow` — Particle flow field
179
+ - `particles` — Scattered particles with tails
180
+ - `bubbles` — Rising floating bubbles
181
+
182
+ **Patterns:**
183
+ - `crosshatch` — Cross-hatched shading lines
184
+ - `chevrons` — V-shaped wave patterns
185
+ - `zigzag` — Zigzag horizontal lines
186
+ - `weave` — Interlocking woven pattern
187
+ - `moire` — Overlapping circle interference
188
+
189
+ **Organic:**
190
+ - `curves` — Random bezier curves
191
+ - `noise` — Perlin noise vector field
192
+ - `mesh` — Deformed triangular mesh
193
+ - `branches` — Fractal tree branches
146
194
 
147
195
  ```typescript
148
196
  {
149
197
  type: 'primitive',
150
- name: 'dots', // dots, lines, waves, grid, flowField, orbits
151
- count: 100,
198
+ name: 'spirals', // Any of the 30 primitives above
199
+ count: 12,
152
200
  color: '#ffffff',
153
- motion: { speed: 0.5 }
201
+ motion: 'medium', // 'slow', 'medium', 'fast'
202
+ strokeWeight: 'thin', // 'thin', 'medium', 'thick', or number
203
+ opacity: 0.8
154
204
  }
155
205
  ```
156
206
 
@@ -272,7 +322,7 @@ const system = createSystem({
272
322
  source: string, // Raw p5-like sketch code
273
323
  seed?: number, // Optional: PRNG seed
274
324
  totalFrames?: number, // Required for loop mode
275
- vars?: number[] // Optional: VAR[0..9] (10 values, 0-100)
325
+ vars?: number[] // Optional: VAR[0..9] (0-10 values, 0-100 range)
276
326
  });
277
327
  ```
278
328
 
@@ -305,23 +355,134 @@ if (!result.valid) {
305
355
 
306
356
  ### `getCapabilities()`
307
357
 
308
- Discover SDK capabilities.
358
+ Discover SDK capabilities for AI and tooling.
309
359
 
310
360
  ```typescript
311
361
  import { getCapabilities } from '@nexart/ui-renderer';
312
362
 
313
363
  const caps = getCapabilities();
314
364
  // {
315
- // version: '0.4.0',
365
+ // version: '0.7.0',
316
366
  // isCanonical: false,
317
367
  // isArchival: false,
318
368
  // renderer: '@nexart/ui-renderer',
319
- // delegatesTo: '@nexart/codemode-sdk',
320
- // protocolVersion: '1.0.0',
369
+ // primitivesMeta: { notice: '...', count: 30, isCanonical: false },
370
+ // primitives: [ { name, category, description, parameters } ],
321
371
  // ...
322
372
  // }
323
373
  ```
324
374
 
375
+ ### `getPrimitiveTypes()`
376
+
377
+ Get all 30 primitive names as array.
378
+
379
+ ```typescript
380
+ import { getPrimitiveTypes } from '@nexart/ui-renderer';
381
+
382
+ const names = getPrimitiveTypes();
383
+ // ['dots', 'lines', 'waves', 'stripes', ... ]
384
+ ```
385
+
386
+ ### `getPrimitivesByCategory()`
387
+
388
+ Get primitives organized by category.
389
+
390
+ ```typescript
391
+ import { getPrimitivesByCategory } from '@nexart/ui-renderer';
392
+
393
+ const byCategory = getPrimitivesByCategory();
394
+ // {
395
+ // basic: ['dots', 'lines', 'waves', 'stripes', 'circles', 'grid'],
396
+ // geometric: ['polygons', 'diamonds', 'hexgrid', 'stars', 'concentricSquares'],
397
+ // radial: ['spirals', 'rays', 'orbits', 'rings', 'arcs', 'radialLines', 'petals'],
398
+ // flow: ['flow', 'particles', 'bubbles'],
399
+ // patterns: ['crosshatch', 'chevrons', 'zigzag', 'weave', 'moire'],
400
+ // organic: ['curves', 'noise', 'mesh', 'branches']
401
+ // }
402
+ ```
403
+
404
+ ### `getPrimitiveInfo(name)`
405
+
406
+ Get full capability info for a single primitive.
407
+
408
+ ```typescript
409
+ import { getPrimitiveInfo } from '@nexart/ui-renderer';
410
+
411
+ const info = getPrimitiveInfo('spirals');
412
+ // {
413
+ // name: 'spirals',
414
+ // category: 'radial',
415
+ // description: 'Multiple expanding spirals from center',
416
+ // compilesTo: 'codemode',
417
+ // isCanonical: false,
418
+ // parameters: { count, color, opacity, strokeWeight, motion }
419
+ // }
420
+ ```
421
+
422
+ ### `isPrimitiveValid(name)`
423
+
424
+ Check if a primitive name is valid.
425
+
426
+ ```typescript
427
+ import { isPrimitiveValid } from '@nexart/ui-renderer';
428
+
429
+ isPrimitiveValid('spirals'); // true
430
+ isPrimitiveValid('invalid'); // false
431
+ ```
432
+
433
+ ---
434
+
435
+ ## AI Capabilities API
436
+
437
+ **Designed for AI agents to build valid systems without hallucination.**
438
+
439
+ ⚠️ **Primitives are helper generators that compile to Code Mode sketches.**
440
+ They are NOT canonical. The canonical output is always the compiled Code Mode source.
441
+
442
+ ### For AI Agents
443
+
444
+ ```typescript
445
+ import { getCapabilities, isPrimitiveValid, getPrimitiveInfo } from '@nexart/ui-renderer';
446
+
447
+ const caps = getCapabilities();
448
+
449
+ caps.primitivesMeta.notice; // "Primitives are helper generators..."
450
+ caps.primitivesMeta.count; // 30
451
+ caps.primitivesMeta.isCanonical; // false
452
+
453
+ for (const p of caps.primitives) {
454
+ console.log(p.name); // 'dots', 'spirals', etc.
455
+ console.log(p.category); // 'basic', 'radial', etc.
456
+ console.log(p.description); // Human-readable description
457
+ console.log(p.parameters.count.min); // 3
458
+ console.log(p.parameters.count.max); // 50
459
+ console.log(p.parameters.count.default); // 12
460
+ }
461
+ ```
462
+
463
+ ### Primitive Parameter Specification
464
+
465
+ All primitives share these parameters:
466
+
467
+ | Parameter | Type | Required | Range | Default |
468
+ |-----------|------|----------|-------|---------|
469
+ | `count` | number | No | 3-50 | 12 |
470
+ | `color` | string | No | CSS color | Palette foreground |
471
+ | `opacity` | number | No | 0.1-1 | 1 |
472
+ | `strokeWeight` | enum | No | 'auto', 'thin', 'medium', 'thick' | 'auto' |
473
+ | `motion` | enum | No | 'slow', 'medium', 'fast' | 'slow' |
474
+
475
+ ### Valid Primitive Categories
476
+
477
+ | Category | Primitives |
478
+ |----------|-----------|
479
+ | `basic` | dots, lines, waves, stripes, circles, grid |
480
+ | `geometric` | polygons, diamonds, hexgrid, stars, concentricSquares |
481
+ | `radial` | spirals, rays, orbits, rings, arcs, radialLines, petals |
482
+ | `flow` | flow, particles, bubbles |
483
+ | `patterns` | crosshatch, chevrons, zigzag, weave, moire |
484
+ | `organic` | curves, noise, mesh, branches |
485
+
325
486
  ---
326
487
 
327
488
  ## Delegation Logging
@@ -330,7 +491,7 @@ All Code Mode previews log their delegation:
330
491
 
331
492
  ```
332
493
  [UIRenderer] Preview delegation → @nexart/codemode-sdk
333
- [UIRenderer] Protocol version: 1.0.0
494
+ [UIRenderer] Protocol version: 1.2.0
334
495
  [UIRenderer] Mode: loop
335
496
  ```
336
497
 
@@ -374,4 +535,4 @@ If the protocol rejects code:
374
535
 
375
536
  MIT License
376
537
 
377
- Copyright (c) 2024 NexArt
538
+ Copyright (c) 2024-2026 NexArt
@@ -1,13 +1,28 @@
1
1
  /**
2
- * @nexart/ui-renderer v0.2.0 - Capabilities Discovery
2
+ * @nexart/ui-renderer v0.7.0 - Capabilities Discovery
3
3
  *
4
4
  * Exposes SDK capabilities for AI tools and builders.
5
5
  * Critical for preventing hallucination and SDK bypass.
6
+ * Mirrors @nexart/codemode-sdk v1.4.0 (Protocol v1.2.0)
7
+ *
8
+ * ⚠️ PRIMITIVES ARE NON-CANONICAL
9
+ * Primitives are helper generators that compile to Code Mode sketches.
10
+ * They exist for convenience and rapid prototyping only.
11
+ * The canonical output is always the compiled Code Mode source.
6
12
  */
7
13
  export interface PrimitiveCapability {
8
- type: string;
14
+ name: string;
15
+ category: 'basic' | 'geometric' | 'radial' | 'flow' | 'patterns' | 'organic';
9
16
  description: string;
10
- parameters: Record<string, ParameterSpec>;
17
+ compilesTo: 'codemode';
18
+ isCanonical: false;
19
+ parameters: {
20
+ count: ParameterSpec;
21
+ color: ParameterSpec;
22
+ opacity: ParameterSpec;
23
+ strokeWeight: ParameterSpec;
24
+ motion: ParameterSpec;
25
+ };
11
26
  }
12
27
  export interface ParameterSpec {
13
28
  type: 'number' | 'string' | 'enum' | 'tuple' | 'boolean';
@@ -24,6 +39,13 @@ export interface Capabilities {
24
39
  isCanonical: false;
25
40
  isArchival: false;
26
41
  renderer: '@nexart/ui-renderer';
42
+ primitivesMeta: {
43
+ notice: string;
44
+ count: number;
45
+ categories: string[];
46
+ compilesTo: 'codemode';
47
+ isCanonical: false;
48
+ };
27
49
  primitives: PrimitiveCapability[];
28
50
  background: {
29
51
  color: ParameterSpec;
@@ -40,15 +62,15 @@ export interface Capabilities {
40
62
  };
41
63
  limits: {
42
64
  maxElements: number;
43
- maxParticles: number;
44
- maxDots: number;
45
- maxLines: number;
46
- maxOrbits: number;
47
- maxGridSize: number;
65
+ maxCount: number;
66
+ maxPrimitives: number;
48
67
  };
49
68
  }
50
69
  export declare function getCapabilities(): Capabilities;
51
70
  export declare function getPrimitiveTypes(): string[];
71
+ export declare function getPrimitivesByCategory(): Record<string, string[]>;
72
+ export declare function getPrimitiveInfo(name: string): PrimitiveCapability | null;
52
73
  export declare function getMotionSources(): string[];
53
74
  export declare function getBackgroundTextures(): string[];
75
+ export declare function isPrimitiveValid(name: string): boolean;
54
76
  //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,qBAAqB,CAAC;IAEhC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAElC,UAAU,EAAE;QACV,KAAK,EAAE,aAAa,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE;YACR,IAAI,EAAE,aAAa,CAAC;YACpB,MAAM,EAAE,aAAa,CAAC;YACtB,KAAK,EAAE,aAAa,CAAC;SACtB,CAAC;KACH,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,aAAa,CAAC;KACtB,CAAC;IAEF,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,eAAe,IAAI,YAAY,CAsU9C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC;IACnB,UAAU,EAAE;QACV,KAAK,EAAE,aAAa,CAAC;QACrB,KAAK,EAAE,aAAa,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC;QACvB,YAAY,EAAE,aAAa,CAAC;QAC5B,MAAM,EAAE,aAAa,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,qBAAqB,CAAC;IAEhC,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,KAAK,CAAC;KACpB,CAAC;IAEF,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAElC,UAAU,EAAE;QACV,KAAK,EAAE,aAAa,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE;YACR,IAAI,EAAE,aAAa,CAAC;YACpB,MAAM,EAAE,aAAa,CAAC;YACtB,KAAK,EAAE,aAAa,CAAC;SACtB,CAAC;KACH,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,aAAa,CAAC;KACtB,CAAC;IAEF,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAwDD,wBAAgB,eAAe,IAAI,YAAY,CA0G9C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAS5C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CASlE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAGzE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}