@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.
Files changed (162) hide show
  1. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.js +4 -0
  2. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.js.map +1 -1
  3. package/dist/components/execution/ExecutionTabs.d.ts +26 -1
  4. package/dist/components/execution/ExecutionTabs.d.ts.map +1 -1
  5. package/dist/components/execution/ExecutionTabs.js +34 -19
  6. package/dist/components/execution/ExecutionTabs.js.map +1 -1
  7. package/dist/components/execution/ExecutionViewer.d.ts.map +1 -1
  8. package/dist/components/execution/ExecutionViewer.js +1 -1
  9. package/dist/components/execution/ExecutionViewer.js.map +1 -1
  10. package/dist/components/schema-form/AttachmentField.d.ts +16 -0
  11. package/dist/components/schema-form/AttachmentField.d.ts.map +1 -0
  12. package/dist/components/schema-form/AttachmentField.js +139 -0
  13. package/dist/components/schema-form/AttachmentField.js.map +1 -0
  14. package/dist/components/share/ShareDialog.d.ts +21 -0
  15. package/dist/components/share/ShareDialog.d.ts.map +1 -0
  16. package/dist/components/share/ShareDialog.js +98 -0
  17. package/dist/components/share/ShareDialog.js.map +1 -0
  18. package/dist/utils/map-lanes.d.ts +35 -0
  19. package/dist/utils/map-lanes.d.ts.map +1 -0
  20. package/dist/utils/map-lanes.js +48 -0
  21. package/dist/utils/map-lanes.js.map +1 -0
  22. package/package.json +1 -1
  23. package/dist/components/builder/AddStepButton.d.ts +0 -6
  24. package/dist/components/builder/AddStepButton.d.ts.map +0 -1
  25. package/dist/components/builder/AddStepButton.js +0 -7
  26. package/dist/components/builder/AddStepButton.js.map +0 -1
  27. package/dist/components/builder/BranchEdge.d.ts +0 -3
  28. package/dist/components/builder/BranchEdge.d.ts.map +0 -1
  29. package/dist/components/builder/BranchEdge.js +0 -19
  30. package/dist/components/builder/BranchEdge.js.map +0 -1
  31. package/dist/components/builder/BuilderToolbar.d.ts +0 -10
  32. package/dist/components/builder/BuilderToolbar.d.ts.map +0 -1
  33. package/dist/components/builder/BuilderToolbar.js +0 -16
  34. package/dist/components/builder/BuilderToolbar.js.map +0 -1
  35. package/dist/components/builder/StepConfigDrawer.d.ts +0 -11
  36. package/dist/components/builder/StepConfigDrawer.d.ts.map +0 -1
  37. package/dist/components/builder/StepConfigDrawer.js +0 -21
  38. package/dist/components/builder/StepConfigDrawer.js.map +0 -1
  39. package/dist/components/builder/StepNode.d.ts +0 -15
  40. package/dist/components/builder/StepNode.d.ts.map +0 -1
  41. package/dist/components/builder/StepNode.js +0 -56
  42. package/dist/components/builder/StepNode.js.map +0 -1
  43. package/dist/components/builder/StepPalette.d.ts +0 -7
  44. package/dist/components/builder/StepPalette.d.ts.map +0 -1
  45. package/dist/components/builder/StepPalette.js +0 -83
  46. package/dist/components/builder/StepPalette.js.map +0 -1
  47. package/dist/components/builder/StepPicker.d.ts +0 -9
  48. package/dist/components/builder/StepPicker.d.ts.map +0 -1
  49. package/dist/components/builder/StepPicker.js +0 -95
  50. package/dist/components/builder/StepPicker.js.map +0 -1
  51. package/dist/components/builder/TriggerConfigPanel.d.ts +0 -10
  52. package/dist/components/builder/TriggerConfigPanel.d.ts.map +0 -1
  53. package/dist/components/builder/TriggerConfigPanel.js +0 -49
  54. package/dist/components/builder/TriggerConfigPanel.js.map +0 -1
  55. package/dist/components/builder/TriggerNode.d.ts +0 -9
  56. package/dist/components/builder/TriggerNode.d.ts.map +0 -1
  57. package/dist/components/builder/TriggerNode.js +0 -30
  58. package/dist/components/builder/TriggerNode.js.map +0 -1
  59. package/dist/components/builder/TriggerPicker.d.ts +0 -8
  60. package/dist/components/builder/TriggerPicker.d.ts.map +0 -1
  61. package/dist/components/builder/TriggerPicker.js +0 -61
  62. package/dist/components/builder/TriggerPicker.js.map +0 -1
  63. package/dist/components/builder/WorkflowBuilder.d.ts +0 -20
  64. package/dist/components/builder/WorkflowBuilder.d.ts.map +0 -1
  65. package/dist/components/builder/WorkflowBuilder.js +0 -157
  66. package/dist/components/builder/WorkflowBuilder.js.map +0 -1
  67. package/dist/components/builder/edge-types.d.ts +0 -3
  68. package/dist/components/builder/edge-types.d.ts.map +0 -1
  69. package/dist/components/builder/edge-types.js +0 -5
  70. package/dist/components/builder/edge-types.js.map +0 -1
  71. package/dist/components/builder/node-types.d.ts +0 -3
  72. package/dist/components/builder/node-types.d.ts.map +0 -1
  73. package/dist/components/builder/node-types.js +0 -11
  74. package/dist/components/builder/node-types.js.map +0 -1
  75. package/dist/components/builder/v2/AddStepButton.d.ts +0 -6
  76. package/dist/components/builder/v2/AddStepButton.d.ts.map +0 -1
  77. package/dist/components/builder/v2/AddStepButton.js +0 -6
  78. package/dist/components/builder/v2/AddStepButton.js.map +0 -1
  79. package/dist/components/builder/v2/BranchEdge.d.ts +0 -3
  80. package/dist/components/builder/v2/BranchEdge.d.ts.map +0 -1
  81. package/dist/components/builder/v2/BranchEdge.js +0 -46
  82. package/dist/components/builder/v2/BranchEdge.js.map +0 -1
  83. package/dist/components/builder/v2/LoopBodyEdge.d.ts +0 -7
  84. package/dist/components/builder/v2/LoopBodyEdge.d.ts.map +0 -1
  85. package/dist/components/builder/v2/LoopBodyEdge.js +0 -19
  86. package/dist/components/builder/v2/LoopBodyEdge.js.map +0 -1
  87. package/dist/components/builder/v2/LoopbackEdge.d.ts +0 -10
  88. package/dist/components/builder/v2/LoopbackEdge.d.ts.map +0 -1
  89. package/dist/components/builder/v2/LoopbackEdge.js +0 -26
  90. package/dist/components/builder/v2/LoopbackEdge.js.map +0 -1
  91. package/dist/components/builder/v2/StepNode.d.ts +0 -21
  92. package/dist/components/builder/v2/StepNode.d.ts.map +0 -1
  93. package/dist/components/builder/v2/StepNode.js +0 -36
  94. package/dist/components/builder/v2/StepNode.js.map +0 -1
  95. package/dist/components/builder/v2/StepPicker.d.ts +0 -8
  96. package/dist/components/builder/v2/StepPicker.d.ts.map +0 -1
  97. package/dist/components/builder/v2/StepPicker.js +0 -73
  98. package/dist/components/builder/v2/StepPicker.js.map +0 -1
  99. package/dist/components/builder/v2/TerminalNode.d.ts +0 -6
  100. package/dist/components/builder/v2/TerminalNode.d.ts.map +0 -1
  101. package/dist/components/builder/v2/TerminalNode.js +0 -7
  102. package/dist/components/builder/v2/TerminalNode.js.map +0 -1
  103. package/dist/components/builder/v2/TriggerNode.d.ts +0 -10
  104. package/dist/components/builder/v2/TriggerNode.d.ts.map +0 -1
  105. package/dist/components/builder/v2/TriggerNode.js +0 -20
  106. package/dist/components/builder/v2/TriggerNode.js.map +0 -1
  107. package/dist/components/builder/v2/TriggerPicker.d.ts +0 -7
  108. package/dist/components/builder/v2/TriggerPicker.d.ts.map +0 -1
  109. package/dist/components/builder/v2/TriggerPicker.js +0 -45
  110. package/dist/components/builder/v2/TriggerPicker.js.map +0 -1
  111. package/dist/components/builder/v2/WorkflowBuilder.d.ts +0 -14
  112. package/dist/components/builder/v2/WorkflowBuilder.d.ts.map +0 -1
  113. package/dist/components/builder/v2/WorkflowBuilder.js +0 -189
  114. package/dist/components/builder/v2/WorkflowBuilder.js.map +0 -1
  115. package/dist/components/builder/v2/edge-types.d.ts +0 -3
  116. package/dist/components/builder/v2/edge-types.d.ts.map +0 -1
  117. package/dist/components/builder/v2/edge-types.js +0 -9
  118. package/dist/components/builder/v2/edge-types.js.map +0 -1
  119. package/dist/components/builder/v2/icons.d.ts +0 -25
  120. package/dist/components/builder/v2/icons.d.ts.map +0 -1
  121. package/dist/components/builder/v2/icons.js +0 -43
  122. package/dist/components/builder/v2/icons.js.map +0 -1
  123. package/dist/components/builder/v2/layout-engine.d.ts +0 -76
  124. package/dist/components/builder/v2/layout-engine.d.ts.map +0 -1
  125. package/dist/components/builder/v2/layout-engine.js +0 -465
  126. package/dist/components/builder/v2/layout-engine.js.map +0 -1
  127. package/dist/components/builder/v2/node-types.d.ts +0 -3
  128. package/dist/components/builder/v2/node-types.d.ts.map +0 -1
  129. package/dist/components/builder/v2/node-types.js +0 -11
  130. package/dist/components/builder/v2/node-types.js.map +0 -1
  131. package/dist/components/builder/v2/theme.d.ts +0 -28
  132. package/dist/components/builder/v2/theme.d.ts.map +0 -1
  133. package/dist/components/builder/v2/theme.js +0 -63
  134. package/dist/components/builder/v2/theme.js.map +0 -1
  135. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts +0 -11
  136. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts.map +0 -1
  137. package/dist/components/dashboard/WorkflowSummaryEditor.js +0 -46
  138. package/dist/components/dashboard/WorkflowSummaryEditor.js.map +0 -1
  139. package/dist/components/execution/ExecutionEdge.d.ts +0 -4
  140. package/dist/components/execution/ExecutionEdge.d.ts.map +0 -1
  141. package/dist/components/execution/ExecutionEdge.js +0 -27
  142. package/dist/components/execution/ExecutionEdge.js.map +0 -1
  143. package/dist/components/execution/ExecutionStepNode.d.ts +0 -14
  144. package/dist/components/execution/ExecutionStepNode.d.ts.map +0 -1
  145. package/dist/components/execution/ExecutionStepNode.js +0 -47
  146. package/dist/components/execution/ExecutionStepNode.js.map +0 -1
  147. package/dist/components/execution/ExecutionTriggerNode.d.ts +0 -9
  148. package/dist/components/execution/ExecutionTriggerNode.d.ts.map +0 -1
  149. package/dist/components/execution/ExecutionTriggerNode.js +0 -15
  150. package/dist/components/execution/ExecutionTriggerNode.js.map +0 -1
  151. package/dist/components/execution/StepAgentPanels.d.ts +0 -9
  152. package/dist/components/execution/StepAgentPanels.d.ts.map +0 -1
  153. package/dist/components/execution/StepAgentPanels.js +0 -133
  154. package/dist/components/execution/StepAgentPanels.js.map +0 -1
  155. package/dist/components/execution/execution-layout.d.ts +0 -31
  156. package/dist/components/execution/execution-layout.d.ts.map +0 -1
  157. package/dist/components/execution/execution-layout.js +0 -90
  158. package/dist/components/execution/execution-layout.js.map +0 -1
  159. package/dist/components/shared/JsonTreeViewer.d.ts +0 -9
  160. package/dist/components/shared/JsonTreeViewer.d.ts.map +0 -1
  161. package/dist/components/shared/JsonTreeViewer.js +0 -46
  162. 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":"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"}
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyne/workflow-ui",
3
- "version": "1.3.25",
3
+ "version": "1.3.27",
4
4
  "description": "Workflow builder + execution-viewer React UI for @xyne/workflow-sdk.",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -1,6 +0,0 @@
1
- import type { NodeProps } from '@xyflow/react';
2
- export interface AddStepButtonData {
3
- afterStepId: string;
4
- }
5
- export declare function AddStepButton(_props: NodeProps): import("react").JSX.Element;
6
- //# sourceMappingURL=AddStepButton.d.ts.map
@@ -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,3 +0,0 @@
1
- import { type EdgeProps } from '@xyflow/react';
2
- export declare function BranchEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, label, style, }: EdgeProps): import("react").JSX.Element;
3
- //# sourceMappingURL=BranchEdge.d.ts.map
@@ -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":"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"}
@@ -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