@xyne/workflow-ui 1.3.9 → 1.3.11

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 (217) 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/builder/v3/CitationEditor.d.ts.map +1 -1
  114. package/dist/components/builder/v3/CitationEditor.js +10 -1
  115. package/dist/components/builder/v3/CitationEditor.js.map +1 -1
  116. package/dist/components/builder/v3/VariablePickerPopover.d.ts +1 -1
  117. package/dist/components/builder/v3/VariablePickerPopover.d.ts.map +1 -1
  118. package/dist/components/builder/v3/VariablePickerPopover.js +3 -3
  119. package/dist/components/builder/v3/VariablePickerPopover.js.map +1 -1
  120. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts +11 -0
  121. package/dist/components/dashboard/WorkflowSummaryEditor.d.ts.map +1 -0
  122. package/dist/components/dashboard/WorkflowSummaryEditor.js +46 -0
  123. package/dist/components/dashboard/WorkflowSummaryEditor.js.map +1 -0
  124. package/dist/components/execution/ExecutionEdge.d.ts +4 -0
  125. package/dist/components/execution/ExecutionEdge.d.ts.map +1 -0
  126. package/dist/components/execution/ExecutionEdge.js +27 -0
  127. package/dist/components/execution/ExecutionEdge.js.map +1 -0
  128. package/dist/components/execution/ExecutionHeader.d.ts +2 -2
  129. package/dist/components/execution/ExecutionHeader.d.ts.map +1 -1
  130. package/dist/components/execution/ExecutionHeader.js +4 -2
  131. package/dist/components/execution/ExecutionHeader.js.map +1 -1
  132. package/dist/components/execution/ExecutionJourney.d.ts.map +1 -1
  133. package/dist/components/execution/ExecutionJourney.js +1 -248
  134. package/dist/components/execution/ExecutionJourney.js.map +1 -1
  135. package/dist/components/execution/ExecutionStepNode.d.ts +14 -0
  136. package/dist/components/execution/ExecutionStepNode.d.ts.map +1 -0
  137. package/dist/components/execution/ExecutionStepNode.js +47 -0
  138. package/dist/components/execution/ExecutionStepNode.js.map +1 -0
  139. package/dist/components/execution/ExecutionTabs.d.ts +34 -0
  140. package/dist/components/execution/ExecutionTabs.d.ts.map +1 -0
  141. package/dist/components/execution/ExecutionTabs.js +257 -0
  142. package/dist/components/execution/ExecutionTabs.js.map +1 -0
  143. package/dist/components/execution/ExecutionTriggerNode.d.ts +9 -0
  144. package/dist/components/execution/ExecutionTriggerNode.d.ts.map +1 -0
  145. package/dist/components/execution/ExecutionTriggerNode.js +15 -0
  146. package/dist/components/execution/ExecutionTriggerNode.js.map +1 -0
  147. package/dist/components/execution/ExecutionViewer.d.ts.map +1 -1
  148. package/dist/components/execution/ExecutionViewer.js +3 -2
  149. package/dist/components/execution/ExecutionViewer.js.map +1 -1
  150. package/dist/components/execution/StepAgentPanels.d.ts +9 -0
  151. package/dist/components/execution/StepAgentPanels.d.ts.map +1 -0
  152. package/dist/components/execution/StepAgentPanels.js +133 -0
  153. package/dist/components/execution/StepAgentPanels.js.map +1 -0
  154. package/dist/components/execution/execution-layout.d.ts +31 -0
  155. package/dist/components/execution/execution-layout.d.ts.map +1 -0
  156. package/dist/components/execution/execution-layout.js +90 -0
  157. package/dist/components/execution/execution-layout.js.map +1 -0
  158. package/dist/components/execution/journey-model.d.ts +112 -0
  159. package/dist/components/execution/journey-model.d.ts.map +1 -0
  160. package/dist/components/execution/journey-model.js +277 -0
  161. package/dist/components/execution/journey-model.js.map +1 -0
  162. package/dist/components/execution/origin/OriginTrace.d.ts.map +1 -1
  163. package/dist/components/execution/origin/OriginTrace.js +66 -29
  164. package/dist/components/execution/origin/OriginTrace.js.map +1 -1
  165. package/dist/components/shared/AttachmentCard.d.ts +6 -0
  166. package/dist/components/shared/AttachmentCard.d.ts.map +1 -1
  167. package/dist/components/shared/AttachmentCard.js +99 -5
  168. package/dist/components/shared/AttachmentCard.js.map +1 -1
  169. package/dist/components/shared/DocumentViewer.d.ts +4 -2
  170. package/dist/components/shared/DocumentViewer.d.ts.map +1 -1
  171. package/dist/components/shared/DocumentViewer.js +8 -8
  172. package/dist/components/shared/DocumentViewer.js.map +1 -1
  173. package/dist/components/shared/JsonTreeViewer.d.ts +9 -0
  174. package/dist/components/shared/JsonTreeViewer.d.ts.map +1 -0
  175. package/dist/components/shared/JsonTreeViewer.js +46 -0
  176. package/dist/components/shared/JsonTreeViewer.js.map +1 -0
  177. package/dist/components/shared/viewers/PdfView.d.ts +38 -0
  178. package/dist/components/shared/viewers/PdfView.d.ts.map +1 -0
  179. package/dist/components/shared/viewers/PdfView.js +439 -0
  180. package/dist/components/shared/viewers/PdfView.js.map +1 -0
  181. package/dist/hooks/use-execution-viewer.d.ts.map +1 -1
  182. package/dist/hooks/use-execution-viewer.js +17 -1
  183. package/dist/hooks/use-execution-viewer.js.map +1 -1
  184. package/dist/layout-engine/components.d.ts +5 -0
  185. package/dist/layout-engine/components.d.ts.map +1 -0
  186. package/dist/layout-engine/components.js +171 -0
  187. package/dist/layout-engine/components.js.map +1 -0
  188. package/dist/layout-engine/evaluate.d.ts +9 -0
  189. package/dist/layout-engine/evaluate.d.ts.map +1 -0
  190. package/dist/layout-engine/evaluate.js +66 -0
  191. package/dist/layout-engine/evaluate.js.map +1 -0
  192. package/dist/layout-engine/index.d.ts +22 -0
  193. package/dist/layout-engine/index.d.ts.map +1 -0
  194. package/dist/layout-engine/index.js +22 -0
  195. package/dist/layout-engine/index.js.map +1 -0
  196. package/dist/layout-engine/parse.d.ts +9 -0
  197. package/dist/layout-engine/parse.d.ts.map +1 -0
  198. package/dist/layout-engine/parse.js +213 -0
  199. package/dist/layout-engine/parse.js.map +1 -0
  200. package/dist/layout-engine/render.d.ts +5 -0
  201. package/dist/layout-engine/render.d.ts.map +1 -0
  202. package/dist/layout-engine/render.js +150 -0
  203. package/dist/layout-engine/render.js.map +1 -0
  204. package/dist/layout-engine/types.d.ts +65 -0
  205. package/dist/layout-engine/types.d.ts.map +1 -0
  206. package/dist/layout-engine/types.js +11 -0
  207. package/dist/layout-engine/types.js.map +1 -0
  208. package/dist/styles.css +8 -2
  209. package/package.json +2 -1
  210. package/dist/components/schema-form/AttachmentField.d.ts +0 -16
  211. package/dist/components/schema-form/AttachmentField.d.ts.map +0 -1
  212. package/dist/components/schema-form/AttachmentField.js +0 -139
  213. package/dist/components/schema-form/AttachmentField.js.map +0 -1
  214. package/dist/utils/map-lanes.d.ts +0 -35
  215. package/dist/utils/map-lanes.d.ts.map +0 -1
  216. package/dist/utils/map-lanes.js +0 -48
  217. package/dist/utils/map-lanes.js.map +0 -1
@@ -0,0 +1,150 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Fragment, useLayoutEffect, useRef, useState } from 'react';
3
+ import { evaluate } from './evaluate.js';
4
+ import { cn } from '../components/shared/cn.js';
5
+ /** Render a parsed template's nodes against a scope with a component registry. */
6
+ export function renderNodes(nodes, scope, registry) {
7
+ return nodes.map((n, i) => renderNode(n, scope, registry, String(i)));
8
+ }
9
+ function renderNode(node, scope, registry, key) {
10
+ if (node.kind === 'text')
11
+ return node.value;
12
+ if (node.kind === 'expr') {
13
+ const value = evaluate(node.expr, scope);
14
+ const Value = registry['Value'];
15
+ return Value ? Value.render({ value }, undefined, key) : stringify(value);
16
+ }
17
+ if (node.name === 'Each')
18
+ return renderEach(node, scope, registry, key);
19
+ if (node.name === 'Tabs')
20
+ return renderTabs(node, scope, registry, key);
21
+ if (node.name === 'If')
22
+ return renderIf(node, scope, registry, key);
23
+ const def = registry[node.name];
24
+ if (!def) {
25
+ return (_jsxs("span", { className: "rounded bg-[color-mix(in_srgb,#ef4444_12%,transparent)] px-1.5 py-0.5 font-mono text-[12px] text-red-600", children: ["<", node.name, "> unknown"] }, key));
26
+ }
27
+ const props = {};
28
+ for (const [name, av] of Object.entries(node.attrs)) {
29
+ props[name] = av.kind === 'string' ? av.value : av.kind === 'bool' ? true : evaluate(av.expr, scope);
30
+ }
31
+ const mode = def.childMode ?? 'nodes';
32
+ const kids = mode === 'text'
33
+ ? textOf(node.children, scope)
34
+ : mode === 'nodes'
35
+ ? (node.children.length ? renderNodes(node.children, scope, registry) : undefined)
36
+ : undefined;
37
+ return def.render(props, kids, key);
38
+ }
39
+ /** Collapse children to a raw string (for text components like Code / Markdown). */
40
+ function textOf(nodes, scope) {
41
+ return nodes.map((n) => (n.kind === 'text' ? n.value : n.kind === 'expr' ? stringify(evaluate(n.expr, scope)) : '')).join('');
42
+ }
43
+ function stringify(v) {
44
+ if (v == null)
45
+ return '';
46
+ if (typeof v === 'string')
47
+ return v;
48
+ try {
49
+ return JSON.stringify(v, null, 2);
50
+ }
51
+ catch {
52
+ return String(v);
53
+ }
54
+ }
55
+ function numAttr(node, name, scope) {
56
+ const a = node.attrs[name];
57
+ if (!a)
58
+ return undefined;
59
+ const v = a.kind === 'expr' ? evaluate(a.expr, scope) : a.kind === 'string' ? Number(a.value) : undefined;
60
+ return typeof v === 'number' && !Number.isNaN(v) ? v : undefined;
61
+ }
62
+ /**
63
+ * `<Each in={list} as="item" cols={2}>…</Each>` — iterate an array (or an object's
64
+ * entries, which bind as `{ key, value }`), rendering the children once per element
65
+ * with `item` (+ `index`) added to scope, laid out as an N-column grid or a list.
66
+ */
67
+ function renderEach(node, scope, registry, key) {
68
+ const inAttr = node.attrs['in'];
69
+ const source = inAttr && inAttr.kind === 'expr' ? evaluate(inAttr.expr, scope) : undefined;
70
+ const asAttr = node.attrs['as'];
71
+ const as = asAttr && asAttr.kind === 'string' ? asAttr.value : 'item';
72
+ const cols = numAttr(node, 'cols', scope);
73
+ const items = Array.isArray(source)
74
+ ? source
75
+ : source && typeof source === 'object'
76
+ ? Object.entries(source).map(([k, value]) => ({ key: k, value }))
77
+ : [];
78
+ if (items.length === 0)
79
+ return _jsx("div", { className: "text-[13px] italic text-[var(--wui-fg-muted)]", children: "None" }, key);
80
+ const children = items.map((item, i) => (_jsx("div", { className: "min-w-0", children: renderNodes(node.children, { ...scope, [as]: item, index: i }, registry) }, i)));
81
+ if (cols && cols > 1) {
82
+ return _jsx("div", { className: "grid gap-x-8 gap-y-5", style: { gridTemplateColumns: `repeat(${String(cols)}, minmax(0, 1fr))` }, children: children }, key);
83
+ }
84
+ return _jsx("div", { className: "flex flex-col gap-3", children: children }, key);
85
+ }
86
+ /**
87
+ * `<Tabs in={list} as="item" label="name">…</Tabs>` — render an array as tabs, one
88
+ * per element, but mount ONLY the active tab's children. Same per-item scope binding as
89
+ * `Each`, so children reference the item via `as`. Use it for large per-item bodies
90
+ * (e.g. OCR'd documents) where rendering every item at once is slow — the inactive tabs
91
+ * cost nothing until selected. Tab labels come from each item's `label` field.
92
+ */
93
+ function renderTabs(node, scope, registry, key) {
94
+ const inAttr = node.attrs['in'];
95
+ const source = inAttr && inAttr.kind === 'expr' ? evaluate(inAttr.expr, scope) : undefined;
96
+ const asAttr = node.attrs['as'];
97
+ const as = asAttr && asAttr.kind === 'string' ? asAttr.value : 'item';
98
+ const labelAttr = node.attrs['label'];
99
+ const labelField = labelAttr && labelAttr.kind === 'string' ? labelAttr.value : undefined;
100
+ const items = Array.isArray(source)
101
+ ? source
102
+ : source && typeof source === 'object'
103
+ ? Object.entries(source).map(([k, value]) => ({ key: k, value }))
104
+ : [];
105
+ if (items.length === 0)
106
+ return _jsx("div", { className: "text-[13px] italic text-[var(--wui-fg-muted)]", children: "None" }, key);
107
+ const labels = items.map((item, i) => {
108
+ if (labelField && item && typeof item === 'object') {
109
+ const v = item[labelField];
110
+ if (v != null && v !== '')
111
+ return String(v);
112
+ }
113
+ return `Item ${String(i + 1)}`;
114
+ });
115
+ return (_jsx(TabsView, { labels: labels, render: (i) => renderNodes(node.children, { ...scope, [as]: items[i], index: i }, registry) }, key));
116
+ }
117
+ /** Tab bar + a single mounted panel (the active tab). Lazy: `render` runs only for the active index. */
118
+ function TabsView({ labels, render }) {
119
+ const [active, setActive] = useState(0);
120
+ const rootRef = useRef(null);
121
+ const firstRun = useRef(true);
122
+ const idx = active >= 0 && active < labels.length ? active : 0;
123
+ // On a tab switch (not the initial mount), scroll the panel back up so the newly
124
+ // selected document starts at the top — aligning our root with the scroll container's
125
+ // top, which lands at scrollTop 0 when nothing sits above the tabs.
126
+ useLayoutEffect(() => {
127
+ if (firstRun.current) {
128
+ firstRun.current = false;
129
+ return;
130
+ }
131
+ const root = rootRef.current;
132
+ if (!root)
133
+ return;
134
+ let sc = root.parentElement;
135
+ while (sc && !/auto|scroll/.test(getComputedStyle(sc).overflowY))
136
+ sc = sc.parentElement;
137
+ if (sc)
138
+ sc.scrollTop += root.getBoundingClientRect().top - sc.getBoundingClientRect().top;
139
+ }, [idx]);
140
+ return (_jsxs("div", { ref: rootRef, className: "flex flex-col gap-4", children: [_jsx("div", { role: "tablist", className: "sticky top-0 z-10 flex gap-1 overflow-x-auto border-b border-[var(--wui-border)] bg-[var(--wui-bg)] [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: labels.map((label, i) => (_jsx("button", { type: "button", role: "tab", "aria-selected": i === idx, title: label, onClick: () => setActive(i), className: cn('-mb-px max-w-[24ch] shrink-0 truncate border-b-2 px-3 py-1.5 text-[12.5px] font-medium transition-colors', i === idx
141
+ ? 'border-[var(--wui-primary)] text-[var(--wui-fg)]'
142
+ : 'border-transparent text-[var(--wui-fg-muted)] hover:text-[var(--wui-fg)]'), children: label }, i))) }), _jsx("div", { role: "tabpanel", className: "flex min-w-0 flex-col gap-4", children: render(idx) })] }));
143
+ }
144
+ /** `<If cond={expr}>…</If>` — render children only when the condition is truthy. */
145
+ function renderIf(node, scope, registry, key) {
146
+ const cond = node.attrs['cond'];
147
+ const truthy = cond ? (cond.kind === 'expr' ? Boolean(evaluate(cond.expr, scope)) : cond.kind === 'bool') : false;
148
+ return truthy ? _jsx(Fragment, { children: renderNodes(node.children, scope, registry) }, key) : null;
149
+ }
150
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/layout-engine/render.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Layout engine — a small, safe, dependency-free JSX interpreter for node-carried
3
+ * detail layouts. A step carries its layout as a JSX *string* (data); this engine
4
+ * parses it into an AST, resolves `{expression}` refs against a data scope
5
+ * (input / output / …), and renders whitelisted components. It is layout-only:
6
+ * there is no arbitrary code execution (expressions are member/index/literal access
7
+ * only) and all styling belongs to the components, not the template.
8
+ */
9
+ export type Expr = {
10
+ kind: 'ident';
11
+ name: string;
12
+ } | {
13
+ kind: 'member';
14
+ obj: Expr;
15
+ prop: string;
16
+ } | {
17
+ kind: 'index';
18
+ obj: Expr;
19
+ index: Expr;
20
+ } | {
21
+ kind: 'call';
22
+ name: string;
23
+ args: Expr[];
24
+ } | {
25
+ kind: 'lit';
26
+ value: string | number | boolean | null;
27
+ };
28
+ export type AttrValue = {
29
+ kind: 'string';
30
+ value: string;
31
+ } | {
32
+ kind: 'expr';
33
+ expr: Expr;
34
+ } | {
35
+ kind: 'bool';
36
+ value: true;
37
+ };
38
+ export interface ElementNode {
39
+ kind: 'element';
40
+ name: string;
41
+ attrs: Record<string, AttrValue>;
42
+ children: Node[];
43
+ }
44
+ export interface ExprNode {
45
+ kind: 'expr';
46
+ expr: Expr;
47
+ }
48
+ export interface TextNode {
49
+ kind: 'text';
50
+ value: string;
51
+ }
52
+ export type Node = ElementNode | ExprNode | TextNode;
53
+ /** The data a template can reference by expression (e.g. `output.response.pan`). */
54
+ export type Scope = Record<string, unknown>;
55
+ /** How a component consumes its children in a template. */
56
+ export type ChildMode = 'nodes' | 'text' | 'none';
57
+ export interface ComponentDef {
58
+ /** props = resolved attributes; kids = rendered nodes, raw text, or undefined per childMode. */
59
+ render: (props: Record<string, unknown>, kids: import('react').ReactNode | string | undefined, key: string) => import('react').ReactNode;
60
+ childMode?: ChildMode;
61
+ }
62
+ export type Registry = Record<string, ComponentDef>;
63
+ export declare class LayoutError extends Error {
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout-engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CAAC;AAElC,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;CAAE;AAClH,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE;AACtD,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACzD,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAIrD,oFAAoF;AACpF,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,gGAAgG;IAChG,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,OAAO,EAAE,SAAS,CAAC;IACzI,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEpD,qBAAa,WAAY,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Layout engine — a small, safe, dependency-free JSX interpreter for node-carried
3
+ * detail layouts. A step carries its layout as a JSX *string* (data); this engine
4
+ * parses it into an AST, resolves `{expression}` refs against a data scope
5
+ * (input / output / …), and renders whitelisted components. It is layout-only:
6
+ * there is no arbitrary code execution (expressions are member/index/literal access
7
+ * only) and all styling belongs to the components, not the template.
8
+ */
9
+ export class LayoutError extends Error {
10
+ }
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout-engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwCH,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG"}