@contractspec/lib.example-shared-ui 6.0.16 → 6.0.18

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