@contractspec/lib.example-shared-ui 1.11.0 → 1.13.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 (121) hide show
  1. package/.turbo/turbo-build.log +86 -11
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +27 -0
  4. package/dist/EvolutionDashboard.d.ts +11 -0
  5. package/dist/EvolutionDashboard.d.ts.map +1 -0
  6. package/dist/EvolutionDashboard.js +804 -0
  7. package/dist/EvolutionSidebar.d.ts +19 -0
  8. package/dist/EvolutionSidebar.d.ts.map +1 -0
  9. package/dist/EvolutionSidebar.js +532 -0
  10. package/dist/LocalDataIndicator.d.ts +2 -0
  11. package/dist/LocalDataIndicator.d.ts.map +1 -0
  12. package/dist/LocalDataIndicator.js +63 -0
  13. package/dist/MarkdownView.d.ts +20 -0
  14. package/dist/MarkdownView.d.ts.map +1 -0
  15. package/dist/MarkdownView.js +304 -0
  16. package/dist/OverlayContextProvider.d.ts +79 -0
  17. package/dist/OverlayContextProvider.d.ts.map +1 -0
  18. package/dist/OverlayContextProvider.js +203 -0
  19. package/dist/PersonalizationInsights.d.ts +14 -0
  20. package/dist/PersonalizationInsights.d.ts.map +1 -0
  21. package/dist/PersonalizationInsights.js +456 -0
  22. package/dist/SaveToStudioButton.d.ts +8 -0
  23. package/dist/SaveToStudioButton.d.ts.map +1 -0
  24. package/dist/SaveToStudioButton.js +74 -0
  25. package/dist/SpecEditorPanel.d.ts +23 -0
  26. package/dist/SpecEditorPanel.d.ts.map +1 -0
  27. package/dist/SpecEditorPanel.js +720 -0
  28. package/dist/TemplateShell.d.ts +13 -0
  29. package/dist/TemplateShell.d.ts.map +1 -0
  30. package/dist/TemplateShell.js +190 -0
  31. package/dist/browser/EvolutionDashboard.js +803 -0
  32. package/dist/browser/EvolutionSidebar.js +531 -0
  33. package/dist/browser/LocalDataIndicator.js +62 -0
  34. package/dist/browser/MarkdownView.js +303 -0
  35. package/dist/browser/OverlayContextProvider.js +202 -0
  36. package/dist/browser/PersonalizationInsights.js +455 -0
  37. package/dist/browser/SaveToStudioButton.js +73 -0
  38. package/dist/browser/SpecEditorPanel.js +719 -0
  39. package/dist/browser/TemplateShell.js +189 -0
  40. package/dist/browser/hooks/index.js +1516 -0
  41. package/dist/browser/hooks/useBehaviorTracking.js +157 -0
  42. package/dist/browser/hooks/useEvolution.js +260 -0
  43. package/dist/browser/hooks/useRegistryTemplates.js +31 -0
  44. package/dist/browser/hooks/useSpecContent.js +579 -0
  45. package/dist/browser/hooks/useWorkflowComposer.js +493 -0
  46. package/dist/browser/index.js +3497 -0
  47. package/dist/browser/lib/component-registry.js +42 -0
  48. package/dist/browser/lib/runtime-context.js +15 -0
  49. package/dist/browser/lib/types.js +0 -0
  50. package/dist/browser/overlay-types.js +0 -0
  51. package/dist/browser/utils/fetchPresentationData.js +15 -0
  52. package/dist/browser/utils/generateSpecFromTemplate.js +423 -0
  53. package/dist/browser/utils/index.js +437 -0
  54. package/dist/hooks/index.d.ts +6 -0
  55. package/dist/hooks/index.d.ts.map +1 -0
  56. package/dist/hooks/index.js +1517 -0
  57. package/dist/hooks/useBehaviorTracking.d.ts +56 -0
  58. package/dist/hooks/useBehaviorTracking.d.ts.map +1 -0
  59. package/dist/hooks/useBehaviorTracking.js +158 -0
  60. package/dist/hooks/useEvolution.d.ts +111 -0
  61. package/dist/hooks/useEvolution.d.ts.map +1 -0
  62. package/dist/hooks/useEvolution.js +261 -0
  63. package/dist/hooks/useRegistryTemplates.d.ts +10 -0
  64. package/dist/hooks/useRegistryTemplates.d.ts.map +1 -0
  65. package/dist/hooks/useRegistryTemplates.js +32 -0
  66. package/dist/hooks/useSpecContent.d.ts +41 -0
  67. package/dist/hooks/useSpecContent.d.ts.map +1 -0
  68. package/dist/hooks/useSpecContent.js +580 -0
  69. package/dist/hooks/useWorkflowComposer.d.ts +94 -0
  70. package/dist/hooks/useWorkflowComposer.d.ts.map +1 -0
  71. package/dist/hooks/useWorkflowComposer.js +494 -0
  72. package/dist/index.d.ts +16 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +3498 -0
  75. package/dist/lib/component-registry.d.ts +18 -0
  76. package/dist/lib/component-registry.d.ts.map +1 -0
  77. package/dist/lib/component-registry.js +43 -0
  78. package/dist/lib/runtime-context.d.ts +29 -0
  79. package/dist/lib/runtime-context.d.ts.map +1 -0
  80. package/dist/lib/runtime-context.js +16 -0
  81. package/dist/lib/types.d.ts +69 -0
  82. package/dist/lib/types.d.ts.map +1 -0
  83. package/dist/lib/types.js +1 -0
  84. package/dist/node/EvolutionDashboard.js +803 -0
  85. package/dist/node/EvolutionSidebar.js +531 -0
  86. package/dist/node/LocalDataIndicator.js +62 -0
  87. package/dist/node/MarkdownView.js +303 -0
  88. package/dist/node/OverlayContextProvider.js +202 -0
  89. package/dist/node/PersonalizationInsights.js +455 -0
  90. package/dist/node/SaveToStudioButton.js +73 -0
  91. package/dist/node/SpecEditorPanel.js +719 -0
  92. package/dist/node/TemplateShell.js +189 -0
  93. package/dist/node/hooks/index.js +1516 -0
  94. package/dist/node/hooks/useBehaviorTracking.js +157 -0
  95. package/dist/node/hooks/useEvolution.js +260 -0
  96. package/dist/node/hooks/useRegistryTemplates.js +31 -0
  97. package/dist/node/hooks/useSpecContent.js +579 -0
  98. package/dist/node/hooks/useWorkflowComposer.js +493 -0
  99. package/dist/node/index.js +3497 -0
  100. package/dist/node/lib/component-registry.js +42 -0
  101. package/dist/node/lib/runtime-context.js +15 -0
  102. package/dist/node/lib/types.js +0 -0
  103. package/dist/node/overlay-types.js +0 -0
  104. package/dist/node/utils/fetchPresentationData.js +15 -0
  105. package/dist/node/utils/generateSpecFromTemplate.js +423 -0
  106. package/dist/node/utils/index.js +437 -0
  107. package/dist/overlay-types.d.ts +41 -0
  108. package/dist/overlay-types.d.ts.map +1 -0
  109. package/dist/overlay-types.js +1 -0
  110. package/dist/utils/fetchPresentationData.d.ts +34 -0
  111. package/dist/utils/fetchPresentationData.d.ts.map +1 -0
  112. package/dist/utils/fetchPresentationData.js +16 -0
  113. package/dist/utils/generateSpecFromTemplate.d.ts +7 -0
  114. package/dist/utils/generateSpecFromTemplate.d.ts.map +1 -0
  115. package/dist/utils/generateSpecFromTemplate.js +424 -0
  116. package/dist/utils/index.d.ts +3 -0
  117. package/dist/utils/index.d.ts.map +1 -0
  118. package/dist/utils/index.js +438 -0
  119. package/package.json +219 -14
  120. package/.turbo/turbo-build$colon$bundle.log +0 -9
  121. package/dist/index.mjs +0 -3121
@@ -0,0 +1,494 @@
1
+ // @bun
2
+ // src/hooks/useWorkflowComposer.ts
3
+ import { useCallback, useEffect, useMemo, useState } from "react";
4
+ "use client";
5
+ function useWorkflowComposer(templateId) {
6
+ const [selectedWorkflow, setSelectedWorkflow] = useState(null);
7
+ const [extensions, setExtensions] = useState([]);
8
+ const [loading, _setLoading] = useState(false);
9
+ const [error, _setError] = useState(null);
10
+ const baseWorkflows = useMemo(() => getTemplateWorkflows(templateId), [templateId]);
11
+ useEffect(() => {
12
+ const firstWorkflow = baseWorkflows[0];
13
+ if (baseWorkflows.length > 0 && !selectedWorkflow && firstWorkflow) {
14
+ setSelectedWorkflow(firstWorkflow.meta.key);
15
+ }
16
+ }, [baseWorkflows, selectedWorkflow]);
17
+ const currentBase = useMemo(() => {
18
+ return baseWorkflows.find((w) => w.meta.key === selectedWorkflow) ?? null;
19
+ }, [baseWorkflows, selectedWorkflow]);
20
+ const compose = useCallback((scope) => {
21
+ if (!currentBase)
22
+ return null;
23
+ const applicableExtensions = extensions.filter((ext) => ext.workflow === currentBase.meta.key).filter((ext) => matchesScope(ext, scope)).sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));
24
+ if (applicableExtensions.length === 0) {
25
+ return currentBase;
26
+ }
27
+ let composedWorkflow = { ...currentBase, steps: [...currentBase.steps] };
28
+ for (const extension of applicableExtensions) {
29
+ composedWorkflow = applyExtension(composedWorkflow, extension);
30
+ }
31
+ return composedWorkflow;
32
+ }, [currentBase, extensions]);
33
+ const workflow = useMemo(() => compose(), [compose]);
34
+ const selectWorkflow = useCallback((workflowName) => {
35
+ setSelectedWorkflow(workflowName);
36
+ }, []);
37
+ const addExtension = useCallback((extension) => {
38
+ setExtensions((prev) => [...prev, extension]);
39
+ }, []);
40
+ const removeExtension = useCallback((workflowName, index) => {
41
+ setExtensions((prev) => {
42
+ const forWorkflow = prev.filter((e) => e.workflow === workflowName);
43
+ const others = prev.filter((e) => e.workflow !== workflowName);
44
+ forWorkflow.splice(index, 1);
45
+ return [...others, ...forWorkflow];
46
+ });
47
+ }, []);
48
+ const generateSpecCode = useCallback(() => {
49
+ const composed = workflow;
50
+ if (!composed) {
51
+ return "// No workflow selected";
52
+ }
53
+ const stepsCode = composed.steps.map((step) => ` {
54
+ id: '${step.id}',
55
+ name: '${step.name}',
56
+ type: '${step.type}',${step.description ? `
57
+ description: '${step.description}',` : ""}${step.next ? `
58
+ next: ${JSON.stringify(step.next)},` : ""}${step.condition ? `
59
+ condition: '${step.condition}',` : ""}${step.timeout ? `
60
+ timeout: ${step.timeout},` : ""}${step.retries ? `
61
+ retries: ${step.retries},` : ""}${step.onError ? `
62
+ onError: '${step.onError}',` : ""}
63
+ }`).join(`,
64
+ `);
65
+ const extensionsCode = extensions.length > 0 ? `
66
+
67
+ // Extensions applied:
68
+ ${extensions.map((ext) => `// - ${ext.workflow} (priority: ${ext.priority ?? 0})${ext.customSteps?.length ? ` +${ext.customSteps.length} steps` : ""}${ext.hiddenSteps?.length ? ` -${ext.hiddenSteps.length} hidden` : ""}`).join(`
69
+ `)}` : "";
70
+ return `// Workflow Spec: ${composed.meta.key} v${composed.meta.version}
71
+ // Generated from ${templateId} template
72
+ ${extensionsCode}
73
+
74
+ import { workflowSpec } from '@contractspec/lib.contracts/workflow';
75
+
76
+ export const ${toCamelCase(composed.meta.key)}Workflow = workflowSpec({
77
+ meta: {
78
+ key: '${composed.meta.key}',
79
+ version: ${composed.meta.version},${composed.meta.description ? `
80
+ description: '${composed.meta.description}',` : ""}
81
+ },
82
+ start: '${composed.start}',
83
+ steps: [
84
+ ${stepsCode}
85
+ ],${composed.context ? `
86
+ context: ${JSON.stringify(composed.context, null, 2)},` : ""}
87
+ });
88
+ `;
89
+ }, [workflow, extensions, templateId]);
90
+ return {
91
+ workflow,
92
+ baseWorkflows,
93
+ extensions,
94
+ selectWorkflow,
95
+ addExtension,
96
+ removeExtension,
97
+ compose,
98
+ generateSpecCode,
99
+ loading,
100
+ error
101
+ };
102
+ }
103
+ function matchesScope(extension, scope) {
104
+ if (!scope)
105
+ return true;
106
+ if (extension.tenantId && extension.tenantId !== scope.tenantId) {
107
+ return false;
108
+ }
109
+ if (extension.role && extension.role !== scope.role) {
110
+ return false;
111
+ }
112
+ if (extension.device && extension.device !== scope.device) {
113
+ return false;
114
+ }
115
+ return true;
116
+ }
117
+ function applyExtension(workflow, extension) {
118
+ let steps = [...workflow.steps];
119
+ if (extension.hiddenSteps) {
120
+ steps = steps.filter((s) => !extension.hiddenSteps?.includes(s.id));
121
+ }
122
+ if (extension.customSteps) {
123
+ for (const injection of extension.customSteps) {
124
+ const stepToInject = {
125
+ ...injection.inject,
126
+ id: injection.id ?? injection.inject.id
127
+ };
128
+ if (injection.after) {
129
+ const afterIndex = steps.findIndex((s) => s.id === injection.after);
130
+ if (afterIndex !== -1) {
131
+ steps.splice(afterIndex + 1, 0, stepToInject);
132
+ }
133
+ } else if (injection.before) {
134
+ const beforeIndex = steps.findIndex((s) => s.id === injection.before);
135
+ if (beforeIndex !== -1) {
136
+ steps.splice(beforeIndex, 0, stepToInject);
137
+ }
138
+ } else {
139
+ steps.push(stepToInject);
140
+ }
141
+ }
142
+ }
143
+ return { ...workflow, steps };
144
+ }
145
+ function toCamelCase(str) {
146
+ return str.replace(/[^a-zA-Z0-9]+(.)/g, (_, c) => c.toUpperCase()).replace(/^./, (c) => c.toLowerCase());
147
+ }
148
+ function getTemplateWorkflows(templateId) {
149
+ const templateWorkflows = {
150
+ "crm-pipeline": [
151
+ {
152
+ meta: {
153
+ key: "deal.qualification",
154
+ version: "1.0.0",
155
+ description: "Deal qualification workflow"
156
+ },
157
+ start: "lead-received",
158
+ steps: [
159
+ {
160
+ id: "lead-received",
161
+ name: "Lead Received",
162
+ type: "action",
163
+ description: "New lead enters the pipeline",
164
+ next: "qualify-lead"
165
+ },
166
+ {
167
+ id: "qualify-lead",
168
+ name: "Qualify Lead",
169
+ type: "decision",
170
+ description: "Determine if lead meets qualification criteria",
171
+ next: ["qualified", "disqualified"],
172
+ condition: "lead.score >= threshold"
173
+ },
174
+ {
175
+ id: "qualified",
176
+ name: "Lead Qualified",
177
+ type: "action",
178
+ next: "assign-rep"
179
+ },
180
+ {
181
+ id: "disqualified",
182
+ name: "Lead Disqualified",
183
+ type: "end"
184
+ },
185
+ {
186
+ id: "assign-rep",
187
+ name: "Assign Sales Rep",
188
+ type: "action",
189
+ next: "complete"
190
+ },
191
+ {
192
+ id: "complete",
193
+ name: "Workflow Complete",
194
+ type: "end"
195
+ }
196
+ ]
197
+ },
198
+ {
199
+ meta: {
200
+ key: "deal.closing",
201
+ version: "1.0.0",
202
+ description: "Deal closing workflow"
203
+ },
204
+ start: "proposal-sent",
205
+ steps: [
206
+ {
207
+ id: "proposal-sent",
208
+ name: "Proposal Sent",
209
+ type: "action",
210
+ next: "wait-response"
211
+ },
212
+ {
213
+ id: "wait-response",
214
+ name: "Wait for Response",
215
+ type: "wait",
216
+ timeout: 604800000,
217
+ next: "negotiate",
218
+ onError: "follow-up"
219
+ },
220
+ {
221
+ id: "follow-up",
222
+ name: "Follow Up",
223
+ type: "action",
224
+ next: "wait-response",
225
+ retries: 3
226
+ },
227
+ {
228
+ id: "negotiate",
229
+ name: "Negotiation",
230
+ type: "action",
231
+ next: "finalize"
232
+ },
233
+ {
234
+ id: "finalize",
235
+ name: "Finalize Deal",
236
+ type: "decision",
237
+ next: ["won", "lost"],
238
+ condition: "deal.accepted"
239
+ },
240
+ {
241
+ id: "won",
242
+ name: "Deal Won",
243
+ type: "end"
244
+ },
245
+ {
246
+ id: "lost",
247
+ name: "Deal Lost",
248
+ type: "end"
249
+ }
250
+ ]
251
+ }
252
+ ],
253
+ "saas-boilerplate": [
254
+ {
255
+ meta: {
256
+ key: "user.onboarding",
257
+ version: "1.0.0",
258
+ description: "User onboarding workflow"
259
+ },
260
+ start: "signup",
261
+ steps: [
262
+ {
263
+ id: "signup",
264
+ name: "User Signup",
265
+ type: "action",
266
+ next: "verify-email"
267
+ },
268
+ {
269
+ id: "verify-email",
270
+ name: "Verify Email",
271
+ type: "wait",
272
+ timeout: 86400000,
273
+ next: "profile-setup",
274
+ onError: "resend-verification"
275
+ },
276
+ {
277
+ id: "resend-verification",
278
+ name: "Resend Verification",
279
+ type: "action",
280
+ next: "verify-email",
281
+ retries: 2
282
+ },
283
+ {
284
+ id: "profile-setup",
285
+ name: "Setup Profile",
286
+ type: "action",
287
+ next: "onboarding-tour"
288
+ },
289
+ {
290
+ id: "onboarding-tour",
291
+ name: "Onboarding Tour",
292
+ type: "action",
293
+ next: "complete"
294
+ },
295
+ {
296
+ id: "complete",
297
+ name: "Onboarding Complete",
298
+ type: "end"
299
+ }
300
+ ]
301
+ }
302
+ ],
303
+ "agent-console": [
304
+ {
305
+ meta: {
306
+ key: "agent.execution",
307
+ version: "1.0.0",
308
+ description: "Agent execution workflow"
309
+ },
310
+ start: "receive-task",
311
+ steps: [
312
+ {
313
+ id: "receive-task",
314
+ name: "Receive Task",
315
+ type: "action",
316
+ next: "plan-execution"
317
+ },
318
+ {
319
+ id: "plan-execution",
320
+ name: "Plan Execution",
321
+ type: "action",
322
+ next: "execute-steps"
323
+ },
324
+ {
325
+ id: "execute-steps",
326
+ name: "Execute Steps",
327
+ type: "parallel",
328
+ next: ["tool-call", "observe", "reason"]
329
+ },
330
+ {
331
+ id: "tool-call",
332
+ name: "Tool Call",
333
+ type: "action",
334
+ next: "evaluate"
335
+ },
336
+ {
337
+ id: "observe",
338
+ name: "Observe",
339
+ type: "action",
340
+ next: "evaluate"
341
+ },
342
+ {
343
+ id: "reason",
344
+ name: "Reason",
345
+ type: "action",
346
+ next: "evaluate"
347
+ },
348
+ {
349
+ id: "evaluate",
350
+ name: "Evaluate Result",
351
+ type: "decision",
352
+ condition: "task.isComplete",
353
+ next: ["complete", "execute-steps"]
354
+ },
355
+ {
356
+ id: "complete",
357
+ name: "Task Complete",
358
+ type: "end"
359
+ }
360
+ ]
361
+ }
362
+ ],
363
+ "todos-app": [
364
+ {
365
+ meta: {
366
+ key: "task.lifecycle",
367
+ version: "1.0.0",
368
+ description: "Task lifecycle workflow"
369
+ },
370
+ start: "created",
371
+ steps: [
372
+ {
373
+ id: "created",
374
+ name: "Task Created",
375
+ type: "action",
376
+ next: "in-progress"
377
+ },
378
+ {
379
+ id: "in-progress",
380
+ name: "In Progress",
381
+ type: "action",
382
+ next: "review"
383
+ },
384
+ {
385
+ id: "review",
386
+ name: "Review",
387
+ type: "decision",
388
+ condition: "task.approved",
389
+ next: ["done", "in-progress"]
390
+ },
391
+ {
392
+ id: "done",
393
+ name: "Done",
394
+ type: "end"
395
+ }
396
+ ]
397
+ }
398
+ ],
399
+ "messaging-app": [
400
+ {
401
+ meta: {
402
+ key: "message.delivery",
403
+ version: "1.0.0",
404
+ description: "Message delivery workflow"
405
+ },
406
+ start: "compose",
407
+ steps: [
408
+ {
409
+ id: "compose",
410
+ name: "Compose Message",
411
+ type: "action",
412
+ next: "send"
413
+ },
414
+ {
415
+ id: "send",
416
+ name: "Send Message",
417
+ type: "action",
418
+ next: "deliver"
419
+ },
420
+ {
421
+ id: "deliver",
422
+ name: "Deliver",
423
+ type: "decision",
424
+ condition: "recipient.online",
425
+ next: ["delivered", "queue"]
426
+ },
427
+ {
428
+ id: "queue",
429
+ name: "Queue for Delivery",
430
+ type: "wait",
431
+ next: "deliver"
432
+ },
433
+ {
434
+ id: "delivered",
435
+ name: "Message Delivered",
436
+ type: "action",
437
+ next: "read"
438
+ },
439
+ {
440
+ id: "read",
441
+ name: "Message Read",
442
+ type: "end"
443
+ }
444
+ ]
445
+ }
446
+ ],
447
+ "recipe-app-i18n": [
448
+ {
449
+ meta: {
450
+ key: "recipe.creation",
451
+ version: "1.0.0",
452
+ description: "Recipe creation workflow"
453
+ },
454
+ start: "draft",
455
+ steps: [
456
+ {
457
+ id: "draft",
458
+ name: "Draft Recipe",
459
+ type: "action",
460
+ next: "add-ingredients"
461
+ },
462
+ {
463
+ id: "add-ingredients",
464
+ name: "Add Ingredients",
465
+ type: "action",
466
+ next: "add-steps"
467
+ },
468
+ {
469
+ id: "add-steps",
470
+ name: "Add Steps",
471
+ type: "action",
472
+ next: "review"
473
+ },
474
+ {
475
+ id: "review",
476
+ name: "Review Recipe",
477
+ type: "decision",
478
+ condition: "recipe.isComplete",
479
+ next: ["publish", "draft"]
480
+ },
481
+ {
482
+ id: "publish",
483
+ name: "Publish Recipe",
484
+ type: "end"
485
+ }
486
+ ]
487
+ }
488
+ ]
489
+ };
490
+ return templateWorkflows[templateId] ?? [];
491
+ }
492
+ export {
493
+ useWorkflowComposer
494
+ };
@@ -0,0 +1,16 @@
1
+ export * from './TemplateShell';
2
+ export * from './LocalDataIndicator';
3
+ export * from './SaveToStudioButton';
4
+ export * from './overlay-types';
5
+ export * from './MarkdownView';
6
+ export * from './SpecEditorPanel';
7
+ export * from './EvolutionDashboard';
8
+ export * from './EvolutionSidebar';
9
+ export * from './OverlayContextProvider';
10
+ export * from './PersonalizationInsights';
11
+ export * from './hooks';
12
+ export * from './utils';
13
+ export * from './lib/runtime-context';
14
+ export * from './lib/component-registry';
15
+ export * from './lib/types';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC"}