@formspec/decorators 0.1.0-alpha.3
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 +179 -0
- package/dist/index.cjs +380 -0
- package/dist/index.d.ts +464 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +694 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @formspec/decorators
|
|
3
|
+
*
|
|
4
|
+
* Decorators for FormSpec form definitions.
|
|
5
|
+
*
|
|
6
|
+
* These decorators work in two modes:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Build-time (CLI generate)**: The FormSpec CLI reads decorators through
|
|
9
|
+
* static analysis and generates JSON Schema + UI Schema files directly.
|
|
10
|
+
*
|
|
11
|
+
* 2. **Runtime (with CLI codegen)**: Run `formspec codegen` to generate a type
|
|
12
|
+
* metadata file, then use `toFormSpec()` to generate specs at runtime.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { Label, Min, Max, EnumOptions, toFormSpec } from '@formspec/decorators';
|
|
17
|
+
*
|
|
18
|
+
* class UserForm {
|
|
19
|
+
* @Label("Full Name")
|
|
20
|
+
* name!: string;
|
|
21
|
+
*
|
|
22
|
+
* @Label("Age")
|
|
23
|
+
* @Min(18)
|
|
24
|
+
* @Max(120)
|
|
25
|
+
* age?: number;
|
|
26
|
+
*
|
|
27
|
+
* @Label("Country")
|
|
28
|
+
* @EnumOptions([
|
|
29
|
+
* { id: "us", label: "United States" },
|
|
30
|
+
* { id: "ca", label: "Canada" }
|
|
31
|
+
* ])
|
|
32
|
+
* country!: "us" | "ca";
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* // After running: formspec codegen ./forms.ts -o ./__formspec_types__.ts
|
|
36
|
+
* // Import the generated file and use toFormSpec:
|
|
37
|
+
* import './__formspec_types__';
|
|
38
|
+
* const spec = toFormSpec(UserForm);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
/** Type for property decorator */
|
|
42
|
+
type PropertyDecorator = (target: object, propertyKey: string) => void;
|
|
43
|
+
/** Type for enum option - can be a simple string or an object with id/label */
|
|
44
|
+
export type EnumOptionValue = string | {
|
|
45
|
+
id: string;
|
|
46
|
+
label: string;
|
|
47
|
+
};
|
|
48
|
+
/** Type for conditional visibility condition */
|
|
49
|
+
export interface ShowWhenCondition {
|
|
50
|
+
field: string;
|
|
51
|
+
value: unknown;
|
|
52
|
+
}
|
|
53
|
+
/** Decorator metadata stored at runtime */
|
|
54
|
+
export interface FieldDecoratorMetadata {
|
|
55
|
+
label?: string;
|
|
56
|
+
placeholder?: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
min?: number;
|
|
59
|
+
max?: number;
|
|
60
|
+
step?: number;
|
|
61
|
+
minLength?: number;
|
|
62
|
+
maxLength?: number;
|
|
63
|
+
minItems?: number;
|
|
64
|
+
maxItems?: number;
|
|
65
|
+
pattern?: string;
|
|
66
|
+
options?: EnumOptionValue[];
|
|
67
|
+
showWhen?: ShowWhenCondition;
|
|
68
|
+
group?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Type metadata emitted by the CLI codegen command.
|
|
72
|
+
*
|
|
73
|
+
* Describes the runtime type information for a field that TypeScript
|
|
74
|
+
* normally erases. Generated by `formspec codegen` from static analysis.
|
|
75
|
+
*/
|
|
76
|
+
export interface TypeMetadata {
|
|
77
|
+
/** Base type: "string", "number", "boolean", "enum", "array", "object", "unknown" */
|
|
78
|
+
type: string;
|
|
79
|
+
/** For enum types, the possible literal values */
|
|
80
|
+
values?: unknown[];
|
|
81
|
+
/** For array types, metadata about the array element type */
|
|
82
|
+
itemType?: TypeMetadata;
|
|
83
|
+
/** For object types, metadata about each property */
|
|
84
|
+
properties?: Record<string, TypeMetadata>;
|
|
85
|
+
/** Whether the field accepts null */
|
|
86
|
+
nullable?: boolean;
|
|
87
|
+
/** Whether the field is optional (T | undefined or ?: modifier) */
|
|
88
|
+
optional?: boolean;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* FormSpec field element representation.
|
|
92
|
+
*
|
|
93
|
+
* This is the internal format used by FormSpec to represent form fields.
|
|
94
|
+
* Generated from decorated classes via `toFormSpec()` or `buildFormSchemas()`.
|
|
95
|
+
*/
|
|
96
|
+
export interface FormSpecField {
|
|
97
|
+
/** Field type: "text", "number", "boolean", "enum", "array", "object" */
|
|
98
|
+
_field: string;
|
|
99
|
+
/** Unique field identifier (property name) */
|
|
100
|
+
id: string;
|
|
101
|
+
/** Display label for the field */
|
|
102
|
+
label?: string;
|
|
103
|
+
/** Placeholder text for input fields */
|
|
104
|
+
placeholder?: string;
|
|
105
|
+
/** Help text or description */
|
|
106
|
+
description?: string;
|
|
107
|
+
/** Whether the field is required (non-optional) */
|
|
108
|
+
required?: boolean;
|
|
109
|
+
/** Minimum value for number fields */
|
|
110
|
+
min?: number;
|
|
111
|
+
/** Maximum value for number fields */
|
|
112
|
+
max?: number;
|
|
113
|
+
/** Step increment for number fields */
|
|
114
|
+
step?: number;
|
|
115
|
+
/** Minimum character length for text fields */
|
|
116
|
+
minLength?: number;
|
|
117
|
+
/** Maximum character length for text fields */
|
|
118
|
+
maxLength?: number;
|
|
119
|
+
/** Minimum items for array fields */
|
|
120
|
+
minItems?: number;
|
|
121
|
+
/** Maximum items for array fields */
|
|
122
|
+
maxItems?: number;
|
|
123
|
+
/** Regex pattern for text validation */
|
|
124
|
+
pattern?: string;
|
|
125
|
+
/** Enum options (strings or {id, label} objects) */
|
|
126
|
+
options?: EnumOptionValue[];
|
|
127
|
+
/** Conditional visibility rule */
|
|
128
|
+
showWhen?: ShowWhenCondition;
|
|
129
|
+
/** Group name for field grouping */
|
|
130
|
+
group?: string;
|
|
131
|
+
/** Nested fields for object/array types */
|
|
132
|
+
fields?: FormSpecField[];
|
|
133
|
+
}
|
|
134
|
+
/** FormSpec output (elements only, for backwards compatibility) */
|
|
135
|
+
export interface FormSpecOutput {
|
|
136
|
+
elements: FormSpecField[];
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* JSON Schema type (subset of JSON Schema draft-07).
|
|
140
|
+
*
|
|
141
|
+
* Used for validation schema output from `buildFormSchemas()`.
|
|
142
|
+
* Only includes properties used by FormSpec; not a complete JSON Schema type.
|
|
143
|
+
*
|
|
144
|
+
* @see https://json-schema.org/draft-07/schema
|
|
145
|
+
*/
|
|
146
|
+
export interface JSONSchema7 {
|
|
147
|
+
/** JSON Schema dialect identifier */
|
|
148
|
+
$schema?: string;
|
|
149
|
+
/** Data type: "string", "number", "boolean", "object", "array" */
|
|
150
|
+
type?: string;
|
|
151
|
+
/** Object property schemas (for type: "object") */
|
|
152
|
+
properties?: Record<string, JSONSchema7>;
|
|
153
|
+
/** Required property names (for type: "object") */
|
|
154
|
+
required?: string[];
|
|
155
|
+
/** Human-readable title (from @Label decorator) */
|
|
156
|
+
title?: string;
|
|
157
|
+
/** Minimum numeric value (from @Min decorator) */
|
|
158
|
+
minimum?: number;
|
|
159
|
+
/** Maximum numeric value (from @Max decorator) */
|
|
160
|
+
maximum?: number;
|
|
161
|
+
/** Minimum string length (from @MinLength decorator) */
|
|
162
|
+
minLength?: number;
|
|
163
|
+
/** Maximum string length (from @MaxLength decorator) */
|
|
164
|
+
maxLength?: number;
|
|
165
|
+
/** Minimum array items (from @MinItems decorator) */
|
|
166
|
+
minItems?: number;
|
|
167
|
+
/** Maximum array items (from @MaxItems decorator) */
|
|
168
|
+
maxItems?: number;
|
|
169
|
+
/** Regex validation pattern (from @Pattern decorator) */
|
|
170
|
+
pattern?: string;
|
|
171
|
+
/** Enum values (for simple string enums) */
|
|
172
|
+
enum?: unknown[];
|
|
173
|
+
/** Enum with labels using oneOf/const pattern */
|
|
174
|
+
oneOf?: Array<{
|
|
175
|
+
const: unknown;
|
|
176
|
+
title?: string;
|
|
177
|
+
}>;
|
|
178
|
+
/** Array item schema (for type: "array") */
|
|
179
|
+
items?: JSONSchema7;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* UI Schema element types for JSON Forms.
|
|
183
|
+
*/
|
|
184
|
+
export interface UISchemaElement {
|
|
185
|
+
type: string;
|
|
186
|
+
elements?: UISchemaElement[];
|
|
187
|
+
scope?: string;
|
|
188
|
+
label?: string;
|
|
189
|
+
rule?: UISchemaRule;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* UI Schema rule for conditional visibility.
|
|
193
|
+
*/
|
|
194
|
+
export interface UISchemaRule {
|
|
195
|
+
effect: "SHOW" | "HIDE" | "ENABLE" | "DISABLE";
|
|
196
|
+
condition: {
|
|
197
|
+
scope: string;
|
|
198
|
+
schema: Record<string, unknown>;
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Result of building form schemas.
|
|
203
|
+
* Matches the return type of `buildFormSchemas` from @formspec/build.
|
|
204
|
+
*/
|
|
205
|
+
export interface BuildResult {
|
|
206
|
+
/** JSON Schema for validation */
|
|
207
|
+
readonly jsonSchema: JSONSchema7;
|
|
208
|
+
/** JSON Forms UI Schema for rendering */
|
|
209
|
+
readonly uiSchema: UISchemaElement;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Sets the display label for a field.
|
|
213
|
+
*
|
|
214
|
+
* @param text - The label text to display
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* @Label("Email Address")
|
|
218
|
+
* email!: string;
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export declare function Label(text: string): PropertyDecorator;
|
|
222
|
+
/**
|
|
223
|
+
* Sets placeholder text for input fields.
|
|
224
|
+
*
|
|
225
|
+
* @param text - The placeholder text
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* @Placeholder("Enter your email...")
|
|
229
|
+
* email!: string;
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export declare function Placeholder(text: string): PropertyDecorator;
|
|
233
|
+
/**
|
|
234
|
+
* Sets a description or help text for a field.
|
|
235
|
+
*
|
|
236
|
+
* @param text - The description text
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* @Description("We'll never share your email with anyone")
|
|
240
|
+
* email!: string;
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
export declare function Description(text: string): PropertyDecorator;
|
|
244
|
+
/**
|
|
245
|
+
* Sets the minimum allowed value for a numeric field.
|
|
246
|
+
*
|
|
247
|
+
* @param value - The minimum value
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* @Min(0)
|
|
251
|
+
* quantity!: number;
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
export declare function Min(value: number): PropertyDecorator;
|
|
255
|
+
/**
|
|
256
|
+
* Sets the maximum allowed value for a numeric field.
|
|
257
|
+
*
|
|
258
|
+
* @param value - The maximum value
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* @Max(100)
|
|
262
|
+
* percentage!: number;
|
|
263
|
+
* ```
|
|
264
|
+
*/
|
|
265
|
+
export declare function Max(value: number): PropertyDecorator;
|
|
266
|
+
/**
|
|
267
|
+
* Sets the step increment for a numeric field.
|
|
268
|
+
*
|
|
269
|
+
* @param value - The step value
|
|
270
|
+
* @example
|
|
271
|
+
* ```typescript
|
|
272
|
+
* @Step(0.01)
|
|
273
|
+
* price!: number;
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
export declare function Step(value: number): PropertyDecorator;
|
|
277
|
+
/**
|
|
278
|
+
* Sets the minimum length for a string field.
|
|
279
|
+
*
|
|
280
|
+
* @param value - The minimum character count
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* @MinLength(1)
|
|
284
|
+
* name!: string;
|
|
285
|
+
* ```
|
|
286
|
+
*/
|
|
287
|
+
export declare function MinLength(value: number): PropertyDecorator;
|
|
288
|
+
/**
|
|
289
|
+
* Sets the maximum length for a string field.
|
|
290
|
+
*
|
|
291
|
+
* @param value - The maximum character count
|
|
292
|
+
* @example
|
|
293
|
+
* ```typescript
|
|
294
|
+
* @MaxLength(255)
|
|
295
|
+
* bio!: string;
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
export declare function MaxLength(value: number): PropertyDecorator;
|
|
299
|
+
/**
|
|
300
|
+
* Sets a regex pattern for string validation.
|
|
301
|
+
*
|
|
302
|
+
* @param regex - The regex pattern as a string
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* @Pattern("^[a-z]+$")
|
|
306
|
+
* username!: string;
|
|
307
|
+
* ```
|
|
308
|
+
*/
|
|
309
|
+
export declare function Pattern(regex: string): PropertyDecorator;
|
|
310
|
+
/**
|
|
311
|
+
* Sets the minimum number of items for an array field.
|
|
312
|
+
*
|
|
313
|
+
* @param value - The minimum item count
|
|
314
|
+
* @example
|
|
315
|
+
* ```typescript
|
|
316
|
+
* @MinItems(1)
|
|
317
|
+
* tags!: string[];
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
export declare function MinItems(value: number): PropertyDecorator;
|
|
321
|
+
/**
|
|
322
|
+
* Sets the maximum number of items for an array field.
|
|
323
|
+
*
|
|
324
|
+
* @param value - The maximum item count
|
|
325
|
+
* @example
|
|
326
|
+
* ```typescript
|
|
327
|
+
* @MaxItems(10)
|
|
328
|
+
* tags!: string[];
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
331
|
+
export declare function MaxItems(value: number): PropertyDecorator;
|
|
332
|
+
/**
|
|
333
|
+
* Provides custom options for enum fields with labels.
|
|
334
|
+
*
|
|
335
|
+
* Use this to provide human-readable labels for enum values,
|
|
336
|
+
* or to customize the order and display of options.
|
|
337
|
+
*
|
|
338
|
+
* @param options - Array of option values or {id, label} objects
|
|
339
|
+
* @example
|
|
340
|
+
* ```typescript
|
|
341
|
+
* @EnumOptions([
|
|
342
|
+
* { id: "us", label: "United States" },
|
|
343
|
+
* { id: "ca", label: "Canada" },
|
|
344
|
+
* { id: "uk", label: "United Kingdom" }
|
|
345
|
+
* ])
|
|
346
|
+
* country!: "us" | "ca" | "uk";
|
|
347
|
+
* ```
|
|
348
|
+
*/
|
|
349
|
+
export declare function EnumOptions(options: EnumOptionValue[]): PropertyDecorator;
|
|
350
|
+
/**
|
|
351
|
+
* Makes a field conditionally visible based on another field's value.
|
|
352
|
+
*
|
|
353
|
+
* @param condition - Object specifying the field and value to match
|
|
354
|
+
* @example
|
|
355
|
+
* ```typescript
|
|
356
|
+
* @ShowWhen({ field: "contactMethod", value: "email" })
|
|
357
|
+
* emailAddress!: string;
|
|
358
|
+
*
|
|
359
|
+
* @ShowWhen({ field: "contactMethod", value: "phone" })
|
|
360
|
+
* phoneNumber!: string;
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
export declare function ShowWhen(condition: ShowWhenCondition): PropertyDecorator;
|
|
364
|
+
/**
|
|
365
|
+
* Groups fields together under a named section.
|
|
366
|
+
*
|
|
367
|
+
* @param name - The group name
|
|
368
|
+
* @example
|
|
369
|
+
* ```typescript
|
|
370
|
+
* @Group("Personal Information")
|
|
371
|
+
* @Label("First Name")
|
|
372
|
+
* firstName!: string;
|
|
373
|
+
*
|
|
374
|
+
* @Group("Personal Information")
|
|
375
|
+
* @Label("Last Name")
|
|
376
|
+
* lastName!: string;
|
|
377
|
+
*
|
|
378
|
+
* @Group("Contact Details")
|
|
379
|
+
* @Label("Email")
|
|
380
|
+
* email!: string;
|
|
381
|
+
* ```
|
|
382
|
+
*/
|
|
383
|
+
export declare function Group(name: string): PropertyDecorator;
|
|
384
|
+
/**
|
|
385
|
+
* Generates a UI Schema from a decorated class at runtime.
|
|
386
|
+
*
|
|
387
|
+
* **Requirements:**
|
|
388
|
+
* - Run `formspec codegen` to generate type metadata for the class
|
|
389
|
+
* - Decorators must be applied to store field metadata
|
|
390
|
+
*
|
|
391
|
+
* @param ctor - The class constructor
|
|
392
|
+
* @returns FormSpec output with elements array
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```typescript
|
|
396
|
+
* import { Label, toFormSpec } from '@formspec/decorators';
|
|
397
|
+
*
|
|
398
|
+
* class MyForm {
|
|
399
|
+
* @Label("Name")
|
|
400
|
+
* name!: string;
|
|
401
|
+
*
|
|
402
|
+
* @Label("Country")
|
|
403
|
+
* country!: "us" | "ca";
|
|
404
|
+
* }
|
|
405
|
+
*
|
|
406
|
+
* const spec = toFormSpec(MyForm);
|
|
407
|
+
* // { elements: [{ _field: "text", id: "name", label: "Name", required: true }, ...] }
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
export declare function toFormSpec<T extends new (...args: any[]) => any>(ctor: T): FormSpecOutput;
|
|
411
|
+
/**
|
|
412
|
+
* Gets the raw decorator metadata for a class.
|
|
413
|
+
*
|
|
414
|
+
* Useful for debugging or custom processing.
|
|
415
|
+
*
|
|
416
|
+
* @param ctor - The class constructor
|
|
417
|
+
* @returns Map of field names to decorator metadata
|
|
418
|
+
*/
|
|
419
|
+
export declare function getDecoratorMetadata<T extends new (...args: any[]) => any>(ctor: T): Map<string, FieldDecoratorMetadata>;
|
|
420
|
+
/**
|
|
421
|
+
* Gets the raw type metadata for a class.
|
|
422
|
+
*
|
|
423
|
+
* Useful for debugging or custom processing.
|
|
424
|
+
*
|
|
425
|
+
* @param ctor - The class constructor
|
|
426
|
+
* @returns Record of field names to type metadata, or empty object if not transformed
|
|
427
|
+
*/
|
|
428
|
+
export declare function getTypeMetadata<T extends new (...args: any[]) => any>(ctor: T): Record<string, TypeMetadata>;
|
|
429
|
+
/**
|
|
430
|
+
* Builds both JSON Schema and UI Schema from a decorated class at runtime.
|
|
431
|
+
*
|
|
432
|
+
* This function provides the same API as `buildFormSchemas` from `@formspec/build`,
|
|
433
|
+
* allowing consistent usage across both Chain DSL and Decorator DSL.
|
|
434
|
+
*
|
|
435
|
+
* **Requirements:**
|
|
436
|
+
* - Run `formspec codegen` to generate type metadata for the class
|
|
437
|
+
* - Decorators must be applied to store field metadata
|
|
438
|
+
*
|
|
439
|
+
* @param ctor - The class constructor
|
|
440
|
+
* @returns Object containing both jsonSchema and uiSchema
|
|
441
|
+
*
|
|
442
|
+
* @example
|
|
443
|
+
* ```typescript
|
|
444
|
+
* import { Label, buildFormSchemas } from '@formspec/decorators';
|
|
445
|
+
*
|
|
446
|
+
* class MyForm {
|
|
447
|
+
* @Label("Name")
|
|
448
|
+
* name!: string;
|
|
449
|
+
*
|
|
450
|
+
* @Label("Country")
|
|
451
|
+
* country!: "us" | "ca";
|
|
452
|
+
* }
|
|
453
|
+
*
|
|
454
|
+
* // After running: formspec codegen ./forms.ts -o ./__formspec_types__.ts
|
|
455
|
+
* // And importing: import './__formspec_types__';
|
|
456
|
+
*
|
|
457
|
+
* const { jsonSchema, uiSchema } = buildFormSchemas(MyForm);
|
|
458
|
+
* // jsonSchema: { $schema: "...", type: "object", properties: {...}, required: [...] }
|
|
459
|
+
* // uiSchema: { type: "VerticalLayout", elements: [...] }
|
|
460
|
+
* ```
|
|
461
|
+
*/
|
|
462
|
+
export declare function buildFormSchemas<T extends new (...args: any[]) => any>(ctor: T): BuildResult;
|
|
463
|
+
export {};
|
|
464
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAMH,kCAAkC;AAClC,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvE,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,4CAA4C;IAC5C,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAuCD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAMrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAM3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAM3D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMrD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAM1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAM1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMxD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMzD;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAMzE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,GAAG,iBAAiB,CAMxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAMrD;AAyFD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wBAAgB,UAAU,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC9D,IAAI,EAAE,CAAC,GACN,cAAc,CA6BhB;AAED;;;;;;;GAOG;AAEH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxE,IAAI,EAAE,CAAC,GACN,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAErC;AAED;;;;;;;GAOG;AAEH,wBAAgB,eAAe,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACnE,IAAI,EAAE,CAAC,GACN,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAG9B;AA8KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACpE,IAAI,EAAE,CAAC,GACN,WAAW,CAOb"}
|