@numerum-tech/yeriasdk 1.0.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 (94) hide show
  1. package/README.md +864 -0
  2. package/dist/core/action-grid-view.d.ts +57 -0
  3. package/dist/core/action-grid-view.d.ts.map +1 -0
  4. package/dist/core/action-grid-view.js +112 -0
  5. package/dist/core/action-grid-view.js.map +1 -0
  6. package/dist/core/action-list-view.d.ts +39 -0
  7. package/dist/core/action-list-view.d.ts.map +1 -0
  8. package/dist/core/action-list-view.js +77 -0
  9. package/dist/core/action-list-view.js.map +1 -0
  10. package/dist/core/base/base-action-view.d.ts +82 -0
  11. package/dist/core/base/base-action-view.d.ts.map +1 -0
  12. package/dist/core/base/base-action-view.js +143 -0
  13. package/dist/core/base/base-action-view.js.map +1 -0
  14. package/dist/core/base-view.d.ts +105 -0
  15. package/dist/core/base-view.d.ts.map +1 -0
  16. package/dist/core/base-view.js +426 -0
  17. package/dist/core/base-view.js.map +1 -0
  18. package/dist/core/card-view.d.ts +24 -0
  19. package/dist/core/card-view.d.ts.map +1 -0
  20. package/dist/core/card-view.js +127 -0
  21. package/dist/core/card-view.js.map +1 -0
  22. package/dist/core/carousel-view.d.ts +22 -0
  23. package/dist/core/carousel-view.d.ts.map +1 -0
  24. package/dist/core/carousel-view.js +99 -0
  25. package/dist/core/carousel-view.js.map +1 -0
  26. package/dist/core/form-view.d.ts +165 -0
  27. package/dist/core/form-view.d.ts.map +1 -0
  28. package/dist/core/form-view.js +365 -0
  29. package/dist/core/form-view.js.map +1 -0
  30. package/dist/core/jsonapp.d.ts +263 -0
  31. package/dist/core/jsonapp.d.ts.map +1 -0
  32. package/dist/core/jsonapp.js +528 -0
  33. package/dist/core/jsonapp.js.map +1 -0
  34. package/dist/core/key-store.d.ts +51 -0
  35. package/dist/core/key-store.d.ts.map +1 -0
  36. package/dist/core/key-store.js +138 -0
  37. package/dist/core/key-store.js.map +1 -0
  38. package/dist/core/map-view.d.ts +45 -0
  39. package/dist/core/map-view.d.ts.map +1 -0
  40. package/dist/core/map-view.js +318 -0
  41. package/dist/core/map-view.js.map +1 -0
  42. package/dist/core/media-view.d.ts +20 -0
  43. package/dist/core/media-view.d.ts.map +1 -0
  44. package/dist/core/media-view.js +75 -0
  45. package/dist/core/media-view.js.map +1 -0
  46. package/dist/core/message-view.d.ts +53 -0
  47. package/dist/core/message-view.d.ts.map +1 -0
  48. package/dist/core/message-view.js +109 -0
  49. package/dist/core/message-view.js.map +1 -0
  50. package/dist/core/notification.d.ts +17 -0
  51. package/dist/core/notification.d.ts.map +1 -0
  52. package/dist/core/notification.js +33 -0
  53. package/dist/core/notification.js.map +1 -0
  54. package/dist/core/qr-display-view.d.ts +32 -0
  55. package/dist/core/qr-display-view.d.ts.map +1 -0
  56. package/dist/core/qr-display-view.js +66 -0
  57. package/dist/core/qr-display-view.js.map +1 -0
  58. package/dist/core/qr-scan-view.d.ts +148 -0
  59. package/dist/core/qr-scan-view.d.ts.map +1 -0
  60. package/dist/core/qr-scan-view.js +259 -0
  61. package/dist/core/qr-scan-view.js.map +1 -0
  62. package/dist/core/reader-view.d.ts +73 -0
  63. package/dist/core/reader-view.d.ts.map +1 -0
  64. package/dist/core/reader-view.js +285 -0
  65. package/dist/core/reader-view.js.map +1 -0
  66. package/dist/core/timeline-view.d.ts +16 -0
  67. package/dist/core/timeline-view.d.ts.map +1 -0
  68. package/dist/core/timeline-view.js +68 -0
  69. package/dist/core/timeline-view.js.map +1 -0
  70. package/dist/errors/index.d.ts +276 -0
  71. package/dist/errors/index.d.ts.map +1 -0
  72. package/dist/errors/index.js +431 -0
  73. package/dist/errors/index.js.map +1 -0
  74. package/dist/index.d.ts +26 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +103 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/types/index.d.ts +576 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/index.js +48 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/utils/fileFormats.d.ts +52 -0
  83. package/dist/utils/fileFormats.d.ts.map +1 -0
  84. package/dist/utils/fileFormats.js +198 -0
  85. package/dist/utils/fileFormats.js.map +1 -0
  86. package/dist/utils/logger.d.ts +38 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +109 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/utils/validators.d.ts +48 -0
  91. package/dist/utils/validators.d.ts.map +1 -0
  92. package/dist/utils/validators.js +445 -0
  93. package/dist/utils/validators.js.map +1 -0
  94. package/package.json +65 -0
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseView = void 0;
4
+ const types_1 = require("../types");
5
+ const errors_1 = require("../errors");
6
+ const validators_1 = require("../utils/validators");
7
+ class BaseView {
8
+ constructor(config) {
9
+ this.state = {};
10
+ this.id = config.id;
11
+ this.type = config.type;
12
+ this.metadata = config.metadata;
13
+ // Initialize process context if processId provided
14
+ if (config.processId) {
15
+ this.processContext = {
16
+ processId: config.processId
17
+ };
18
+ }
19
+ }
20
+ /**
21
+ * Valide la vue avant de la servir
22
+ */
23
+ validate() {
24
+ const errors = [];
25
+ const warnings = [];
26
+ if (!this.id || this.id.trim() === '') {
27
+ errors.push((0, types_1.createValidationError)('View ID is required'));
28
+ }
29
+ if (!this.type) {
30
+ errors.push((0, types_1.createValidationError)('View type is required'));
31
+ }
32
+ if (!this.content) {
33
+ errors.push((0, types_1.createValidationError)('View content is required'));
34
+ }
35
+ // Validation spécifique par type de vue
36
+ switch (this.type) {
37
+ case 'Form':
38
+ if (!this.content ||
39
+ !Array.isArray(this.content['fields']) ||
40
+ this.content['fields'].length === 0) {
41
+ errors.push((0, types_1.createValidationError)('Form must have at least one field'));
42
+ }
43
+ else {
44
+ // Exclude separator fields from "at least one field" validation
45
+ const fields = this.content['fields'];
46
+ const nonSeparatorFields = fields.filter((f) => f.fieldType !== 'separator');
47
+ if (nonSeparatorFields.length === 0) {
48
+ errors.push((0, types_1.createValidationError)('Form must have at least one non-separator field'));
49
+ }
50
+ }
51
+ break;
52
+ case 'ActionList':
53
+ case 'ActionGrid':
54
+ if (!this.content ||
55
+ !Array.isArray(this.content['actions']) ||
56
+ this.content['actions'].length === 0) {
57
+ errors.push((0, types_1.createValidationError)('Action views must have at least one action'));
58
+ }
59
+ break;
60
+ case 'Reader':
61
+ if (typeof this.content === 'object' && this.content !== null) {
62
+ const readerContent = this.content;
63
+ if (!readerContent.title || !readerContent.title.trim()) {
64
+ errors.push((0, types_1.createValidationError)('Reader view must have a title'));
65
+ }
66
+ if (!readerContent.elements || readerContent.elements.length === 0) {
67
+ errors.push((0, types_1.createValidationError)('Reader view must contain at least one element'));
68
+ }
69
+ }
70
+ break;
71
+ case 'Message':
72
+ if (typeof this.content === 'object' && this.content !== null) {
73
+ const messageContent = this.content;
74
+ const hasBody = typeof messageContent.body === 'string' && messageContent.body.trim().length > 0;
75
+ const hasIntro = typeof messageContent.intro === 'string' && messageContent.intro.trim().length > 0;
76
+ if (!hasBody && !hasIntro) {
77
+ errors.push((0, types_1.createValidationError)('Message view must define a body or an intro'));
78
+ }
79
+ if (!messageContent.confirm) {
80
+ errors.push((0, types_1.createValidationError)('Message view must define a primary action'));
81
+ }
82
+ }
83
+ else {
84
+ errors.push((0, types_1.createValidationError)('Message view content is invalid'));
85
+ }
86
+ break;
87
+ case 'Card':
88
+ if (typeof this.content === 'object' && this.content !== null) {
89
+ const card = this.content;
90
+ const hasDetail = (typeof card.description === 'string' && card.description.trim().length > 0) ||
91
+ (Array.isArray(card.stats) && card.stats.length > 0) ||
92
+ (Array.isArray(card.sections) && card.sections.length > 0);
93
+ if (!hasDetail) {
94
+ errors.push((0, types_1.createValidationError)('Card view requires at least a description, stat, or section'));
95
+ }
96
+ }
97
+ else {
98
+ errors.push((0, types_1.createValidationError)('Card view content is invalid'));
99
+ }
100
+ break;
101
+ case 'Carousel':
102
+ if (!this.content ||
103
+ !Array.isArray(this.content['slides']) ||
104
+ this.content['slides'].length === 0) {
105
+ errors.push((0, types_1.createValidationError)('Carousel view must contain at least one slide'));
106
+ }
107
+ break;
108
+ case 'Timeline':
109
+ if (!this.content ||
110
+ !Array.isArray(this.content['items']) ||
111
+ this.content['items'].length === 0) {
112
+ errors.push((0, types_1.createValidationError)('Timeline view must contain at least one entry'));
113
+ }
114
+ break;
115
+ case 'Media':
116
+ if (!this.content ||
117
+ !Array.isArray(this.content['items']) ||
118
+ this.content['items'].length === 0) {
119
+ errors.push((0, types_1.createValidationError)('Media view must contain at least one resource'));
120
+ }
121
+ break;
122
+ case 'Map': {
123
+ if (!this.content || typeof this.content !== 'object') {
124
+ errors.push((0, types_1.createValidationError)('Map view content is required'));
125
+ break;
126
+ }
127
+ const mc = this.content;
128
+ const layers = Array.isArray(mc['layers']) ? mc['layers'] : [];
129
+ // unique layer ids
130
+ const seenLayerIds = new Set();
131
+ for (const l of layers) {
132
+ const id = l?.['id'];
133
+ if (typeof id !== 'string' || !id.trim()) {
134
+ errors.push((0, types_1.createValidationError)('Map layer must have a non-empty id'));
135
+ }
136
+ else if (seenLayerIds.has(id)) {
137
+ errors.push((0, types_1.createValidationError)(`Duplicate map layer id: "${id}"`));
138
+ }
139
+ else {
140
+ seenLayerIds.add(id);
141
+ }
142
+ }
143
+ const mode = mc['mode'] === 'pick' ? 'pick' : 'view';
144
+ if (mode === 'pick') {
145
+ const pick = mc['pick'];
146
+ if (!pick || typeof pick['submitUrl'] !== 'string' || !pick['submitUrl'].trim()) {
147
+ errors.push((0, types_1.createValidationError)('Map pick mode requires pick.submitUrl'));
148
+ }
149
+ }
150
+ else {
151
+ // view mode: needs at least one drawable layer OR an emptyMessage
152
+ const hasDrawable = layers.some((l) => {
153
+ if (l?.['visible'] === false)
154
+ return false;
155
+ const t = l?.['type'];
156
+ if (t === 'markers')
157
+ return Array.isArray(l['markers']) && l['markers'].length > 0;
158
+ if (t === 'shapes')
159
+ return Array.isArray(l['shapes']) && l['shapes'].length > 0;
160
+ if (t === 'heatmap')
161
+ return Array.isArray(l['points']) && l['points'].length > 0;
162
+ if (t === 'tiles')
163
+ return typeof l['url'] === 'string';
164
+ if (t === 'geojson')
165
+ return !!l['data'];
166
+ return false;
167
+ });
168
+ const emptyMsg = mc['emptyMessage'];
169
+ const hasEmptyMessage = typeof emptyMsg === 'string' && emptyMsg.trim().length > 0;
170
+ if (!hasDrawable && !hasEmptyMessage) {
171
+ errors.push((0, types_1.createValidationError)('Map view must contain at least one drawable layer or an emptyMessage'));
172
+ }
173
+ }
174
+ break;
175
+ }
176
+ case 'QRDisplay':
177
+ if (!this.content ||
178
+ !this.content['qrImage'] ||
179
+ !this.content['qrTitle'] ||
180
+ !this.content['qrDescription']) {
181
+ errors.push((0, types_1.createValidationError)('QRDisplay view must have a QR code with image, title, and description'));
182
+ }
183
+ break;
184
+ }
185
+ return {
186
+ isValid: errors.length === 0,
187
+ errors,
188
+ warnings: warnings.length > 0 ? warnings : undefined
189
+ };
190
+ }
191
+ /**
192
+ * Sert la vue avec validation
193
+ */
194
+ serve() {
195
+ const validation = this.validate();
196
+ if (!validation.isValid) {
197
+ const errorMessages = validation.errors.map(e => e.message);
198
+ throw new errors_1.ViewValidationError(this.id, this.type, errorMessages);
199
+ }
200
+ // Warnings are available in validation result for users to handle
201
+ const result = {
202
+ id: this.id,
203
+ type: this.type,
204
+ content: this.content,
205
+ };
206
+ // Ajouter le contexte de processus si présent (mobile app needs this for URL construction)
207
+ if (this.processContext) {
208
+ result['process'] = this.processContext;
209
+ }
210
+ // Ajouter les métadonnées si présentes
211
+ if (this.metadata) {
212
+ result['metadata'] = this.metadata;
213
+ }
214
+ // Ajouter l'état si présent
215
+ if (Object.keys(this.state).length > 0) {
216
+ result['state'] = this.state;
217
+ }
218
+ // Ajouter la navigation si présente
219
+ if (this.navigation) {
220
+ result['nav'] = this.navigation;
221
+ }
222
+ return result;
223
+ }
224
+ /**
225
+ * Retourne la représentation JSON de la vue
226
+ */
227
+ toJSON() {
228
+ return this.serve();
229
+ }
230
+ /**
231
+ * Met à jour l'état de la vue
232
+ */
233
+ setState(key, value) {
234
+ this.state[key] = value;
235
+ }
236
+ /**
237
+ * Obtient une valeur de l'état
238
+ */
239
+ getState(key) {
240
+ return this.state[key];
241
+ }
242
+ /**
243
+ * Clone la vue
244
+ * Uses structuredClone for efficient deep cloning when available, falls back to JSON serialization
245
+ */
246
+ clone() {
247
+ const cloned = Object.create(Object.getPrototypeOf(this));
248
+ const clonedMetadata = this.metadata
249
+ ? {
250
+ ...this.metadata,
251
+ createdAt: this.metadata.createdAt instanceof Date
252
+ ? new Date(this.metadata.createdAt.getTime())
253
+ : this.metadata.createdAt
254
+ }
255
+ : undefined;
256
+ // Use structuredClone if available (Node 17+, modern browsers) for better performance
257
+ // Falls back to JSON serialization for compatibility
258
+ const cloneContent = typeof structuredClone !== 'undefined'
259
+ ? structuredClone(this.content)
260
+ : JSON.parse(JSON.stringify(this.content));
261
+ const cloneState = typeof structuredClone !== 'undefined'
262
+ ? structuredClone(this.state)
263
+ : JSON.parse(JSON.stringify(this.state));
264
+ Object.assign(cloned, {
265
+ id: this.id,
266
+ type: this.type,
267
+ content: cloneContent,
268
+ state: cloneState,
269
+ metadata: clonedMetadata
270
+ });
271
+ cloned.navigation = this.navigation ? { ...this.navigation } : undefined;
272
+ cloned.processContext = this.processContext ? { ...this.processContext } : undefined;
273
+ return cloned;
274
+ }
275
+ /**
276
+ * Vérifie si la vue est valide
277
+ */
278
+ isValid() {
279
+ return this.validate().isValid;
280
+ }
281
+ /**
282
+ * Valide la vue et retourne le résultat
283
+ */
284
+ validateView() {
285
+ return this.validate();
286
+ }
287
+ /**
288
+ * Obtient les erreurs de validation
289
+ */
290
+ getValidationErrors() {
291
+ return this.validate().errors.map(e => e.message);
292
+ }
293
+ /**
294
+ * Obtient les avertissements de validation
295
+ */
296
+ getValidationWarnings() {
297
+ return (this.validate().warnings || []).map(e => e.message);
298
+ }
299
+ /**
300
+ * Met à jour les métadonnées
301
+ */
302
+ updateMetadata(metadata) {
303
+ if (this.metadata) {
304
+ this.metadata = { ...this.metadata, ...metadata };
305
+ }
306
+ else {
307
+ this.metadata = metadata;
308
+ }
309
+ }
310
+ /**
311
+ * Obtient les métadonnées
312
+ */
313
+ getMetadata() {
314
+ return this.metadata;
315
+ }
316
+ /**
317
+ * Protected helper to set intro/note text with strict validation
318
+ * Child views can expose this as setIntro(), setNote(), etc.
319
+ * @param fieldName - Name of the content field to set (e.g., 'intro', 'note')
320
+ * @param value - Text value to set
321
+ * @throws InvalidParameterError if value is empty or null
322
+ */
323
+ setIntroText(fieldName, value) {
324
+ if (!value || value.trim().length === 0) {
325
+ throw new errors_1.InvalidParameterError(fieldName, value, `${fieldName} text cannot be empty`);
326
+ }
327
+ const trimmedValue = value.trim();
328
+ if (typeof this.content === 'object' && this.content !== null) {
329
+ this.content[fieldName] = trimmedValue;
330
+ }
331
+ return this;
332
+ }
333
+ /**
334
+ * Définit la vue suivante (navigation)
335
+ * Validates URL to prevent open redirects and malicious links
336
+ */
337
+ setNext(url) {
338
+ // Validate URL for security
339
+ const validation = (0, validators_1.validateSubmissionURL)(url, {
340
+ ...validators_1.DEFAULT_URL_CONFIG,
341
+ blockLocalhost: false, // Allow localhost for development
342
+ blockPrivateIPs: false // Allow private IPs for development
343
+ });
344
+ if (!validation.isValid) {
345
+ const errorMessages = validation.errors.map(e => e.message).join('; ');
346
+ throw new errors_1.InvalidParameterError('url', url, `Invalid navigation URL: ${errorMessages}`);
347
+ }
348
+ if (!this.navigation) {
349
+ this.navigation = {};
350
+ }
351
+ this.navigation.next = url;
352
+ return this;
353
+ }
354
+ /**
355
+ * Définit la vue précédente (navigation)
356
+ * Validates URL to prevent open redirects and malicious links
357
+ */
358
+ setPrev(url) {
359
+ // Validate URL for security
360
+ const validation = (0, validators_1.validateSubmissionURL)(url, {
361
+ ...validators_1.DEFAULT_URL_CONFIG,
362
+ blockLocalhost: false, // Allow localhost for development
363
+ blockPrivateIPs: false // Allow private IPs for development
364
+ });
365
+ if (!validation.isValid) {
366
+ const errorMessages = validation.errors.map(e => e.message).join('; ');
367
+ throw new errors_1.InvalidParameterError('url', url, `Invalid navigation URL: ${errorMessages}`);
368
+ }
369
+ if (!this.navigation) {
370
+ this.navigation = {};
371
+ }
372
+ this.navigation.prev = url;
373
+ return this;
374
+ }
375
+ /**
376
+ * Définit le contexte de processus pour cette vue
377
+ * @param processId - Identifiant unique du processus
378
+ * @param context - Contexte additionnel (étapes, nom, etc.)
379
+ */
380
+ setProcess(processId, context) {
381
+ this.processContext = {
382
+ processId,
383
+ ...(context || {})
384
+ };
385
+ return this;
386
+ }
387
+ /**
388
+ * Obtient le contexte de processus
389
+ */
390
+ getProcessContext() {
391
+ return this.processContext;
392
+ }
393
+ /**
394
+ * Obtient l'identifiant du processus (raccourci)
395
+ */
396
+ getProcessId() {
397
+ return this.processContext?.processId;
398
+ }
399
+ /**
400
+ * Vérifie si cette vue fait partie d'un processus
401
+ */
402
+ hasProcess() {
403
+ return this.processContext !== undefined;
404
+ }
405
+ /**
406
+ * Met à jour le contexte de processus
407
+ */
408
+ updateProcessContext(updates) {
409
+ if (!this.processContext) {
410
+ throw new errors_1.NoProcessContextError(this.id, 'update');
411
+ }
412
+ this.processContext = {
413
+ ...this.processContext,
414
+ ...updates
415
+ };
416
+ return this;
417
+ }
418
+ /**
419
+ * Nettoie les ressources de la vue
420
+ */
421
+ destroy() {
422
+ this.state = {};
423
+ }
424
+ }
425
+ exports.BaseView = BaseView;
426
+ //# sourceMappingURL=base-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-view.js","sourceRoot":"","sources":["../../src/core/base-view.ts"],"names":[],"mappings":";;;AAAA,oCAQkB;AAClB,sCAA8F;AAC9F,oDAAgF;AAEhF,MAAsB,QAAQ;IAS1B,YAAY,MAAsB;QALxB,UAAK,GAAc,EAAE,CAAC;QAM5B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,mDAAmD;QACnD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG;gBAClB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACO,QAAQ;QACd,MAAM,MAAM,GAA+C,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAA+C,EAAE,CAAC;QAEhE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,uBAAuB,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,0BAA0B,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,wCAAwC;QACxC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,MAAM;gBACP,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,OAAmC,CAAC,QAAQ,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAmC,CAAC,QAAQ,CAAe,CAAC,MAAM,KAAK,CAAC,EACjF,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACJ,gEAAgE;oBAChE,MAAM,MAAM,GAAI,IAAI,CAAC,OAAmC,CAAC,QAAQ,CAAmC,CAAC;oBACrG,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;oBACnF,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAClC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,iDAAiD,CAAC,CAAC,CAAC;oBAC1F,CAAC;gBACL,CAAC;gBACD,MAAM;YAEV,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACb,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,OAAmC,CAAC,SAAS,CAAC,CAAC;oBAClE,IAAI,CAAC,OAAmC,CAAC,SAAS,CAAe,CAAC,MAAM,KAAK,CAAC,EAClF,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,4CAA4C,CAAC,CAAC,CAAC;gBACrF,CAAC;gBACD,MAAM;YAEV,KAAK,QAAQ;gBACT,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAmD,CAAC;oBAC/E,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;wBACtD,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,+BAA+B,CAAC,CAAC,CAAC;oBACxE,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACjE,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,+CAA+C,CAAC,CAAC,CAAC;oBACxF,CAAC;gBACL,CAAC;gBACD,MAAM;YAEV,KAAK,SAAS;gBACV,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,OAI3B,CAAC;oBAEF,MAAM,OAAO,GAAG,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBACjG,MAAM,QAAQ,GAAG,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBAEpG,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACxB,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,6CAA6C,CAAC,CAAC,CAAC;oBACtF,CAAC;oBAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;wBAC1B,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,2CAA2C,CAAC,CAAC,CAAC;oBACpF,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM;YAEV,KAAK,MAAM;gBACP,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAA4E,CAAC;oBAC/F,MAAM,SAAS,GACX,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;wBAC5E,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;wBACpD,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE/D,IAAI,CAAC,SAAS,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,6DAA6D,CAAC,CAAC,CAAC;oBACtG,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,8BAA8B,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM;YAEV,KAAK,UAAU;gBACX,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,OAAmC,CAAC,QAAQ,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAmC,CAAC,QAAQ,CAAe,CAAC,MAAM,KAAK,CAAC,EACjF,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,+CAA+C,CAAC,CAAC,CAAC;gBACxF,CAAC;gBACD,MAAM;YAEV,KAAK,UAAU;gBACX,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,OAAmC,CAAC,OAAO,CAAC,CAAC;oBAChE,IAAI,CAAC,OAAmC,CAAC,OAAO,CAAe,CAAC,MAAM,KAAK,CAAC,EAChF,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,+CAA+C,CAAC,CAAC,CAAC;gBACxF,CAAC;gBACD,MAAM;YAEV,KAAK,OAAO;gBACR,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,OAAmC,CAAC,OAAO,CAAC,CAAC;oBAChE,IAAI,CAAC,OAAmC,CAAC,OAAO,CAAe,CAAC,MAAM,KAAK,CAAC,EAChF,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,+CAA+C,CAAC,CAAC,CAAC;gBACxF,CAAC;gBACD,MAAM;YAEV,KAAK,KAAK,CAAC,CAAC,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACpD,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,8BAA8B,CAAC,CAAC,CAAC;oBACnE,MAAM;gBACV,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAkC,CAAC;gBACnD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,QAAQ,CAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEnG,mBAAmB;gBACnB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;gBACvC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACrB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;wBACvC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,oCAAoC,CAAC,CAAC,CAAC;oBAC7E,CAAC;yBAAM,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC1E,CAAC;yBAAM,CAAC;wBACJ,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACzB,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBAErD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBAClB,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAwC,CAAC;oBAC/D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAE,IAAI,CAAC,WAAW,CAAY,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC1F,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,uCAAuC,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,kEAAkE;oBAClE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;wBAClC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK;4BAAE,OAAO,KAAK,CAAC;wBAC3C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;wBACtB,IAAI,CAAC,KAAK,SAAS;4BAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAK,CAAC,CAAC,SAAS,CAAe,CAAC,MAAM,GAAG,CAAC,CAAC;wBAClG,IAAI,CAAC,KAAK,QAAQ;4BAAG,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAM,CAAC,CAAC,QAAQ,CAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;wBAClG,IAAI,CAAC,KAAK,SAAS;4BAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAM,CAAC,CAAC,QAAQ,CAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;wBAClG,IAAI,CAAC,KAAK,OAAO;4BAAI,OAAO,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC;wBACzD,IAAI,CAAC,KAAK,SAAS;4BAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACxC,OAAO,KAAK,CAAC;oBACjB,CAAC,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;oBACpC,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAK,QAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC/F,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;wBACnC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,sEAAsE,CAAC,CAAC,CAAC;oBAC/G,CAAC;gBACL,CAAC;gBACD,MAAM;YACV,CAAC;YAED,KAAK,WAAW;gBACZ,IACI,CAAC,IAAI,CAAC,OAAO;oBACb,CAAE,IAAI,CAAC,OAAmC,CAAC,SAAS,CAAC;oBACrD,CAAE,IAAI,CAAC,OAAmC,CAAC,SAAS,CAAC;oBACrD,CAAE,IAAI,CAAC,OAAmC,CAAC,eAAe,CAAC,EAC7D,CAAC;oBACC,MAAM,CAAC,IAAI,CAAC,IAAA,6BAAqB,EAAC,uEAAuE,CAAC,CAAC,CAAC;gBAChH,CAAC;gBACD,MAAM;QACd,CAAC;QAED,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACvD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,IAAI,4BAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC;QAED,kEAAkE;QAElE,MAAM,MAAM,GAA4B;YACpC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;QAEF,2FAA2F;QAC3F,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC5C,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAW,EAAE,KAAc;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1D,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ;YAChC,CAAC,CAAC;gBACE,GAAG,IAAI,CAAC,QAAQ;gBAChB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,YAAY,IAAI;oBAC9C,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;aAChC;YACD,CAAC,CAAC,SAAS,CAAC;QAEhB,sFAAsF;QACtF,qDAAqD;QACrD,MAAM,YAAY,GAAG,OAAO,eAAe,KAAK,WAAW;YACvD,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE/C,MAAM,UAAU,GAAG,OAAO,eAAe,KAAK,WAAW;YACrD,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,cAAc;SAC3B,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,qBAAqB;QACjB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAA6C;QACxD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,QAAsC,CAAC;QAC3D,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACO,YAAY,CAAC,SAAiB,EAAE,KAAa;QACnD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,8BAAqB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS,uBAAuB,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,OAAmC,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAW;QACf,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAA,kCAAqB,EAAC,GAAG,EAAE;YAC1C,GAAG,+BAAkB;YACrB,cAAc,EAAE,KAAK,EAAG,kCAAkC;YAC1D,eAAe,EAAE,KAAK,CAAG,oCAAoC;SAChE,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,IAAI,8BAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,2BAA2B,aAAa,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAW;QACf,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAA,kCAAqB,EAAC,GAAG,EAAE;YAC1C,GAAG,+BAAkB;YACrB,cAAc,EAAE,KAAK,EAAG,kCAAkC;YAC1D,eAAe,EAAE,KAAK,CAAG,oCAAoC;SAChE,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,IAAI,8BAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,2BAA2B,aAAa,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,SAAiB,EAAE,OAAoD;QAC9E,IAAI,CAAC,cAAc,GAAG;YAClB,SAAS;YACT,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SACrB,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,iBAAiB;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,OAAgC;QACjD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,IAAI,8BAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,cAAc,GAAG;YAClB,GAAG,IAAI,CAAC,cAAc;YACtB,GAAG,OAAO;SACb,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;CACJ;AA9eD,4BA8eC"}
@@ -0,0 +1,24 @@
1
+ import { BaseView } from './base-view';
2
+ import { CardContent, CardActionVariant, HttpMethod } from '../types';
3
+ export declare class CardView extends BaseView {
4
+ constructor(viewId: string, title: string, processId?: string);
5
+ setSubtitle(subtitle: string): this;
6
+ setDescription(description: string): this;
7
+ setBadge(badge: string | undefined): this;
8
+ setImage(url: string, alt?: string): this;
9
+ clearImage(): this;
10
+ addStat(label: string, value: string): this;
11
+ clearStats(): this;
12
+ addSection(heading: string, body: string): this;
13
+ clearSections(): this;
14
+ addAction(text: string, method?: HttpMethod, options?: {
15
+ confirmMessage?: string;
16
+ href?: string;
17
+ icon?: string;
18
+ variant?: CardActionVariant;
19
+ }): this;
20
+ clearActions(): this;
21
+ setMetadata(meta: Record<string, unknown>): this;
22
+ getContent(): CardContent;
23
+ }
24
+ //# sourceMappingURL=card-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-view.d.ts","sourceRoot":"","sources":["../../src/core/card-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACH,WAAW,EAKX,iBAAiB,EACjB,UAAU,EACb,MAAM,UAAU,CAAC;AAKlB,qBAAa,QAAS,SAAQ,QAAQ;gBACtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAyB7D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMzC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAMzC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAezC,UAAU,IAAI,IAAI;IAMlB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB3C,UAAU,IAAI,IAAI;IAMlB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAe/C,aAAa,IAAI,IAAI;IAMrB,SAAS,CACL,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,UAAmB,EAC3B,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;KAAO,GACrG,IAAI;IAmBP,YAAY,IAAI,IAAI;IAMpB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKhD,UAAU,IAAI,WAAW;CAG5B"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CardView = void 0;
4
+ const base_view_1 = require("./base-view");
5
+ const errors_1 = require("../errors");
6
+ // CardView is a compact "product sheet" view that highlights a single item with stats, sections and actions.
7
+ class CardView extends base_view_1.BaseView {
8
+ constructor(viewId, title, processId) {
9
+ super({
10
+ id: viewId,
11
+ type: 'Card',
12
+ processId,
13
+ metadata: {
14
+ version: '1.0.0',
15
+ createdAt: new Date()
16
+ }
17
+ });
18
+ this.content = {
19
+ title,
20
+ subtitle: '',
21
+ description: '',
22
+ badge: undefined,
23
+ image: undefined,
24
+ stats: [],
25
+ sections: [],
26
+ actions: [],
27
+ meta: undefined
28
+ };
29
+ }
30
+ // Sets the small subtitle displayed under the main title.
31
+ setSubtitle(subtitle) {
32
+ this.content.subtitle = subtitle.trim();
33
+ return this;
34
+ }
35
+ // Provides the long-form description for the card body.
36
+ setDescription(description) {
37
+ this.content.description = description.trim();
38
+ return this;
39
+ }
40
+ // Displays a compact badge (e.g., "Nouveau") above the title.
41
+ setBadge(badge) {
42
+ this.content.badge = badge?.trim() || undefined;
43
+ return this;
44
+ }
45
+ // Attaches a hero image to the card header.
46
+ setImage(url, alt) {
47
+ const trimmedUrl = url.trim();
48
+ if (!trimmedUrl) {
49
+ throw new errors_1.InvalidParameterError('url', url, 'Image URL cannot be empty');
50
+ }
51
+ const image = {
52
+ url: trimmedUrl,
53
+ alt: alt?.trim()
54
+ };
55
+ this.content.image = image;
56
+ return this;
57
+ }
58
+ clearImage() {
59
+ this.content.image = undefined;
60
+ return this;
61
+ }
62
+ // Adds a key metric row (label/value) in the highlight area.
63
+ addStat(label, value) {
64
+ const trimmedLabel = label.trim();
65
+ const trimmedValue = value.trim();
66
+ if (!trimmedLabel || !trimmedValue) {
67
+ throw new errors_1.MissingRequiredParameterError('label and value');
68
+ }
69
+ this.content.stats.push({
70
+ label: trimmedLabel,
71
+ value: trimmedValue
72
+ });
73
+ return this;
74
+ }
75
+ clearStats() {
76
+ this.content.stats = [];
77
+ return this;
78
+ }
79
+ // Inserts a descriptive section below the highlights.
80
+ addSection(heading, body) {
81
+ const trimmedHeading = heading.trim();
82
+ const trimmedBody = body.trim();
83
+ if (!trimmedHeading || !trimmedBody) {
84
+ throw new errors_1.MissingRequiredParameterError('heading and body');
85
+ }
86
+ this.content.sections.push({
87
+ heading: trimmedHeading,
88
+ body: trimmedBody
89
+ });
90
+ return this;
91
+ }
92
+ clearSections() {
93
+ this.content.sections = [];
94
+ return this;
95
+ }
96
+ // Registers an action button displayed in the footer.
97
+ addAction(text, method = 'POST', options = {}) {
98
+ const trimmedText = text.trim();
99
+ if (!trimmedText) {
100
+ throw new errors_1.InvalidParameterError('text', text, 'Action text cannot be empty');
101
+ }
102
+ const action = {
103
+ text: trimmedText,
104
+ method,
105
+ confirmMessage: options.confirmMessage,
106
+ href: options.href?.trim(),
107
+ icon: options.icon?.trim(),
108
+ variant: options.variant
109
+ };
110
+ this.content.actions.push(action);
111
+ return this;
112
+ }
113
+ clearActions() {
114
+ this.content.actions = [];
115
+ return this;
116
+ }
117
+ // Stores arbitrary metadata the client may need.
118
+ setMetadata(meta) {
119
+ this.content.meta = { ...meta };
120
+ return this;
121
+ }
122
+ getContent() {
123
+ return this.content;
124
+ }
125
+ }
126
+ exports.CardView = CardView;
127
+ //# sourceMappingURL=card-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-view.js","sourceRoot":"","sources":["../../src/core/card-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { BaseView } from './base-view';
2
+ import { CarouselContent, CarouselSettings, CarouselSlide, CardAction, HttpMethod } from '../types';
3
+ export declare class CarouselView extends BaseView {
4
+ constructor(viewId: string, title: string, processId?: string);
5
+ setSubtitle(subtitle: string): this;
6
+ setSettings(settings: CarouselSettings): this;
7
+ addSlide(slide: CarouselSlide): this;
8
+ createSlide(id: string, title: string, description?: string, options?: {
9
+ imageUrl?: string;
10
+ imageAlt?: string;
11
+ badge?: string;
12
+ }): CarouselSlide;
13
+ addSlideAction(slideId: string, text: string, method?: HttpMethod, options?: {
14
+ confirmMessage?: string;
15
+ href?: string;
16
+ icon?: string;
17
+ variant?: CardAction['variant'];
18
+ }): this;
19
+ clearSlides(): this;
20
+ getContent(): CarouselContent;
21
+ }
22
+ //# sourceMappingURL=carousel-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel-view.d.ts","sourceRoot":"","sources":["../../src/core/carousel-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAKpG,qBAAa,YAAa,SAAQ,QAAQ;gBAC1B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAyB7D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAM7C,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiBpC,WAAW,CACP,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GACvE,aAAa;IAkBhB,cAAc,CACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,UAAmB,EAC3B,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;KAAO,GACzG,IAAI;IAuBP,WAAW,IAAI,IAAI;IAMnB,UAAU,IAAI,eAAe;CAGhC"}