@xyne/workflow-ui 1.3.26 → 1.3.29

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 (177) hide show
  1. package/dist/components/builder/AddStepButton.d.ts +6 -0
  2. package/dist/components/builder/AddStepButton.d.ts.map +1 -0
  3. package/dist/components/builder/AddStepButton.js +7 -0
  4. package/dist/components/builder/AddStepButton.js.map +1 -0
  5. package/dist/components/builder/BranchEdge.d.ts +3 -0
  6. package/dist/components/builder/BranchEdge.d.ts.map +1 -0
  7. package/dist/components/builder/BranchEdge.js +19 -0
  8. package/dist/components/builder/BranchEdge.js.map +1 -0
  9. package/dist/components/builder/BuilderToolbar.d.ts +10 -0
  10. package/dist/components/builder/BuilderToolbar.d.ts.map +1 -0
  11. package/dist/components/builder/BuilderToolbar.js +16 -0
  12. package/dist/components/builder/BuilderToolbar.js.map +1 -0
  13. package/dist/components/builder/StepConfigDrawer.d.ts +11 -0
  14. package/dist/components/builder/StepConfigDrawer.d.ts.map +1 -0
  15. package/dist/components/builder/StepConfigDrawer.js +21 -0
  16. package/dist/components/builder/StepConfigDrawer.js.map +1 -0
  17. package/dist/components/builder/StepNode.d.ts +15 -0
  18. package/dist/components/builder/StepNode.d.ts.map +1 -0
  19. package/dist/components/builder/StepNode.js +56 -0
  20. package/dist/components/builder/StepNode.js.map +1 -0
  21. package/dist/components/builder/StepPalette.d.ts +7 -0
  22. package/dist/components/builder/StepPalette.d.ts.map +1 -0
  23. package/dist/components/builder/StepPalette.js +83 -0
  24. package/dist/components/builder/StepPalette.js.map +1 -0
  25. package/dist/components/builder/StepPicker.d.ts +9 -0
  26. package/dist/components/builder/StepPicker.d.ts.map +1 -0
  27. package/dist/components/builder/StepPicker.js +95 -0
  28. package/dist/components/builder/StepPicker.js.map +1 -0
  29. package/dist/components/builder/TriggerConfigPanel.d.ts +10 -0
  30. package/dist/components/builder/TriggerConfigPanel.d.ts.map +1 -0
  31. package/dist/components/builder/TriggerConfigPanel.js +49 -0
  32. package/dist/components/builder/TriggerConfigPanel.js.map +1 -0
  33. package/dist/components/builder/TriggerNode.d.ts +9 -0
  34. package/dist/components/builder/TriggerNode.d.ts.map +1 -0
  35. package/dist/components/builder/TriggerNode.js +30 -0
  36. package/dist/components/builder/TriggerNode.js.map +1 -0
  37. package/dist/components/builder/TriggerPicker.d.ts +8 -0
  38. package/dist/components/builder/TriggerPicker.d.ts.map +1 -0
  39. package/dist/components/builder/TriggerPicker.js +61 -0
  40. package/dist/components/builder/TriggerPicker.js.map +1 -0
  41. package/dist/components/builder/WorkflowBuilder.d.ts +20 -0
  42. package/dist/components/builder/WorkflowBuilder.d.ts.map +1 -0
  43. package/dist/components/builder/WorkflowBuilder.js +157 -0
  44. package/dist/components/builder/WorkflowBuilder.js.map +1 -0
  45. package/dist/components/builder/edge-types.d.ts +3 -0
  46. package/dist/components/builder/edge-types.d.ts.map +1 -0
  47. package/dist/components/builder/edge-types.js +5 -0
  48. package/dist/components/builder/edge-types.js.map +1 -0
  49. package/dist/components/builder/node-types.d.ts +3 -0
  50. package/dist/components/builder/node-types.d.ts.map +1 -0
  51. package/dist/components/builder/node-types.js +11 -0
  52. package/dist/components/builder/node-types.js.map +1 -0
  53. package/dist/components/builder/v2/AddStepButton.d.ts +6 -0
  54. package/dist/components/builder/v2/AddStepButton.d.ts.map +1 -0
  55. package/dist/components/builder/v2/AddStepButton.js +6 -0
  56. package/dist/components/builder/v2/AddStepButton.js.map +1 -0
  57. package/dist/components/builder/v2/BranchEdge.d.ts +3 -0
  58. package/dist/components/builder/v2/BranchEdge.d.ts.map +1 -0
  59. package/dist/components/builder/v2/BranchEdge.js +46 -0
  60. package/dist/components/builder/v2/BranchEdge.js.map +1 -0
  61. package/dist/components/builder/v2/LoopBodyEdge.d.ts +7 -0
  62. package/dist/components/builder/v2/LoopBodyEdge.d.ts.map +1 -0
  63. package/dist/components/builder/v2/LoopBodyEdge.js +19 -0
  64. package/dist/components/builder/v2/LoopBodyEdge.js.map +1 -0
  65. package/dist/components/builder/v2/LoopbackEdge.d.ts +10 -0
  66. package/dist/components/builder/v2/LoopbackEdge.d.ts.map +1 -0
  67. package/dist/components/builder/v2/LoopbackEdge.js +26 -0
  68. package/dist/components/builder/v2/LoopbackEdge.js.map +1 -0
  69. package/dist/components/builder/v2/StepNode.d.ts +21 -0
  70. package/dist/components/builder/v2/StepNode.d.ts.map +1 -0
  71. package/dist/components/builder/v2/StepNode.js +36 -0
  72. package/dist/components/builder/v2/StepNode.js.map +1 -0
  73. package/dist/components/builder/v2/StepPicker.d.ts +8 -0
  74. package/dist/components/builder/v2/StepPicker.d.ts.map +1 -0
  75. package/dist/components/builder/v2/StepPicker.js +73 -0
  76. package/dist/components/builder/v2/StepPicker.js.map +1 -0
  77. package/dist/components/builder/v2/TerminalNode.d.ts +6 -0
  78. package/dist/components/builder/v2/TerminalNode.d.ts.map +1 -0
  79. package/dist/components/builder/v2/TerminalNode.js +7 -0
  80. package/dist/components/builder/v2/TerminalNode.js.map +1 -0
  81. package/dist/components/builder/v2/TriggerNode.d.ts +10 -0
  82. package/dist/components/builder/v2/TriggerNode.d.ts.map +1 -0
  83. package/dist/components/builder/v2/TriggerNode.js +20 -0
  84. package/dist/components/builder/v2/TriggerNode.js.map +1 -0
  85. package/dist/components/builder/v2/TriggerPicker.d.ts +7 -0
  86. package/dist/components/builder/v2/TriggerPicker.d.ts.map +1 -0
  87. package/dist/components/builder/v2/TriggerPicker.js +45 -0
  88. package/dist/components/builder/v2/TriggerPicker.js.map +1 -0
  89. package/dist/components/builder/v2/WorkflowBuilder.d.ts +14 -0
  90. package/dist/components/builder/v2/WorkflowBuilder.d.ts.map +1 -0
  91. package/dist/components/builder/v2/WorkflowBuilder.js +189 -0
  92. package/dist/components/builder/v2/WorkflowBuilder.js.map +1 -0
  93. package/dist/components/builder/v2/edge-types.d.ts +3 -0
  94. package/dist/components/builder/v2/edge-types.d.ts.map +1 -0
  95. package/dist/components/builder/v2/edge-types.js +9 -0
  96. package/dist/components/builder/v2/edge-types.js.map +1 -0
  97. package/dist/components/builder/v2/icons.d.ts +25 -0
  98. package/dist/components/builder/v2/icons.d.ts.map +1 -0
  99. package/dist/components/builder/v2/icons.js +43 -0
  100. package/dist/components/builder/v2/icons.js.map +1 -0
  101. package/dist/components/builder/v2/layout-engine.d.ts +76 -0
  102. package/dist/components/builder/v2/layout-engine.d.ts.map +1 -0
  103. package/dist/components/builder/v2/layout-engine.js +465 -0
  104. package/dist/components/builder/v2/layout-engine.js.map +1 -0
  105. package/dist/components/builder/v2/node-types.d.ts +3 -0
  106. package/dist/components/builder/v2/node-types.d.ts.map +1 -0
  107. package/dist/components/builder/v2/node-types.js +11 -0
  108. package/dist/components/builder/v2/node-types.js.map +1 -0
  109. package/dist/components/builder/v2/theme.d.ts +28 -0
  110. package/dist/components/builder/v2/theme.d.ts.map +1 -0
  111. package/dist/components/builder/v2/theme.js +63 -0
  112. package/dist/components/builder/v2/theme.js.map +1 -0
  113. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts +11 -0
  114. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts.map +1 -0
  115. package/dist/components/dashboard/WorkflowSummaryEditor.js +46 -0
  116. package/dist/components/dashboard/WorkflowSummaryEditor.js.map +1 -0
  117. package/dist/components/execution/CitationSourcePanel.d.ts.map +1 -1
  118. package/dist/components/execution/CitationSourcePanel.js +28 -12
  119. package/dist/components/execution/CitationSourcePanel.js.map +1 -1
  120. package/dist/components/execution/ExecutionEdge.d.ts +4 -0
  121. package/dist/components/execution/ExecutionEdge.d.ts.map +1 -0
  122. package/dist/components/execution/ExecutionEdge.js +27 -0
  123. package/dist/components/execution/ExecutionEdge.js.map +1 -0
  124. package/dist/components/execution/ExecutionStepNode.d.ts +14 -0
  125. package/dist/components/execution/ExecutionStepNode.d.ts.map +1 -0
  126. package/dist/components/execution/ExecutionStepNode.js +47 -0
  127. package/dist/components/execution/ExecutionStepNode.js.map +1 -0
  128. package/dist/components/execution/ExecutionTabs.d.ts +26 -1
  129. package/dist/components/execution/ExecutionTabs.d.ts.map +1 -1
  130. package/dist/components/execution/ExecutionTabs.js +34 -19
  131. package/dist/components/execution/ExecutionTabs.js.map +1 -1
  132. package/dist/components/execution/ExecutionTriggerNode.d.ts +9 -0
  133. package/dist/components/execution/ExecutionTriggerNode.d.ts.map +1 -0
  134. package/dist/components/execution/ExecutionTriggerNode.js +15 -0
  135. package/dist/components/execution/ExecutionTriggerNode.js.map +1 -0
  136. package/dist/components/execution/ExecutionViewer.d.ts.map +1 -1
  137. package/dist/components/execution/ExecutionViewer.js +1 -1
  138. package/dist/components/execution/ExecutionViewer.js.map +1 -1
  139. package/dist/components/execution/StepAgentPanels.d.ts +9 -0
  140. package/dist/components/execution/StepAgentPanels.d.ts.map +1 -0
  141. package/dist/components/execution/StepAgentPanels.js +133 -0
  142. package/dist/components/execution/StepAgentPanels.js.map +1 -0
  143. package/dist/components/execution/execution-layout.d.ts +31 -0
  144. package/dist/components/execution/execution-layout.d.ts.map +1 -0
  145. package/dist/components/execution/execution-layout.js +90 -0
  146. package/dist/components/execution/execution-layout.js.map +1 -0
  147. package/dist/components/execution/origin/citation-resolver.js +1 -1
  148. package/dist/components/execution/origin/citation-resolver.js.map +1 -1
  149. package/dist/components/shared/JsonTreeViewer.d.ts +9 -0
  150. package/dist/components/shared/JsonTreeViewer.d.ts.map +1 -0
  151. package/dist/components/shared/JsonTreeViewer.js +46 -0
  152. package/dist/components/shared/JsonTreeViewer.js.map +1 -0
  153. package/dist/components/shared/viewers/CsvView.js +2 -2
  154. package/dist/components/shared/viewers/CsvView.js.map +1 -1
  155. package/dist/components/shared/viewers/DocxView.js +1 -1
  156. package/dist/components/shared/viewers/DocxView.js.map +1 -1
  157. package/dist/components/shared/viewers/HtmlView.js +1 -1
  158. package/dist/components/shared/viewers/HtmlView.js.map +1 -1
  159. package/dist/components/shared/viewers/TextView.js +3 -3
  160. package/dist/components/shared/viewers/TextView.js.map +1 -1
  161. package/dist/layout-engine/components.d.ts.map +1 -1
  162. package/dist/layout-engine/components.js +11 -3
  163. package/dist/layout-engine/components.js.map +1 -1
  164. package/dist/styles.css +1 -1
  165. package/package.json +1 -1
  166. package/dist/components/schema-form/AttachmentField.d.ts +0 -16
  167. package/dist/components/schema-form/AttachmentField.d.ts.map +0 -1
  168. package/dist/components/schema-form/AttachmentField.js +0 -139
  169. package/dist/components/schema-form/AttachmentField.js.map +0 -1
  170. package/dist/components/share/ShareDialog.d.ts +0 -21
  171. package/dist/components/share/ShareDialog.d.ts.map +0 -1
  172. package/dist/components/share/ShareDialog.js +0 -98
  173. package/dist/components/share/ShareDialog.js.map +0 -1
  174. package/dist/utils/map-lanes.d.ts +0 -35
  175. package/dist/utils/map-lanes.d.ts.map +0 -1
  176. package/dist/utils/map-lanes.js +0 -48
  177. package/dist/utils/map-lanes.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { useWorkflowClient } from '../../hooks/use-workflow-client.js';
4
+ import { cn } from '../shared/cn.js';
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 function WorkflowSummaryEditor({ workflowId, className }) {
11
+ const client = useWorkflowClient();
12
+ const [summary, setSummary] = useState('');
13
+ const [loaded, setLoaded] = useState(false);
14
+ const [saving, setSaving] = useState(false);
15
+ const [savedAt, setSavedAt] = useState(false);
16
+ useEffect(() => {
17
+ let cancelled = false;
18
+ void (async () => {
19
+ try {
20
+ const wf = await client.workflows.get(workflowId);
21
+ if (!cancelled) {
22
+ setSummary(wf.summary ?? '');
23
+ setLoaded(true);
24
+ }
25
+ }
26
+ catch {
27
+ if (!cancelled)
28
+ setLoaded(true);
29
+ }
30
+ })();
31
+ return () => { cancelled = true; };
32
+ }, [client, workflowId]);
33
+ const save = async () => {
34
+ setSaving(true);
35
+ setSavedAt(false);
36
+ try {
37
+ await client.workflows.update(workflowId, { summary });
38
+ setSavedAt(true);
39
+ }
40
+ finally {
41
+ setSaving(false);
42
+ }
43
+ };
44
+ return (_jsxs("div", { className: cn('space-y-2', className), "data-testid": "workflow-summary-editor", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-[11px] font-bold uppercase tracking-widest text-slate-400", children: "Summary" }), _jsx("button", { type: "button", "data-testid": "summary-save", onClick: () => void save(), disabled: saving || !loaded, className: cn('rounded-md px-3 py-1 text-[12px] font-semibold text-white transition-colors', savedAt ? 'bg-emerald-500' : 'bg-indigo-500 hover:bg-indigo-600', (saving || !loaded) && 'opacity-50 cursor-not-allowed'), children: saving ? 'Saving…' : savedAt ? 'Saved' : 'Save summary' })] }), _jsx("textarea", { "data-testid": "summary-input", value: summary, onChange: (e) => { setSummary(e.target.value); setSavedAt(false); }, rows: 3, placeholder: "Describe what this workflow does\u2026", className: "w-full resize-y rounded-lg border border-slate-200 px-3 py-2 text-[13px] outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-100" })] }));
45
+ }
46
+ //# sourceMappingURL=WorkflowSummaryEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowSummaryEditor.js","sourceRoot":"","sources":["../../../src/components/dashboard/WorkflowSummaryEditor.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CitationSourcePanel.d.ts","sourceRoot":"","sources":["../../../src/components/execution/CitationSourcePanel.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC;AAYrF;;iFAEiF;AACjF,eAAO,MAAM,cAAc,GAAI,GAAG,iBAAiB,KAAG,MAMjC,CAAC;AAEtB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAQD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,GACV,EAAE,wBAAwB,sCA0H1B"}
1
+ {"version":3,"file":"CitationSourcePanel.d.ts","sourceRoot":"","sources":["../../../src/components/execution/CitationSourcePanel.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC;AAYrF;;iFAEiF;AACjF,eAAO,MAAM,cAAc,GAAI,GAAG,iBAAiB,KAAG,MAMjC,CAAC;AAEtB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAcD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,GACV,EAAE,wBAAwB,sCAsL1B"}
@@ -10,7 +10,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  * Every open document's viewer stays mounted (hidden when inactive) so switching
11
11
  * tabs preserves each one's scroll and zoom.
12
12
  */
13
- import { useEffect, useRef } from 'react';
13
+ import { useEffect, useRef, useState } from 'react';
14
+ import { createPortal } from 'react-dom';
14
15
  import { SidePanelShell } from './SidePanelShell.js';
15
16
  import { DocumentViewer } from '../shared/DocumentViewer.js';
16
17
  import { StepOutputView } from './StepOutputView.js';
@@ -37,6 +38,7 @@ export const citationDocKey = (d) => d.kind === 'doc'
37
38
  // Keying on the id would collapse two iterations into one tab.
38
39
  : `step:${d.ref}`;
39
40
  const CloseIcon = ({ size = 12 }) => (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }));
41
+ const ExpandIcon = ({ size = 14 }) => (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("polyline", { points: "15 3 21 3 21 9" }), _jsx("polyline", { points: "9 21 3 21 3 15" }), _jsx("line", { x1: "21", y1: "3", x2: "14", y2: "10" }), _jsx("line", { x1: "3", y1: "21", x2: "10", y2: "14" })] }));
40
42
  export function CitationSourcePanel({ docs, activeKey, onSelect, onCloseTab, onCloseAll, width, onWidthChange, className, }) {
41
43
  const client = useWorkflowClient();
42
44
  // The provider is mounted above this panel in the run view, so a step tab can
@@ -44,6 +46,7 @@ export function CitationSourcePanel({ docs, activeKey, onSelect, onCloseTab, onC
44
46
  const originCtx = useCitationOrigin();
45
47
  const scrollerRef = useRef(null);
46
48
  const activeTabRef = useRef(null);
49
+ const [full, setFull] = useState(false);
47
50
  // Opening/activating a document should bring its tab into view — it may sit
48
51
  // off-screen to the right when many are open. Scroll only the strip, not the page.
49
52
  useEffect(() => {
@@ -58,9 +61,28 @@ export function CitationSourcePanel({ docs, activeKey, onSelect, onCloseTab, onC
58
61
  else if (tr.right > sr.right)
59
62
  s.scrollBy({ left: tr.right - sr.right + 8, behavior: 'smooth' });
60
63
  }, [activeKey]);
64
+ // Full-screen preview closes on Escape.
65
+ useEffect(() => {
66
+ if (!full)
67
+ return;
68
+ const onKey = (e) => { if (e.key === 'Escape')
69
+ setFull(false); };
70
+ window.addEventListener('keydown', onKey);
71
+ return () => { window.removeEventListener('keydown', onKey); };
72
+ }, [full]);
61
73
  if (docs.length === 0)
62
74
  return null;
63
75
  const active = docs.find((d) => citationDocKey(d) === activeKey) ?? docs[0];
76
+ // One viewer-render path shared by the side panel and the full-screen overlay.
77
+ const renderDoc = (d) => d.kind === 'doc' ? (_jsx(DocumentViewer, { url: client.uploads.url(d.attachment), mimeType: d.attachment.mimeType, name: d.attachment.name, anchor: d.anchor }, `${String(d.attachment.data)}#${JSON.stringify(d.anchor ?? {})}`)) : (_jsx(StepOutputView
78
+ // Resolved from the ref prefix rather than `stepOutput(stepId)`: under
79
+ // MAP/LOOP a bare id names N iterations, and only the ref says which one.
80
+ , {
81
+ // Resolved from the ref prefix rather than `stepOutput(stepId)`: under
82
+ // MAP/LOOP a bare id names N iterations, and only the ref says which one.
83
+ output: d.stepOutputRef !== undefined && originCtx
84
+ ? resolveRef(d.stepOutputRef, originCtx).value
85
+ : d.value, path: d.path, label: (d.stepId !== undefined ? originCtx?.stepTitle(d.stepId) : undefined) ?? d.label, stepId: d.stepId, description: d.stepId !== undefined ? originCtx?.stepDescription(d.stepId) : undefined }));
64
86
  return (_jsxs(SidePanelShell, { accentClassName: "border-t-0", width: width, onWidthChange: onWidthChange, className: className, children: [_jsxs("div", { className: "flex shrink-0 items-stretch border-b border-[var(--wui-border)]", style: { minHeight: '44px' }, children: [_jsx("div", { ref: scrollerRef, className: "flex min-w-0 flex-1 items-stretch overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: docs.map((d) => {
65
87
  const key = citationDocKey(d);
66
88
  const isActive = d === active;
@@ -70,16 +92,10 @@ export function CitationSourcePanel({ docs, activeKey, onSelect, onCloseTab, onC
70
92
  // Data, not a file — say so in the tab so the reader knows what
71
93
  // opens before clicking.
72
94
  _jsx("span", { "aria-hidden": "true", className: "shrink-0 rounded bg-[var(--wui-bg-muted)] px-1 font-mono text-[9px] leading-[14px] text-[var(--wui-fg-muted)]", children: '{}' })), _jsx("span", { className: "min-w-0 flex-1 truncate", children: titleOf(d) }), _jsx("button", { type: "button", onClick: (e) => { e.stopPropagation(); onCloseTab(key); }, "aria-label": `Close ${titleOf(d)}`, className: cn('grid h-5 w-5 shrink-0 place-items-center rounded text-[var(--wui-fg-muted)] transition hover:bg-[var(--wui-bg-muted)] hover:text-[var(--wui-fg)]', isActive ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'), children: _jsx(CloseIcon, {}) })] }, key));
73
- }) }), _jsx("button", { type: "button", onClick: onCloseAll, "aria-label": "Close panel", className: "grid w-10 shrink-0 place-items-center border-l border-[var(--wui-border)] text-[var(--wui-fg-muted)] transition-colors hover:bg-[var(--wui-bg-subtle)] hover:text-[var(--wui-fg)]", children: _jsx(CloseIcon, { size: 15 }) })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden bg-[var(--wui-bg-subtle)]", children: docs.map((d) => (_jsx("div", { className: cn('h-full', d === active ? 'block' : 'hidden'), children: d.kind === 'doc' ? (_jsx(DocumentViewer, { url: client.uploads.url(d.attachment), mimeType: d.attachment.mimeType, name: d.attachment.name, anchor: d.anchor }, `${String(d.attachment.data)}#${JSON.stringify(d.anchor ?? {})}`)) : (_jsx(StepOutputView
74
- // Resolved from the ref prefix rather than `stepOutput(stepId)`:
75
- // under MAP/LOOP a bare id names N iterations, and only the ref
76
- // says which one.
77
- , {
78
- // Resolved from the ref prefix rather than `stepOutput(stepId)`:
79
- // under MAP/LOOP a bare id names N iterations, and only the ref
80
- // says which one.
81
- output: d.stepOutputRef !== undefined && originCtx
82
- ? resolveRef(d.stepOutputRef, originCtx).value
83
- : d.value, path: d.path, label: (d.stepId !== undefined ? originCtx?.stepTitle(d.stepId) : undefined) ?? d.label, stepId: d.stepId, description: d.stepId !== undefined ? originCtx?.stepDescription(d.stepId) : undefined })) }, citationDocKey(d)))) })] }));
95
+ }) }), _jsx("button", { type: "button", onClick: () => { setFull(true); }, "aria-label": "Open full preview", title: "Full preview", className: "grid w-10 shrink-0 place-items-center border-l border-[var(--wui-border)] text-[var(--wui-fg-muted)] transition-colors hover:bg-[var(--wui-bg-subtle)] hover:text-[var(--wui-fg)]", children: _jsx(ExpandIcon, { size: 15 }) }), _jsx("button", { type: "button", onClick: onCloseAll, "aria-label": "Close panel", className: "grid w-10 shrink-0 place-items-center border-l border-[var(--wui-border)] text-[var(--wui-fg-muted)] transition-colors hover:bg-[var(--wui-bg-subtle)] hover:text-[var(--wui-fg)]", children: _jsx(CloseIcon, { size: 15 }) })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden bg-[var(--wui-bg-subtle)]", children: docs.map((d) => (_jsx("div", { className: cn('h-full', d === active ? 'block' : 'hidden'), children: renderDoc(d) }, citationDocKey(d)))) }), full &&
96
+ createPortal(
97
+ // Modal dialog dimmed/blurred backdrop with a centered floating panel.
98
+ // Click-away or Esc closes; clicks inside the panel don't.
99
+ _jsx("div", { className: "fixed inset-0 z-[200] flex items-center justify-center bg-black/45 p-4 backdrop-blur-sm sm:p-8", onClick: () => { setFull(false); }, children: _jsxs("div", { role: "dialog", "aria-modal": "true", onClick: (e) => { e.stopPropagation(); }, className: "flex h-full max-h-[92vh] w-full max-w-[1120px] flex-col overflow-hidden rounded-xl border border-[var(--wui-border)] bg-[var(--wui-bg)] shadow-2xl", children: [_jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-[var(--wui-border)] px-4", style: { minHeight: '48px' }, children: [active.kind === 'doc' ? (_jsx(FileTypeBadge, { name: active.attachment.name, size: "sm" })) : (_jsx("span", { "aria-hidden": "true", className: "shrink-0 rounded bg-[var(--wui-bg-muted)] px-1 font-mono text-[9px] leading-[14px] text-[var(--wui-fg-muted)]", children: '{}' })), _jsx("span", { className: "min-w-0 flex-1 truncate text-[13px] font-medium text-[var(--wui-fg)]", children: titleOf(active) }), _jsx("button", { type: "button", onClick: () => { setFull(false); }, "aria-label": "Close full preview", title: "Close (Esc)", className: "grid h-7 w-7 shrink-0 place-items-center rounded-md text-[var(--wui-fg-muted)] transition-colors hover:bg-[var(--wui-bg-subtle)] hover:text-[var(--wui-fg)]", children: _jsx(CloseIcon, { size: 15 }) })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden bg-[var(--wui-bg-subtle)]", children: _jsx("div", { className: "h-full", children: renderDoc(active) }) })] }) }), document.body)] }));
84
100
  }
85
101
  //# sourceMappingURL=CitationSourcePanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CitationSourcePanel.js","sourceRoot":"","sources":["../../../src/components/execution/CitationSourcePanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CitationSourcePanel.js","sourceRoot":"","sources":["../../../src/components/execution/CitationSourcePanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type EdgeProps } from '@xyflow/react';
2
+ export type ExecutionEdgeStatus = 'completed' | 'active' | 'pending' | 'skipped';
3
+ export declare function ExecutionEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, data, style, }: EdgeProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=ExecutionEdge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionEdge.d.ts","sourceRoot":"","sources":["../../../src/components/execution/ExecutionEdge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AASjF,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,IAAI,EACJ,KAAK,GACN,EAAE,SAAS,+BAyBX"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { BaseEdge, getBezierPath } from '@xyflow/react';
3
+ const statusColors = {
4
+ completed: 'var(--wui-status-completed)',
5
+ active: 'var(--wui-status-running)',
6
+ pending: 'var(--wui-border)',
7
+ skipped: 'var(--wui-border)',
8
+ };
9
+ export function ExecutionEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, data, style, }) {
10
+ const edgeStatus = data?.['status'] ?? 'pending';
11
+ const [edgePath] = getBezierPath({
12
+ sourceX,
13
+ sourceY,
14
+ sourcePosition,
15
+ targetX,
16
+ targetY,
17
+ targetPosition,
18
+ });
19
+ return (_jsx(BaseEdge, { id: id, path: edgePath, style: {
20
+ stroke: statusColors[edgeStatus],
21
+ strokeWidth: edgeStatus === 'active' ? 2 : 1.5,
22
+ strokeDasharray: edgeStatus === 'pending' || edgeStatus === 'skipped' ? '5 5' : undefined,
23
+ opacity: edgeStatus === 'skipped' ? 0.3 : 1,
24
+ ...style,
25
+ } }));
26
+ }
27
+ //# sourceMappingURL=ExecutionEdge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionEdge.js","sourceRoot":"","sources":["../../../src/components/execution/ExecutionEdge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAkB,MAAM,eAAe,CAAC;AAIxE,MAAM,YAAY,GAAwC;IACxD,SAAS,EAAE,6BAA6B;IACxC,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAC5B,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,IAAI,EACJ,KAAK,GACK;IACV,MAAM,UAAU,GAAK,IAA4C,EAAE,CAAC,QAAQ,CAAqC,IAAI,SAAS,CAAC;IAE/H,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;QAC/B,OAAO;QACP,OAAO;QACP,cAAc;QACd,OAAO;QACP,OAAO;QACP,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,QAAQ,IACP,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE;YACL,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;YAChC,WAAW,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;YAC9C,eAAe,EAAE,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACzF,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,KAAK;SACT,GACD,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { NodeProps } from '@xyflow/react';
2
+ import type { WorkflowStepConfig } from '@xyne/workflow-sdk/builder';
3
+ export type ExecutionStepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'paused' | 'skipped';
4
+ export interface ExecutionStepNodeData {
5
+ stepConfig: WorkflowStepConfig;
6
+ label: string;
7
+ status: ExecutionStepStatus;
8
+ category?: string | undefined;
9
+ icon?: string | undefined;
10
+ isSelected?: boolean | undefined;
11
+ onSelect?: (() => void) | undefined;
12
+ }
13
+ export declare function ExecutionStepNode({ data }: NodeProps): import("react").JSX.Element;
14
+ //# sourceMappingURL=ExecutionStepNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionStepNode.d.ts","sourceRoot":"","sources":["../../../src/components/execution/ExecutionStepNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExG,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACrC;AAsDD,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,+BA6EpD"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Handle, Position } from '@xyflow/react';
3
+ import { cn } from '../shared/cn.js';
4
+ import { getCategoryTheme } from '../builder/theme.js';
5
+ import { getStepIcon } from '../builder/icons.js';
6
+ // Small status indicator icons (SVG)
7
+ function StatusIcon({ status }) {
8
+ const size = 12;
9
+ switch (status) {
10
+ case 'completed':
11
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("polyline", { points: "20 6 9 17 4 12" }) }));
12
+ case 'failed':
13
+ return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }));
14
+ case 'running':
15
+ return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", children: [_jsx("path", { d: "M12 2v4" }), _jsx("path", { d: "M12 18v4" }), _jsx("path", { d: "M4.93 4.93l2.83 2.83" }), _jsx("path", { d: "M16.24 16.24l2.83 2.83" }), _jsx("path", { d: "M2 12h4" }), _jsx("path", { d: "M18 12h4" }), _jsx("path", { d: "M4.93 19.07l2.83-2.83" }), _jsx("path", { d: "M16.24 7.76l2.83-2.83" })] }));
16
+ case 'paused':
17
+ return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "currentColor", children: [_jsx("rect", { x: "6", y: "4", width: "4", height: "16", rx: "1" }), _jsx("rect", { x: "14", y: "4", width: "4", height: "16", rx: "1" })] }));
18
+ case 'skipped':
19
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", children: _jsx("path", { d: "M5 12h14" }) }));
20
+ default: // pending
21
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: _jsx("circle", { cx: "12", cy: "12", r: "10" }) }));
22
+ }
23
+ }
24
+ const statusBadgeColors = {
25
+ pending: 'bg-slate-100 text-slate-400',
26
+ running: 'bg-blue-50 text-blue-500',
27
+ completed: 'bg-emerald-50 text-emerald-600',
28
+ failed: 'bg-red-50 text-red-500',
29
+ paused: 'bg-purple-50 text-purple-500',
30
+ skipped: 'bg-slate-100 text-slate-400',
31
+ };
32
+ export function ExecutionStepNode({ data }) {
33
+ const { label, status, category, icon, isSelected, onSelect } = data;
34
+ const theme = getCategoryTheme(category);
35
+ // Rejoin nodes (invisible merge)
36
+ if (!label) {
37
+ return (_jsxs("div", { className: "h-0 w-0", children: [_jsx(Handle, { type: "target", position: Position.Top, className: "opacity-0" }), _jsx(Handle, { type: "source", position: Position.Bottom, className: "opacity-0" })] }));
38
+ }
39
+ // Status-driven left border override for completed/failed
40
+ const statusAccent = status === 'completed' ? 'border-l-emerald-500'
41
+ : status === 'failed' ? 'border-l-red-500'
42
+ : theme.accent;
43
+ return (_jsxs("div", { onClick: onSelect, className: cn('group relative flex w-48 cursor-pointer items-center gap-3 rounded-lg border bg-white px-3 py-3 transition-all', `border-l-[3px] ${statusAccent}`, isSelected
44
+ ? `ring-2 ${theme.ring} shadow-md`
45
+ : 'border-slate-200 shadow-sm hover:shadow-md hover:-translate-y-px hover:border-slate-300', status === 'running' && 'shadow-md shadow-blue-100', status === 'paused' && 'shadow-md shadow-purple-100', status === 'skipped' && 'opacity-50 grayscale'), style: { animation: 'wui-scale-in 200ms ease-out' }, children: [_jsx(Handle, { type: "target", position: Position.Top, className: "!bg-transparent !border-0 !w-1 !h-1 !min-w-0 !min-h-0" }), _jsxs("div", { className: cn('relative flex h-8 w-8 shrink-0 items-center justify-center rounded-lg', theme.iconBg, theme.iconText), children: [getStepIcon(icon, { size: 16 }), status !== 'pending' && (_jsx("span", { className: cn('absolute -bottom-1 -right-1 flex h-4 w-4 items-center justify-center rounded-full ring-2 ring-white', statusBadgeColors[status], status === 'running' && 'animate-[wui-spin_1.5s_linear_infinite]'), children: _jsx(StatusIcon, { status: status }) }))] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: cn('truncate text-[13px] font-semibold leading-tight', status === 'skipped' ? 'text-slate-400 line-through' : 'text-slate-800'), children: label }), category && (_jsxs("div", { className: "mt-0.5 flex items-center gap-1.5", children: [_jsx("span", { className: cn('h-1.5 w-1.5 rounded-full', theme.dot) }), _jsx("span", { className: "text-[10px] text-slate-400 uppercase tracking-wide", children: category })] }))] }), _jsx(Handle, { type: "source", position: Position.Bottom, className: "!bg-transparent !border-0 !w-1 !h-1 !min-w-0 !min-h-0" })] }));
46
+ }
47
+ //# sourceMappingURL=ExecutionStepNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionStepNode.js","sourceRoot":"","sources":["../../../src/components/execution/ExecutionStepNode.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { WorkflowStepConfig, StepGroup } from '@xyne/workflow-sdk/builder';
2
2
  import type { StepMeta } from '../../hooks/use-step-metadata.js';
3
3
  import type { StepExecutionState } from '../../utils/step-state.js';
4
4
  import type { ExecutionDetail } from '@xyne/workflow-sdk/client';
5
+ import { type Section } from './journey-model.js';
5
6
  /**
6
7
  * Tabs view — a code-editor read of an execution: the sidebar navigates the run
7
8
  * (drill into groups/constructs/iterations, breadcrumb to climb) exactly like the
@@ -16,6 +17,9 @@ export interface ExecutionTabsProps {
16
17
  stepStates: Map<string, StepExecutionState>;
17
18
  executionSteps?: ExecutionDetail['steps'] | undefined;
18
19
  groups?: StepGroup[] | undefined;
20
+ /** Whitelist mode: when true, the root sidebar shows ONLY pinned groups; every
21
+ * non-pinned group and ungrouped step is dropped (still reachable via search). */
22
+ onlyPinned?: boolean | undefined;
19
23
  selectedStepId: string | null;
20
24
  onStepClick: (stepId: string, replace?: boolean) => void;
21
25
  selectedStepState?: StepExecutionState | undefined;
@@ -30,5 +34,26 @@ export interface ExecutionTabsProps {
30
34
  /** Node-carried JSX layout for the trigger (from the workflow config). */
31
35
  triggerLayout?: string | undefined;
32
36
  }
33
- export declare function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, groups, selectedStepId, onStepClick, selectedStepState, selectedStepTitle, selectedStepDescription, triggerLabel, triggerCompleted, isTriggerSelected, onTriggerClick, triggerData, triggerLayout, }: ExecutionTabsProps): import("react").JSX.Element;
37
+ /** The pinned groups lifted to the Run level, each resolved to a single-leaf row (when the
38
+ * group has exactly one leaf member) or a drillable group folder. Shared by the sidebar's
39
+ * hoisted rendering and the whitelist auto-open so both agree on what "the pinned rows" are. */
40
+ type PinnedRootRow = {
41
+ kind: 'leaf';
42
+ g: StepGroup;
43
+ member: WorkflowStepConfig;
44
+ } | {
45
+ kind: 'group';
46
+ g: StepGroup;
47
+ members: WorkflowStepConfig[];
48
+ };
49
+ export declare function pinnedRootRows(groups: StepGroup[] | undefined, pinnedIds: Set<string>, rootSteps: WorkflowStepConfig[], stepMeta: Map<string, StepMeta>, states: Map<string, StepExecutionState>): PinnedRootRow[];
50
+ /** The first openable (non-drillable) node at the current level, in sidebar order —
51
+ * what "open the first node by default" resolves to on entering the view or after
52
+ * drilling into a construct/group. Null when a level has no leaf yet (still loading). */
53
+ export declare function firstLeafOfLevel(sections: Section[], groups: StepGroup[] | undefined, stepMeta: Map<string, StepMeta>, insideGroupId: string | undefined, stepStates: Map<string, StepExecutionState>, hoistedIds: Set<string>, onlyPinnedRoot?: boolean): {
54
+ id: string;
55
+ label: string;
56
+ } | null;
57
+ export declare function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, groups, onlyPinned, selectedStepId, onStepClick, selectedStepState, selectedStepTitle, selectedStepDescription, triggerLabel, triggerCompleted, isTriggerSelected, onTriggerClick, triggerData, triggerLayout, }: ExecutionTabsProps): import("react").JSX.Element;
58
+ export {};
34
59
  //# sourceMappingURL=ExecutionTabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionTabs.d.ts","sourceRoot":"","sources":["../../../src/components/execution/ExecutionTabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAcjE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACtD,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAsmBD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAChF,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAC7D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,GAC9F,EAAE,kBAAkB,+BAiQpB"}
1
+ {"version":3,"file":"ExecutionTabs.d.ts","sourceRoot":"","sources":["../../../src/components/execution/ExecutionTabs.tsx"],"names":[],"mappings":"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"}
@@ -79,10 +79,33 @@ function rowInfo(row, st, stepMeta) {
79
79
  descriptor: { kind: 'iterationItem', id: row.view.ctrlId, index: row.view.index, label: row.view.label },
80
80
  };
81
81
  }
82
+ export function pinnedRootRows(groups, pinnedIds, rootSteps, stepMeta, states) {
83
+ return (groups ?? [])
84
+ .filter((g) => pinnedIds.has(g.id))
85
+ .map((g) => ({ g, members: membersOfGroup(rootSteps, g.id, stepMeta, states) }))
86
+ .filter((p) => p.members.length > 0)
87
+ .map(({ g, members }) => {
88
+ const only = members.length === 1 ? members[0] : undefined;
89
+ return only && stepRow(only, stepMeta).kind === 'leaf'
90
+ ? { kind: 'leaf', g, member: only }
91
+ : { kind: 'group', g, members };
92
+ });
93
+ }
82
94
  /** The first openable (non-drillable) node at the current level, in sidebar order —
83
95
  * what "open the first node by default" resolves to on entering the view or after
84
96
  * drilling into a construct/group. Null when a level has no leaf yet (still loading). */
85
- function firstLeafOfLevel(sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds) {
97
+ export function firstLeafOfLevel(sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds, onlyPinnedRoot) {
98
+ // Whitelist mode at the root: the normal (non-pinned) sections are hidden, so the
99
+ // default open must come from a pinned group's own leaf — never a hidden node. Open it
100
+ // even while pending (the sole visible node) so it fills in live as the run completes.
101
+ if (onlyPinnedRoot) {
102
+ const rootSteps = sections.flatMap((s) => s.steps);
103
+ for (const row of pinnedRootRows(groups, hoistedIds, rootSteps, stepMeta, stepStates)) {
104
+ if (row.kind === 'leaf')
105
+ return { id: row.member.id, label: row.g.title };
106
+ }
107
+ return null; // only multi-member pinned groups (drillable) — let the user drill in
108
+ }
86
109
  for (const sec of sections) {
87
110
  const st = sec.states ?? stepStates;
88
111
  const prefix = sec.selectionPrefix ?? '';
@@ -109,7 +132,7 @@ function SidebarRow({ label, status, drillable, active, onClick }) {
109
132
  ? 'bg-[color-mix(in_srgb,var(--wui-primary)_14%,transparent)] font-medium text-[var(--wui-fg)]'
110
133
  : 'text-[var(--wui-fg)] hover:bg-[color-mix(in_srgb,var(--wui-fg)_5%,transparent)]'), children: [_jsx("span", { className: cn('h-2 w-2 shrink-0 rounded-full', DOT[status]) }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: label }), drillable && _jsx("span", { className: "shrink-0 text-[var(--wui-fg-muted)] group-hover:text-[var(--wui-fg)]", children: CHEVRON })] }));
111
134
  }
112
- function Sidebar({ sections, insideGroupId, atRoot, stepMeta, stepStates, groups, hoistedIds, onDrill, onOpenLeaf, selectedId, allNodes, onOpenNode, triggerLabel, triggerCompleted, isTriggerSelected, onOpenTrigger, }) {
135
+ function Sidebar({ sections, insideGroupId, atRoot, stepMeta, stepStates, groups, hoistedIds, onlyPinned, onDrill, onOpenLeaf, selectedId, allNodes, onOpenNode, triggerLabel, triggerCompleted, isTriggerSelected, onOpenTrigger, }) {
113
136
  // A search box over *every* node (whole tree, ignoring the current drill level);
114
137
  // clearing it falls back to the normal current-path rows below.
115
138
  const [search, setSearch] = useState('');
@@ -129,19 +152,11 @@ function Sidebar({ sections, insideGroupId, atRoot, stepMeta, stepStates, groups
129
152
  // Pinned groups lifted to the Run level. A single-leaf pinned group adds no value as a
130
153
  // folder — surface its one member directly under the group's (section) label, mirroring
131
154
  // buildRows' flattening for nested single-member groups (which skips hoisted ones).
132
- const hoistedRows = atRoot
133
- ? (groups ?? [])
134
- .filter((g) => hoistedIds.has(g.id))
135
- .map((g) => ({ g, members: membersOfGroup(rootSteps, g.id, stepMeta, stepStates) }))
136
- .filter((p) => p.members.length > 0)
137
- .map(({ g, members }) => {
138
- const only = members.length === 1 ? members[0] : undefined;
139
- return only && stepRow(only, stepMeta).kind === 'leaf'
140
- ? ({ kind: 'leaf', g, member: only })
141
- : ({ kind: 'group', g, members });
142
- })
143
- : [];
144
- return (_jsxs("div", { className: "flex h-full w-full flex-col bg-[var(--wui-bg-subtle)]", children: [_jsx("div", { className: "shrink-0 p-2 pb-1", children: _jsxs("div", { className: "flex items-center gap-2 rounded-md border border-[var(--wui-border)] bg-[var(--wui-bg)] px-2.5", children: [_jsx("span", { className: "shrink-0 text-[var(--wui-fg-muted)]", children: SEARCH_ICON }), _jsx("input", { value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search all nodes\u2026", className: "min-w-0 flex-1 bg-transparent py-1.5 text-[12.5px] text-[var(--wui-fg)] outline-none placeholder:text-[var(--wui-fg-muted)]" }), q && (_jsx("button", { type: "button", onClick: () => { setSearch(''); }, "aria-label": "Clear search", className: "grid h-4 w-4 shrink-0 place-items-center rounded text-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]", children: CLOSE }))] }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto p-2 pt-1", children: matches ? (matches.length === 0 ? (_jsx("div", { className: "px-2.5 py-3 text-[12px] italic text-[var(--wui-fg-muted)]", children: "No matching nodes" })) : (matches.map(({ n, indices }) => (_jsx(SidebarRow, { label: _jsx(Highlighted, { text: n.label, indices: indices }), status: n.status, active: n.id === TRIGGER_ID ? isTriggerSelected : (!isTriggerSelected && selectedId === n.id), onClick: () => { onOpenNode(n); } }, n.id))))) : (_jsxs(_Fragment, { children: [atRoot && (_jsx(SidebarRow, { label: triggerLabel, status: triggerCompleted ? 'completed' : 'pending', active: isTriggerSelected, onClick: () => onOpenTrigger() })), sections.map((sec, si) => {
155
+ const hoistedRows = atRoot ? pinnedRootRows(groups, hoistedIds, rootSteps, stepMeta, stepStates) : [];
156
+ // Whitelist mode: at the root, only the pinned groups (above) are shown — every non-pinned
157
+ // section is dropped. They stay reachable through the "Search all nodes" box.
158
+ const hideSections = atRoot && !!onlyPinned;
159
+ return (_jsxs("div", { className: "flex h-full w-full flex-col bg-[var(--wui-bg-subtle)]", children: [_jsx("div", { className: "shrink-0 p-2 pb-1", children: _jsxs("div", { className: "flex items-center gap-2 rounded-md border border-[var(--wui-border)] bg-[var(--wui-bg)] px-2.5", children: [_jsx("span", { className: "shrink-0 text-[var(--wui-fg-muted)]", children: SEARCH_ICON }), _jsx("input", { value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search all nodes\u2026", className: "min-w-0 flex-1 bg-transparent py-1.5 text-[12.5px] text-[var(--wui-fg)] outline-none placeholder:text-[var(--wui-fg-muted)]" }), q && (_jsx("button", { type: "button", onClick: () => { setSearch(''); }, "aria-label": "Clear search", className: "grid h-4 w-4 shrink-0 place-items-center rounded text-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]", children: CLOSE }))] }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto p-2 pt-1", children: matches ? (matches.length === 0 ? (_jsx("div", { className: "px-2.5 py-3 text-[12px] italic text-[var(--wui-fg-muted)]", children: "No matching nodes" })) : (matches.map(({ n, indices }) => (_jsx(SidebarRow, { label: _jsx(Highlighted, { text: n.label, indices: indices }), status: n.status, active: n.id === TRIGGER_ID ? isTriggerSelected : (!isTriggerSelected && selectedId === n.id), onClick: () => { onOpenNode(n); } }, n.id))))) : (_jsxs(_Fragment, { children: [atRoot && (_jsx(SidebarRow, { label: triggerLabel, status: triggerCompleted ? 'completed' : 'pending', active: isTriggerSelected, onClick: () => onOpenTrigger() })), !hideSections && sections.map((sec, si) => {
145
160
  const st = sec.states ?? stepStates;
146
161
  const prefix = sec.selectionPrefix ?? '';
147
162
  const rows = sec.iterations ? sec.iterations.map((view) => ({ kind: 'iteration', view })) : buildRows(sec.steps, groups, stepMeta, insideGroupId, st, hoistedIds);
@@ -315,7 +330,7 @@ function NodeDetail({ state, meta, title, description, template }) {
315
330
  return (_jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsxs("div", { className: "shrink-0 px-6 pt-5 pb-4", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2.5", children: [_jsx("span", { className: cn('h-2.5 w-2.5 rounded-full', DOT[status]) }), _jsx("h2", { className: "text-[16px] font-semibold text-[var(--wui-fg)]", children: title }), _jsx(StatusBadge, { status: status, className: "ml-0.5" })] }), description && _jsx("p", { className: "mt-1.5 max-w-3xl text-[13px] leading-relaxed text-[var(--wui-fg-muted)]", children: description })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children: rendered ? (rendered.ok ? (_jsx("div", { className: "flex flex-col gap-8", children: rendered.node })) : (_jsxs("div", { className: "rounded-lg border border-red-300 bg-[color-mix(in_srgb,#ef4444_8%,transparent)] p-3 text-[13px] text-red-700", children: ["Layout error: ", rendered.error] }))) : fallback.length === 0 ? (_jsx("div", { className: "flex h-full items-center justify-center text-[13px] text-[var(--wui-fg-muted)]", children: "No data for this step." })) : (_jsx("div", { className: "flex flex-col gap-8", children: fallback.map((s) => (_jsxs("section", { children: [_jsxs("div", { className: "mb-3 flex items-center gap-3", children: [_jsx("h3", { className: "text-[12px] font-semibold uppercase tracking-wide text-[var(--wui-fg-muted)]", children: s.title }), _jsx("span", { className: "h-px flex-1 bg-[var(--wui-border)]" })] }), _jsx(KeyValueGrid, { entries: s.entries, cite: s.cite })] }, s.key))) })) })] }));
316
331
  }
317
332
  // ─── The view ───
318
- export function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, groups, selectedStepId, onStepClick, selectedStepState, selectedStepTitle, selectedStepDescription, triggerLabel, triggerCompleted, isTriggerSelected, onTriggerClick, triggerData, triggerLayout, }) {
333
+ export function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, groups, onlyPinned, selectedStepId, onStepClick, selectedStepState, selectedStepTitle, selectedStepDescription, triggerLabel, triggerCompleted, isTriggerSelected, onTriggerClick, triggerData, triggerLayout, }) {
319
334
  const [path, setPath] = useState([]);
320
335
  const [openTabs, setOpenTabs] = useState([]);
321
336
  const [paletteOpen, setPaletteOpen] = useState(false);
@@ -442,13 +457,13 @@ export function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, gro
442
457
  openLeaf(selectedStepId, paletteNodes.find((n) => n.id === selectedStepId)?.label ?? selectedStepId, true);
443
458
  return;
444
459
  }
445
- const first = firstLeafOfLevel(sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds);
460
+ const first = firstLeafOfLevel(sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds, path.length === 0 && !!onlyPinned);
446
461
  if (!first)
447
462
  return; // states still loading, or no leaf at this level — retry next render
448
463
  autoOpened.current.add(key);
449
464
  openLeaf(first.id, first.label, true);
450
465
  // eslint-disable-next-line react-hooks/exhaustive-deps
451
- }, [path, sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds, selectedStepId]);
466
+ }, [path, sections, groups, stepMeta, insideGroupId, stepStates, hoistedIds, onlyPinned, selectedStepId]);
452
467
  // An externally-driven selection (URL back/forward, deep-link) opens the node's
453
468
  // detail; make sure its tab exists in the strip too.
454
469
  useEffect(() => {
@@ -484,6 +499,6 @@ export function ExecutionTabs({ steps, stepMeta, stepStates, executionSteps, gro
484
499
  : 'bg-[color-mix(in_srgb,var(--wui-primary)_13%,transparent)] text-[var(--wui-primary)]'), children: PANEL_LEFT }), crumbs.map((c, i) => {
485
500
  const last = i === crumbs.length - 1;
486
501
  return (_jsxs("span", { className: "flex items-center gap-1", children: [i > 0 && _jsx("span", { className: "text-[var(--wui-fg-muted)]", children: "/" }), _jsx("button", { type: "button", disabled: last, onClick: () => setPath((p) => p.slice(0, i)), className: cn('rounded px-1 py-0.5 transition-colors', last ? 'font-semibold text-[var(--wui-fg)]' : 'text-[var(--wui-fg-muted)] hover:text-[var(--wui-primary)]'), children: c.label })] }, i));
487
- })] }), _jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [!sidebarCollapsed && (_jsxs("div", { className: "relative flex shrink-0 border-r border-[var(--wui-border)]", style: { width: sidebarWidth }, children: [_jsx(Sidebar, { sections: sections, insideGroupId: insideGroupId, atRoot: path.length === 0, stepMeta: stepMeta, stepStates: stepStates, groups: groups, hoistedIds: hoistedIds, onDrill: (d) => setPath((p) => [...p, d]), onOpenLeaf: openLeaf, selectedId: selectedStepId, allNodes: paletteNodes, onOpenNode: openNode, triggerLabel: triggerLabel, triggerCompleted: triggerCompleted, isTriggerSelected: isTriggerSelected, onOpenTrigger: openTrigger }), _jsx("div", { onMouseDown: handleSidebarResize, title: "Drag to resize", className: "absolute right-0 top-0 bottom-0 z-10 w-1 cursor-col-resize transition-colors hover:bg-[color-mix(in_srgb,var(--wui-primary)_40%,transparent)] active:bg-[color-mix(in_srgb,var(--wui-primary)_55%,transparent)]" })] })), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx(EditorTabStrip, { tabs: openTabs, activeId: activeId, onActivate: activateTab, onClose: closeTab }), _jsx("div", { className: "min-h-0 flex-1", children: isTriggerSelected ? (_jsx(NodeDetail, { state: triggerState, meta: undefined, title: triggerLabel, template: triggerLayout ?? null })) : selectedStepState ? (_jsx(NodeDetail, { state: selectedStepState, meta: detailMeta, title: selectedStepTitle ?? selectedStepState.stepName, description: selectedStepDescription, template: stepTemplate })) : (_jsx("div", { className: "flex h-full flex-col items-center justify-center gap-1 text-[var(--wui-fg-muted)]", children: _jsx("p", { className: "text-[13px]", children: "Open a step from the sidebar." }) })) })] })] }), paletteOpen && (_jsx(NodePalette, { nodes: paletteNodes, container: rootRef.current?.closest('[data-workflow-ui]') ?? null, onPick: (n) => { openNode(n); setPaletteOpen(false); }, onClose: () => { setPaletteOpen(false); } }))] }));
502
+ })] }), _jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [!sidebarCollapsed && (_jsxs("div", { className: "relative flex shrink-0 border-r border-[var(--wui-border)]", style: { width: sidebarWidth }, children: [_jsx(Sidebar, { sections: sections, insideGroupId: insideGroupId, atRoot: path.length === 0, stepMeta: stepMeta, stepStates: stepStates, groups: groups, hoistedIds: hoistedIds, onlyPinned: onlyPinned, onDrill: (d) => setPath((p) => [...p, d]), onOpenLeaf: openLeaf, selectedId: selectedStepId, allNodes: paletteNodes, onOpenNode: openNode, triggerLabel: triggerLabel, triggerCompleted: triggerCompleted, isTriggerSelected: isTriggerSelected, onOpenTrigger: openTrigger }), _jsx("div", { onMouseDown: handleSidebarResize, title: "Drag to resize", className: "absolute right-0 top-0 bottom-0 z-10 w-1 cursor-col-resize transition-colors hover:bg-[color-mix(in_srgb,var(--wui-primary)_40%,transparent)] active:bg-[color-mix(in_srgb,var(--wui-primary)_55%,transparent)]" })] })), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx(EditorTabStrip, { tabs: openTabs, activeId: activeId, onActivate: activateTab, onClose: closeTab }), _jsx("div", { className: "min-h-0 flex-1", children: isTriggerSelected ? (_jsx(NodeDetail, { state: triggerState, meta: undefined, title: triggerLabel, template: triggerLayout ?? null })) : selectedStepState ? (_jsx(NodeDetail, { state: selectedStepState, meta: detailMeta, title: selectedStepTitle ?? selectedStepState.stepName, description: selectedStepDescription, template: stepTemplate })) : (_jsx("div", { className: "flex h-full flex-col items-center justify-center gap-1 text-[var(--wui-fg-muted)]", children: _jsx("p", { className: "text-[13px]", children: "Open a step from the sidebar." }) })) })] })] }), paletteOpen && (_jsx(NodePalette, { nodes: paletteNodes, container: rootRef.current?.closest('[data-workflow-ui]') ?? null, onPick: (n) => { openNode(n); setPaletteOpen(false); }, onClose: () => { setPaletteOpen(false); } }))] }));
488
503
  }
489
504
  //# sourceMappingURL=ExecutionTabs.js.map