@xyne/workflow-ui 1.3.25 → 1.3.27
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/components/builder/v3/EnhancedSchemaFormRenderer.js +4 -0
- package/dist/components/builder/v3/EnhancedSchemaFormRenderer.js.map +1 -1
- package/dist/components/execution/ExecutionTabs.d.ts +26 -1
- package/dist/components/execution/ExecutionTabs.d.ts.map +1 -1
- package/dist/components/execution/ExecutionTabs.js +34 -19
- package/dist/components/execution/ExecutionTabs.js.map +1 -1
- package/dist/components/execution/ExecutionViewer.d.ts.map +1 -1
- package/dist/components/execution/ExecutionViewer.js +1 -1
- package/dist/components/execution/ExecutionViewer.js.map +1 -1
- package/dist/components/schema-form/AttachmentField.d.ts +16 -0
- package/dist/components/schema-form/AttachmentField.d.ts.map +1 -0
- package/dist/components/schema-form/AttachmentField.js +139 -0
- package/dist/components/schema-form/AttachmentField.js.map +1 -0
- package/dist/components/share/ShareDialog.d.ts +21 -0
- package/dist/components/share/ShareDialog.d.ts.map +1 -0
- package/dist/components/share/ShareDialog.js +98 -0
- package/dist/components/share/ShareDialog.js.map +1 -0
- package/dist/utils/map-lanes.d.ts +35 -0
- package/dist/utils/map-lanes.d.ts.map +1 -0
- package/dist/utils/map-lanes.js +48 -0
- package/dist/utils/map-lanes.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/builder/AddStepButton.d.ts +0 -6
- package/dist/components/builder/AddStepButton.d.ts.map +0 -1
- package/dist/components/builder/AddStepButton.js +0 -7
- package/dist/components/builder/AddStepButton.js.map +0 -1
- package/dist/components/builder/BranchEdge.d.ts +0 -3
- package/dist/components/builder/BranchEdge.d.ts.map +0 -1
- package/dist/components/builder/BranchEdge.js +0 -19
- package/dist/components/builder/BranchEdge.js.map +0 -1
- package/dist/components/builder/BuilderToolbar.d.ts +0 -10
- package/dist/components/builder/BuilderToolbar.d.ts.map +0 -1
- package/dist/components/builder/BuilderToolbar.js +0 -16
- package/dist/components/builder/BuilderToolbar.js.map +0 -1
- package/dist/components/builder/StepConfigDrawer.d.ts +0 -11
- package/dist/components/builder/StepConfigDrawer.d.ts.map +0 -1
- package/dist/components/builder/StepConfigDrawer.js +0 -21
- package/dist/components/builder/StepConfigDrawer.js.map +0 -1
- package/dist/components/builder/StepNode.d.ts +0 -15
- package/dist/components/builder/StepNode.d.ts.map +0 -1
- package/dist/components/builder/StepNode.js +0 -56
- package/dist/components/builder/StepNode.js.map +0 -1
- package/dist/components/builder/StepPalette.d.ts +0 -7
- package/dist/components/builder/StepPalette.d.ts.map +0 -1
- package/dist/components/builder/StepPalette.js +0 -83
- package/dist/components/builder/StepPalette.js.map +0 -1
- package/dist/components/builder/StepPicker.d.ts +0 -9
- package/dist/components/builder/StepPicker.d.ts.map +0 -1
- package/dist/components/builder/StepPicker.js +0 -95
- package/dist/components/builder/StepPicker.js.map +0 -1
- package/dist/components/builder/TriggerConfigPanel.d.ts +0 -10
- package/dist/components/builder/TriggerConfigPanel.d.ts.map +0 -1
- package/dist/components/builder/TriggerConfigPanel.js +0 -49
- package/dist/components/builder/TriggerConfigPanel.js.map +0 -1
- package/dist/components/builder/TriggerNode.d.ts +0 -9
- package/dist/components/builder/TriggerNode.d.ts.map +0 -1
- package/dist/components/builder/TriggerNode.js +0 -30
- package/dist/components/builder/TriggerNode.js.map +0 -1
- package/dist/components/builder/TriggerPicker.d.ts +0 -8
- package/dist/components/builder/TriggerPicker.d.ts.map +0 -1
- package/dist/components/builder/TriggerPicker.js +0 -61
- package/dist/components/builder/TriggerPicker.js.map +0 -1
- package/dist/components/builder/WorkflowBuilder.d.ts +0 -20
- package/dist/components/builder/WorkflowBuilder.d.ts.map +0 -1
- package/dist/components/builder/WorkflowBuilder.js +0 -157
- package/dist/components/builder/WorkflowBuilder.js.map +0 -1
- package/dist/components/builder/edge-types.d.ts +0 -3
- package/dist/components/builder/edge-types.d.ts.map +0 -1
- package/dist/components/builder/edge-types.js +0 -5
- package/dist/components/builder/edge-types.js.map +0 -1
- package/dist/components/builder/node-types.d.ts +0 -3
- package/dist/components/builder/node-types.d.ts.map +0 -1
- package/dist/components/builder/node-types.js +0 -11
- package/dist/components/builder/node-types.js.map +0 -1
- package/dist/components/builder/v2/AddStepButton.d.ts +0 -6
- package/dist/components/builder/v2/AddStepButton.d.ts.map +0 -1
- package/dist/components/builder/v2/AddStepButton.js +0 -6
- package/dist/components/builder/v2/AddStepButton.js.map +0 -1
- package/dist/components/builder/v2/BranchEdge.d.ts +0 -3
- package/dist/components/builder/v2/BranchEdge.d.ts.map +0 -1
- package/dist/components/builder/v2/BranchEdge.js +0 -46
- package/dist/components/builder/v2/BranchEdge.js.map +0 -1
- package/dist/components/builder/v2/LoopBodyEdge.d.ts +0 -7
- package/dist/components/builder/v2/LoopBodyEdge.d.ts.map +0 -1
- package/dist/components/builder/v2/LoopBodyEdge.js +0 -19
- package/dist/components/builder/v2/LoopBodyEdge.js.map +0 -1
- package/dist/components/builder/v2/LoopbackEdge.d.ts +0 -10
- package/dist/components/builder/v2/LoopbackEdge.d.ts.map +0 -1
- package/dist/components/builder/v2/LoopbackEdge.js +0 -26
- package/dist/components/builder/v2/LoopbackEdge.js.map +0 -1
- package/dist/components/builder/v2/StepNode.d.ts +0 -21
- package/dist/components/builder/v2/StepNode.d.ts.map +0 -1
- package/dist/components/builder/v2/StepNode.js +0 -36
- package/dist/components/builder/v2/StepNode.js.map +0 -1
- package/dist/components/builder/v2/StepPicker.d.ts +0 -8
- package/dist/components/builder/v2/StepPicker.d.ts.map +0 -1
- package/dist/components/builder/v2/StepPicker.js +0 -73
- package/dist/components/builder/v2/StepPicker.js.map +0 -1
- package/dist/components/builder/v2/TerminalNode.d.ts +0 -6
- package/dist/components/builder/v2/TerminalNode.d.ts.map +0 -1
- package/dist/components/builder/v2/TerminalNode.js +0 -7
- package/dist/components/builder/v2/TerminalNode.js.map +0 -1
- package/dist/components/builder/v2/TriggerNode.d.ts +0 -10
- package/dist/components/builder/v2/TriggerNode.d.ts.map +0 -1
- package/dist/components/builder/v2/TriggerNode.js +0 -20
- package/dist/components/builder/v2/TriggerNode.js.map +0 -1
- package/dist/components/builder/v2/TriggerPicker.d.ts +0 -7
- package/dist/components/builder/v2/TriggerPicker.d.ts.map +0 -1
- package/dist/components/builder/v2/TriggerPicker.js +0 -45
- package/dist/components/builder/v2/TriggerPicker.js.map +0 -1
- package/dist/components/builder/v2/WorkflowBuilder.d.ts +0 -14
- package/dist/components/builder/v2/WorkflowBuilder.d.ts.map +0 -1
- package/dist/components/builder/v2/WorkflowBuilder.js +0 -189
- package/dist/components/builder/v2/WorkflowBuilder.js.map +0 -1
- package/dist/components/builder/v2/edge-types.d.ts +0 -3
- package/dist/components/builder/v2/edge-types.d.ts.map +0 -1
- package/dist/components/builder/v2/edge-types.js +0 -9
- package/dist/components/builder/v2/edge-types.js.map +0 -1
- package/dist/components/builder/v2/icons.d.ts +0 -25
- package/dist/components/builder/v2/icons.d.ts.map +0 -1
- package/dist/components/builder/v2/icons.js +0 -43
- package/dist/components/builder/v2/icons.js.map +0 -1
- package/dist/components/builder/v2/layout-engine.d.ts +0 -76
- package/dist/components/builder/v2/layout-engine.d.ts.map +0 -1
- package/dist/components/builder/v2/layout-engine.js +0 -465
- package/dist/components/builder/v2/layout-engine.js.map +0 -1
- package/dist/components/builder/v2/node-types.d.ts +0 -3
- package/dist/components/builder/v2/node-types.d.ts.map +0 -1
- package/dist/components/builder/v2/node-types.js +0 -11
- package/dist/components/builder/v2/node-types.js.map +0 -1
- package/dist/components/builder/v2/theme.d.ts +0 -28
- package/dist/components/builder/v2/theme.d.ts.map +0 -1
- package/dist/components/builder/v2/theme.js +0 -63
- package/dist/components/builder/v2/theme.js.map +0 -1
- package/dist/components/dashboard/WorkflowSummaryEditor.d.ts +0 -11
- package/dist/components/dashboard/WorkflowSummaryEditor.d.ts.map +0 -1
- package/dist/components/dashboard/WorkflowSummaryEditor.js +0 -46
- package/dist/components/dashboard/WorkflowSummaryEditor.js.map +0 -1
- package/dist/components/execution/ExecutionEdge.d.ts +0 -4
- package/dist/components/execution/ExecutionEdge.d.ts.map +0 -1
- package/dist/components/execution/ExecutionEdge.js +0 -27
- package/dist/components/execution/ExecutionEdge.js.map +0 -1
- package/dist/components/execution/ExecutionStepNode.d.ts +0 -14
- package/dist/components/execution/ExecutionStepNode.d.ts.map +0 -1
- package/dist/components/execution/ExecutionStepNode.js +0 -47
- package/dist/components/execution/ExecutionStepNode.js.map +0 -1
- package/dist/components/execution/ExecutionTriggerNode.d.ts +0 -9
- package/dist/components/execution/ExecutionTriggerNode.d.ts.map +0 -1
- package/dist/components/execution/ExecutionTriggerNode.js +0 -15
- package/dist/components/execution/ExecutionTriggerNode.js.map +0 -1
- package/dist/components/execution/StepAgentPanels.d.ts +0 -9
- package/dist/components/execution/StepAgentPanels.d.ts.map +0 -1
- package/dist/components/execution/StepAgentPanels.js +0 -133
- package/dist/components/execution/StepAgentPanels.js.map +0 -1
- package/dist/components/execution/execution-layout.d.ts +0 -31
- package/dist/components/execution/execution-layout.d.ts.map +0 -1
- package/dist/components/execution/execution-layout.js +0 -90
- package/dist/components/execution/execution-layout.js.map +0 -1
- package/dist/components/shared/JsonTreeViewer.d.ts +0 -9
- package/dist/components/shared/JsonTreeViewer.d.ts.map +0 -1
- package/dist/components/shared/JsonTreeViewer.js +0 -46
- package/dist/components/shared/JsonTreeViewer.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SchemaFormField } from '../../hooks/use-schema-form.js';
|
|
2
|
+
/**
|
|
3
|
+
* AttachmentField — renders an attachment-typed schema field (`format:'attachment'`,
|
|
4
|
+
* single, or an `array` of them, multiple) as an inline upload dropzone. Files are
|
|
5
|
+
* uploaded via `client.uploads.create`; the committed value is the {@link Attachment}
|
|
6
|
+
* ref (single) or `Attachment[]` (multiple), pushed up through `onChange`. Per-field
|
|
7
|
+
* `accept` / `maxSize` / `maxItems` constraints come straight from the schema field.
|
|
8
|
+
*/
|
|
9
|
+
export interface AttachmentFieldProps {
|
|
10
|
+
field: SchemaFormField;
|
|
11
|
+
value: unknown;
|
|
12
|
+
onChange: (value: unknown) => void;
|
|
13
|
+
readOnly?: boolean | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare function AttachmentField({ field, value, onChange, readOnly }: AttachmentFieldProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=AttachmentField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentField.d.ts","sourceRoot":"","sources":["../../../src/components/schema-form/AttachmentField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAyCD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAqGzF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { isExecutable } from '@xyne/workflow-sdk/common';
|
|
4
|
+
import { useWorkflowClient } from '../../hooks/use-workflow-client.js';
|
|
5
|
+
import { cn } from '../shared/cn.js';
|
|
6
|
+
function formatBytes(bytes) {
|
|
7
|
+
if (bytes < 1024)
|
|
8
|
+
return `${String(bytes)} B`;
|
|
9
|
+
if (bytes < 1024 * 1024)
|
|
10
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
11
|
+
return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
12
|
+
}
|
|
13
|
+
function isAcceptedMime(mime, accept) {
|
|
14
|
+
for (const a of accept) {
|
|
15
|
+
if (a === '*' || a === '*/*' || a === mime)
|
|
16
|
+
return true;
|
|
17
|
+
if (a.endsWith('/*') && mime.startsWith(a.slice(0, -1)))
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
let _seq = 0;
|
|
23
|
+
function nextId() {
|
|
24
|
+
_seq += 1;
|
|
25
|
+
return `att_${String(_seq)}`;
|
|
26
|
+
}
|
|
27
|
+
function seedFromValue(value, multiple) {
|
|
28
|
+
const list = multiple
|
|
29
|
+
? Array.isArray(value)
|
|
30
|
+
? value
|
|
31
|
+
: []
|
|
32
|
+
: value
|
|
33
|
+
? [value]
|
|
34
|
+
: [];
|
|
35
|
+
return list.map((att) => ({ id: nextId(), name: att.name, status: 'done', attachment: att }));
|
|
36
|
+
}
|
|
37
|
+
export function AttachmentField({ field, value, onChange, readOnly }) {
|
|
38
|
+
const client = useWorkflowClient();
|
|
39
|
+
const multiple = field.type === 'array';
|
|
40
|
+
const maxCount = multiple ? field.maxItems : 1;
|
|
41
|
+
const [files, setFiles] = useState(() => seedFromValue(value, multiple));
|
|
42
|
+
const [dragging, setDragging] = useState(false);
|
|
43
|
+
const [localError, setLocalError] = useState(null);
|
|
44
|
+
// Push committed (uploaded) attachments up to the form whenever they change,
|
|
45
|
+
// without re-running on every parent re-render (onChange identity is unstable).
|
|
46
|
+
const committed = useMemo(() => files.filter((f) => f.status === 'done' && f.attachment).map((f) => f.attachment), [files]);
|
|
47
|
+
const onChangeRef = useRef(onChange);
|
|
48
|
+
onChangeRef.current = onChange;
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
onChangeRef.current(multiple ? committed : (committed[0] ?? undefined));
|
|
51
|
+
}, [committed, multiple]);
|
|
52
|
+
const validateFile = useCallback((file) => {
|
|
53
|
+
const execReason = isExecutable(file.type || 'application/octet-stream', file.name);
|
|
54
|
+
if (execReason)
|
|
55
|
+
return `"${file.name}": ${execReason}`;
|
|
56
|
+
if (field.accept && field.accept.length > 0 && !isAcceptedMime(file.type || 'application/octet-stream', field.accept)) {
|
|
57
|
+
return `"${file.name}" (${file.type || 'unknown type'}) is not an accepted type`;
|
|
58
|
+
}
|
|
59
|
+
if (field.maxSize !== undefined && file.size > field.maxSize) {
|
|
60
|
+
return `"${file.name}" exceeds max size (${formatBytes(file.size)} > ${formatBytes(field.maxSize)})`;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}, [field.accept, field.maxSize]);
|
|
64
|
+
const handleAddFiles = useCallback(async (fileList) => {
|
|
65
|
+
const incoming = Array.from(fileList);
|
|
66
|
+
const currentCount = multiple ? files.length : 0;
|
|
67
|
+
if (!multiple)
|
|
68
|
+
setFiles([]); // single — replace any existing
|
|
69
|
+
const space = maxCount !== undefined ? Math.max(0, maxCount - currentCount) : incoming.length;
|
|
70
|
+
const toUpload = incoming.slice(0, space);
|
|
71
|
+
setLocalError(incoming.length > space
|
|
72
|
+
? `Only ${String(space)} more file${space === 1 ? '' : 's'} can be added.`
|
|
73
|
+
: null);
|
|
74
|
+
for (const f of toUpload) {
|
|
75
|
+
const err = validateFile(f);
|
|
76
|
+
const id = nextId();
|
|
77
|
+
if (err) {
|
|
78
|
+
setFiles((prev) => [...prev, { id, name: f.name, status: 'error', error: err }]);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
setFiles((prev) => [...prev, { id, name: f.name, status: 'uploading' }]);
|
|
82
|
+
try {
|
|
83
|
+
const res = await client.uploads.create([f]);
|
|
84
|
+
const att = res.attachments[0];
|
|
85
|
+
if (!att)
|
|
86
|
+
throw new Error('No attachment returned from upload');
|
|
87
|
+
setFiles((prev) => prev.map((x) => (x.id === id ? { ...x, status: 'done', attachment: att } : x)));
|
|
88
|
+
}
|
|
89
|
+
catch (uploadErr) {
|
|
90
|
+
const msg = uploadErr instanceof Error ? uploadErr.message : String(uploadErr);
|
|
91
|
+
setFiles((prev) => prev.map((x) => (x.id === id ? { ...x, status: 'error', error: msg } : x)));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}, [files.length, multiple, maxCount, client, validateFile]);
|
|
95
|
+
const handleRemove = useCallback((id) => {
|
|
96
|
+
setFiles((prev) => prev.filter((f) => f.id !== id));
|
|
97
|
+
}, []);
|
|
98
|
+
const limitReached = maxCount !== undefined && files.length >= maxCount;
|
|
99
|
+
const acceptString = field.accept?.join(',');
|
|
100
|
+
return (_jsxs("div", { children: [!readOnly && (_jsx(DropZone, { accept: acceptString, dragging: dragging, disabled: limitReached, onDragChange: setDragging, onFiles: (f) => void handleAddFiles(f), hint: describeConstraints(field), single: !multiple })), files.length > 0 && (_jsx("ul", { className: "mt-2 space-y-1", children: files.map((f) => (_jsx(FileRow, { file: f, onRemove: readOnly ? undefined : () => handleRemove(f.id) }, f.id))) })), localError && _jsx("p", { className: "mt-1 text-[11px] text-red-500", children: localError })] }));
|
|
101
|
+
}
|
|
102
|
+
function describeConstraints(field) {
|
|
103
|
+
const parts = [];
|
|
104
|
+
if (field.accept && field.accept.length > 0)
|
|
105
|
+
parts.push(field.accept.join(', '));
|
|
106
|
+
if (field.maxSize)
|
|
107
|
+
parts.push(`up to ${formatBytes(field.maxSize)}`);
|
|
108
|
+
if (field.type === 'array' && field.maxItems)
|
|
109
|
+
parts.push(`max ${String(field.maxItems)} files`);
|
|
110
|
+
return parts.length > 0 ? parts.join(' · ') : 'Any file';
|
|
111
|
+
}
|
|
112
|
+
function DropZone({ accept, dragging, disabled, onDragChange, onFiles, hint, single, }) {
|
|
113
|
+
return (_jsxs("label", { onDragOver: (e) => {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
if (!disabled)
|
|
116
|
+
onDragChange(true);
|
|
117
|
+
}, onDragLeave: () => onDragChange(false), onDrop: (e) => {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
onDragChange(false);
|
|
120
|
+
if (!disabled && e.dataTransfer.files.length > 0)
|
|
121
|
+
onFiles(e.dataTransfer.files);
|
|
122
|
+
}, className: cn('flex cursor-pointer flex-col items-center justify-center rounded-md border-2 border-dashed px-4 py-5 text-center transition-colors', disabled
|
|
123
|
+
? 'cursor-not-allowed border-slate-200 bg-slate-50 text-slate-300'
|
|
124
|
+
: dragging
|
|
125
|
+
? 'border-indigo-400 bg-indigo-50/60 text-indigo-700'
|
|
126
|
+
: 'border-slate-300 bg-slate-50/30 text-slate-500 hover:border-slate-400 hover:bg-slate-50'), children: [_jsx("input", { type: "file", multiple: !single, accept: accept, disabled: disabled, className: "sr-only", onChange: (e) => {
|
|
127
|
+
if (e.target.files && e.target.files.length > 0)
|
|
128
|
+
onFiles(e.target.files);
|
|
129
|
+
e.target.value = '';
|
|
130
|
+
} }), _jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), _jsx("polyline", { points: "17 8 12 3 7 8" }), _jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }), _jsx("span", { className: "mt-1.5 text-[12px] font-medium", children: disabled ? 'Limit reached' : single ? 'Drop a file or click to browse' : 'Drop files or click to browse' }), _jsx("span", { className: "mt-0.5 text-[10px] text-slate-400", children: hint })] }));
|
|
131
|
+
}
|
|
132
|
+
function FileRow({ file, onRemove }) {
|
|
133
|
+
return (_jsxs("li", { className: cn('flex items-center gap-2 rounded-md border px-2 py-1.5 text-[12px]', file.status === 'error'
|
|
134
|
+
? 'border-red-200 bg-red-50/60'
|
|
135
|
+
: file.status === 'done'
|
|
136
|
+
? 'border-emerald-200 bg-emerald-50/40'
|
|
137
|
+
: 'border-slate-200 bg-white'), children: [_jsxs("div", { className: "shrink-0", children: [file.status === 'uploading' && (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", className: "animate-spin text-slate-400", children: _jsx("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }) })), file.status === 'done' && (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", className: "text-emerald-600", children: _jsx("polyline", { points: "20 6 9 17 4 12" }) })), file.status === 'error' && (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", className: "text-red-600", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }))] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate font-medium text-slate-700", children: file.name }), file.status === 'error' && file.error && (_jsx("div", { className: "truncate text-[10px] text-red-500", title: file.error, children: file.error })), file.status === 'done' && file.attachment?.size !== undefined && (_jsx("div", { className: "text-[10px] text-slate-400", children: formatBytes(file.attachment.size) }))] }), onRemove && (_jsx("button", { type: "button", onClick: onRemove, className: "shrink-0 rounded p-1 text-slate-400 hover:bg-slate-200/60 hover:text-slate-700", "aria-label": "Remove", children: _jsxs("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) }))] }));
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=AttachmentField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentField.js","sourceRoot":"","sources":["../../../src/components/schema-form/AttachmentField.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAwBrC,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9C,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,MAAyB;IAC7D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,SAAS,MAAM;IACb,IAAI,IAAI,CAAC,CAAC;IACV,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,QAAiB;IACtD,MAAM,IAAI,GAAG,QAAQ;QACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,CAAC,CAAE,KAAsB;YACzB,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,KAAK;YACL,CAAC,CAAC,CAAC,KAAmB,CAAC;YACvB,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IACxF,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElE,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAW,CAAC,EACxF,CAAC,KAAK,CAAC,CACR,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,IAAU,EAAiB,EAAE;QAC5B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,0BAA0B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,UAAU;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,MAAM,UAAU,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,0BAA0B,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACtH,OAAO,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,cAAc,2BAA2B,CAAC;QACnF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;YAC7D,OAAO,IAAI,IAAI,CAAC,IAAI,uBAAuB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACvG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAC9B,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EAAE,QAA2B,EAAE,EAAE;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC;QAC7D,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9F,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,aAAa,CACX,QAAQ,CAAC,MAAM,GAAG,KAAK;YACrB,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB;YAC1E,CAAC,CAAC,IAAI,CACT,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,IAAI,GAAG,EAAE,CAAC;gBACR,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjF,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAChE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9G,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC/E,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CACzD,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;IACxE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7C,OAAO,CACL,0BACG,CAAC,QAAQ,IAAI,CACZ,KAAC,QAAQ,IACP,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,WAAW,EACzB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAChC,MAAM,EAAE,CAAC,QAAQ,GACjB,CACH,EACA,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,aAAI,SAAS,EAAC,gBAAgB,YAC3B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,KAAC,OAAO,IAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAxE,CAAC,CAAC,EAAE,CAAwE,CAC3F,CAAC,GACC,CACN,EACA,UAAU,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,UAAU,GAAK,IACxE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAsB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,MAAM,GASP;IACC,OAAO,CACL,iBACE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EACtC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC,EACD,SAAS,EAAE,EAAE,CACX,oIAAoI,EACpI,QAAQ;YACN,CAAC,CAAC,gEAAgE;YAClE,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,mDAAmD;gBACrD,CAAC,CAAC,yFAAyF,CAChG,aAED,gBACE,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,CAAC,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,SAAS,EACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACzE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtB,CAAC,GACD,EACF,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,2CAA2C,GAAG,EACtD,mBAAU,MAAM,EAAC,eAAe,GAAG,EACnC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACnC,EACN,eAAM,SAAS,EAAC,gCAAgC,YAC7C,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,+BAA+B,GACpG,EACP,eAAM,SAAS,EAAC,mCAAmC,YAAE,IAAI,GAAQ,IAC3D,CACT,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAgE;IAC/F,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,mEAAmE,EACnE,IAAI,CAAC,MAAM,KAAK,OAAO;YACrB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;gBACtB,CAAC,CAAC,qCAAqC;gBACvC,CAAC,CAAC,2BAA2B,CAClC,aAED,eAAK,SAAS,EAAC,UAAU,aACtB,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,CAC9B,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,SAAS,EAAC,6BAA6B,YAC/J,eAAM,CAAC,EAAC,6BAA6B,GAAG,GACpC,CACP,EACA,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CACzB,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB,YACzK,mBAAU,MAAM,EAAC,gBAAgB,GAAG,GAChC,CACP,EACA,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,CAC1B,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,SAAS,EAAC,cAAc,aAC9I,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,CACP,IACG,EACN,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,qCAAqC,YAAE,IAAI,CAAC,IAAI,GAAO,EACrE,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,CACxC,cAAK,SAAS,EAAC,mCAAmC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YAAG,IAAI,CAAC,KAAK,GAAO,CACzF,EACA,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,SAAS,IAAI,CAChE,cAAK,SAAS,EAAC,4BAA4B,YAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAO,CACtF,IACG,EACL,QAAQ,IAAI,CACX,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,gFAAgF,gBAC/E,QAAQ,YAEnB,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,aACvH,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,eAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IAClC,GACC,CACV,IACE,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ShareDialogProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
/** The resource kind — matches the host's ACL routes. */
|
|
4
|
+
type: 'workflow' | 'folder';
|
|
5
|
+
id: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
/** Shareable roles offered in the picker. Defaults to editor/viewer. */
|
|
9
|
+
roles?: Array<{
|
|
10
|
+
value: string;
|
|
11
|
+
label: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Owner-facing share panel: toggle workspace-public visibility and manage
|
|
16
|
+
* per-user (editor/viewer) access. Talks to the host's ACL routes via
|
|
17
|
+
* `client.acl.*`. Render it only when the caller has `workflow:share` (gate with
|
|
18
|
+
* `canPerform(permittedActions, 'workflow:share')`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function ShareDialog({ open, type, id, name, onClose, roles }: ShareDialogProps): import("react").ReactPortal | null;
|
|
21
|
+
//# sourceMappingURL=ShareDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/components/share/ShareDialog.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,yDAAyD;IACzD,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAqB,EAAE,EAAE,gBAAgB,sCAiPrG"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { Loader2, X, Globe, Lock, Trash2 } from 'lucide-react';
|
|
5
|
+
import { cn } from '../shared/cn.js';
|
|
6
|
+
import { useWorkflowClient } from '../../hooks/use-workflow-client.js';
|
|
7
|
+
const DEFAULT_ROLES = [
|
|
8
|
+
{ value: 'editor', label: 'Can edit' },
|
|
9
|
+
{ value: 'viewer', label: 'Can view' },
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Owner-facing share panel: toggle workspace-public visibility and manage
|
|
13
|
+
* per-user (editor/viewer) access. Talks to the host's ACL routes via
|
|
14
|
+
* `client.acl.*`. Render it only when the caller has `workflow:share` (gate with
|
|
15
|
+
* `canPerform(permittedActions, 'workflow:share')`).
|
|
16
|
+
*/
|
|
17
|
+
export function ShareDialog({ open, type, id, name, onClose, roles = DEFAULT_ROLES }) {
|
|
18
|
+
const client = useWorkflowClient();
|
|
19
|
+
const [loading, setLoading] = useState(true);
|
|
20
|
+
const [saving, setSaving] = useState(false);
|
|
21
|
+
const [error, setError] = useState(null);
|
|
22
|
+
const [isPublic, setIsPublic] = useState(false);
|
|
23
|
+
const [owners, setOwners] = useState([]);
|
|
24
|
+
const [shares, setShares] = useState([]);
|
|
25
|
+
const [newEmail, setNewEmail] = useState('');
|
|
26
|
+
const [newRole, setNewRole] = useState(roles[0]?.value ?? 'viewer');
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!open)
|
|
29
|
+
return undefined;
|
|
30
|
+
let cancelled = false;
|
|
31
|
+
setLoading(true);
|
|
32
|
+
setError(null);
|
|
33
|
+
void client.acl
|
|
34
|
+
.getPermissions(type, id)
|
|
35
|
+
.then((res) => {
|
|
36
|
+
if (cancelled)
|
|
37
|
+
return;
|
|
38
|
+
setIsPublic(res.isPublic);
|
|
39
|
+
setOwners(res.users.filter((u) => u.role === 'owner'));
|
|
40
|
+
setShares(res.users.filter((u) => u.role !== 'owner').map((u) => ({ email: u.email, role: u.role })));
|
|
41
|
+
setLoading(false);
|
|
42
|
+
})
|
|
43
|
+
.catch((e) => {
|
|
44
|
+
if (cancelled)
|
|
45
|
+
return;
|
|
46
|
+
setError(e instanceof Error ? e.message : 'Failed to load sharing');
|
|
47
|
+
setLoading(false);
|
|
48
|
+
});
|
|
49
|
+
return () => {
|
|
50
|
+
cancelled = true;
|
|
51
|
+
};
|
|
52
|
+
}, [open, type, id, client]);
|
|
53
|
+
if (!open || typeof document === 'undefined')
|
|
54
|
+
return null;
|
|
55
|
+
const addShare = () => {
|
|
56
|
+
const email = newEmail.trim().toLowerCase();
|
|
57
|
+
if (!email)
|
|
58
|
+
return;
|
|
59
|
+
if (shares.some((s) => s.email === email) || owners.some((o) => o.email === email)) {
|
|
60
|
+
setNewEmail('');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
setShares((s) => [...s, { email, role: newRole }]);
|
|
64
|
+
setNewEmail('');
|
|
65
|
+
};
|
|
66
|
+
const togglePublic = async (next) => {
|
|
67
|
+
setIsPublic(next);
|
|
68
|
+
try {
|
|
69
|
+
await client.acl.setVisibility(type, id, next);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
setIsPublic(!next);
|
|
73
|
+
setError(e instanceof Error ? e.message : 'Failed to change visibility');
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const save = async () => {
|
|
77
|
+
setSaving(true);
|
|
78
|
+
setError(null);
|
|
79
|
+
try {
|
|
80
|
+
await client.acl.share(type, id, { shares });
|
|
81
|
+
onClose();
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
setError(e instanceof Error ? e.message : 'Failed to save sharing');
|
|
85
|
+
setSaving(false);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return createPortal(_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center px-4", role: "presentation", onMouseDown: (e) => {
|
|
89
|
+
if (e.target === e.currentTarget && !saving)
|
|
90
|
+
onClose();
|
|
91
|
+
}, children: [_jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-0 bg-black/50 backdrop-blur-sm animate-fade-in" }), _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": `Share ${name ?? type}`, className: cn('relative z-10 flex max-h-[85vh] w-full max-w-[460px] flex-col overflow-hidden rounded-2xl border border-border bg-surface-elevated shadow-2xl animate-scale-in'), onMouseDown: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-start justify-between gap-3 px-5 pb-2 pt-4", children: [_jsxs("h2", { className: "text-[15px] font-semibold leading-tight text-foreground", children: ["Share ", name ? `“${name}”` : type] }), _jsx("button", { type: "button", "aria-label": "Close", disabled: saving, onClick: onClose, className: "grid h-7 w-7 flex-shrink-0 place-items-center rounded-md text-muted-foreground transition hover:bg-secondary hover:text-foreground disabled:opacity-40", children: _jsx(X, { className: "h-3.5 w-3.5", strokeWidth: 1.75 }) })] }), loading ? (_jsxs("div", { className: "flex items-center gap-2 px-5 py-8 text-[13px] text-muted-foreground", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), " Loading\u2026"] })) : (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-5 pb-4 pt-2", children: [_jsxs("label", { className: "flex cursor-pointer items-center gap-3 rounded-lg border border-border bg-surface px-3 py-2.5", children: [_jsx("span", { className: "grid h-8 w-8 place-items-center rounded-md bg-secondary text-muted-foreground", children: isPublic ? _jsx(Globe, { className: "h-4 w-4" }) : _jsx(Lock, { className: "h-4 w-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block text-[13px] font-medium text-foreground", children: isPublic ? 'Anyone in the workspace' : 'Restricted' }), _jsx("span", { className: "block text-[11.5px] text-muted-foreground", children: isPublic ? 'Everyone in your workspace can view this.' : 'Only people with access can open this.' })] }), _jsx("input", { type: "checkbox", checked: isPublic, onChange: (e) => void togglePublic(e.target.checked), className: "h-4 w-4 accent-[var(--wui-primary)]" })] }), owners.length > 0 && (_jsxs("div", { className: "text-[11.5px] text-muted-foreground", children: ["Owner: ", owners.map((o) => o.name || o.email).join(', ')] })), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "email", value: newEmail, placeholder: "Add people by email", onChange: (e) => setNewEmail(e.target.value), onKeyDown: (e) => {
|
|
92
|
+
if (e.key === 'Enter') {
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
addShare();
|
|
95
|
+
}
|
|
96
|
+
}, className: "min-w-0 flex-1 rounded-lg border border-border bg-surface px-3 py-2 text-[13px] text-foreground focus:border-ring focus:outline-none focus:ring-2 focus:ring-ring/30" }), _jsx("select", { value: newRole, onChange: (e) => setNewRole(e.target.value), className: "rounded-lg border border-border bg-surface px-2 py-2 text-[12.5px] text-foreground focus:outline-none", children: roles.map((r) => (_jsx("option", { value: r.value, children: r.label }, r.value))) }), _jsx("button", { type: "button", onClick: addShare, className: "rounded-lg bg-secondary px-3 py-2 text-[12.5px] font-medium text-foreground transition hover:bg-secondary/80", children: "Add" })] }), _jsx("div", { className: "flex flex-col gap-1.5", children: shares.length === 0 ? (_jsx("p", { className: "py-2 text-center text-[12px] text-muted-foreground", children: "Not shared with anyone yet." })) : (shares.map((s) => (_jsxs("div", { className: "flex items-center gap-2 rounded-lg px-1 py-1", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-[13px] text-foreground", children: s.email }), _jsx("select", { value: s.role, onChange: (e) => setShares((list) => list.map((x) => (x.email === s.email ? { ...x, role: e.target.value } : x))), className: "rounded-md border border-border bg-surface px-2 py-1 text-[12px] text-foreground focus:outline-none", children: roles.map((r) => (_jsx("option", { value: r.value, children: r.label }, r.value))) }), _jsx("button", { type: "button", "aria-label": `Remove ${s.email}`, onClick: () => setShares((list) => list.filter((x) => x.email !== s.email)), className: "grid h-7 w-7 place-items-center rounded-md text-muted-foreground transition hover:bg-secondary hover:text-red-500", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) })] }, s.email)))) }), error ? _jsx("p", { role: "alert", className: "text-[11.5px] text-red-600 dark:text-red-400", children: error }) : null] })), _jsxs("div", { className: "flex items-center justify-end gap-2 border-t border-border px-5 py-3", children: [_jsx("button", { type: "button", onClick: onClose, disabled: saving, className: "inline-flex h-8 items-center rounded-md px-3 text-[12.5px] text-muted-foreground transition hover:bg-secondary hover:text-foreground disabled:opacity-50", children: "Cancel" }), _jsxs("button", { type: "button", onClick: () => void save(), disabled: saving || loading, className: cn('inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-[12.5px] font-medium transition-colors', 'bg-[var(--wui-primary)] text-[var(--wui-primary-fg)] hover:bg-[var(--wui-primary-hover)]', 'disabled:cursor-not-allowed disabled:opacity-50'), children: [saving ? _jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1.75 }) : null, "Save"] })] })] })] }), document.querySelector('[data-workflow-ui]') ?? document.body);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=ShareDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareDialog.js","sourceRoot":"","sources":["../../../src/components/share/ShareDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ExecutionDetail } from '@xyne/workflow-sdk/client';
|
|
2
|
+
import { type StepExecutionState } from '../hooks/use-execution-viewer.js';
|
|
3
|
+
/** One concurrent MAP iteration, ready to render as a PARALLEL-style lane. */
|
|
4
|
+
export interface MapIterationLane {
|
|
5
|
+
/** Zero-based iteration index, as captured from the node-path. */
|
|
6
|
+
index: number;
|
|
7
|
+
/** Per-iteration step states, keyed by bare leaf config id (frame-stripped). */
|
|
8
|
+
states: Map<string, StepExecutionState>;
|
|
9
|
+
/** This iteration's frame-stripped records — fed to a nested MAP inside the body. */
|
|
10
|
+
records: ExecutionDetail['steps'];
|
|
11
|
+
/**
|
|
12
|
+
* The node-path frame for this iteration (e.g. `owners_map:item#0/`). Prefixed
|
|
13
|
+
* onto a lane step's id to form a per-iteration selection id, so clicking the
|
|
14
|
+
* same body step in different lanes selects DIFFERENT records.
|
|
15
|
+
*/
|
|
16
|
+
prefix: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Group an execution's raw step records into per-iteration lanes for one MAP step.
|
|
20
|
+
*
|
|
21
|
+
* MAP iteration records are node-path keyed `<mapStepId>:<branchKey>#<i>/<rest>`
|
|
22
|
+
* (e.g. `owners_map:item#2/validate`). We bucket records by the captured iteration
|
|
23
|
+
* index `<i>`, then keep two views per iteration:
|
|
24
|
+
* - `states`: built from the records AS-IS, so each record's `nodePath` stays the
|
|
25
|
+
* FULL node-path — that's what the approvals selector / sidebar resume need to
|
|
26
|
+
* resume a paused gate inside one iteration. (Keying is by bare leaf id via
|
|
27
|
+
* `leafStepId`, so there's no cross-iteration collision regardless.)
|
|
28
|
+
* - `records`: the same records with the `<mapStepId>:<branchKey>#<i>/` frame
|
|
29
|
+
* stripped, so a nested MAP inside the body can regex-match its own iterations
|
|
30
|
+
* against paths relative to this iteration.
|
|
31
|
+
*
|
|
32
|
+
* Lanes are returned sorted by index so they render in source-array order.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildMapIterations(mapStepId: string, records: ExecutionDetail['steps'] | undefined): MapIterationLane[];
|
|
35
|
+
//# sourceMappingURL=map-lanes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-lanes.d.ts","sourceRoot":"","sources":["../../src/utils/map-lanes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxC,qFAAqF;IACrF,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAC5C,gBAAgB,EAAE,CA0BpB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { buildStepStatesFromRecords, } from '../hooks/use-execution-viewer.js';
|
|
2
|
+
function escapeRegExp(s) {
|
|
3
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Group an execution's raw step records into per-iteration lanes for one MAP step.
|
|
7
|
+
*
|
|
8
|
+
* MAP iteration records are node-path keyed `<mapStepId>:<branchKey>#<i>/<rest>`
|
|
9
|
+
* (e.g. `owners_map:item#2/validate`). We bucket records by the captured iteration
|
|
10
|
+
* index `<i>`, then keep two views per iteration:
|
|
11
|
+
* - `states`: built from the records AS-IS, so each record's `nodePath` stays the
|
|
12
|
+
* FULL node-path — that's what the approvals selector / sidebar resume need to
|
|
13
|
+
* resume a paused gate inside one iteration. (Keying is by bare leaf id via
|
|
14
|
+
* `leafStepId`, so there's no cross-iteration collision regardless.)
|
|
15
|
+
* - `records`: the same records with the `<mapStepId>:<branchKey>#<i>/` frame
|
|
16
|
+
* stripped, so a nested MAP inside the body can regex-match its own iterations
|
|
17
|
+
* against paths relative to this iteration.
|
|
18
|
+
*
|
|
19
|
+
* Lanes are returned sorted by index so they render in source-array order.
|
|
20
|
+
*/
|
|
21
|
+
export function buildMapIterations(mapStepId, records) {
|
|
22
|
+
if (!records)
|
|
23
|
+
return [];
|
|
24
|
+
const re = new RegExp(`^${escapeRegExp(mapStepId)}:[^/]+#(\\d+)/`);
|
|
25
|
+
const full = new Map();
|
|
26
|
+
const stripped = new Map();
|
|
27
|
+
for (const r of records) {
|
|
28
|
+
const m = re.exec(r.stepName);
|
|
29
|
+
if (!m)
|
|
30
|
+
continue;
|
|
31
|
+
const iter = Number(m[1]);
|
|
32
|
+
(full.get(iter) ?? full.set(iter, []).get(iter)).push(r);
|
|
33
|
+
const sub = r.stepName.slice(r.stepName.indexOf('/') + 1); // drop the map frame
|
|
34
|
+
(stripped.get(iter) ?? stripped.set(iter, []).get(iter)).push({ ...r, stepName: sub });
|
|
35
|
+
}
|
|
36
|
+
return [...full.entries()]
|
|
37
|
+
.sort((a, b) => a[0] - b[0])
|
|
38
|
+
.map(([index, recs]) => {
|
|
39
|
+
const first = recs[0].stepName;
|
|
40
|
+
return {
|
|
41
|
+
index,
|
|
42
|
+
records: stripped.get(index),
|
|
43
|
+
states: buildStepStatesFromRecords(recs),
|
|
44
|
+
prefix: first.slice(0, first.indexOf('/') + 1), // e.g. "owners_map:item#0/"
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=map-lanes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-lanes.js","sourceRoot":"","sources":["../../src/utils/map-lanes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,GAE3B,MAAM,kCAAkC,CAAC;AAkB1C,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,OAA6C;IAE7C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;QAChF,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,IAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC;QACjC,OAAO;YACL,KAAK;YACL,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE;YAC7B,MAAM,EAAE,0BAA0B,CAAC,IAAI,CAAC;YACxC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B;SAC7E,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AddStepButton.d.ts","sourceRoot":"","sources":["../../../src/components/builder/AddStepButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,+BAqB9C"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Handle, Position } from '@xyflow/react';
|
|
3
|
-
export function AddStepButton(_props) {
|
|
4
|
-
// Click is handled by onNodeClick on the ReactFlow component.
|
|
5
|
-
return (_jsxs("div", { className: "flex w-[220px] items-center justify-center", children: [_jsx(Handle, { type: "target", position: Position.Top, className: "!opacity-0" }), _jsx("div", { className: "group flex h-6 w-6 items-center justify-center rounded-full border border-slate-300 bg-white cursor-pointer transition-all duration-150 hover:border-indigo-400 hover:shadow-sm hover:scale-110 active:scale-100", title: "Add step", children: _jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", className: "text-slate-400 group-hover:text-indigo-500 transition-colors duration-150", children: [_jsx("path", { d: "M12 5v14" }), _jsx("path", { d: "M5 12h14" })] }) }), _jsx(Handle, { type: "source", position: Position.Bottom, className: "!opacity-0" })] }));
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=AddStepButton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AddStepButton.js","sourceRoot":"","sources":["../../../src/components/builder/AddStepButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMjD,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,8DAA8D;IAC9D,OAAO,CACL,eAAK,SAAS,EAAC,4CAA4C,aACzD,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAC,YAAY,GAAG,EAEvE,cACE,SAAS,EAAC,kNAAkN,EAC5N,KAAK,EAAC,UAAU,YAEhB,eACE,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EACpH,SAAS,EAAC,2EAA2E,aAErF,eAAM,CAAC,EAAC,UAAU,GAAE,EAAA,eAAM,CAAC,EAAC,UAAU,GAAE,IACpC,GACF,EAEN,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAC,YAAY,GAAG,IACtE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BranchEdge.d.ts","sourceRoot":"","sources":["../../../src/components/builder/BranchEdge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAExE,wBAAgB,UAAU,CAAC,EACzB,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,KAAK,EACL,KAAK,GACN,EAAE,SAAS,+BAuCX"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { BaseEdge, getBezierPath } from '@xyflow/react';
|
|
3
|
-
export function BranchEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, label, style, }) {
|
|
4
|
-
const [edgePath, labelX, labelY] = getBezierPath({
|
|
5
|
-
sourceX,
|
|
6
|
-
sourceY,
|
|
7
|
-
sourcePosition,
|
|
8
|
-
targetX,
|
|
9
|
-
targetY,
|
|
10
|
-
targetPosition,
|
|
11
|
-
});
|
|
12
|
-
return (_jsxs(_Fragment, { children: [_jsx(BaseEdge, { id: id, path: edgePath, style: {
|
|
13
|
-
stroke: '#cbd5e1',
|
|
14
|
-
strokeWidth: 1,
|
|
15
|
-
strokeDasharray: '5 3',
|
|
16
|
-
...style,
|
|
17
|
-
} }), label && (_jsx("foreignObject", { width: 80, height: 22, x: labelX - 40, y: labelY - 11, requiredExtensions: "http://www.w3.org/1999/xhtml", children: _jsx("div", { className: "flex h-full items-center justify-center", children: _jsx("span", { className: "rounded border border-slate-200 bg-white px-2 py-0.5 text-[10px] font-medium text-slate-400 uppercase tracking-wider", children: label }) }) }))] }));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=BranchEdge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BranchEdge.js","sourceRoot":"","sources":["../../../src/components/builder/BranchEdge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAkB,MAAM,eAAe,CAAC;AAExE,MAAM,UAAU,UAAU,CAAC,EACzB,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,KAAK,EACL,KAAK,GACK;IACV,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC;QAC/C,OAAO;QACP,OAAO;QACP,cAAc;QACd,OAAO;QACP,OAAO;QACP,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,8BACE,KAAC,QAAQ,IACP,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE;oBACL,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,CAAC;oBACd,eAAe,EAAE,KAAK;oBACtB,GAAG,KAAK;iBACT,GACD,EACD,KAAK,IAAI,CACR,wBACE,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,kBAAkB,EAAC,8BAA8B,YAEjD,cAAK,SAAS,EAAC,yCAAyC,YACtD,eAAM,SAAS,EAAC,sHAAsH,YACnI,KAAK,GACD,GACH,GACQ,CACjB,IACA,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { UseWorkflowBuilderReturn } from '../../hooks/use-workflow-builder.js';
|
|
2
|
-
export interface BuilderToolbarProps {
|
|
3
|
-
builder: UseWorkflowBuilderReturn;
|
|
4
|
-
onSave?: (() => void) | undefined;
|
|
5
|
-
onTestRun?: (() => void) | undefined;
|
|
6
|
-
isSaving?: boolean | undefined;
|
|
7
|
-
className?: string | undefined;
|
|
8
|
-
}
|
|
9
|
-
export declare function BuilderToolbar({ builder, onSave, onTestRun, isSaving, className, }: BuilderToolbarProps): import("react").JSX.Element;
|
|
10
|
-
//# sourceMappingURL=BuilderToolbar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BuilderToolbar.d.ts","sourceRoot":"","sources":["../../../src/components/builder/BuilderToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAGpF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,+BA6GrB"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from '../shared/cn.js';
|
|
3
|
-
export function BuilderToolbar({ builder, onSave, onTestRun, isSaving, className, }) {
|
|
4
|
-
const { isDirty, canUndo, canRedo, undo, redo, isValidating, validation } = builder;
|
|
5
|
-
const hasErrors = validation !== null && !validation.valid;
|
|
6
|
-
return (_jsxs("div", { className: cn('flex items-center gap-3 border-t border-slate-200/80 bg-white px-4 py-2', className), children: [_jsxs("div", { className: "flex items-center rounded-lg border border-slate-200/80 bg-slate-50/50 p-0.5", children: [_jsx("button", { onClick: undo, disabled: !canUndo, className: cn('flex h-7 w-7 items-center justify-center rounded-md transition-all duration-100', canUndo
|
|
7
|
-
? 'text-slate-500 hover:bg-white hover:text-slate-700 hover:shadow-sm'
|
|
8
|
-
: 'text-slate-300 cursor-not-allowed'), title: "Undo", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M3 7v6h6" }), _jsx("path", { d: "M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13" })] }) }), _jsx("div", { className: "w-px h-4 bg-slate-200/60" }), _jsx("button", { onClick: redo, disabled: !canRedo, className: cn('flex h-7 w-7 items-center justify-center rounded-md transition-all duration-100', canRedo
|
|
9
|
-
? 'text-slate-500 hover:bg-white hover:text-slate-700 hover:shadow-sm'
|
|
10
|
-
: 'text-slate-300 cursor-not-allowed'), title: "Redo", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M21 7v6h-6" }), _jsx("path", { d: "M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13" })] }) })] }), isValidating && (_jsxs("span", { className: "flex items-center gap-1.5 text-[11px] font-medium text-slate-400", children: [_jsxs("svg", { className: "h-3 w-3 animate-spin", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.2" }), _jsx("path", { d: "M12 2a10 10 0 0 1 10 10", strokeOpacity: "0.7" })] }), "Validating"] })), hasErrors && !isValidating && (_jsxs("span", { className: "flex items-center gap-1.5 rounded-lg bg-red-50 px-2.5 py-1 text-[11px] font-semibold text-red-500 ring-1 ring-red-200/50", children: [_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 8v4" }), _jsx("path", { d: "M12 16h.01" })] }), validation && 'errors' in validation && Array.isArray(validation['errors'])
|
|
11
|
-
? `${validation['errors'].length} error${validation['errors'].length === 1 ? '' : 's'}`
|
|
12
|
-
: 'Errors'] })), _jsx("div", { className: "flex-1" }), onTestRun && (_jsxs("button", { onClick: onTestRun, className: cn('flex items-center gap-2 rounded-lg border border-slate-200 px-3.5 py-1.5 text-[13px] font-medium transition-all duration-100', 'text-slate-600 hover:bg-slate-50 hover:border-slate-300 hover:text-slate-800 active:scale-[0.98]'), children: [_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", className: "text-emerald-500", children: _jsx("polygon", { points: "5 3 19 12 5 21 5 3" }) }), "Test Run"] })), onSave && (_jsx("button", { onClick: onSave, disabled: !isDirty || isSaving, className: cn('flex items-center gap-2 rounded-lg px-4 py-1.5 text-[13px] font-semibold transition-all duration-100', isDirty && !isSaving
|
|
13
|
-
? 'bg-indigo-500 text-white shadow-sm shadow-indigo-200 hover:bg-indigo-600 active:scale-[0.98]'
|
|
14
|
-
: 'bg-slate-100 text-slate-400 cursor-not-allowed'), children: isSaving ? (_jsxs(_Fragment, { children: [_jsxs("svg", { className: "h-3 w-3 animate-spin", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.3" }), _jsx("path", { d: "M12 2a10 10 0 0 1 10 10" })] }), "Saving"] })) : 'Save' }))] }));
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=BuilderToolbar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BuilderToolbar.js","sourceRoot":"","sources":["../../../src/components/builder/BuilderToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAUrC,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,GACW;IACpB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEpF,MAAM,SAAS,GAAG,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAE3D,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,SAAS,CACV,aAGD,eAAK,SAAS,EAAC,8EAA8E,aAC3F,iBACE,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAE,EAAE,CACX,iFAAiF,EACjF,OAAO;4BACL,CAAC,CAAC,oEAAoE;4BACtE,CAAC,CAAC,mCAAmC,CACxC,EACD,KAAK,EAAC,MAAM,YAEZ,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,UAAU,GAAE,EAAA,eAAM,CAAC,EAAC,2CAA2C,GAAE,IACrE,GACC,EACT,cAAK,SAAS,EAAC,0BAA0B,GAAG,EAC5C,iBACE,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAE,EAAE,CACX,iFAAiF,EACjF,OAAO;4BACL,CAAC,CAAC,oEAAoE;4BACtE,CAAC,CAAC,mCAAmC,CACxC,EACD,KAAK,EAAC,MAAM,YAEZ,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,YAAY,GAAE,EAAA,eAAM,CAAC,EAAC,2CAA2C,GAAE,IACvE,GACC,IACL,EAGL,YAAY,IAAI,CACf,gBAAM,SAAS,EAAC,kEAAkE,aAChF,eAAK,SAAS,EAAC,sBAAsB,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,aACzG,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,aAAa,EAAC,KAAK,GAAE,EAAA,eAAM,CAAC,EAAC,yBAAyB,EAAC,aAAa,EAAC,KAAK,GAAE,IACvG,kBAED,CACR,EACA,SAAS,IAAI,CAAC,YAAY,IAAI,CAC7B,gBAAM,SAAS,EAAC,0HAA0H,aACxI,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,aACvH,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,GAAE,EAAA,eAAM,CAAC,EAAC,SAAS,GAAE,EAAA,eAAM,CAAC,EAAC,YAAY,GAAE,IACrE,EACL,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAE,UAAsC,CAAC,QAAQ,CAAC,CAAC;wBACvG,CAAC,CAAC,GAAK,UAAsC,CAAC,QAAQ,CAAe,CAAC,MAAM,SAAW,UAAsC,CAAC,QAAQ,CAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;wBAC/K,CAAC,CAAC,QAAQ,IACP,CACR,EAED,cAAK,SAAS,EAAC,QAAQ,GAAG,EAGzB,SAAS,IAAI,CACZ,kBACE,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,EAAE,CACX,8HAA8H,EAC9H,kGAAkG,CACnG,aAED,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,SAAS,EAAC,kBAAkB,YAC9F,kBAAS,MAAM,EAAC,oBAAoB,GAAE,GAClC,gBAEC,CACV,EAGA,MAAM,IAAI,CACT,iBACE,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,EAC9B,SAAS,EAAE,EAAE,CACX,sGAAsG,EACtG,OAAO,IAAI,CAAC,QAAQ;oBAClB,CAAC,CAAC,8FAA8F;oBAChG,CAAC,CAAC,gDAAgD,CACrD,YAEA,QAAQ,CAAC,CAAC,CAAC,CACV,8BACE,eAAK,SAAS,EAAC,sBAAsB,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,aACzG,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,aAAa,EAAC,KAAK,GAAE,EAAA,eAAM,CAAC,EAAC,yBAAyB,GAAE,IACnF,cAEL,CACJ,CAAC,CAAC,CAAC,MAAM,GACH,CACV,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { WorkflowStepConfig } from '@xyne/workflow-sdk/builder';
|
|
2
|
-
export interface StepConfigDrawerProps {
|
|
3
|
-
step: WorkflowStepConfig;
|
|
4
|
-
onUpdateConfig: (config: Record<string, unknown>) => void;
|
|
5
|
-
onDelete: () => void;
|
|
6
|
-
onDuplicate: () => void;
|
|
7
|
-
onClose: () => void;
|
|
8
|
-
className?: string | undefined;
|
|
9
|
-
}
|
|
10
|
-
export declare function StepConfigDrawer({ step, onUpdateConfig, onDelete, onDuplicate, onClose, className, }: StepConfigDrawerProps): import("react").JSX.Element;
|
|
11
|
-
//# sourceMappingURL=StepConfigDrawer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfigDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/builder/StepConfigDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMrE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AASD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,cAAc,EACd,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,GACV,EAAE,qBAAqB,+BAgGvB"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useStepConfig } from '../../hooks/use-step-config.js';
|
|
3
|
-
import { SchemaFormRenderer } from '../schema-form/SchemaFormRenderer.js';
|
|
4
|
-
import { LoadingSpinner } from '../shared/LoadingSpinner.js';
|
|
5
|
-
import { cn } from '../shared/cn.js';
|
|
6
|
-
function formatTypeName(type) {
|
|
7
|
-
return type
|
|
8
|
-
.split(/[_-]/)
|
|
9
|
-
.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
|
|
10
|
-
.join(' ');
|
|
11
|
-
}
|
|
12
|
-
export function StepConfigDrawer({ step, onUpdateConfig, onDelete, onDuplicate, onClose, className, }) {
|
|
13
|
-
const { fields, values, errors, setFieldValue, descriptor, isLoading } = useStepConfig({
|
|
14
|
-
stepType: step.type,
|
|
15
|
-
initialValues: step.config ?? {},
|
|
16
|
-
onValuesChange: onUpdateConfig,
|
|
17
|
-
});
|
|
18
|
-
const displayName = descriptor?.name ?? formatTypeName(step.type);
|
|
19
|
-
return (_jsxs("div", { className: cn('flex w-80 flex-col border-l border-slate-200/80 bg-white', 'animate-[wui-slide-in-right_180ms_ease-out]', className), children: [_jsxs("div", { className: "flex items-center gap-3 border-b border-slate-100 px-4 py-3.5", children: [_jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-indigo-50 text-xs font-bold text-indigo-500", children: step.type.slice(0, 2).toUpperCase() }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate text-[13px] font-semibold text-slate-800", children: displayName }), _jsx("div", { className: "truncate text-[11px] text-slate-400 uppercase tracking-wide", children: step.type.replace(/_/g, ' ') })] }), _jsx("button", { onClick: onClose, className: "flex h-6 w-6 items-center justify-center rounded-md text-slate-400 hover:bg-slate-100 hover:text-slate-600 transition-colors", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: [_jsx("path", { d: "M18 6 6 18" }), _jsx("path", { d: "m6 6 12 12" })] }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4", children: isLoading ? (_jsx("div", { className: "flex justify-center py-8", children: _jsx(LoadingSpinner, { size: "md" }) })) : fields.length > 0 ? (_jsxs("div", { children: [_jsx("h4", { className: "mb-3 text-[10px] font-bold uppercase tracking-widest text-slate-400", children: "Configuration" }), _jsx(SchemaFormRenderer, { fields: fields, values: values, errors: errors, onChange: (path, value) => setFieldValue(path, value) })] })) : (_jsxs("div", { className: "flex flex-col items-center py-8 text-center", children: [_jsx("div", { className: "mb-2.5 flex h-10 w-10 items-center justify-center rounded-full bg-slate-50 ring-1 ring-slate-100", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", className: "text-slate-400", strokeLinecap: "round", children: [_jsx("path", { d: "M12 8v4l3 3" }), _jsx("circle", { cx: "12", cy: "12", r: "10" })] }) }), _jsx("p", { className: "text-[13px] font-medium text-slate-400", children: "No configuration needed" }), _jsx("p", { className: "mt-1 text-[11px] text-slate-300", children: "This step works with default settings" })] })) }), _jsxs("div", { className: "flex gap-2 border-t border-slate-100 px-4 py-3", children: [_jsxs("button", { onClick: onDuplicate, className: cn('flex flex-1 items-center justify-center gap-1.5 rounded-lg border border-slate-200 px-3 py-2 text-[13px] font-medium', 'text-slate-600 hover:bg-slate-50 hover:border-slate-300 transition-all duration-100'), children: [_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { width: "13", height: "13", x: "9", y: "9", rx: "2" }), _jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })] }), "Duplicate"] }), _jsxs("button", { onClick: onDelete, className: cn('flex flex-1 items-center justify-center gap-1.5 rounded-lg border border-red-200/60 px-3 py-2 text-[13px] font-medium', 'text-red-500 hover:bg-red-50 hover:border-red-300 transition-all duration-100'), children: [_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M3 6h18" }), _jsx("path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }), _jsx("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" })] }), "Delete"] })] })] }));
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=StepConfigDrawer.js.map
|