@syntrologie/adapt-nav 0.0.0-semantically-released

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.
@@ -0,0 +1,647 @@
1
+ /**
2
+ * Adaptive Nav - Config Schema
3
+ *
4
+ * Zod schema for validating navigation link list configuration.
5
+ * Demonstrates compositional action pattern with per-item showWhen.
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Schema for a single navigation link (compositional action).
10
+ */
11
+ export declare const NavLinkSchema: z.ZodObject<{
12
+ kind: z.ZodLiteral<"nav:link">;
13
+ config: z.ZodObject<{
14
+ /** Display label for the link */
15
+ label: z.ZodString;
16
+ /** Target URL */
17
+ href: z.ZodString;
18
+ /** Optional icon (emoji or icon key) */
19
+ icon: z.ZodOptional<z.ZodString>;
20
+ /** Whether to open in new tab */
21
+ external: z.ZodDefault<z.ZodBoolean>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ external: boolean;
24
+ label: string;
25
+ href: string;
26
+ icon?: string | undefined;
27
+ }, {
28
+ label: string;
29
+ href: string;
30
+ external?: boolean | undefined;
31
+ icon?: string | undefined;
32
+ }>;
33
+ /** Per-item activation strategy (null = always show) */
34
+ showWhen: z.ZodOptional<z.ZodNullable<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
35
+ type: z.ZodLiteral<"rules">;
36
+ rules: z.ZodArray<z.ZodObject<{
37
+ conditions: z.ZodArray<z.ZodObject<{
38
+ type: z.ZodString;
39
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
+ type: z.ZodString;
41
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
42
+ type: z.ZodString;
43
+ }, z.ZodTypeAny, "passthrough">>, "many">;
44
+ value: z.ZodUnknown;
45
+ }, "strip", z.ZodTypeAny, {
46
+ conditions: z.objectOutputType<{
47
+ type: z.ZodString;
48
+ }, z.ZodTypeAny, "passthrough">[];
49
+ value?: unknown;
50
+ }, {
51
+ conditions: z.objectInputType<{
52
+ type: z.ZodString;
53
+ }, z.ZodTypeAny, "passthrough">[];
54
+ value?: unknown;
55
+ }>, "many">;
56
+ default: z.ZodUnknown;
57
+ }, "strip", z.ZodTypeAny, {
58
+ rules: {
59
+ conditions: z.objectOutputType<{
60
+ type: z.ZodString;
61
+ }, z.ZodTypeAny, "passthrough">[];
62
+ value?: unknown;
63
+ }[];
64
+ type: "rules";
65
+ default?: unknown;
66
+ }, {
67
+ rules: {
68
+ conditions: z.objectInputType<{
69
+ type: z.ZodString;
70
+ }, z.ZodTypeAny, "passthrough">[];
71
+ value?: unknown;
72
+ }[];
73
+ type: "rules";
74
+ default?: unknown;
75
+ }>, z.ZodObject<{
76
+ type: z.ZodLiteral<"score">;
77
+ field: z.ZodString;
78
+ threshold: z.ZodNumber;
79
+ above: z.ZodUnknown;
80
+ below: z.ZodUnknown;
81
+ }, "strip", z.ZodTypeAny, {
82
+ type: "score";
83
+ field: string;
84
+ threshold: number;
85
+ above?: unknown;
86
+ below?: unknown;
87
+ }, {
88
+ type: "score";
89
+ field: string;
90
+ threshold: number;
91
+ above?: unknown;
92
+ below?: unknown;
93
+ }>, z.ZodObject<{
94
+ type: z.ZodLiteral<"model">;
95
+ modelId: z.ZodString;
96
+ inputs: z.ZodArray<z.ZodString, "many">;
97
+ outputMapping: z.ZodRecord<z.ZodString, z.ZodUnknown>;
98
+ default: z.ZodUnknown;
99
+ }, "strip", z.ZodTypeAny, {
100
+ type: "model";
101
+ modelId: string;
102
+ inputs: string[];
103
+ outputMapping: Record<string, unknown>;
104
+ default?: unknown;
105
+ }, {
106
+ type: "model";
107
+ modelId: string;
108
+ inputs: string[];
109
+ outputMapping: Record<string, unknown>;
110
+ default?: unknown;
111
+ }>, z.ZodObject<{
112
+ type: z.ZodLiteral<"external">;
113
+ endpoint: z.ZodString;
114
+ method: z.ZodOptional<z.ZodEnum<["GET", "POST"]>>;
115
+ default: z.ZodUnknown;
116
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ type: "external";
119
+ endpoint: string;
120
+ default?: unknown;
121
+ method?: "GET" | "POST" | undefined;
122
+ timeoutMs?: number | undefined;
123
+ }, {
124
+ type: "external";
125
+ endpoint: string;
126
+ default?: unknown;
127
+ method?: "GET" | "POST" | undefined;
128
+ timeoutMs?: number | undefined;
129
+ }>]>>>;
130
+ }, "strip", z.ZodTypeAny, {
131
+ config: {
132
+ external: boolean;
133
+ label: string;
134
+ href: string;
135
+ icon?: string | undefined;
136
+ };
137
+ kind: "nav:link";
138
+ showWhen?: {
139
+ rules: {
140
+ conditions: z.objectOutputType<{
141
+ type: z.ZodString;
142
+ }, z.ZodTypeAny, "passthrough">[];
143
+ value?: unknown;
144
+ }[];
145
+ type: "rules";
146
+ default?: unknown;
147
+ } | {
148
+ type: "score";
149
+ field: string;
150
+ threshold: number;
151
+ above?: unknown;
152
+ below?: unknown;
153
+ } | {
154
+ type: "model";
155
+ modelId: string;
156
+ inputs: string[];
157
+ outputMapping: Record<string, unknown>;
158
+ default?: unknown;
159
+ } | {
160
+ type: "external";
161
+ endpoint: string;
162
+ default?: unknown;
163
+ method?: "GET" | "POST" | undefined;
164
+ timeoutMs?: number | undefined;
165
+ } | null | undefined;
166
+ }, {
167
+ config: {
168
+ label: string;
169
+ href: string;
170
+ external?: boolean | undefined;
171
+ icon?: string | undefined;
172
+ };
173
+ kind: "nav:link";
174
+ showWhen?: {
175
+ rules: {
176
+ conditions: z.objectInputType<{
177
+ type: z.ZodString;
178
+ }, z.ZodTypeAny, "passthrough">[];
179
+ value?: unknown;
180
+ }[];
181
+ type: "rules";
182
+ default?: unknown;
183
+ } | {
184
+ type: "score";
185
+ field: string;
186
+ threshold: number;
187
+ above?: unknown;
188
+ below?: unknown;
189
+ } | {
190
+ type: "model";
191
+ modelId: string;
192
+ inputs: string[];
193
+ outputMapping: Record<string, unknown>;
194
+ default?: unknown;
195
+ } | {
196
+ type: "external";
197
+ endpoint: string;
198
+ default?: unknown;
199
+ method?: "GET" | "POST" | undefined;
200
+ timeoutMs?: number | undefined;
201
+ } | null | undefined;
202
+ }>;
203
+ export type NavLinkSchemaType = z.infer<typeof NavLinkSchema>;
204
+ /**
205
+ * Full configuration schema for adaptive-nav.
206
+ */
207
+ export declare const configSchema: z.ZodObject<{
208
+ /** Layout orientation */
209
+ layout: z.ZodDefault<z.ZodEnum<["horizontal", "vertical"]>>;
210
+ /** Color theme */
211
+ theme: z.ZodDefault<z.ZodEnum<["light", "dark", "auto"]>>;
212
+ /** Navigation links (compositional actions) */
213
+ actions: z.ZodDefault<z.ZodArray<z.ZodObject<{
214
+ kind: z.ZodLiteral<"nav:link">;
215
+ config: z.ZodObject<{
216
+ /** Display label for the link */
217
+ label: z.ZodString;
218
+ /** Target URL */
219
+ href: z.ZodString;
220
+ /** Optional icon (emoji or icon key) */
221
+ icon: z.ZodOptional<z.ZodString>;
222
+ /** Whether to open in new tab */
223
+ external: z.ZodDefault<z.ZodBoolean>;
224
+ }, "strip", z.ZodTypeAny, {
225
+ external: boolean;
226
+ label: string;
227
+ href: string;
228
+ icon?: string | undefined;
229
+ }, {
230
+ label: string;
231
+ href: string;
232
+ external?: boolean | undefined;
233
+ icon?: string | undefined;
234
+ }>;
235
+ /** Per-item activation strategy (null = always show) */
236
+ showWhen: z.ZodOptional<z.ZodNullable<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
237
+ type: z.ZodLiteral<"rules">;
238
+ rules: z.ZodArray<z.ZodObject<{
239
+ conditions: z.ZodArray<z.ZodObject<{
240
+ type: z.ZodString;
241
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
242
+ type: z.ZodString;
243
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
244
+ type: z.ZodString;
245
+ }, z.ZodTypeAny, "passthrough">>, "many">;
246
+ value: z.ZodUnknown;
247
+ }, "strip", z.ZodTypeAny, {
248
+ conditions: z.objectOutputType<{
249
+ type: z.ZodString;
250
+ }, z.ZodTypeAny, "passthrough">[];
251
+ value?: unknown;
252
+ }, {
253
+ conditions: z.objectInputType<{
254
+ type: z.ZodString;
255
+ }, z.ZodTypeAny, "passthrough">[];
256
+ value?: unknown;
257
+ }>, "many">;
258
+ default: z.ZodUnknown;
259
+ }, "strip", z.ZodTypeAny, {
260
+ rules: {
261
+ conditions: z.objectOutputType<{
262
+ type: z.ZodString;
263
+ }, z.ZodTypeAny, "passthrough">[];
264
+ value?: unknown;
265
+ }[];
266
+ type: "rules";
267
+ default?: unknown;
268
+ }, {
269
+ rules: {
270
+ conditions: z.objectInputType<{
271
+ type: z.ZodString;
272
+ }, z.ZodTypeAny, "passthrough">[];
273
+ value?: unknown;
274
+ }[];
275
+ type: "rules";
276
+ default?: unknown;
277
+ }>, z.ZodObject<{
278
+ type: z.ZodLiteral<"score">;
279
+ field: z.ZodString;
280
+ threshold: z.ZodNumber;
281
+ above: z.ZodUnknown;
282
+ below: z.ZodUnknown;
283
+ }, "strip", z.ZodTypeAny, {
284
+ type: "score";
285
+ field: string;
286
+ threshold: number;
287
+ above?: unknown;
288
+ below?: unknown;
289
+ }, {
290
+ type: "score";
291
+ field: string;
292
+ threshold: number;
293
+ above?: unknown;
294
+ below?: unknown;
295
+ }>, z.ZodObject<{
296
+ type: z.ZodLiteral<"model">;
297
+ modelId: z.ZodString;
298
+ inputs: z.ZodArray<z.ZodString, "many">;
299
+ outputMapping: z.ZodRecord<z.ZodString, z.ZodUnknown>;
300
+ default: z.ZodUnknown;
301
+ }, "strip", z.ZodTypeAny, {
302
+ type: "model";
303
+ modelId: string;
304
+ inputs: string[];
305
+ outputMapping: Record<string, unknown>;
306
+ default?: unknown;
307
+ }, {
308
+ type: "model";
309
+ modelId: string;
310
+ inputs: string[];
311
+ outputMapping: Record<string, unknown>;
312
+ default?: unknown;
313
+ }>, z.ZodObject<{
314
+ type: z.ZodLiteral<"external">;
315
+ endpoint: z.ZodString;
316
+ method: z.ZodOptional<z.ZodEnum<["GET", "POST"]>>;
317
+ default: z.ZodUnknown;
318
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
319
+ }, "strip", z.ZodTypeAny, {
320
+ type: "external";
321
+ endpoint: string;
322
+ default?: unknown;
323
+ method?: "GET" | "POST" | undefined;
324
+ timeoutMs?: number | undefined;
325
+ }, {
326
+ type: "external";
327
+ endpoint: string;
328
+ default?: unknown;
329
+ method?: "GET" | "POST" | undefined;
330
+ timeoutMs?: number | undefined;
331
+ }>]>>>;
332
+ }, "strip", z.ZodTypeAny, {
333
+ config: {
334
+ external: boolean;
335
+ label: string;
336
+ href: string;
337
+ icon?: string | undefined;
338
+ };
339
+ kind: "nav:link";
340
+ showWhen?: {
341
+ rules: {
342
+ conditions: z.objectOutputType<{
343
+ type: z.ZodString;
344
+ }, z.ZodTypeAny, "passthrough">[];
345
+ value?: unknown;
346
+ }[];
347
+ type: "rules";
348
+ default?: unknown;
349
+ } | {
350
+ type: "score";
351
+ field: string;
352
+ threshold: number;
353
+ above?: unknown;
354
+ below?: unknown;
355
+ } | {
356
+ type: "model";
357
+ modelId: string;
358
+ inputs: string[];
359
+ outputMapping: Record<string, unknown>;
360
+ default?: unknown;
361
+ } | {
362
+ type: "external";
363
+ endpoint: string;
364
+ default?: unknown;
365
+ method?: "GET" | "POST" | undefined;
366
+ timeoutMs?: number | undefined;
367
+ } | null | undefined;
368
+ }, {
369
+ config: {
370
+ label: string;
371
+ href: string;
372
+ external?: boolean | undefined;
373
+ icon?: string | undefined;
374
+ };
375
+ kind: "nav:link";
376
+ showWhen?: {
377
+ rules: {
378
+ conditions: z.objectInputType<{
379
+ type: z.ZodString;
380
+ }, z.ZodTypeAny, "passthrough">[];
381
+ value?: unknown;
382
+ }[];
383
+ type: "rules";
384
+ default?: unknown;
385
+ } | {
386
+ type: "score";
387
+ field: string;
388
+ threshold: number;
389
+ above?: unknown;
390
+ below?: unknown;
391
+ } | {
392
+ type: "model";
393
+ modelId: string;
394
+ inputs: string[];
395
+ outputMapping: Record<string, unknown>;
396
+ default?: unknown;
397
+ } | {
398
+ type: "external";
399
+ endpoint: string;
400
+ default?: unknown;
401
+ method?: "GET" | "POST" | undefined;
402
+ timeoutMs?: number | undefined;
403
+ } | null | undefined;
404
+ }>, "many">>;
405
+ }, "strip", z.ZodTypeAny, {
406
+ theme: "light" | "dark" | "auto";
407
+ layout: "horizontal" | "vertical";
408
+ actions: {
409
+ config: {
410
+ external: boolean;
411
+ label: string;
412
+ href: string;
413
+ icon?: string | undefined;
414
+ };
415
+ kind: "nav:link";
416
+ showWhen?: {
417
+ rules: {
418
+ conditions: z.objectOutputType<{
419
+ type: z.ZodString;
420
+ }, z.ZodTypeAny, "passthrough">[];
421
+ value?: unknown;
422
+ }[];
423
+ type: "rules";
424
+ default?: unknown;
425
+ } | {
426
+ type: "score";
427
+ field: string;
428
+ threshold: number;
429
+ above?: unknown;
430
+ below?: unknown;
431
+ } | {
432
+ type: "model";
433
+ modelId: string;
434
+ inputs: string[];
435
+ outputMapping: Record<string, unknown>;
436
+ default?: unknown;
437
+ } | {
438
+ type: "external";
439
+ endpoint: string;
440
+ default?: unknown;
441
+ method?: "GET" | "POST" | undefined;
442
+ timeoutMs?: number | undefined;
443
+ } | null | undefined;
444
+ }[];
445
+ }, {
446
+ theme?: "light" | "dark" | "auto" | undefined;
447
+ layout?: "horizontal" | "vertical" | undefined;
448
+ actions?: {
449
+ config: {
450
+ label: string;
451
+ href: string;
452
+ external?: boolean | undefined;
453
+ icon?: string | undefined;
454
+ };
455
+ kind: "nav:link";
456
+ showWhen?: {
457
+ rules: {
458
+ conditions: z.objectInputType<{
459
+ type: z.ZodString;
460
+ }, z.ZodTypeAny, "passthrough">[];
461
+ value?: unknown;
462
+ }[];
463
+ type: "rules";
464
+ default?: unknown;
465
+ } | {
466
+ type: "score";
467
+ field: string;
468
+ threshold: number;
469
+ above?: unknown;
470
+ below?: unknown;
471
+ } | {
472
+ type: "model";
473
+ modelId: string;
474
+ inputs: string[];
475
+ outputMapping: Record<string, unknown>;
476
+ default?: unknown;
477
+ } | {
478
+ type: "external";
479
+ endpoint: string;
480
+ default?: unknown;
481
+ method?: "GET" | "POST" | undefined;
482
+ timeoutMs?: number | undefined;
483
+ } | null | undefined;
484
+ }[] | undefined;
485
+ }>;
486
+ export type NavConfig = z.infer<typeof configSchema>;
487
+ /**
488
+ * Validate a nav link action.
489
+ */
490
+ export declare function validateNavLink(data: unknown): z.SafeParseReturnType<{
491
+ config: {
492
+ label: string;
493
+ href: string;
494
+ external?: boolean | undefined;
495
+ icon?: string | undefined;
496
+ };
497
+ kind: "nav:link";
498
+ showWhen?: {
499
+ rules: {
500
+ conditions: z.objectInputType<{
501
+ type: z.ZodString;
502
+ }, z.ZodTypeAny, "passthrough">[];
503
+ value?: unknown;
504
+ }[];
505
+ type: "rules";
506
+ default?: unknown;
507
+ } | {
508
+ type: "score";
509
+ field: string;
510
+ threshold: number;
511
+ above?: unknown;
512
+ below?: unknown;
513
+ } | {
514
+ type: "model";
515
+ modelId: string;
516
+ inputs: string[];
517
+ outputMapping: Record<string, unknown>;
518
+ default?: unknown;
519
+ } | {
520
+ type: "external";
521
+ endpoint: string;
522
+ default?: unknown;
523
+ method?: "GET" | "POST" | undefined;
524
+ timeoutMs?: number | undefined;
525
+ } | null | undefined;
526
+ }, {
527
+ config: {
528
+ external: boolean;
529
+ label: string;
530
+ href: string;
531
+ icon?: string | undefined;
532
+ };
533
+ kind: "nav:link";
534
+ showWhen?: {
535
+ rules: {
536
+ conditions: z.objectOutputType<{
537
+ type: z.ZodString;
538
+ }, z.ZodTypeAny, "passthrough">[];
539
+ value?: unknown;
540
+ }[];
541
+ type: "rules";
542
+ default?: unknown;
543
+ } | {
544
+ type: "score";
545
+ field: string;
546
+ threshold: number;
547
+ above?: unknown;
548
+ below?: unknown;
549
+ } | {
550
+ type: "model";
551
+ modelId: string;
552
+ inputs: string[];
553
+ outputMapping: Record<string, unknown>;
554
+ default?: unknown;
555
+ } | {
556
+ type: "external";
557
+ endpoint: string;
558
+ default?: unknown;
559
+ method?: "GET" | "POST" | undefined;
560
+ timeoutMs?: number | undefined;
561
+ } | null | undefined;
562
+ }>;
563
+ /**
564
+ * Validate the full nav config.
565
+ */
566
+ export declare function validateNavConfig(data: unknown): z.SafeParseReturnType<{
567
+ theme?: "light" | "dark" | "auto" | undefined;
568
+ layout?: "horizontal" | "vertical" | undefined;
569
+ actions?: {
570
+ config: {
571
+ label: string;
572
+ href: string;
573
+ external?: boolean | undefined;
574
+ icon?: string | undefined;
575
+ };
576
+ kind: "nav:link";
577
+ showWhen?: {
578
+ rules: {
579
+ conditions: z.objectInputType<{
580
+ type: z.ZodString;
581
+ }, z.ZodTypeAny, "passthrough">[];
582
+ value?: unknown;
583
+ }[];
584
+ type: "rules";
585
+ default?: unknown;
586
+ } | {
587
+ type: "score";
588
+ field: string;
589
+ threshold: number;
590
+ above?: unknown;
591
+ below?: unknown;
592
+ } | {
593
+ type: "model";
594
+ modelId: string;
595
+ inputs: string[];
596
+ outputMapping: Record<string, unknown>;
597
+ default?: unknown;
598
+ } | {
599
+ type: "external";
600
+ endpoint: string;
601
+ default?: unknown;
602
+ method?: "GET" | "POST" | undefined;
603
+ timeoutMs?: number | undefined;
604
+ } | null | undefined;
605
+ }[] | undefined;
606
+ }, {
607
+ theme: "light" | "dark" | "auto";
608
+ layout: "horizontal" | "vertical";
609
+ actions: {
610
+ config: {
611
+ external: boolean;
612
+ label: string;
613
+ href: string;
614
+ icon?: string | undefined;
615
+ };
616
+ kind: "nav:link";
617
+ showWhen?: {
618
+ rules: {
619
+ conditions: z.objectOutputType<{
620
+ type: z.ZodString;
621
+ }, z.ZodTypeAny, "passthrough">[];
622
+ value?: unknown;
623
+ }[];
624
+ type: "rules";
625
+ default?: unknown;
626
+ } | {
627
+ type: "score";
628
+ field: string;
629
+ threshold: number;
630
+ above?: unknown;
631
+ below?: unknown;
632
+ } | {
633
+ type: "model";
634
+ modelId: string;
635
+ inputs: string[];
636
+ outputMapping: Record<string, unknown>;
637
+ default?: unknown;
638
+ } | {
639
+ type: "external";
640
+ endpoint: string;
641
+ default?: unknown;
642
+ method?: "GET" | "POST" | undefined;
643
+ timeoutMs?: number | undefined;
644
+ } | null | undefined;
645
+ }[];
646
+ }>;
647
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0DxB;;GAEG;AACH,eAAO,MAAM,aAAa;;;QAGtB,iCAAiC;;QAEjC,iBAAiB;;QAEjB,wCAAwC;;QAExC,iCAAiC;;;;;;;;;;;;;IAGnC,wDAAwD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAExD,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAM9D;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,yBAAyB;;IAEzB,kBAAkB;;IAElB,+CAA+C;;;;YA3B7C,iCAAiC;;YAEjC,iBAAiB;;YAEjB,wCAAwC;;YAExC,iCAAiC;;;;;;;;;;;;;QAGnC,wDAAwD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBxD,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAMrD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE9C"}