@notmrabhi/flowforge 0.1.21 → 0.1.22
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/dist/GatewayBranchEdge-9YF32wwN.js +1 -0
- package/dist/GatewayBranchEdge-Dxoy5B1A.js +1264 -0
- package/dist/SchemaBuilderDrawer-157p-2Vj.js +1136 -0
- package/dist/SchemaBuilderDrawer-Wje7pVrn.js +1 -0
- package/dist/bpmn-CcuE2X_Q.js +2 -0
- package/dist/bpmn-CtfWDaOY.js +33 -0
- package/dist/canvas.cjs +1 -0
- package/dist/canvas.d.ts +809 -0
- package/dist/canvas.js +28 -0
- package/dist/canvasTokens-CAD6G24b.js +32 -0
- package/dist/canvasTokens-gKNYrPl4.js +1 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.ts +374 -0
- package/dist/core.js +24 -0
- package/dist/defaultUi.cjs +1 -0
- package/dist/defaultUi.d.ts +83 -0
- package/dist/defaultUi.js +18 -0
- package/dist/form.cjs +1 -0
- package/dist/form.d.ts +857 -0
- package/dist/form.js +44 -0
- package/dist/index-B31-Y5uO.js +11 -0
- package/dist/index-B3aHpb84.js +13 -0
- package/dist/index-BU09HbVh.js +10176 -0
- package/dist/index-BnzttJ4w.js +13758 -0
- package/dist/index-BysKSEtZ.js +1 -0
- package/dist/index-CQ0cVcHp.js +2 -0
- package/dist/index-CkjEllpd.js +1 -0
- package/dist/index-Codx5QwP.js +41 -0
- package/dist/index-Cw9DC-tf.js +76 -0
- package/dist/index-CzPi8KQC.js +1310 -0
- package/dist/index-D14V8rKX.js +1 -0
- package/dist/index-Da5NHCS2.js +8132 -0
- package/dist/index-a1IOaYsW.js +9 -0
- package/dist/index-a3QMaedZ.js +2553 -0
- package/dist/index-gtgq_241.js +3 -0
- package/dist/index-l6kvDx-m.js +1360 -0
- package/dist/index-lcviy90e.js +613 -0
- package/dist/index-wOnYb3DO.js +567 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +1409 -0
- package/dist/index.js +107 -0
- package/dist/messages-CO299wPN.js +22 -0
- package/dist/messages-O9Tw_XXR.js +1 -0
- package/dist/nodeRegistry.cjs +1 -0
- package/dist/nodeRegistry.d.ts +334 -0
- package/dist/nodeRegistry.js +555 -0
- package/dist/style.css +6 -0
- package/dist/templateRegistry.cjs +1 -0
- package/dist/templateRegistry.d.ts +83 -0
- package/dist/templateRegistry.js +43 -0
- package/dist/templateSkeletons-D2ecxpVH.js +2954 -0
- package/dist/templateSkeletons-D5dYuslG.js +1 -0
- package/package.json +1 -1
package/dist/canvas.d.ts
ADDED
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
import { AnySchema } from 'yup';
|
|
2
|
+
import { default as default_2 } from 'react';
|
|
3
|
+
import { EdgeProps } from 'reactflow';
|
|
4
|
+
import { EdgeTypes } from 'reactflow';
|
|
5
|
+
import { JSX as JSX_2 } from 'react/jsx-runtime';
|
|
6
|
+
import { NodeProps } from 'reactflow';
|
|
7
|
+
import { NodeTypes } from 'reactflow';
|
|
8
|
+
import { ReactNode } from 'react';
|
|
9
|
+
|
|
10
|
+
export declare const accessRequestSkeleton: WorkflowState;
|
|
11
|
+
|
|
12
|
+
export declare const ActionNode: ({ id, data }: NodeProps) => JSX_2.Element;
|
|
13
|
+
|
|
14
|
+
export declare interface AddStepContext {
|
|
15
|
+
edgeId: string;
|
|
16
|
+
nodeId: string;
|
|
17
|
+
sourceNodeId: string;
|
|
18
|
+
targetNodeId: string;
|
|
19
|
+
position: 'between';
|
|
20
|
+
referenceNodeId: string;
|
|
21
|
+
referenceNodeType?: string;
|
|
22
|
+
stepVisibility?: unknown;
|
|
23
|
+
filterId?: string;
|
|
24
|
+
branch?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export declare const ApprovalNode: ({ id, data }: NodeProps) => JSX_2.Element;
|
|
28
|
+
|
|
29
|
+
export declare interface BpmnElement {
|
|
30
|
+
id: string;
|
|
31
|
+
$type: string;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare interface BpmnElement_2 {
|
|
36
|
+
id: string;
|
|
37
|
+
$type: string;
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export declare interface BpmnSaveOptions {
|
|
42
|
+
processId?: string;
|
|
43
|
+
processName?: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare type BranchChain = CanvasSlot_2[];
|
|
47
|
+
|
|
48
|
+
declare type BranchChain_2 = CanvasSlot_3[];
|
|
49
|
+
|
|
50
|
+
declare type BranchChain_3 = CanvasSlot[];
|
|
51
|
+
|
|
52
|
+
export declare interface BranchMap {
|
|
53
|
+
[filterId: string]: {
|
|
54
|
+
[branchKey: string]: BranchChain_3;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare interface BranchMap_2 {
|
|
59
|
+
[filterId: string]: {
|
|
60
|
+
[branchKey: string]: BranchChain;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare interface BranchMap_3 {
|
|
65
|
+
[filterId: string]: {
|
|
66
|
+
[branchKey: string]: BranchChain_2;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export declare const builtInNodeTypes: NodeTypes;
|
|
71
|
+
|
|
72
|
+
export declare interface CanvasSlot {
|
|
73
|
+
id: string;
|
|
74
|
+
kind: SlotKind_3;
|
|
75
|
+
reactFlowType: string;
|
|
76
|
+
descriptorType?: string;
|
|
77
|
+
formData?: Record<string, unknown>;
|
|
78
|
+
nodeData?: Record<string, unknown>;
|
|
79
|
+
deletable?: boolean;
|
|
80
|
+
label?: string;
|
|
81
|
+
/** Maps branch key → display label. e.g. { pass: 'Pass', fail: 'Fail' } */
|
|
82
|
+
branchLabels?: Record<string, string>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
declare interface CanvasSlot_2 {
|
|
86
|
+
id: string;
|
|
87
|
+
kind: SlotKind;
|
|
88
|
+
reactFlowType: string;
|
|
89
|
+
descriptorType?: string;
|
|
90
|
+
formData?: Record<string, unknown>;
|
|
91
|
+
nodeData?: Record<string, unknown>;
|
|
92
|
+
deletable?: boolean;
|
|
93
|
+
label?: string;
|
|
94
|
+
/** Maps branch key → display label. e.g. { pass: 'Pass', fail: 'Fail' } */
|
|
95
|
+
branchLabels?: Record<string, string>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
declare interface CanvasSlot_3 {
|
|
99
|
+
id: string;
|
|
100
|
+
kind: SlotKind_2;
|
|
101
|
+
reactFlowType: string;
|
|
102
|
+
descriptorType?: string;
|
|
103
|
+
formData?: Record<string, unknown>;
|
|
104
|
+
nodeData?: Record<string, unknown>;
|
|
105
|
+
deletable?: boolean;
|
|
106
|
+
label?: string;
|
|
107
|
+
/** Maps branch key → display label. e.g. { pass: 'Pass', fail: 'Fail' } */
|
|
108
|
+
branchLabels?: Record<string, string>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** One column in a per-field condition row */
|
|
112
|
+
declare interface ConditionFieldDef {
|
|
113
|
+
/** Key used to store this column's value in ConditionEntry */
|
|
114
|
+
id: string;
|
|
115
|
+
/**
|
|
116
|
+
* 'select' — native <select> with user-supplied options
|
|
117
|
+
* 'operator' — native <select> pre-filled with the standard operator list (no options needed)
|
|
118
|
+
* 'text' — plain <input>
|
|
119
|
+
* any other string — falls back to <input>
|
|
120
|
+
*/
|
|
121
|
+
type: 'select' | 'operator' | 'text' | string;
|
|
122
|
+
colSpan?: number;
|
|
123
|
+
label?: string;
|
|
124
|
+
placeholder?: string;
|
|
125
|
+
/** Options for select columns — user defines these, renderer just renders them */
|
|
126
|
+
options?: Array<{
|
|
127
|
+
value: string;
|
|
128
|
+
label: string;
|
|
129
|
+
}>;
|
|
130
|
+
/** When true, renders a FormulaInput chip editor instead of a plain <input> */
|
|
131
|
+
formula?: boolean;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** One column in a per-field condition row */
|
|
135
|
+
declare interface ConditionFieldDef_2 {
|
|
136
|
+
/** Key used to store this column's value in ConditionEntry */
|
|
137
|
+
id: string;
|
|
138
|
+
/**
|
|
139
|
+
* 'select' — native <select> with user-supplied options
|
|
140
|
+
* 'operator' — native <select> pre-filled with the standard operator list (no options needed)
|
|
141
|
+
* 'text' — plain <input>
|
|
142
|
+
* any other string — falls back to <input>
|
|
143
|
+
*/
|
|
144
|
+
type: 'select' | 'operator' | 'text' | string;
|
|
145
|
+
colSpan?: number;
|
|
146
|
+
label?: string;
|
|
147
|
+
placeholder?: string;
|
|
148
|
+
/** Options for select columns — user defines these, renderer just renders them */
|
|
149
|
+
options?: Array<{
|
|
150
|
+
value: string;
|
|
151
|
+
label: string;
|
|
152
|
+
}>;
|
|
153
|
+
/** When true, renders a FormulaInput chip editor instead of a plain <input> */
|
|
154
|
+
formula?: boolean;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export declare const defaultFlowForgeMessages: FlowForgeMessages;
|
|
158
|
+
|
|
159
|
+
export declare interface DmnDefinition {
|
|
160
|
+
id: string;
|
|
161
|
+
[key: string]: unknown;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
declare interface DmnDefinition_2 {
|
|
165
|
+
id: string;
|
|
166
|
+
[key: string]: unknown;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export declare const EdgeWithPlusLabel: ({ id: edgeId, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, source, target, data, }: EdgeProps<EdgeWithPlusLabelData>) => JSX_2.Element;
|
|
170
|
+
|
|
171
|
+
export declare interface EdgeWithPlusLabelData {
|
|
172
|
+
label?: string;
|
|
173
|
+
onAddStepClick?: (sourceNodeId: string, context: AddStepContext) => void;
|
|
174
|
+
referenceNodeType?: string;
|
|
175
|
+
stepVisibility?: unknown;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export declare const EndNode: () => JSX_2.Element;
|
|
179
|
+
|
|
180
|
+
export declare interface ExecutionRecord {
|
|
181
|
+
id: string;
|
|
182
|
+
workflowId?: string;
|
|
183
|
+
triggeredBy?: string;
|
|
184
|
+
triggeredAt: string;
|
|
185
|
+
status: ExecutionStatus;
|
|
186
|
+
inputs?: Record<string, unknown>;
|
|
187
|
+
steps: ExecutionStep[];
|
|
188
|
+
completedAt?: string;
|
|
189
|
+
error?: string;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export declare type ExecutionStatus = 'running' | 'success' | 'failed' | 'cancelled';
|
|
193
|
+
|
|
194
|
+
export declare interface ExecutionStep {
|
|
195
|
+
nodeId: string;
|
|
196
|
+
nodeType?: string;
|
|
197
|
+
label?: string;
|
|
198
|
+
startedAt: string;
|
|
199
|
+
completedAt?: string;
|
|
200
|
+
status: StepStatus;
|
|
201
|
+
inputs?: Record<string, unknown>;
|
|
202
|
+
outputs?: Record<string, unknown>;
|
|
203
|
+
branchTaken?: string;
|
|
204
|
+
error?: string;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** Condition definition attached to a FieldDescriptor */
|
|
208
|
+
declare interface FieldConditionDef {
|
|
209
|
+
fields: ConditionFieldDef[];
|
|
210
|
+
/** Enables nested condition groups. Defaults to false. */
|
|
211
|
+
allowGroups?: boolean;
|
|
212
|
+
/** Optional depth limit for nested groups when allowGroups is true. */
|
|
213
|
+
maxGroupDepth?: number;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Condition definition attached to a FieldDescriptor */
|
|
217
|
+
declare interface FieldConditionDef_2 {
|
|
218
|
+
fields: ConditionFieldDef_2[];
|
|
219
|
+
/** Enables nested condition groups. Defaults to false. */
|
|
220
|
+
allowGroups?: boolean;
|
|
221
|
+
/** Optional depth limit for nested groups when allowGroups is true. */
|
|
222
|
+
maxGroupDepth?: number;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
declare interface FieldContext {
|
|
226
|
+
values: Record<string, unknown>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
declare interface FieldContext_2 {
|
|
230
|
+
values: Record<string, unknown>;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
declare interface FieldDescriptor {
|
|
234
|
+
/**
|
|
235
|
+
* The formik key for this field.
|
|
236
|
+
* Use `id` (preferred) or `name` — both are accepted.
|
|
237
|
+
* `id` takes precedence if both are provided.
|
|
238
|
+
*/
|
|
239
|
+
id?: string;
|
|
240
|
+
name?: string;
|
|
241
|
+
type: FieldType | string;
|
|
242
|
+
/** Child field descriptors — used by type: 'object' to render a nested group. */
|
|
243
|
+
children?: FieldDescriptor[];
|
|
244
|
+
/** Optional per-field condition guard — renders a condition row below this field. */
|
|
245
|
+
condition?: FieldConditionDef;
|
|
246
|
+
label?: string;
|
|
247
|
+
placeholder?: string;
|
|
248
|
+
required?: boolean;
|
|
249
|
+
showOptional?: boolean;
|
|
250
|
+
disabled?: boolean | ((ctx: FieldContext) => boolean);
|
|
251
|
+
hidden?: boolean;
|
|
252
|
+
colSpan?: number;
|
|
253
|
+
dividerAfter?: boolean;
|
|
254
|
+
info?: string;
|
|
255
|
+
helperText?: string;
|
|
256
|
+
dataTestId?: string;
|
|
257
|
+
validation?: AnySchema;
|
|
258
|
+
shouldHide?: (ctx: FieldContext) => boolean;
|
|
259
|
+
shouldDisable?: (ctx: FieldContext) => boolean;
|
|
260
|
+
shouldRequire?: (ctx: FieldContext) => boolean;
|
|
261
|
+
compute?: (ctx: FieldContext) => unknown;
|
|
262
|
+
transform?: FieldTransform;
|
|
263
|
+
onChange?: (value: unknown, ctx: FieldContext & {
|
|
264
|
+
setFieldValue: (name: string, value: unknown) => void;
|
|
265
|
+
}) => void;
|
|
266
|
+
[key: string]: unknown;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
declare interface FieldDescriptor_2 {
|
|
270
|
+
/**
|
|
271
|
+
* The formik key for this field.
|
|
272
|
+
* Use `id` (preferred) or `name` — both are accepted.
|
|
273
|
+
* `id` takes precedence if both are provided.
|
|
274
|
+
*/
|
|
275
|
+
id?: string;
|
|
276
|
+
name?: string;
|
|
277
|
+
type: FieldType_2 | string;
|
|
278
|
+
/** Child field descriptors — used by type: 'object' to render a nested group. */
|
|
279
|
+
children?: FieldDescriptor_2[];
|
|
280
|
+
/** Optional per-field condition guard — renders a condition row below this field. */
|
|
281
|
+
condition?: FieldConditionDef_2;
|
|
282
|
+
label?: string;
|
|
283
|
+
placeholder?: string;
|
|
284
|
+
required?: boolean;
|
|
285
|
+
showOptional?: boolean;
|
|
286
|
+
disabled?: boolean | ((ctx: FieldContext_2) => boolean);
|
|
287
|
+
hidden?: boolean;
|
|
288
|
+
colSpan?: number;
|
|
289
|
+
dividerAfter?: boolean;
|
|
290
|
+
info?: string;
|
|
291
|
+
helperText?: string;
|
|
292
|
+
dataTestId?: string;
|
|
293
|
+
validation?: AnySchema;
|
|
294
|
+
shouldHide?: (ctx: FieldContext_2) => boolean;
|
|
295
|
+
shouldDisable?: (ctx: FieldContext_2) => boolean;
|
|
296
|
+
shouldRequire?: (ctx: FieldContext_2) => boolean;
|
|
297
|
+
compute?: (ctx: FieldContext_2) => unknown;
|
|
298
|
+
transform?: FieldTransform_2;
|
|
299
|
+
onChange?: (value: unknown, ctx: FieldContext_2 & {
|
|
300
|
+
setFieldValue: (name: string, value: unknown) => void;
|
|
301
|
+
}) => void;
|
|
302
|
+
[key: string]: unknown;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
declare interface FieldTransform {
|
|
306
|
+
in?: (value: unknown) => unknown;
|
|
307
|
+
out?: (value: unknown) => unknown;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
declare interface FieldTransform_2 {
|
|
311
|
+
in?: (value: unknown) => unknown;
|
|
312
|
+
out?: (value: unknown) => unknown;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
declare type FieldType = 'text' | 'textarea' | 'number' | 'toggle' | 'radio-group' | 'select' | 'descriptive-select' | 'key-value' | 'array' | 'object' | 'reference' | 'cron' | 'schema';
|
|
316
|
+
|
|
317
|
+
declare type FieldType_2 = 'text' | 'textarea' | 'number' | 'toggle' | 'radio-group' | 'select' | 'descriptive-select' | 'key-value' | 'array' | 'object' | 'reference' | 'cron' | 'schema';
|
|
318
|
+
|
|
319
|
+
export declare const FilterNode: ({ id, data }: NodeProps) => JSX_2.Element;
|
|
320
|
+
|
|
321
|
+
declare interface FixedEdge {
|
|
322
|
+
id: string;
|
|
323
|
+
source: string;
|
|
324
|
+
target: string;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
declare interface FixedEdge_2 {
|
|
328
|
+
id: string;
|
|
329
|
+
source: string;
|
|
330
|
+
target: string;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
declare interface FixedEdge_3 {
|
|
334
|
+
id: string;
|
|
335
|
+
source: string;
|
|
336
|
+
target: string;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
declare interface FixedNode {
|
|
340
|
+
id: string;
|
|
341
|
+
type: string;
|
|
342
|
+
data?: Record<string, unknown>;
|
|
343
|
+
deletable?: false;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
declare interface FixedNode_2 {
|
|
347
|
+
id: string;
|
|
348
|
+
type: string;
|
|
349
|
+
data?: Record<string, unknown>;
|
|
350
|
+
deletable?: false;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
declare interface FixedNode_3 {
|
|
354
|
+
id: string;
|
|
355
|
+
type: string;
|
|
356
|
+
data?: Record<string, unknown>;
|
|
357
|
+
deletable?: false;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
declare const FlowForgeCanvas: ({ nodeRegistry, templateRegistry, initialValue, nodeTypes: consumerNodeTypes, edgeTypes: consumerEdgeTypes, onSave, readOnly, theme, messages: messageOverrides, canvasOptions, renderTriggerSelector, loadTriggerSources, renderNodePicker, renderNodeConfig, onNodeClick: onNodeClickProp, maxNodes, layoutDirection, executionRecord, onFetchWorkflow, }: FlowForgeCanvasProps) => JSX_2.Element;
|
|
361
|
+
export { FlowForgeCanvas }
|
|
362
|
+
export { FlowForgeCanvas as WorkflowCanvas }
|
|
363
|
+
|
|
364
|
+
/** All ReactFlow behaviour settings — serialisable as JSON config */
|
|
365
|
+
export declare interface FlowForgeCanvasOptions {
|
|
366
|
+
/** Fit the whole graph into view on mount. Default: true */
|
|
367
|
+
fitView?: boolean;
|
|
368
|
+
fitViewPadding?: number;
|
|
369
|
+
/** Show the zoom-in / zoom-out / fit controls. Default: true */
|
|
370
|
+
showControls?: boolean;
|
|
371
|
+
/** Show the mini-map overview. Default: false */
|
|
372
|
+
showMiniMap?: boolean;
|
|
373
|
+
/** Pan the canvas by scrolling (no Ctrl needed). Default: true */
|
|
374
|
+
panOnScroll?: boolean;
|
|
375
|
+
/** Zoom with the scroll wheel. Default: false */
|
|
376
|
+
zoomOnScroll?: boolean;
|
|
377
|
+
minZoom?: number;
|
|
378
|
+
maxZoom?: number;
|
|
379
|
+
/** Snap nodes to a grid while dragging. Default: false */
|
|
380
|
+
snapToGrid?: boolean;
|
|
381
|
+
snapGrid?: [number, number];
|
|
382
|
+
/**
|
|
383
|
+
* How branches under a conditional/gateway node are arranged.
|
|
384
|
+
* 'horizontal' (default): branches spread side-by-side (Dagre).
|
|
385
|
+
* 'vertical': branches stack top-to-bottom, indented right under their parent (Workato style).
|
|
386
|
+
*/
|
|
387
|
+
branchLayout?: 'horizontal' | 'vertical';
|
|
388
|
+
/**
|
|
389
|
+
* How much of a node's data to show on its card.
|
|
390
|
+
* 'full' (default): show configured value badges / the descriptor's custom body.
|
|
391
|
+
* 'title-only': show just the node title — for teams that want minimal cards.
|
|
392
|
+
*/
|
|
393
|
+
nodeBody?: 'full' | 'title-only';
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
export declare interface FlowForgeCanvasProps {
|
|
397
|
+
nodeRegistry: NodeTypeRegistry;
|
|
398
|
+
templateRegistry: TemplateRegistry;
|
|
399
|
+
/** Pre-populate the canvas from a previously saved WorkflowState. */
|
|
400
|
+
initialValue?: WorkflowState;
|
|
401
|
+
nodeTypes?: NodeTypes;
|
|
402
|
+
edgeTypes?: EdgeTypes;
|
|
403
|
+
onSave?: (workflow: WorkflowState) => void;
|
|
404
|
+
/** Disables all editing — no add/delete/config, edges have no "+" button */
|
|
405
|
+
readOnly?: boolean;
|
|
406
|
+
/** Brand colors applied across edges, plus button, and node accents */
|
|
407
|
+
theme?: FlowForgeTheme;
|
|
408
|
+
/** Built-in UI labels for i18n/white-label copy. */
|
|
409
|
+
messages?: Partial<FlowForgeMessages>;
|
|
410
|
+
/** ReactFlow behaviour settings — all serialisable as plain JSON */
|
|
411
|
+
canvasOptions?: FlowForgeCanvasOptions;
|
|
412
|
+
/** Replace the trigger selector UI entirely */
|
|
413
|
+
renderTriggerSelector?: (templates: WorkflowTemplate[], onSelect: (t: WorkflowTemplate) => void, onClose: () => void) => default_2.ReactNode;
|
|
414
|
+
/**
|
|
415
|
+
* Optional async loader for trigger sources. When provided, the default
|
|
416
|
+
* trigger selector goes to a second stage after the user picks a trigger:
|
|
417
|
+
* the loader is called with the trigger's key, and if it returns a non-empty
|
|
418
|
+
* list, the user picks one or more sources before the canvas is seeded.
|
|
419
|
+
* Picked sources are merged into the trigger node's `nodeData.sources` so
|
|
420
|
+
* TriggerNode can render the "via [chip] [chip]" line.
|
|
421
|
+
*
|
|
422
|
+
* Return `[]` for triggers that have no sources — stage 2 is skipped.
|
|
423
|
+
*/
|
|
424
|
+
loadTriggerSources?: (triggerKey: string) => Promise<Array<{
|
|
425
|
+
label: string;
|
|
426
|
+
value: string;
|
|
427
|
+
}>>;
|
|
428
|
+
/** Replace the node picker UI entirely */
|
|
429
|
+
renderNodePicker?: (descriptors: NodeDescriptor[], onSelect: (d: NodeDescriptor) => void, onClose: () => void) => default_2.ReactNode;
|
|
430
|
+
/** Replace the node config drawer entirely */
|
|
431
|
+
renderNodeConfig?: (descriptor: NodeDescriptor | undefined, slot: CanvasSlot | null, onSave: (id: string, values: Record<string, unknown>) => void, onClose: () => void) => default_2.ReactNode;
|
|
432
|
+
/** Intercept node click — return true to suppress default behaviour */
|
|
433
|
+
onNodeClick?: (slot: CanvasSlot) => boolean | void;
|
|
434
|
+
/** Global cap on total user task nodes */
|
|
435
|
+
maxNodes?: number;
|
|
436
|
+
/** Flow layout direction. 'TB' = top-to-bottom (default), 'LR' = left-to-right */
|
|
437
|
+
layoutDirection?: 'TB' | 'LR';
|
|
438
|
+
/**
|
|
439
|
+
* When provided, renders an execution overlay on the canvas nodes:
|
|
440
|
+
* green = success, red = failed, grey = skipped/pending.
|
|
441
|
+
* Combine with readOnly=true to show a past run without editing.
|
|
442
|
+
*/
|
|
443
|
+
executionRecord?: ExecutionRecord;
|
|
444
|
+
/**
|
|
445
|
+
* Called when a SubWorkflowNode's "Preview" button is clicked.
|
|
446
|
+
* Return the WorkflowState for the given workflowId to render it in a drawer.
|
|
447
|
+
*/
|
|
448
|
+
onFetchWorkflow?: (workflowId: string) => Promise<WorkflowState>;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
export declare interface FlowForgeMessages {
|
|
452
|
+
addTriggerTitle: string;
|
|
453
|
+
addTriggerTooltip: string;
|
|
454
|
+
addTriggerButton: string;
|
|
455
|
+
chooseTrigger: string;
|
|
456
|
+
noTriggers: string;
|
|
457
|
+
addStepTitle: string;
|
|
458
|
+
chooseAction: string;
|
|
459
|
+
noActions: string;
|
|
460
|
+
configureStep: string;
|
|
461
|
+
loadingConfiguration: string;
|
|
462
|
+
noConfigurationNeeded: string;
|
|
463
|
+
save: string;
|
|
464
|
+
cancel: string;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
export declare interface FlowForgeTheme {
|
|
468
|
+
primaryColor?: string;
|
|
469
|
+
edgeColor?: string;
|
|
470
|
+
textColor?: string;
|
|
471
|
+
mutedTextColor?: string;
|
|
472
|
+
surfaceColor?: string;
|
|
473
|
+
borderColor?: string;
|
|
474
|
+
dangerColor?: string;
|
|
475
|
+
borderRadius?: number;
|
|
476
|
+
fontFamily?: string;
|
|
477
|
+
/** ReactFlow canvas background style. 'none' hides the background entirely. Default: 'dots' */
|
|
478
|
+
background?: 'dots' | 'lines' | 'cross' | 'none';
|
|
479
|
+
/** Background dot/line color. Default: '#e0e0e0' */
|
|
480
|
+
backgroundColor?: string;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Context passed to `NodeDescriptor.canInsert(ctx)` describing where on the
|
|
485
|
+
* canvas the user clicked "+ Add step". Used by position-aware insertion rules.
|
|
486
|
+
*/
|
|
487
|
+
declare interface InsertContext {
|
|
488
|
+
/** The slot the user clicked under (the one whose "+" edge was clicked). */
|
|
489
|
+
insertAfterSlot: CanvasSlot_2 | null;
|
|
490
|
+
/** Every slot before the insertion point, including the click slot.
|
|
491
|
+
* When inside a branch: spine up to + including the branching parent, then
|
|
492
|
+
* the branch's own slots up to the insertion point. */
|
|
493
|
+
upstreamSlots: CanvasSlot_2[];
|
|
494
|
+
/** Every slot after the insertion point in the same chain. */
|
|
495
|
+
downstreamSlots: CanvasSlot_2[];
|
|
496
|
+
/** Branch context, if the insertion is happening inside a branch. */
|
|
497
|
+
branch: {
|
|
498
|
+
filterId: string;
|
|
499
|
+
branch: string;
|
|
500
|
+
} | null;
|
|
501
|
+
/** The currently active template (the one whose trigger is in use). */
|
|
502
|
+
template: WorkflowTemplate_2 | null;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Context passed to `NodeDescriptor.canInsert(ctx)` describing where on the
|
|
507
|
+
* canvas the user clicked "+ Add step". Used by position-aware insertion rules.
|
|
508
|
+
*/
|
|
509
|
+
declare interface InsertContext_2 {
|
|
510
|
+
/** The slot the user clicked under (the one whose "+" edge was clicked). */
|
|
511
|
+
insertAfterSlot: CanvasSlot | null;
|
|
512
|
+
/** Every slot before the insertion point, including the click slot.
|
|
513
|
+
* When inside a branch: spine up to + including the branching parent, then
|
|
514
|
+
* the branch's own slots up to the insertion point. */
|
|
515
|
+
upstreamSlots: CanvasSlot[];
|
|
516
|
+
/** Every slot after the insertion point in the same chain. */
|
|
517
|
+
downstreamSlots: CanvasSlot[];
|
|
518
|
+
/** Branch context, if the insertion is happening inside a branch. */
|
|
519
|
+
branch: {
|
|
520
|
+
filterId: string;
|
|
521
|
+
branch: string;
|
|
522
|
+
} | null;
|
|
523
|
+
/** The currently active template (the one whose trigger is in use). */
|
|
524
|
+
template: WorkflowTemplate | null;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
export declare function loadWorkflowFromBpmn(xml: string): WorkflowState;
|
|
528
|
+
|
|
529
|
+
export declare interface NodeDescriptor {
|
|
530
|
+
type: string;
|
|
531
|
+
label: string;
|
|
532
|
+
icon?: ReactNode;
|
|
533
|
+
/**
|
|
534
|
+
* Optional "app" this action belongs to (Slack, Salesforce, …). When present,
|
|
535
|
+
* the node picker drills down: stage 1 lists unique apps, stage 2 lists this
|
|
536
|
+
* app's actions, stage 3 is the action's config form. Descriptors without an
|
|
537
|
+
* `app` field appear ungrouped at stage 1, alongside the app cards.
|
|
538
|
+
*/
|
|
539
|
+
app?: {
|
|
540
|
+
key: string;
|
|
541
|
+
label: string;
|
|
542
|
+
icon?: ReactNode;
|
|
543
|
+
description?: string;
|
|
544
|
+
};
|
|
545
|
+
matches: (id: string) => boolean;
|
|
546
|
+
bpmnEntry: (nodeId: string) => string;
|
|
547
|
+
bpmnExit: (nodeId: string) => string;
|
|
548
|
+
emitBpmnElements: (nodeId: string, nodeData: unknown) => BpmnElement[];
|
|
549
|
+
emitDmnDefinition?: (nodeId: string, nodeData: unknown) => DmnDefinition;
|
|
550
|
+
outgoingCondition?: (nodeId: string, targetId: string, nodeData: unknown) => string;
|
|
551
|
+
reactFlowType: string;
|
|
552
|
+
previewNodeType?: string;
|
|
553
|
+
/**
|
|
554
|
+
* Optional custom node-card body. When provided, the node renderer shows this
|
|
555
|
+
* instead of the default value badges — lets a node author fully design the
|
|
556
|
+
* card body while keeping the shared frame (title, edit/delete, handles).
|
|
557
|
+
* Receives the node's saved formData.
|
|
558
|
+
*/
|
|
559
|
+
renderNode?: (nodeData: Record<string, unknown>) => ReactNode;
|
|
560
|
+
/**
|
|
561
|
+
* Position constraint — this descriptor can be inserted only if at least ONE
|
|
562
|
+
* of the listed tokens appears in the upstream chain of the click site.
|
|
563
|
+
* Tokens can be a descriptorType (e.g. 'createUserTask'), a slot id
|
|
564
|
+
* (e.g. 'event-userCreated'), or a slot kind (e.g. 'triggerFixed').
|
|
565
|
+
* Ignored when `canInsert` is set.
|
|
566
|
+
*/
|
|
567
|
+
insertAfter?: string[];
|
|
568
|
+
/**
|
|
569
|
+
* Symmetric — must appear DOWNSTREAM of the click site. Same token rules
|
|
570
|
+
* as `insertAfter`. Ignored when `canInsert` is set.
|
|
571
|
+
*/
|
|
572
|
+
insertBefore?: string[];
|
|
573
|
+
/**
|
|
574
|
+
* Full custom rule. Overrides `insertAfter` / `insertBefore`. Receives the
|
|
575
|
+
* click context (upstream/downstream slots, branch info, active template);
|
|
576
|
+
* returns `true` to allow the descriptor at this insertion point.
|
|
577
|
+
*/
|
|
578
|
+
canInsert?: (ctx: InsertContext_2) => boolean;
|
|
579
|
+
/** Maps branch key → display label. e.g. { pass: 'Pass', fail: 'Fail' }. Only applies to branching nodes (filterNode, approvalNode). */
|
|
580
|
+
branchLabels?: Record<string, string>;
|
|
581
|
+
formSchema: FieldDescriptor_2[] | ((nodeId: string) => Promise<FieldDescriptor_2[]>);
|
|
582
|
+
maxPerWorkflow?: number;
|
|
583
|
+
relatedNodePrefixes?: string[];
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
declare interface NodeDescriptor_2 {
|
|
587
|
+
type: string;
|
|
588
|
+
label: string;
|
|
589
|
+
icon?: ReactNode;
|
|
590
|
+
/**
|
|
591
|
+
* Optional "app" this action belongs to (Slack, Salesforce, …). When present,
|
|
592
|
+
* the node picker drills down: stage 1 lists unique apps, stage 2 lists this
|
|
593
|
+
* app's actions, stage 3 is the action's config form. Descriptors without an
|
|
594
|
+
* `app` field appear ungrouped at stage 1, alongside the app cards.
|
|
595
|
+
*/
|
|
596
|
+
app?: {
|
|
597
|
+
key: string;
|
|
598
|
+
label: string;
|
|
599
|
+
icon?: ReactNode;
|
|
600
|
+
description?: string;
|
|
601
|
+
};
|
|
602
|
+
matches: (id: string) => boolean;
|
|
603
|
+
bpmnEntry: (nodeId: string) => string;
|
|
604
|
+
bpmnExit: (nodeId: string) => string;
|
|
605
|
+
emitBpmnElements: (nodeId: string, nodeData: unknown) => BpmnElement_2[];
|
|
606
|
+
emitDmnDefinition?: (nodeId: string, nodeData: unknown) => DmnDefinition_2;
|
|
607
|
+
outgoingCondition?: (nodeId: string, targetId: string, nodeData: unknown) => string;
|
|
608
|
+
reactFlowType: string;
|
|
609
|
+
previewNodeType?: string;
|
|
610
|
+
/**
|
|
611
|
+
* Optional custom node-card body. When provided, the node renderer shows this
|
|
612
|
+
* instead of the default value badges — lets a node author fully design the
|
|
613
|
+
* card body while keeping the shared frame (title, edit/delete, handles).
|
|
614
|
+
* Receives the node's saved formData.
|
|
615
|
+
*/
|
|
616
|
+
renderNode?: (nodeData: Record<string, unknown>) => ReactNode;
|
|
617
|
+
/**
|
|
618
|
+
* Position constraint — this descriptor can be inserted only if at least ONE
|
|
619
|
+
* of the listed tokens appears in the upstream chain of the click site.
|
|
620
|
+
* Tokens can be a descriptorType (e.g. 'createUserTask'), a slot id
|
|
621
|
+
* (e.g. 'event-userCreated'), or a slot kind (e.g. 'triggerFixed').
|
|
622
|
+
* Ignored when `canInsert` is set.
|
|
623
|
+
*/
|
|
624
|
+
insertAfter?: string[];
|
|
625
|
+
/**
|
|
626
|
+
* Symmetric — must appear DOWNSTREAM of the click site. Same token rules
|
|
627
|
+
* as `insertAfter`. Ignored when `canInsert` is set.
|
|
628
|
+
*/
|
|
629
|
+
insertBefore?: string[];
|
|
630
|
+
/**
|
|
631
|
+
* Full custom rule. Overrides `insertAfter` / `insertBefore`. Receives the
|
|
632
|
+
* click context (upstream/downstream slots, branch info, active template);
|
|
633
|
+
* returns `true` to allow the descriptor at this insertion point.
|
|
634
|
+
*/
|
|
635
|
+
canInsert?: (ctx: InsertContext) => boolean;
|
|
636
|
+
/** Maps branch key → display label. e.g. { pass: 'Pass', fail: 'Fail' }. Only applies to branching nodes (filterNode, approvalNode). */
|
|
637
|
+
branchLabels?: Record<string, string>;
|
|
638
|
+
formSchema: FieldDescriptor[] | ((nodeId: string) => Promise<FieldDescriptor[]>);
|
|
639
|
+
maxPerWorkflow?: number;
|
|
640
|
+
relatedNodePrefixes?: string[];
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
declare class NodeTypeRegistry {
|
|
644
|
+
private descriptors;
|
|
645
|
+
register(descriptor: NodeDescriptor_2): this;
|
|
646
|
+
forType(type: string): NodeDescriptor_2 | undefined;
|
|
647
|
+
forId(id: string): NodeDescriptor_2 | undefined;
|
|
648
|
+
list(): NodeDescriptor_2[];
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
export declare const offboardingSkeleton: WorkflowState;
|
|
652
|
+
|
|
653
|
+
export declare const RestApiNode: ({ id, data }: NodeProps) => JSX_2.Element;
|
|
654
|
+
|
|
655
|
+
export declare function saveWorkflowToBpmn(workflow: WorkflowState, options?: BpmnSaveOptions): string;
|
|
656
|
+
|
|
657
|
+
declare type SlotKind = 'start' | 'end' | 'addTrigger' | 'triggerFixed' | 'userTask' | 'addStep' | 'filter' | 'approval';
|
|
658
|
+
|
|
659
|
+
declare type SlotKind_2 = 'start' | 'end' | 'addTrigger' | 'triggerFixed' | 'userTask' | 'addStep' | 'filter' | 'approval';
|
|
660
|
+
|
|
661
|
+
declare type SlotKind_3 = 'start' | 'end' | 'addTrigger' | 'triggerFixed' | 'userTask' | 'addStep' | 'filter' | 'approval';
|
|
662
|
+
|
|
663
|
+
export declare const StartNode: () => JSX_2.Element;
|
|
664
|
+
|
|
665
|
+
export declare type StepStatus = 'pending' | 'running' | 'success' | 'failed' | 'skipped';
|
|
666
|
+
|
|
667
|
+
export declare const SubWorkflowPreviewDrawer: default_2.FC<SubWorkflowPreviewDrawerProps>;
|
|
668
|
+
|
|
669
|
+
declare interface SubWorkflowPreviewDrawerProps {
|
|
670
|
+
isOpen: boolean;
|
|
671
|
+
onClose: () => void;
|
|
672
|
+
workflowId: string | null;
|
|
673
|
+
workflowLabel?: string;
|
|
674
|
+
/** Host-provided async loader — returns the WorkflowState for the given ID */
|
|
675
|
+
onFetchWorkflow: (workflowId: string) => Promise<WorkflowState>;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
declare class TemplateRegistry {
|
|
679
|
+
private templates;
|
|
680
|
+
register(template: WorkflowTemplate_3): this;
|
|
681
|
+
lookup(triggerKey: string): WorkflowTemplate_3 | undefined;
|
|
682
|
+
list(): WorkflowTemplate_3[];
|
|
683
|
+
listByCategory(category: string): WorkflowTemplate_3[];
|
|
684
|
+
listByTag(tag: string): WorkflowTemplate_3[];
|
|
685
|
+
search(query: string): WorkflowTemplate_3[];
|
|
686
|
+
categories(): string[];
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
export declare const TriggerNode: ({ data }: NodeProps) => JSX_2.Element;
|
|
690
|
+
|
|
691
|
+
export declare const userOnboardingSkeleton: WorkflowState;
|
|
692
|
+
|
|
693
|
+
export declare const webhookIntegrationSkeleton: WorkflowState;
|
|
694
|
+
|
|
695
|
+
export declare const WebhookTriggerNode: ({ data }: NodeProps) => JSX_2.Element;
|
|
696
|
+
|
|
697
|
+
/** @deprecated Use FlowForgeCanvasProps */
|
|
698
|
+
export declare type WorkflowCanvasProps = FlowForgeCanvasProps;
|
|
699
|
+
|
|
700
|
+
export declare const WorkflowExecutionHistory: default_2.FC<WorkflowExecutionHistoryProps>;
|
|
701
|
+
|
|
702
|
+
declare interface WorkflowExecutionHistoryProps {
|
|
703
|
+
records: ExecutionRecord[];
|
|
704
|
+
/** Called when the "view on canvas" button is clicked for a record */
|
|
705
|
+
onViewOnCanvas?: (record: ExecutionRecord) => void;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
export declare interface WorkflowState {
|
|
709
|
+
slots: CanvasSlot[];
|
|
710
|
+
branches: BranchMap;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
declare interface WorkflowState_2 {
|
|
714
|
+
slots: CanvasSlot_2[];
|
|
715
|
+
branches: BranchMap_2;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
declare interface WorkflowState_3 {
|
|
719
|
+
slots: CanvasSlot_3[];
|
|
720
|
+
branches: BranchMap_3;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
export declare interface WorkflowTemplate {
|
|
724
|
+
triggerKey: string;
|
|
725
|
+
label: string;
|
|
726
|
+
description?: string;
|
|
727
|
+
icon?: ReactNode;
|
|
728
|
+
triggerCategory?: 'event' | 'scheduler' | 'webhook' | string;
|
|
729
|
+
availableTasks?: string[];
|
|
730
|
+
maxTasks?: number;
|
|
731
|
+
taskLabels?: Record<string, string>;
|
|
732
|
+
fixedNodes?: FixedNode_3[];
|
|
733
|
+
fixedEdges?: FixedEdge_3[];
|
|
734
|
+
insertionPoints?: string[];
|
|
735
|
+
source?: string;
|
|
736
|
+
product?: string;
|
|
737
|
+
/** Pre-built workflow state to clone when user selects this template */
|
|
738
|
+
skeletonState?: WorkflowState;
|
|
739
|
+
/** Tags for filtering in the template library */
|
|
740
|
+
tags?: string[];
|
|
741
|
+
/** Category grouping in the library */
|
|
742
|
+
category?: string;
|
|
743
|
+
/** Team or author that owns this template */
|
|
744
|
+
author?: string;
|
|
745
|
+
/** Relative popularity score (higher = shown first in library) */
|
|
746
|
+
popularity?: number;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
declare interface WorkflowTemplate_2 {
|
|
750
|
+
triggerKey: string;
|
|
751
|
+
label: string;
|
|
752
|
+
description?: string;
|
|
753
|
+
icon?: ReactNode;
|
|
754
|
+
triggerCategory?: 'event' | 'scheduler' | 'webhook' | string;
|
|
755
|
+
availableTasks?: string[];
|
|
756
|
+
maxTasks?: number;
|
|
757
|
+
taskLabels?: Record<string, string>;
|
|
758
|
+
fixedNodes?: FixedNode[];
|
|
759
|
+
fixedEdges?: FixedEdge[];
|
|
760
|
+
insertionPoints?: string[];
|
|
761
|
+
source?: string;
|
|
762
|
+
product?: string;
|
|
763
|
+
/** Pre-built workflow state to clone when user selects this template */
|
|
764
|
+
skeletonState?: WorkflowState_2;
|
|
765
|
+
/** Tags for filtering in the template library */
|
|
766
|
+
tags?: string[];
|
|
767
|
+
/** Category grouping in the library */
|
|
768
|
+
category?: string;
|
|
769
|
+
/** Team or author that owns this template */
|
|
770
|
+
author?: string;
|
|
771
|
+
/** Relative popularity score (higher = shown first in library) */
|
|
772
|
+
popularity?: number;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
declare interface WorkflowTemplate_3 {
|
|
776
|
+
triggerKey: string;
|
|
777
|
+
label: string;
|
|
778
|
+
description?: string;
|
|
779
|
+
icon?: ReactNode;
|
|
780
|
+
triggerCategory?: 'event' | 'scheduler' | 'webhook' | string;
|
|
781
|
+
availableTasks?: string[];
|
|
782
|
+
maxTasks?: number;
|
|
783
|
+
taskLabels?: Record<string, string>;
|
|
784
|
+
fixedNodes?: FixedNode_2[];
|
|
785
|
+
fixedEdges?: FixedEdge_2[];
|
|
786
|
+
insertionPoints?: string[];
|
|
787
|
+
source?: string;
|
|
788
|
+
product?: string;
|
|
789
|
+
/** Pre-built workflow state to clone when user selects this template */
|
|
790
|
+
skeletonState?: WorkflowState_3;
|
|
791
|
+
/** Tags for filtering in the template library */
|
|
792
|
+
tags?: string[];
|
|
793
|
+
/** Category grouping in the library */
|
|
794
|
+
category?: string;
|
|
795
|
+
/** Team or author that owns this template */
|
|
796
|
+
author?: string;
|
|
797
|
+
/** Relative popularity score (higher = shown first in library) */
|
|
798
|
+
popularity?: number;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
export declare const WorkflowTemplateLibrary: default_2.FC<WorkflowTemplateLibraryProps>;
|
|
802
|
+
|
|
803
|
+
declare interface WorkflowTemplateLibraryProps {
|
|
804
|
+
templates: WorkflowTemplate[];
|
|
805
|
+
onSelectTemplate: (template: WorkflowTemplate) => void;
|
|
806
|
+
onStartFromScratch?: () => void;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
export { }
|