@xyne/workflow-ui 0.4.1 → 0.4.2
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/analytics/AnalyticsDashboard.d.ts.map +1 -1
- package/dist/components/analytics/AnalyticsDashboard.js +27 -20
- package/dist/components/analytics/AnalyticsDashboard.js.map +1 -1
- package/dist/components/analytics/FilteredRunsPanel.d.ts +2 -1
- package/dist/components/analytics/FilteredRunsPanel.d.ts.map +1 -1
- package/dist/components/analytics/FilteredRunsPanel.js +5 -2
- package/dist/components/analytics/FilteredRunsPanel.js.map +1 -1
- package/dist/components/analytics/FolderCard.d.ts +10 -0
- package/dist/components/analytics/FolderCard.d.ts.map +1 -0
- package/dist/components/analytics/FolderCard.js +12 -0
- package/dist/components/analytics/FolderCard.js.map +1 -0
- package/dist/components/analytics/FolderGrid.d.ts +7 -0
- package/dist/components/analytics/FolderGrid.d.ts.map +1 -0
- package/dist/components/analytics/FolderGrid.js +29 -0
- package/dist/components/analytics/FolderGrid.js.map +1 -0
- package/dist/components/analytics/StatCard.d.ts.map +1 -1
- package/dist/components/analytics/StatCard.js +6 -2
- package/dist/components/analytics/StatCard.js.map +1 -1
- package/dist/components/analytics/TopErrorsPanel.d.ts +2 -1
- package/dist/components/analytics/TopErrorsPanel.d.ts.map +1 -1
- package/dist/components/analytics/TopErrorsPanel.js +3 -3
- package/dist/components/analytics/TopErrorsPanel.js.map +1 -1
- package/dist/components/analytics/index.d.ts +2 -0
- package/dist/components/analytics/index.d.ts.map +1 -1
- package/dist/components/analytics/index.js +2 -0
- package/dist/components/analytics/index.js.map +1 -1
- package/dist/components/automations/AutomationListView.js +2 -2
- package/dist/components/automations/AutomationListView.js.map +1 -1
- package/dist/components/builder/v3/AiBuilderPanel.d.ts +1 -1
- package/dist/components/builder/v3/AiBuilderPanel.d.ts.map +1 -1
- package/dist/components/builder/v3/AiBuilderPanel.js +1 -1
- package/dist/components/builder/v3/AiBuilderPanel.js.map +1 -1
- package/dist/components/builder/v3/WorkflowBuilderV3.js +1 -1
- package/dist/components/builder/v3/WorkflowBuilderV3.js.map +1 -1
- package/dist/hooks/use-analytics.d.ts +1 -1
- package/dist/hooks/use-analytics.d.ts.map +1 -1
- package/dist/hooks/use-analytics.js +3 -3
- package/dist/hooks/use-analytics.js.map +1 -1
- package/dist/hooks/use-runs-list.d.ts +1 -0
- package/dist/hooks/use-runs-list.d.ts.map +1 -1
- package/dist/hooks/use-runs-list.js +7 -3
- package/dist/hooks/use-runs-list.js.map +1 -1
- package/dist/hooks/use-workflow-counts.d.ts +4 -1
- package/dist/hooks/use-workflow-counts.d.ts.map +1 -1
- package/dist/hooks/use-workflow-counts.js.map +1 -1
- package/dist/styles.css +1 -1
- 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
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* v2/layout-engine — Config-driven layout computation.
|
|
3
|
-
*
|
|
4
|
-
* Pure function: no side effects, no React, no hooks.
|
|
5
|
-
* Uses generic branch detection from config data + configSchema.
|
|
6
|
-
*
|
|
7
|
-
* Two branch shapes detected automatically:
|
|
8
|
-
* 1. Direct array: config.body = [{id, type, ...}] (LOOP)
|
|
9
|
-
* 2. Record of arrays: config.branches = { "A": [{id, type}] } (PARALLEL)
|
|
10
|
-
*
|
|
11
|
-
* Branch keys use dot notation: "body" or "branches.A".
|
|
12
|
-
*/
|
|
13
|
-
import { detectBranchesFromConfig, branchLabel } from '../../../utils/branch-detection.js';
|
|
14
|
-
// ─── Constants ───
|
|
15
|
-
export const NODE_GAP_Y = 140;
|
|
16
|
-
/** Padding between adjacent branch extents. */
|
|
17
|
-
const BRANCH_PAD_X = 60;
|
|
18
|
-
/** Width of a step node in CSS pixels. */
|
|
19
|
-
const NODE_WIDTH = 240;
|
|
20
|
-
/** Extra vertical padding before branch fork. */
|
|
21
|
-
export const BRANCH_FORK_GAP = 120;
|
|
22
|
-
/** Horizontal gap between consecutive loop body steps. */
|
|
23
|
-
const LOOP_BODY_GAP_X = 60;
|
|
24
|
-
/** Vertical drop for the loopback U-curve under the row. */
|
|
25
|
-
const LOOPBACK_DROP = 100;
|
|
26
|
-
// ─── Branch detection (generic, config-driven) ───
|
|
27
|
-
function detectBranches(step, stepMeta) {
|
|
28
|
-
if (!step.config || typeof step.config !== 'object')
|
|
29
|
-
return null;
|
|
30
|
-
const config = step.config;
|
|
31
|
-
const meta = stepMeta?.get(step.type);
|
|
32
|
-
const branches = detectBranchesFromConfig(config, meta?.configSchema);
|
|
33
|
-
return Object.keys(branches).length > 0 ? branches : null;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Detect if a step has a dynamic branch container (Record<string, steps[]>).
|
|
37
|
-
* Returns the top-level config key (e.g. "branches") or null.
|
|
38
|
-
*/
|
|
39
|
-
function detectDynamicBranchContainer(step, stepMeta) {
|
|
40
|
-
const meta = stepMeta?.get(step.type);
|
|
41
|
-
if (!meta?.configSchema)
|
|
42
|
-
return null;
|
|
43
|
-
const properties = (meta.configSchema['properties'] ?? {});
|
|
44
|
-
for (const [key, propSchema] of Object.entries(properties)) {
|
|
45
|
-
if (propSchema['type'] !== 'object')
|
|
46
|
-
continue;
|
|
47
|
-
const additionalProps = propSchema['additionalProperties'];
|
|
48
|
-
if (!additionalProps)
|
|
49
|
-
continue;
|
|
50
|
-
if (additionalProps['type'] === 'array') {
|
|
51
|
-
const items = additionalProps['items'];
|
|
52
|
-
if (items?.['type'] === 'object')
|
|
53
|
-
return key;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
// ─── Subtree width measurement ───
|
|
59
|
-
/**
|
|
60
|
-
* Measure the horizontal width a branch's subtree needs.
|
|
61
|
-
* Recurses into any step that has nested branches (PARALLEL inside PARALLEL, etc.).
|
|
62
|
-
*/
|
|
63
|
-
function measureBranchWidth(steps, stepMeta) {
|
|
64
|
-
let maxWidth = NODE_WIDTH;
|
|
65
|
-
for (const step of steps) {
|
|
66
|
-
const branches = detectBranches(step, stepMeta);
|
|
67
|
-
if (branches) {
|
|
68
|
-
const entries = Object.entries(branches);
|
|
69
|
-
if (entries.length === 1) {
|
|
70
|
-
// Single branch (LOOP): body steps on a circular arc to the right
|
|
71
|
-
const bodySteps = entries[0][1];
|
|
72
|
-
const N = bodySteps.length;
|
|
73
|
-
const R = 160 + N * 20;
|
|
74
|
-
const arcWidth = NODE_WIDTH + 2 * R;
|
|
75
|
-
maxWidth = Math.max(maxWidth, arcWidth);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const subWidths = entries.map(([, subSteps]) => measureBranchWidth(subSteps, stepMeta));
|
|
79
|
-
const totalSubWidth = subWidths.reduce((s, w) => s + w, 0) +
|
|
80
|
-
(entries.length - 1) * BRANCH_PAD_X;
|
|
81
|
-
maxWidth = Math.max(maxWidth, totalSubWidth);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return maxWidth;
|
|
86
|
-
}
|
|
87
|
-
// ─── Add-button helpers ───
|
|
88
|
-
// Approximate visual heights for centering the add-button in the gap
|
|
89
|
-
const NODE_HEIGHT_EST = 58;
|
|
90
|
-
const ADD_BTN_HEIGHT_EST = 28;
|
|
91
|
-
/**
|
|
92
|
-
* Insert an add-button node between two existing nodes, replacing the
|
|
93
|
-
* direct edge with source → button → target.
|
|
94
|
-
*/
|
|
95
|
-
function insertAddButton(sourceId, targetId, xOffset, state, context) {
|
|
96
|
-
const sourceNode = state.nodes.find((n) => n.id === sourceId);
|
|
97
|
-
const targetNode = state.nodes.find((n) => n.id === targetId);
|
|
98
|
-
if (!sourceNode || !targetNode)
|
|
99
|
-
return;
|
|
100
|
-
// Include branch key in ID so multiple branches between the same source→target get unique buttons
|
|
101
|
-
const branchSuffix = context.inBranch ? `::${context.inBranch.branchKey}` : '';
|
|
102
|
-
const btnId = `__add__${sourceId}->${targetId}${branchSuffix}`;
|
|
103
|
-
const gapTop = sourceNode.position.y + NODE_HEIGHT_EST;
|
|
104
|
-
const gapBottom = targetNode.position.y;
|
|
105
|
-
const midY = (gapTop + gapBottom) / 2 - ADD_BTN_HEIGHT_EST / 2;
|
|
106
|
-
state.nodes.push({
|
|
107
|
-
id: btnId,
|
|
108
|
-
type: 'addButton',
|
|
109
|
-
position: { x: xOffset, y: midY },
|
|
110
|
-
data: {
|
|
111
|
-
label: '',
|
|
112
|
-
afterStepId: context.afterStepId,
|
|
113
|
-
inBranch: context.inBranch,
|
|
114
|
-
},
|
|
115
|
-
});
|
|
116
|
-
// Replace the direct edge with source → button → target
|
|
117
|
-
const edgeIdx = state.edges.findIndex((e) => {
|
|
118
|
-
if (e.source !== sourceId || e.target !== targetId)
|
|
119
|
-
return false;
|
|
120
|
-
// When an edge label is specified, match on it (for empty branch edges)
|
|
121
|
-
if (context.edgeLabel !== undefined)
|
|
122
|
-
return e.label === context.edgeLabel;
|
|
123
|
-
return true;
|
|
124
|
-
});
|
|
125
|
-
if (edgeIdx >= 0) {
|
|
126
|
-
const oldEdge = state.edges[edgeIdx];
|
|
127
|
-
state.edges.splice(edgeIdx, 1);
|
|
128
|
-
const srcToBtnEdge = { id: `${sourceId}->${btnId}`, source: sourceId, target: btnId };
|
|
129
|
-
if (oldEdge.label)
|
|
130
|
-
srcToBtnEdge.label = oldEdge.label;
|
|
131
|
-
if (oldEdge.data)
|
|
132
|
-
srcToBtnEdge.data = oldEdge.data;
|
|
133
|
-
state.edges.push(srcToBtnEdge, { id: `${btnId}->${targetId}`, source: btnId, target: targetId });
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// ─── Main layout function ───
|
|
137
|
-
export function computeLayout(config, options) {
|
|
138
|
-
const state = { nodes: [], edges: [], y: 0 };
|
|
139
|
-
const stepMeta = options?.stepMeta;
|
|
140
|
-
const includeAddButtons = options?.includeAddButtons !== false;
|
|
141
|
-
// Trigger node
|
|
142
|
-
const triggerId = '__trigger__';
|
|
143
|
-
state.nodes.push({
|
|
144
|
-
id: triggerId,
|
|
145
|
-
type: 'trigger',
|
|
146
|
-
position: { x: 0, y: state.y },
|
|
147
|
-
data: {
|
|
148
|
-
triggerType: config.trigger.type,
|
|
149
|
-
triggerConfig: config.trigger.config,
|
|
150
|
-
label: options?.triggerLabel || config.trigger.type,
|
|
151
|
-
icon: options?.triggerIcon,
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
state.y += NODE_GAP_Y;
|
|
155
|
-
// Walk steps — returns the last connection point (step or rejoin node)
|
|
156
|
-
const lastId = layoutSteps(config.steps, triggerId, 0, state, stepMeta, includeAddButtons);
|
|
157
|
-
// Terminal node
|
|
158
|
-
const terminalId = '__terminal__';
|
|
159
|
-
state.nodes.push({
|
|
160
|
-
id: terminalId,
|
|
161
|
-
type: 'terminal',
|
|
162
|
-
position: { x: 0, y: state.y },
|
|
163
|
-
data: { label: 'End' },
|
|
164
|
-
});
|
|
165
|
-
state.edges.push({
|
|
166
|
-
id: `${lastId}->${terminalId}`,
|
|
167
|
-
source: lastId,
|
|
168
|
-
target: terminalId,
|
|
169
|
-
});
|
|
170
|
-
// Add button between last node and terminal
|
|
171
|
-
if (includeAddButtons) {
|
|
172
|
-
const afterStepId = lastId === triggerId ? '' : lastId;
|
|
173
|
-
insertAddButton(lastId, terminalId, 0, state, { afterStepId });
|
|
174
|
-
}
|
|
175
|
-
return { nodes: state.nodes, edges: state.edges };
|
|
176
|
-
}
|
|
177
|
-
// ─── Recursive step layout ───
|
|
178
|
-
function layoutSteps(steps, previousId, xOffset, state, stepMeta, includeAddButtons,
|
|
179
|
-
/** When laying out inside a branch, carries the branch context for add-buttons. */
|
|
180
|
-
inBranch) {
|
|
181
|
-
let prevId = previousId;
|
|
182
|
-
for (let stepIdx = 0; stepIdx < steps.length; stepIdx++) {
|
|
183
|
-
const step = steps[stepIdx];
|
|
184
|
-
const nodeId = step.id;
|
|
185
|
-
const meta = stepMeta?.get(step.type);
|
|
186
|
-
const dynamicContainer = detectDynamicBranchContainer(step, stepMeta);
|
|
187
|
-
// Create step node
|
|
188
|
-
state.nodes.push({
|
|
189
|
-
id: nodeId,
|
|
190
|
-
type: 'step',
|
|
191
|
-
position: { x: xOffset, y: state.y },
|
|
192
|
-
data: {
|
|
193
|
-
stepConfig: step,
|
|
194
|
-
label: meta?.name || step.type,
|
|
195
|
-
category: meta?.category,
|
|
196
|
-
kind: meta?.kind,
|
|
197
|
-
icon: meta?.icon,
|
|
198
|
-
dynamicBranchContainer: dynamicContainer ?? undefined,
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
// Edge from previous node → this step
|
|
202
|
-
state.edges.push({
|
|
203
|
-
id: `${prevId}->${nodeId}`,
|
|
204
|
-
source: prevId,
|
|
205
|
-
target: nodeId,
|
|
206
|
-
});
|
|
207
|
-
// Insert add-button between previous node and this step
|
|
208
|
-
if (includeAddButtons) {
|
|
209
|
-
const isFirstInChain = stepIdx === 0 && prevId === previousId;
|
|
210
|
-
const afterStepId = isFirstInChain
|
|
211
|
-
? (previousId === '__trigger__' ? '' : previousId)
|
|
212
|
-
: prevId;
|
|
213
|
-
insertAddButton(prevId, nodeId, xOffset, state, { afterStepId, inBranch });
|
|
214
|
-
}
|
|
215
|
-
state.y += NODE_GAP_Y;
|
|
216
|
-
// Handle branching steps
|
|
217
|
-
const branches = detectBranches(step, stepMeta);
|
|
218
|
-
if (branches) {
|
|
219
|
-
prevId = layoutBranches(nodeId, branches, xOffset, state, stepMeta, includeAddButtons);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
prevId = nodeId;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return prevId;
|
|
226
|
-
}
|
|
227
|
-
// ─── Single-branch (LOOP) layout — circular arc with loopback ───
|
|
228
|
-
function layoutLoopBranch(parentId, branchKey, branchSteps, xOffset, state, stepMeta, includeAddButtons) {
|
|
229
|
-
const parentNodeY = state.y - NODE_GAP_Y; // Y where the parent node was placed
|
|
230
|
-
if (branchSteps.length > 0) {
|
|
231
|
-
const N = branchSteps.length;
|
|
232
|
-
// Arc geometry: circle center to the right of the Loop node
|
|
233
|
-
const R = 160 + N * 20;
|
|
234
|
-
const cx = xOffset + NODE_WIDTH / 2 + R;
|
|
235
|
-
const cy = parentNodeY + NODE_HEIGHT_EST / 2;
|
|
236
|
-
// Distribute body steps on a clockwise arc (right side of circle).
|
|
237
|
-
// Asymmetric angle range ensures different X positions for every step.
|
|
238
|
-
// Start slightly above horizontal (-10°), sweep clockwise to lower-right.
|
|
239
|
-
const startAngle = -10; // degrees
|
|
240
|
-
const arcSpan = N === 1 ? 0 : Math.min(90, 30 + (N - 1) * 30);
|
|
241
|
-
const endAngle = startAngle + arcSpan;
|
|
242
|
-
const angles = [];
|
|
243
|
-
if (N === 1) {
|
|
244
|
-
angles.push(0); // directly right of center
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
for (let i = 0; i < N; i++) {
|
|
248
|
-
const t = i / (N - 1);
|
|
249
|
-
angles.push(startAngle + t * (endAngle - startAngle));
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
let prevId = parentId;
|
|
253
|
-
let maxBottomY = parentNodeY + NODE_HEIGHT_EST;
|
|
254
|
-
for (let i = 0; i < N; i++) {
|
|
255
|
-
const step = branchSteps[i];
|
|
256
|
-
const thetaRad = (angles[i] * Math.PI) / 180;
|
|
257
|
-
const nodeX = cx + R * Math.cos(thetaRad) - NODE_WIDTH / 2;
|
|
258
|
-
const nodeY = cy + R * Math.sin(thetaRad) - NODE_HEIGHT_EST / 2;
|
|
259
|
-
const meta = stepMeta?.get(step.type);
|
|
260
|
-
const dynamicContainer = detectDynamicBranchContainer(step, stepMeta);
|
|
261
|
-
state.nodes.push({
|
|
262
|
-
id: step.id,
|
|
263
|
-
type: 'step',
|
|
264
|
-
position: { x: nodeX, y: nodeY },
|
|
265
|
-
data: {
|
|
266
|
-
stepConfig: step,
|
|
267
|
-
label: meta?.name || step.type,
|
|
268
|
-
category: meta?.category,
|
|
269
|
-
kind: meta?.kind,
|
|
270
|
-
icon: meta?.icon,
|
|
271
|
-
dynamicBranchContainer: dynamicContainer ?? undefined,
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
// Edge from previous node → this body step
|
|
275
|
-
if (i === 0) {
|
|
276
|
-
// Entry: Loop right handle → first body step left handle
|
|
277
|
-
state.edges.push({
|
|
278
|
-
id: `${prevId}->${step.id}`,
|
|
279
|
-
source: prevId,
|
|
280
|
-
target: step.id,
|
|
281
|
-
type: 'loopBody',
|
|
282
|
-
sourceHandle: 'loop-right-source',
|
|
283
|
-
targetHandle: 'loop-body-target',
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
// Body-to-body: default bottom → top handles
|
|
288
|
-
state.edges.push({
|
|
289
|
-
id: `${prevId}->${step.id}`,
|
|
290
|
-
source: prevId,
|
|
291
|
-
target: step.id,
|
|
292
|
-
type: 'loopBody',
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
maxBottomY = Math.max(maxBottomY, nodeY + NODE_HEIGHT_EST);
|
|
296
|
-
prevId = step.id;
|
|
297
|
-
}
|
|
298
|
-
// Add-button at the next position on the arc
|
|
299
|
-
if (includeAddButtons) {
|
|
300
|
-
const addBtnAngleDeg = Math.min(95, angles[N - 1] + 25);
|
|
301
|
-
const addBtnRad = (addBtnAngleDeg * Math.PI) / 180;
|
|
302
|
-
const btnX = cx + R * Math.cos(addBtnRad) - NODE_WIDTH / 2;
|
|
303
|
-
const btnY = cy + R * Math.sin(addBtnRad) - ADD_BTN_HEIGHT_EST / 2;
|
|
304
|
-
const lastStepId = branchSteps[N - 1].id;
|
|
305
|
-
const btnId = `__add__loop::${parentId}::${branchKey}`;
|
|
306
|
-
state.nodes.push({
|
|
307
|
-
id: btnId,
|
|
308
|
-
type: 'addButton',
|
|
309
|
-
position: { x: btnX, y: btnY },
|
|
310
|
-
data: {
|
|
311
|
-
label: '',
|
|
312
|
-
afterStepId: lastStepId,
|
|
313
|
-
inBranch: { stepId: parentId, branchKey },
|
|
314
|
-
},
|
|
315
|
-
});
|
|
316
|
-
state.edges.push({
|
|
317
|
-
id: `${prevId}->${btnId}`,
|
|
318
|
-
source: prevId,
|
|
319
|
-
target: btnId,
|
|
320
|
-
type: 'loopBody',
|
|
321
|
-
});
|
|
322
|
-
maxBottomY = Math.max(maxBottomY, btnY + ADD_BTN_HEIGHT_EST);
|
|
323
|
-
}
|
|
324
|
-
// Loopback: last body step → Loop (U-curve closing the circle)
|
|
325
|
-
state.edges.push({
|
|
326
|
-
id: `${prevId}->${parentId}::loopback`,
|
|
327
|
-
source: prevId,
|
|
328
|
-
target: parentId,
|
|
329
|
-
type: 'loopback',
|
|
330
|
-
targetHandle: 'loopback-target',
|
|
331
|
-
});
|
|
332
|
-
// Advance state.y past the arc + loopback visual
|
|
333
|
-
state.y = maxBottomY + LOOPBACK_DROP + NODE_GAP_Y / 2;
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
// Empty loop body — show add-button to the right
|
|
337
|
-
if (includeAddButtons) {
|
|
338
|
-
const bodyX = xOffset + NODE_WIDTH + LOOP_BODY_GAP_X;
|
|
339
|
-
const btnId = `__add__loop_empty::${parentId}::${branchKey}`;
|
|
340
|
-
const btnY = parentNodeY + NODE_HEIGHT_EST / 2 - ADD_BTN_HEIGHT_EST / 2;
|
|
341
|
-
state.nodes.push({
|
|
342
|
-
id: btnId,
|
|
343
|
-
type: 'addButton',
|
|
344
|
-
position: { x: bodyX, y: btnY },
|
|
345
|
-
data: { label: '', inBranch: { stepId: parentId, branchKey } },
|
|
346
|
-
});
|
|
347
|
-
state.edges.push({
|
|
348
|
-
id: `${parentId}->${btnId}`,
|
|
349
|
-
source: parentId,
|
|
350
|
-
target: btnId,
|
|
351
|
-
sourceHandle: 'loop-right-source',
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
// Main flow continues from the parent node
|
|
356
|
-
return parentId;
|
|
357
|
-
}
|
|
358
|
-
// ─── Multi-branch (PARALLEL) fork/merge layout ───
|
|
359
|
-
function layoutBranches(parentId, branches, xOffset, state, stepMeta, includeAddButtons) {
|
|
360
|
-
const branchEntries = Object.entries(branches);
|
|
361
|
-
// Single branch (LOOP): delegate to right-side layout
|
|
362
|
-
if (branchEntries.length === 1) {
|
|
363
|
-
const [branchKey, branchSteps] = branchEntries[0];
|
|
364
|
-
return layoutLoopBranch(parentId, branchKey, branchSteps, xOffset, state, stepMeta, includeAddButtons);
|
|
365
|
-
}
|
|
366
|
-
// ─── Multi-branch (PARALLEL) ───
|
|
367
|
-
const rejoinId = `${parentId}__rejoin`;
|
|
368
|
-
// Measure actual width needed by each branch's subtree
|
|
369
|
-
const branchWidths = branchEntries.map(([, steps]) => measureBranchWidth(steps, stepMeta));
|
|
370
|
-
const totalWidth = branchWidths.reduce((s, w) => s + w, 0) +
|
|
371
|
-
(branchEntries.length - 1) * BRANCH_PAD_X;
|
|
372
|
-
const startX = xOffset - totalWidth / 2;
|
|
373
|
-
// Compute each branch's center x position from accumulated widths
|
|
374
|
-
const branchCenters = [];
|
|
375
|
-
let x = startX;
|
|
376
|
-
for (let i = 0; i < branchEntries.length; i++) {
|
|
377
|
-
branchCenters.push(x + branchWidths[i] / 2);
|
|
378
|
-
x += branchWidths[i] + BRANCH_PAD_X;
|
|
379
|
-
}
|
|
380
|
-
// Extra space between parent node and branch fork
|
|
381
|
-
state.y += BRANCH_FORK_GAP;
|
|
382
|
-
let maxY = state.y;
|
|
383
|
-
for (let i = 0; i < branchEntries.length; i++) {
|
|
384
|
-
const [branchKey, branchSteps] = branchEntries[i];
|
|
385
|
-
const label = branchLabel(branchKey);
|
|
386
|
-
const branchX = branchCenters[i];
|
|
387
|
-
const savedY = state.y;
|
|
388
|
-
const branchCtx = { stepId: parentId, branchKey };
|
|
389
|
-
if (branchSteps.length > 0) {
|
|
390
|
-
// Layout the branch steps recursively
|
|
391
|
-
const lastBranchId = layoutSteps(branchSteps, parentId, branchX, state, stepMeta, includeAddButtons, branchCtx);
|
|
392
|
-
// Edge: last branch step → rejoin
|
|
393
|
-
state.edges.push({
|
|
394
|
-
id: `${lastBranchId}->${rejoinId}`,
|
|
395
|
-
source: lastBranchId,
|
|
396
|
-
target: rejoinId,
|
|
397
|
-
});
|
|
398
|
-
// Label the first edge
|
|
399
|
-
const firstStepId = branchSteps[0].id;
|
|
400
|
-
const branchData = { branchStepId: parentId, branchKey };
|
|
401
|
-
const firstEdgeIdx = state.edges.findIndex((e) => e.source === parentId && e.target === firstStepId);
|
|
402
|
-
if (firstEdgeIdx >= 0) {
|
|
403
|
-
state.edges[firstEdgeIdx].label = label;
|
|
404
|
-
state.edges[firstEdgeIdx].data = branchData;
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
const addBtnId = `__add__${parentId}->${firstStepId}::${branchKey}`;
|
|
408
|
-
const addBtnEdgeIdx = state.edges.findIndex((e) => e.source === parentId && e.target === addBtnId);
|
|
409
|
-
if (addBtnEdgeIdx >= 0) {
|
|
410
|
-
state.edges[addBtnEdgeIdx].label = label;
|
|
411
|
-
state.edges[addBtnEdgeIdx].data = branchData;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
else {
|
|
416
|
-
// Empty branch — direct edge from parent to rejoin with label
|
|
417
|
-
const emptyEdge = {
|
|
418
|
-
id: `${parentId}->${rejoinId}::${branchKey}`,
|
|
419
|
-
source: parentId,
|
|
420
|
-
target: rejoinId,
|
|
421
|
-
};
|
|
422
|
-
emptyEdge.label = label;
|
|
423
|
-
emptyEdge.data = { branchStepId: parentId, branchKey };
|
|
424
|
-
state.edges.push(emptyEdge);
|
|
425
|
-
}
|
|
426
|
-
if (state.y > maxY)
|
|
427
|
-
maxY = state.y;
|
|
428
|
-
state.y = savedY;
|
|
429
|
-
}
|
|
430
|
-
state.y = maxY;
|
|
431
|
-
// Rejoin merge point
|
|
432
|
-
state.nodes.push({
|
|
433
|
-
id: rejoinId,
|
|
434
|
-
type: 'step',
|
|
435
|
-
position: { x: xOffset, y: state.y },
|
|
436
|
-
data: { label: '' },
|
|
437
|
-
});
|
|
438
|
-
state.y += NODE_GAP_Y;
|
|
439
|
-
// Now that rejoin node exists, insert add-buttons for empty branches
|
|
440
|
-
// and last-step → rejoin connections
|
|
441
|
-
if (includeAddButtons) {
|
|
442
|
-
for (let i = 0; i < branchEntries.length; i++) {
|
|
443
|
-
const [branchKey, branchSteps] = branchEntries[i];
|
|
444
|
-
const label = branchLabel(branchKey);
|
|
445
|
-
const branchX = branchCenters[i];
|
|
446
|
-
const branchCtx = { stepId: parentId, branchKey };
|
|
447
|
-
if (branchSteps.length === 0) {
|
|
448
|
-
// Empty branch: add-button between parent and rejoin
|
|
449
|
-
insertAddButton(parentId, rejoinId, branchX, state, {
|
|
450
|
-
inBranch: branchCtx,
|
|
451
|
-
edgeLabel: label,
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
// Non-empty branch: add-button between last step and rejoin
|
|
456
|
-
const lastStepId = branchSteps[branchSteps.length - 1].id;
|
|
457
|
-
insertAddButton(lastStepId, rejoinId, branchX, state, {
|
|
458
|
-
inBranch: branchCtx,
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
return rejoinId;
|
|
464
|
-
}
|
|
465
|
-
//# sourceMappingURL=layout-engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-engine.js","sourceRoot":"","sources":["../../../../src/components/builder/v2/layout-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAgD3F,oBAAoB;AAEpB,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,+CAA+C;AAC/C,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,0CAA0C;AAC1C,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,0DAA0D;AAC1D,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,4DAA4D;AAC5D,MAAM,aAAa,GAAG,GAAG,CAAC;AAuB1B,oDAAoD;AAEpD,SAAS,cAAc,CACrB,IAAwB,EACxB,QAAgC;IAEhC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiC,CAAC;IACtD,MAAM,IAAI,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAS,4BAA4B,CACnC,IAAwB,EACxB,QAAgC;IAEhC,MAAM,IAAI,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,YAAY;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAA4C,CAAC;IACtG,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,eAAe,GAAG,UAAU,CAAC,sBAAsB,CAAwC,CAAC;QAClG,IAAI,CAAC,eAAe;YAAE,SAAS;QAC/B,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAwC,CAAC;YAC9E,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oCAAoC;AAEpC;;;GAGG;AACH,SAAS,kBAAkB,CACzB,KAA2B,EAC3B,QAAgC;IAEhC,IAAI,QAAQ,GAAG,UAAU,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,kEAAkE;gBAClE,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC3B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAC7C,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACvC,CAAC;gBACF,MAAM,aAAa,GACjB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACpC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC;gBACtC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6BAA6B;AAE7B,qEAAqE;AACrE,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,SAAS,eAAe,CACtB,QAAgB,EAChB,QAAgB,EAChB,OAAe,EACf,KAAkB,EAClB,OAIC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE,OAAO;IAEvC,kGAAkG;IAClG,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,UAAU,QAAQ,KAAK,QAAQ,GAAG,YAAY,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC;IACvD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;IAE/D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE;QACjC,IAAI,EAAE;YACJ,KAAK,EAAE,EAAE;YACT,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;KACF,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjE,wEAAwE;QACxE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,SAAS,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;QACtC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,YAAY,GAAe,EAAE,EAAE,EAAE,GAAG,QAAQ,KAAK,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAClG,IAAI,OAAO,CAAC,KAAK;YAAE,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACtD,IAAI,OAAO,CAAC,IAAI;YAAE,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACnD,KAAK,CAAC,KAAK,CAAC,IAAI,CACd,YAAY,EACZ,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+BAA+B;AAE/B,MAAM,UAAU,aAAa,CAAC,MAAsB,EAAE,OAAuB;IAC3E,MAAM,KAAK,GAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,KAAK,KAAK,CAAC;IAE/D,eAAe;IACf,MAAM,SAAS,GAAG,aAAa,CAAC;IAChC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;QAC9B,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YAChC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YACpC,KAAK,EAAE,OAAO,EAAE,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI;YACnD,IAAI,EAAE,OAAO,EAAE,WAAW;SAC3B;KACF,CAAC,CAAC;IACH,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC;IAEtB,uEAAuE;IACvE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAE3F,gBAAgB;IAChB,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;QAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KACvB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,GAAG,MAAM,KAAK,UAAU,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,4CAA4C;IAC5C,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,gCAAgC;AAEhC,SAAS,WAAW,CAClB,KAA2B,EAC3B,UAAkB,EAClB,OAAe,EACf,KAAkB,EAClB,QAAgC,EAChC,iBAA2B;AAC3B,mFAAmF;AACnF,QAAgD;IAEhD,IAAI,MAAM,GAAG,UAAU,CAAC;IAExB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEtE,mBAAmB;QACnB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;YACpC,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;gBAC9B,QAAQ,EAAE,IAAI,EAAE,QAAQ;gBACxB,IAAI,EAAE,IAAI,EAAE,IAAI;gBAChB,IAAI,EAAE,IAAI,EAAE,IAAI;gBAChB,sBAAsB,EAAE,gBAAgB,IAAI,SAAS;aACtD;SACF,CAAC,CAAC;QAEH,sCAAsC;QACtC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,EAAE,EAAE,GAAG,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,wDAAwD;QACxD,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,UAAU,CAAC;YAC9D,MAAM,WAAW,GAAG,cAAc;gBAChC,CAAC,CAAC,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;gBAClD,CAAC,CAAC,MAAM,CAAC;YACX,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC;QAEtB,yBAAyB;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mEAAmE;AAEnE,SAAS,gBAAgB,CACvB,QAAgB,EAChB,SAAiB,EACjB,WAAiC,EACjC,OAAe,EACf,KAAkB,EAClB,QAAgC,EAChC,iBAA2B;IAE3B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,qCAAqC;IAE/E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;QAE7B,4DAA4D;QAC5D,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC;QAE7C,mEAAmE;QACnE,uEAAuE;QACvE,0EAA0E;QAC1E,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU;QAClC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;QAEtC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;QAC7C,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,UAAU,GAAG,WAAW,GAAG,eAAe,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAE9C,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;YAEhE,MAAM,IAAI,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;gBAChC,IAAI,EAAE;oBACJ,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;oBAC9B,QAAQ,EAAE,IAAI,EAAE,QAAQ;oBACxB,IAAI,EAAE,IAAI,EAAE,IAAI;oBAChB,IAAI,EAAE,IAAI,EAAE,IAAI;oBAChB,sBAAsB,EAAE,gBAAgB,IAAI,SAAS;iBACtD;aACF,CAAC,CAAC;YAEH,2CAA2C;YAC3C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,yDAAyD;gBACzD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE;oBAC3B,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,IAAI,EAAE,UAAU;oBAChB,YAAY,EAAE,mBAAmB;oBACjC,YAAY,EAAE,kBAAkB;iBACjC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE;oBAC3B,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC;YAC3D,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,CAAC;QAED,6CAA6C;QAC7C,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YACnD,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,gBAAgB,QAAQ,KAAK,SAAS,EAAE,CAAC;YAEvD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;gBAC9B,IAAI,EAAE;oBACJ,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,UAAU;oBACvB,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;iBAC1C;aACF,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,GAAG,MAAM,KAAK,KAAK,EAAE;gBACzB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU;aACjB,CAAC,CAAC;YAEH,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,kBAAkB,CAAC,CAAC;QAC/D,CAAC;QAED,+DAA+D;QAC/D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,EAAE,EAAE,GAAG,MAAM,KAAK,QAAQ,YAAY;YACtC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,iBAAiB;SAChC,CAAC,CAAC;QAEH,iDAAiD;QACjD,KAAK,CAAC,CAAC,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,iDAAiD;QACjD,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;YACrD,MAAM,KAAK,GAAG,sBAAsB,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;YACxE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE;gBAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;aAC/D,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,GAAG,QAAQ,KAAK,KAAK,EAAE;gBAC3B,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,KAAK;gBACb,YAAY,EAAE,mBAAmB;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oDAAoD;AAEpD,SAAS,cAAc,CACrB,QAAgB,EAChB,QAA8C,EAC9C,OAAe,EACf,KAAkB,EAClB,QAAgC,EAChC,iBAA2B;IAE3B,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/C,sDAAsD;IACtD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;QACnD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACzG,CAAC;IAED,kCAAkC;IAClC,MAAM,QAAQ,GAAG,GAAG,QAAQ,UAAU,CAAC;IAEvC,uDAAuD;IACvD,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CACnD,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CACpC,CAAC;IACF,MAAM,UAAU,GACd,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;IAExC,kEAAkE;IAClE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,MAAM,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC,IAAI,YAAY,CAAC,CAAC,CAAE,GAAG,YAAY,CAAC;IACvC,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC;IAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;QACnD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAElD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,sCAAsC;YACtC,MAAM,YAAY,GAAG,WAAW,CAC9B,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAC9E,CAAC;YAEF,kCAAkC;YAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,GAAG,YAAY,KAAK,QAAQ,EAAE;gBAClC,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,uBAAuB;YACvB,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YACzD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CACzD,CAAC;YACF,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,KAAK,CAAC,YAAY,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBACzC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAE,CAAC,IAAI,GAAG,UAAU,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,UAAU,QAAQ,KAAK,WAAW,KAAK,SAAS,EAAE,CAAC;gBACpE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CACtD,CAAC;gBACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;oBAC1C,KAAK,CAAC,KAAK,CAAC,aAAa,CAAE,CAAC,IAAI,GAAG,UAAU,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,MAAM,SAAS,GAAe;gBAC5B,EAAE,EAAE,GAAG,QAAQ,KAAK,QAAQ,KAAK,SAAS,EAAE;gBAC5C,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;aACjB,CAAC;YACF,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,SAAS,CAAC,IAAI,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YACvD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAEf,qBAAqB;IACrB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;QACpC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;KACpB,CAAC,CAAC;IAEH,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC;IAEtB,qEAAqE;IACrE,qCAAqC;IACrC,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;YAClC,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YAElD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,qDAAqD;gBACrD,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;oBAClD,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,4DAA4D;gBAC5D,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;gBAC3D,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;oBACpD,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node-types.d.ts","sourceRoot":"","sources":["../../../../src/components/builder/v2/node-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,eAAO,MAAM,WAAW,EAAE,SAKzB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { StepNode } from './StepNode.js';
|
|
2
|
-
import { TriggerNode } from './TriggerNode.js';
|
|
3
|
-
import { AddStepButton } from './AddStepButton.js';
|
|
4
|
-
import { TerminalNode } from './TerminalNode.js';
|
|
5
|
-
export const v2NodeTypes = {
|
|
6
|
-
step: StepNode,
|
|
7
|
-
trigger: TriggerNode,
|
|
8
|
-
addButton: AddStepButton,
|
|
9
|
-
terminal: TerminalNode,
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=node-types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node-types.js","sourceRoot":"","sources":["../../../../src/components/builder/v2/node-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAc;IACpC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,aAAa;IACxB,QAAQ,EAAE,YAAY;CACvB,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* v2/theme — Centralized category theming.
|
|
3
|
-
*
|
|
4
|
-
* All visual styling for categories is derived from backend-provided category names.
|
|
5
|
-
* The UI never hardcodes which step TYPE belongs to which category.
|
|
6
|
-
*/
|
|
7
|
-
export interface CategoryTheme {
|
|
8
|
-
/** Tailwind class for left accent border (e.g. "border-l-sky-400") */
|
|
9
|
-
accent: string;
|
|
10
|
-
/** Tailwind class for icon container background */
|
|
11
|
-
iconBg: string;
|
|
12
|
-
/** Tailwind class for icon container text color */
|
|
13
|
-
iconText: string;
|
|
14
|
-
/** Tailwind class for the category dot */
|
|
15
|
-
dot: string;
|
|
16
|
-
/** Tailwind class for light background (cards, picker hover) */
|
|
17
|
-
lightBg: string;
|
|
18
|
-
/** Tailwind class for selection ring */
|
|
19
|
-
ring: string;
|
|
20
|
-
/** CSS color value for edges/connectors */
|
|
21
|
-
edgeColor: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get the visual theme for a category name (from backend StepSummary.category).
|
|
25
|
-
* Falls back gracefully for unknown categories.
|
|
26
|
-
*/
|
|
27
|
-
export declare function getCategoryTheme(category?: string): CategoryTheme;
|
|
28
|
-
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/components/builder/v2/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAmDD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAGjE"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* v2/theme — Centralized category theming.
|
|
3
|
-
*
|
|
4
|
-
* All visual styling for categories is derived from backend-provided category names.
|
|
5
|
-
* The UI never hardcodes which step TYPE belongs to which category.
|
|
6
|
-
*/
|
|
7
|
-
const CATEGORY_THEMES = {
|
|
8
|
-
data: {
|
|
9
|
-
accent: 'border-l-sky-400',
|
|
10
|
-
iconBg: 'bg-sky-50',
|
|
11
|
-
iconText: 'text-sky-600',
|
|
12
|
-
dot: 'bg-sky-400',
|
|
13
|
-
lightBg: 'bg-sky-50/50',
|
|
14
|
-
ring: 'ring-sky-200 border-sky-300',
|
|
15
|
-
edgeColor: '#38bdf8',
|
|
16
|
-
},
|
|
17
|
-
integration: {
|
|
18
|
-
accent: 'border-l-violet-400',
|
|
19
|
-
iconBg: 'bg-violet-50',
|
|
20
|
-
iconText: 'text-violet-600',
|
|
21
|
-
dot: 'bg-violet-400',
|
|
22
|
-
lightBg: 'bg-violet-50/50',
|
|
23
|
-
ring: 'ring-violet-200 border-violet-300',
|
|
24
|
-
edgeColor: '#a78bfa',
|
|
25
|
-
},
|
|
26
|
-
control: {
|
|
27
|
-
accent: 'border-l-amber-400',
|
|
28
|
-
iconBg: 'bg-amber-50',
|
|
29
|
-
iconText: 'text-amber-600',
|
|
30
|
-
dot: 'bg-amber-400',
|
|
31
|
-
lightBg: 'bg-amber-50/50',
|
|
32
|
-
ring: 'ring-amber-200 border-amber-300',
|
|
33
|
-
edgeColor: '#fbbf24',
|
|
34
|
-
},
|
|
35
|
-
flow: {
|
|
36
|
-
accent: 'border-l-teal-400',
|
|
37
|
-
iconBg: 'bg-teal-50',
|
|
38
|
-
iconText: 'text-teal-600',
|
|
39
|
-
dot: 'bg-teal-400',
|
|
40
|
-
lightBg: 'bg-teal-50/50',
|
|
41
|
-
ring: 'ring-teal-200 border-teal-300',
|
|
42
|
-
edgeColor: '#2dd4bf',
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
const FALLBACK_THEME = {
|
|
46
|
-
accent: 'border-l-slate-400',
|
|
47
|
-
iconBg: 'bg-slate-100',
|
|
48
|
-
iconText: 'text-slate-500',
|
|
49
|
-
dot: 'bg-slate-400',
|
|
50
|
-
lightBg: 'bg-slate-50/50',
|
|
51
|
-
ring: 'ring-slate-200 border-slate-300',
|
|
52
|
-
edgeColor: '#94a3b8',
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Get the visual theme for a category name (from backend StepSummary.category).
|
|
56
|
-
* Falls back gracefully for unknown categories.
|
|
57
|
-
*/
|
|
58
|
-
export function getCategoryTheme(category) {
|
|
59
|
-
if (!category)
|
|
60
|
-
return FALLBACK_THEME;
|
|
61
|
-
return CATEGORY_THEMES[category.toLowerCase()] ?? FALLBACK_THEME;
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=theme.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/components/builder/v2/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,MAAM,eAAe,GAAkC;IACrD,IAAI,EAAE;QACJ,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,cAAc;QACxB,GAAG,EAAE,YAAY;QACjB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,6BAA6B;QACnC,SAAS,EAAE,SAAS;KACrB;IACD,WAAW,EAAE;QACX,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,cAAc;QACtB,QAAQ,EAAE,iBAAiB;QAC3B,GAAG,EAAE,eAAe;QACpB,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,mCAAmC;QACzC,SAAS,EAAE,SAAS;KACrB;IACD,OAAO,EAAE;QACP,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,gBAAgB;QAC1B,GAAG,EAAE,cAAc;QACnB,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE,iCAAiC;QACvC,SAAS,EAAE,SAAS;KACrB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,eAAe;QACzB,GAAG,EAAE,aAAa;QAClB,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,+BAA+B;QACrC,SAAS,EAAE,SAAS;KACrB;CACF,CAAC;AAEF,MAAM,cAAc,GAAkB;IACpC,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE,gBAAgB;IAC1B,GAAG,EAAE,cAAc;IACnB,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE,iCAAiC;IACvC,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,cAAc,CAAC;IACrC,OAAO,eAAe,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,cAAc,CAAC;AACnE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface WorkflowSummaryEditorProps {
|
|
2
|
-
workflowId: string;
|
|
3
|
-
className?: string | undefined;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Edits the workflow-level summary/readme — a first-class record column,
|
|
7
|
-
* independent of the builder config. Reads via `workflows.get`, saves via
|
|
8
|
-
* `workflows.update({ summary })`.
|
|
9
|
-
*/
|
|
10
|
-
export declare function WorkflowSummaryEditor({ workflowId, className }: WorkflowSummaryEditorProps): import("react").JSX.Element;
|
|
11
|
-
//# sourceMappingURL=WorkflowSummaryEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowSummaryEditor.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/WorkflowSummaryEditor.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAgE1F"}
|