@burdenoff/fluidgrids-fe-sdk 2026.1110.2 → 2026.1110.4

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 (54) hide show
  1. package/dist/{ExecutionDetailPage-UXQFBLF3.js → ExecutionDetailPage-2OY2NC3Z.js} +12 -13
  2. package/dist/{ExecutionsListPage-A4GCUNFR.js → ExecutionsListPage-GTR4XPQN.js} +8 -9
  3. package/dist/{WorkflowBuilder-ZLVMV2UA.js → WorkflowBuilder-7LPCDDJJ.js} +15 -16
  4. package/dist/{WorkflowsList-XPNGNR4A.js → WorkflowsList-JJ7UOHTC.js} +6 -6
  5. package/dist/{agentTools-V26FOMTS.js → agentTools-WHQ7UDDS.js} +3 -3
  6. package/dist/{chunk-OJHBCOBA.js → chunk-5NZANNKX.js} +40 -1
  7. package/dist/{chunk-5ZAOXCIQ.js → chunk-5WM655EY.js} +151 -7
  8. package/dist/{chunk-K22NDWSD.js → chunk-6HXJEIDT.js} +2 -2
  9. package/dist/{chunk-DIIGFBYT.js → chunk-6NSPCR5C.js} +1 -1
  10. package/dist/{chunk-ZQTANHKA.js → chunk-7MHCCYDJ.js} +2 -2
  11. package/dist/{chunk-DDINUPO3.js → chunk-CXBF63PL.js} +1 -1
  12. package/dist/{chunk-3F4DIVKT.js → chunk-DCMHDOZO.js} +1 -1
  13. package/dist/chunk-DELQGUVF.js +172 -0
  14. package/dist/{chunk-XLU63IUB.js → chunk-F7C57RJE.js} +6 -6
  15. package/dist/{chunk-L5MZ74DA.js → chunk-GA3DS2ZJ.js} +1 -1
  16. package/dist/{chunk-G7BT24PD.js → chunk-KLR4BZ75.js} +2 -2
  17. package/dist/{chunk-QGRVYPQC.js → chunk-KQMZ226I.js} +2 -2
  18. package/dist/{chunk-2DBAQR6F.js → chunk-LOU6RJIB.js} +2 -2
  19. package/dist/{chunk-Z6D6YL7C.js → chunk-MQ24K2L4.js} +1 -1
  20. package/dist/{chunk-OVZA4IM7.js → chunk-OIMQHAGU.js} +3 -3
  21. package/dist/{chunk-2H4XAES7.js → chunk-POCNK7FY.js} +2 -2
  22. package/dist/{chunk-OZNFRJKC.js → chunk-PXN3S2YU.js} +5 -5
  23. package/dist/{chunk-WGUHISC2.js → chunk-QOFEQEQL.js} +174 -23
  24. package/dist/chunk-QUYK5PAZ.js +338 -0
  25. package/dist/{chunk-5V7PMLQN.js → chunk-QYHRRSEC.js} +1118 -24
  26. package/dist/{chunk-ZZBZPBO5.js → chunk-S36ZLWDC.js} +2 -2
  27. package/dist/{chunk-7UFE2CHD.js → chunk-SKMWUKT5.js} +29 -103
  28. package/dist/{chunk-CBX2CXGH.js → chunk-U5P7E3PA.js} +6 -6
  29. package/dist/{chunk-A6Q4FWB6.js → chunk-UDS2FA24.js} +1 -1
  30. package/dist/{chunk-PICOXEUO.js → chunk-UDTAUZ7B.js} +4 -4
  31. package/dist/{chunk-PI4AW4T2.js → chunk-V6KLU67V.js} +20 -19
  32. package/dist/{chunk-5TGPH3CX.js → chunk-VRPNGY6W.js} +4 -4
  33. package/dist/{chunk-D4L5BN64.js → chunk-VXVLQ3LX.js} +94 -2
  34. package/dist/{chunk-X7XVRJK2.js → chunk-XSTTM74F.js} +1 -1
  35. package/dist/{chunk-I3DBTNWQ.js → chunk-XYLWH24V.js} +5 -5
  36. package/dist/executions.js +13 -14
  37. package/dist/history.js +5 -5
  38. package/dist/index.d.ts +35 -2
  39. package/dist/index.js +45 -46
  40. package/dist/{node-detail-view-2AFXRNX6.js → node-detail-view-JJ2JRFID.js} +8 -9
  41. package/dist/nodes.js +2 -2
  42. package/dist/observability.js +5 -5
  43. package/dist/quick-config-panel-BT2RHMXF.js +411 -0
  44. package/dist/settings.js +7 -8
  45. package/dist/templates.js +15 -16
  46. package/dist/{workflow-builder-DQ2VFyg8.d.ts → workflow-builder-DgZQtyWL.d.ts} +12 -0
  47. package/dist/workflow-builder.d.ts +1 -1
  48. package/dist/workflow-builder.js +16 -17
  49. package/dist/workflows-list.js +6 -6
  50. package/package.json +1 -1
  51. package/dist/chunk-3JGAI5YC.js +0 -1437
  52. package/dist/chunk-HORSE7WX.js +0 -54
  53. package/dist/chunk-WZ3EJVS6.js +0 -93
  54. package/dist/quick-config-panel-U4AELSCT.js +0 -363
@@ -0,0 +1,411 @@
1
+ import { useNodeEditorTab, NodeInputFields, NodeEditorTabs, NodeEditorTabBody } from './chunk-DELQGUVF.js';
2
+ import { NodeExecutionActions } from './chunk-QYHRRSEC.js';
3
+ import { useNodeConfig, nodeSubtitle, nodeTitle } from './chunk-V6KLU67V.js';
4
+ import './chunk-KZCNJAMK.js';
5
+ import './chunk-JDLQ6QIB.js';
6
+ import './chunk-S36ZLWDC.js';
7
+ import './chunk-VXVLQ3LX.js';
8
+ import './chunk-6CPQVLHT.js';
9
+ import './chunk-ERT444RG.js';
10
+ import { getNodeDetail, useNodeExecution } from './chunk-CXBF63PL.js';
11
+ import './chunk-SDZEAIIE.js';
12
+ import { useFlowStore, nodeAccent, NodeTypeIcon } from './chunk-K2X63CR2.js';
13
+ import './chunk-Y7FKJJMF.js';
14
+ import './chunk-TYI2XOSI.js';
15
+ import './chunk-G77IGC3Y.js';
16
+ import './chunk-JL7CASN5.js';
17
+ import './chunk-UDS2FA24.js';
18
+ import { useTr } from './chunk-UULVIT25.js';
19
+ import './chunk-PDODDDHY.js';
20
+ import './chunk-JKLZ6YZ3.js';
21
+ import './chunk-UEG2WC3G.js';
22
+ import { useState, useMemo, useEffect, useRef, useLayoutEffect } from 'react';
23
+ import { Icon } from '@iconify/react';
24
+ import { useReactFlow, useStore } from '@xyflow/react';
25
+ import { shallow } from 'zustand/shallow';
26
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
27
+
28
+ // src/builder/components/quick-config/quick-config-placement.ts
29
+ var PANEL_WIDTH = 380;
30
+ var PANEL_EST_HEIGHT = 480;
31
+ var MAPPER_WIDTH = 260;
32
+ var VIEWPORT_MARGIN = 12;
33
+ var NODE_GAP = 14;
34
+ var MAPPER_GAP = 10;
35
+ var clamp = (v, lo, hi) => Math.min(Math.max(v, lo), Math.max(lo, hi));
36
+ function mapperCoords(panelLeft, panelTop, viewport) {
37
+ const leftPlacement = panelLeft - MAPPER_GAP - MAPPER_WIDTH;
38
+ const rightPlacement = panelLeft + PANEL_WIDTH + MAPPER_GAP;
39
+ const rawLeft = leftPlacement >= VIEWPORT_MARGIN ? leftPlacement : rightPlacement;
40
+ return {
41
+ mapperLeft: clamp(
42
+ rawLeft,
43
+ VIEWPORT_MARGIN,
44
+ viewport.width - MAPPER_WIDTH - VIEWPORT_MARGIN
45
+ ),
46
+ mapperTop: panelTop
47
+ };
48
+ }
49
+ function computeQuickConfigPlacement(nodeRect, panelHeight, viewport) {
50
+ if (!nodeRect) {
51
+ const left2 = viewport.width / 2 - PANEL_WIDTH / 2;
52
+ const top2 = viewport.height / 4;
53
+ return {
54
+ side: "right",
55
+ left: left2,
56
+ top: top2,
57
+ connectorLeft: 0,
58
+ connectorWidth: 0,
59
+ connectorTop: 0,
60
+ hasConnector: false,
61
+ ...mapperCoords(left2, top2, viewport)
62
+ };
63
+ }
64
+ const need = PANEL_WIDTH + NODE_GAP + VIEWPORT_MARGIN;
65
+ const spaceRight = viewport.width - nodeRect.right;
66
+ const spaceLeft = nodeRect.left;
67
+ const side = spaceRight >= need ? "right" : spaceLeft >= need ? "left" : spaceRight >= spaceLeft ? "right" : "left";
68
+ const rawLeft = side === "right" ? nodeRect.right + NODE_GAP : nodeRect.left - NODE_GAP - PANEL_WIDTH;
69
+ const left = clamp(
70
+ rawLeft,
71
+ VIEWPORT_MARGIN,
72
+ viewport.width - PANEL_WIDTH - VIEWPORT_MARGIN
73
+ );
74
+ const top = clamp(
75
+ nodeRect.cy - panelHeight / 2,
76
+ VIEWPORT_MARGIN,
77
+ viewport.height - panelHeight - VIEWPORT_MARGIN
78
+ );
79
+ const connectorTop = clamp(nodeRect.cy, top + 6, top + panelHeight - 6);
80
+ const connectorLeft = side === "right" ? nodeRect.right : left + PANEL_WIDTH;
81
+ const connectorWidth = Math.max(
82
+ 0,
83
+ side === "right" ? left - nodeRect.right : nodeRect.left - (left + PANEL_WIDTH)
84
+ );
85
+ return {
86
+ side,
87
+ left,
88
+ top,
89
+ connectorLeft,
90
+ connectorWidth,
91
+ connectorTop,
92
+ hasConnector: connectorWidth > 1,
93
+ ...mapperCoords(left, top, viewport)
94
+ };
95
+ }
96
+ function useNodeScreenRect(nodeId) {
97
+ const { flowToScreenPosition } = useReactFlow();
98
+ const raw = useStore((s) => {
99
+ const n = s.nodeLookup.get(nodeId);
100
+ if (!n) return null;
101
+ const p = n.internals?.positionAbsolute ?? n.position;
102
+ return {
103
+ x: p.x,
104
+ y: p.y,
105
+ w: n.measured?.width ?? n.width ?? 288,
106
+ h: n.measured?.height ?? n.height ?? 120,
107
+ // Selecting the transform forces a re-render on pan/zoom.
108
+ tx: s.transform[0],
109
+ ty: s.transform[1],
110
+ z: s.transform[2]
111
+ };
112
+ }, shallow);
113
+ if (!raw) return null;
114
+ const tl = flowToScreenPosition({ x: raw.x, y: raw.y });
115
+ const br = flowToScreenPosition({ x: raw.x + raw.w, y: raw.y + raw.h });
116
+ return {
117
+ left: tl.x,
118
+ top: tl.y,
119
+ right: br.x,
120
+ bottom: br.y,
121
+ cy: (tl.y + br.y) / 2
122
+ };
123
+ }
124
+ function QuickConfigPanel() {
125
+ const quickConfig = useFlowStore((s) => s.workflow.quickConfig);
126
+ if (!quickConfig) return null;
127
+ return (
128
+ // Remount per node so panel-local state (mapper open) resets naturally.
129
+ /* @__PURE__ */ jsx(
130
+ QuickConfigPanelInner,
131
+ {
132
+ nodeId: quickConfig.nodeId,
133
+ type: quickConfig.type
134
+ },
135
+ quickConfig.nodeId
136
+ )
137
+ );
138
+ }
139
+ function useMeasuredHeight(fallback) {
140
+ const ref = useRef(null);
141
+ const [height, setHeight] = useState(fallback);
142
+ useLayoutEffect(() => {
143
+ const el = ref.current;
144
+ if (!el) return;
145
+ const measure = () => setHeight(el.offsetHeight);
146
+ measure();
147
+ const ro = new ResizeObserver(measure);
148
+ ro.observe(el);
149
+ return () => ro.disconnect();
150
+ }, []);
151
+ return { ref, height };
152
+ }
153
+ function QuickConfigPanelInner({
154
+ nodeId,
155
+ type
156
+ }) {
157
+ const close = useFlowStore((s) => s.actions.quickConfig.close);
158
+ const tr = useTr();
159
+ const config = useNodeConfig({ nodeId, type });
160
+ const { node, nodes, sourceIds } = config;
161
+ const [showMapper, setShowMapper] = useState(false);
162
+ const { tab, setTab, hasSchedule } = useNodeEditorTab(node?.type);
163
+ const nodeRect = useNodeScreenRect(nodeId);
164
+ const { ref: cardRef, height: panelH } = useMeasuredHeight(PANEL_EST_HEIGHT);
165
+ const placement = useMemo(
166
+ () => computeQuickConfigPlacement(nodeRect, panelH, {
167
+ width: window.innerWidth,
168
+ height: window.innerHeight
169
+ }),
170
+ [nodeRect, panelH]
171
+ );
172
+ useEffect(() => {
173
+ const onKey = (e) => {
174
+ if (e.key === "Escape") close();
175
+ };
176
+ window.addEventListener("keydown", onKey);
177
+ return () => window.removeEventListener("keydown", onKey);
178
+ }, [close]);
179
+ useEffect(() => {
180
+ if (!nodes.some((n) => n.id === nodeId)) close();
181
+ }, [nodes, nodeId, close]);
182
+ if (!node) return null;
183
+ const accent = nodeAccent(node.type || getNodeDetail(node.type).title);
184
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
185
+ placement.hasConnector && /* @__PURE__ */ jsx(
186
+ "div",
187
+ {
188
+ "aria-hidden": true,
189
+ className: "pointer-events-none fixed",
190
+ style: {
191
+ left: placement.connectorLeft,
192
+ top: placement.connectorTop - 1,
193
+ width: placement.connectorWidth,
194
+ height: 2,
195
+ background: accent,
196
+ opacity: 0.55,
197
+ zIndex: 299
198
+ }
199
+ }
200
+ ),
201
+ showMapper && /* @__PURE__ */ jsx(
202
+ "div",
203
+ {
204
+ className: "fixed overflow-hidden rounded-xl border border-border bg-card shadow-xl",
205
+ style: {
206
+ left: placement.mapperLeft,
207
+ top: placement.mapperTop,
208
+ width: MAPPER_WIDTH,
209
+ maxHeight: "min(60vh, 480px)",
210
+ zIndex: 301,
211
+ display: "flex",
212
+ flexDirection: "column"
213
+ },
214
+ "data-testid": "quick-config-mapper",
215
+ children: /* @__PURE__ */ jsx(NodeInputFields, { config, testIdPrefix: "qc" })
216
+ }
217
+ ),
218
+ /* @__PURE__ */ jsx(
219
+ "div",
220
+ {
221
+ className: "fixed",
222
+ style: {
223
+ left: placement.left,
224
+ top: placement.top,
225
+ zIndex: 300,
226
+ width: PANEL_WIDTH
227
+ },
228
+ "data-testid": "quick-config-panel",
229
+ children: /* @__PURE__ */ jsxs(
230
+ "div",
231
+ {
232
+ ref: cardRef,
233
+ className: "flex flex-col overflow-hidden rounded-xl border border-border bg-card shadow-2xl animate-in fade-in zoom-in-95 duration-150",
234
+ style: {
235
+ maxHeight: "min(70vh, 560px)",
236
+ borderTop: `3px solid ${accent}`
237
+ },
238
+ children: [
239
+ /* @__PURE__ */ jsx(
240
+ QuickConfigHeader,
241
+ {
242
+ config,
243
+ nodeId,
244
+ type,
245
+ accent,
246
+ showMapper,
247
+ onToggleMapper: () => setShowMapper((v) => !v),
248
+ onClose: close
249
+ }
250
+ ),
251
+ /* @__PURE__ */ jsx(
252
+ NodeEditorTabs,
253
+ {
254
+ active: tab,
255
+ onChange: setTab,
256
+ hasSchedule,
257
+ testIdPrefix: "qc"
258
+ }
259
+ ),
260
+ /* @__PURE__ */ jsx(
261
+ "div",
262
+ {
263
+ className: "min-h-0 flex-1 overflow-auto",
264
+ onFocusCapture: (e) => {
265
+ const tag = e.target.tagName;
266
+ if (tab === "parameters" && sourceIds.length > 0 && (tag === "INPUT" || tag === "SELECT" || tag === "TEXTAREA")) {
267
+ setShowMapper(true);
268
+ }
269
+ },
270
+ children: /* @__PURE__ */ jsx(
271
+ NodeEditorTabBody,
272
+ {
273
+ tab,
274
+ config,
275
+ nodeId,
276
+ testIdPrefix: "qc"
277
+ }
278
+ )
279
+ }
280
+ ),
281
+ /* @__PURE__ */ jsx(QuickConfigRunActions, { nodeId }),
282
+ /* @__PURE__ */ jsx("p", { className: "shrink-0 border-t border-border px-3 py-1.5 text-[10px] leading-snug text-muted-foreground", children: tr(
283
+ "fluidgrids.builder.quickConfigPanel.footerHint",
284
+ "Changes apply instantly \xB7 double-click the node for the full editor"
285
+ ) })
286
+ ]
287
+ }
288
+ )
289
+ }
290
+ )
291
+ ] });
292
+ }
293
+ function QuickConfigHeader({
294
+ config,
295
+ nodeId,
296
+ type,
297
+ accent,
298
+ showMapper,
299
+ onToggleMapper,
300
+ onClose
301
+ }) {
302
+ const tr = useTr();
303
+ const openNdv = useFlowStore((s) => s.actions.ndv.open);
304
+ const meta = getNodeDetail(config.node?.type);
305
+ const subtitle = nodeSubtitle(config.node);
306
+ return /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2.5 border-b border-border px-3 py-2.5 select-none", children: [
307
+ /* @__PURE__ */ jsx(
308
+ "div",
309
+ {
310
+ className: "flex size-7 shrink-0 items-center justify-center rounded-lg",
311
+ style: {
312
+ backgroundColor: `color-mix(in srgb, ${accent} 13%, transparent)`,
313
+ color: accent,
314
+ border: `1px solid color-mix(in srgb, ${accent} 26%, transparent)`
315
+ },
316
+ children: /* @__PURE__ */ jsx(NodeTypeIcon, { icon: meta.icon, className: "size-4" })
317
+ }
318
+ ),
319
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
320
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold leading-tight text-foreground", children: nodeTitle(config.node) }),
321
+ subtitle && /* @__PURE__ */ jsx("p", { className: "truncate font-mono text-[11px] leading-tight text-muted-foreground", children: subtitle })
322
+ ] }),
323
+ /* @__PURE__ */ jsx(
324
+ "button",
325
+ {
326
+ type: "button",
327
+ title: showMapper ? tr(
328
+ "fluidgrids.builder.quickConfigPanel.hideInputDataTooltip",
329
+ "Hide input data"
330
+ ) : tr(
331
+ "fluidgrids.builder.quickConfigPanel.mapInputDataTooltip",
332
+ "Map data from input"
333
+ ),
334
+ "aria-label": tr(
335
+ "fluidgrids.builder.quickConfigPanel.toggleMapperAriaLabel",
336
+ "Toggle input mapper"
337
+ ),
338
+ onClick: onToggleMapper,
339
+ className: `rounded-md p-1.5 transition-colors hover:bg-muted ${showMapper ? "text-primary" : "text-muted-foreground"} hover:text-foreground`,
340
+ "data-testid": "qc-toggle-mapper",
341
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:tray-arrow-down", className: "size-4" })
342
+ }
343
+ ),
344
+ /* @__PURE__ */ jsx(
345
+ "button",
346
+ {
347
+ type: "button",
348
+ title: tr(
349
+ "fluidgrids.builder.quickConfigPanel.openFullEditorTooltip",
350
+ "Open full editor"
351
+ ),
352
+ "aria-label": tr(
353
+ "fluidgrids.builder.quickConfigPanel.openFullEditorAriaLabel",
354
+ "Open full editor"
355
+ ),
356
+ onClick: () => openNdv({ nodeId, type }),
357
+ className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
358
+ "data-testid": "qc-expand",
359
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-expand", className: "size-4" })
360
+ }
361
+ ),
362
+ /* @__PURE__ */ jsx(
363
+ "button",
364
+ {
365
+ type: "button",
366
+ title: tr("fluidgrids.builder.quickConfigPanel.closeTooltip", "Close"),
367
+ "aria-label": tr(
368
+ "fluidgrids.builder.quickConfigPanel.closeAriaLabel",
369
+ "Close"
370
+ ),
371
+ onClick: onClose,
372
+ className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
373
+ "data-testid": "qc-close",
374
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:close", className: "size-4" })
375
+ }
376
+ )
377
+ ] });
378
+ }
379
+ function QuickConfigRunActions({ nodeId }) {
380
+ const nodes = useFlowStore((s) => s.workflow.nodes);
381
+ const edges = useFlowStore((s) => s.workflow.edges);
382
+ const workflowKey = useFlowStore((s) => s.workflow.workflowKey);
383
+ const workflowId = useFlowStore((s) => s.workflow.id);
384
+ const workflowVersion = useFlowStore((s) => s.workflow.version);
385
+ const logs = useFlowStore((s) => s.execution.logs);
386
+ const sourceRun = useFlowStore((s) => s.execution.sourceRun);
387
+ const isExecuting = useFlowStore((s) => s.execution.isExecuting);
388
+ const { executeStep, executeFromNode } = useNodeExecution();
389
+ return /* @__PURE__ */ jsx(
390
+ NodeExecutionActions,
391
+ {
392
+ targetNodeId: nodeId,
393
+ nodes,
394
+ edges,
395
+ logs,
396
+ workflowKey: workflowKey || workflowId,
397
+ workflowVersion: workflowVersion || "1.0.0",
398
+ sourceRun,
399
+ isExecuting,
400
+ onExecuteStep: async (targetId) => {
401
+ await executeStep(targetId);
402
+ },
403
+ onContinueFromNode: async (sourceRunId, targetId) => {
404
+ await executeFromNode(sourceRunId, targetId);
405
+ },
406
+ testIdPrefix: "qc"
407
+ }
408
+ );
409
+ }
410
+
411
+ export { QuickConfigPanel };
package/dist/settings.js CHANGED
@@ -1,21 +1,20 @@
1
- export { ManagedAiPolicyAuthorityProvider, SettingsPage } from './chunk-5ZAOXCIQ.js';
2
- import './chunk-OJHBCOBA.js';
3
- import './chunk-Z6D6YL7C.js';
1
+ export { ManagedAiPolicyAuthorityProvider, SettingsPage } from './chunk-5WM655EY.js';
2
+ import './chunk-5NZANNKX.js';
3
+ import './chunk-MQ24K2L4.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-ZZBZPBO5.js';
6
- import './chunk-D4L5BN64.js';
7
- import './chunk-WZ3EJVS6.js';
5
+ import './chunk-S36ZLWDC.js';
6
+ import './chunk-VXVLQ3LX.js';
8
7
  import './chunk-4VJ3MDOV.js';
9
8
  import './chunk-6CPQVLHT.js';
10
9
  import './chunk-ERT444RG.js';
11
- import './chunk-DDINUPO3.js';
10
+ import './chunk-CXBF63PL.js';
12
11
  import './chunk-SDZEAIIE.js';
13
12
  import './chunk-K2X63CR2.js';
14
13
  import './chunk-Y7FKJJMF.js';
15
14
  import './chunk-TYI2XOSI.js';
16
15
  import './chunk-G77IGC3Y.js';
17
16
  import './chunk-JL7CASN5.js';
18
- import './chunk-A6Q4FWB6.js';
17
+ import './chunk-UDS2FA24.js';
19
18
  import './chunk-UULVIT25.js';
20
19
  import './chunk-PDODDDHY.js';
21
20
  import './chunk-JKLZ6YZ3.js';
package/dist/templates.js CHANGED
@@ -1,43 +1,42 @@
1
- export { TemplatePreview, TemplatesPage } from './chunk-5TGPH3CX.js';
2
- import './chunk-7UFE2CHD.js';
1
+ export { TemplatePreview, TemplatesPage } from './chunk-VRPNGY6W.js';
2
+ import './chunk-SKMWUKT5.js';
3
3
  import './chunk-JNSHR2J2.js';
4
4
  import './chunk-GEMNVFPK.js';
5
5
  import './chunk-B6CCE2RW.js';
6
6
  import './chunk-IEVSFCFS.js';
7
7
  import './chunk-YXMFRQYV.js';
8
8
  import './chunk-TFCIZFDM.js';
9
- import './chunk-3JGAI5YC.js';
10
- import './chunk-HORSE7WX.js';
11
- import './chunk-5V7PMLQN.js';
12
- import './chunk-PI4AW4T2.js';
9
+ import './chunk-QUYK5PAZ.js';
10
+ import './chunk-DELQGUVF.js';
11
+ import './chunk-QYHRRSEC.js';
12
+ import './chunk-V6KLU67V.js';
13
13
  import './chunk-KZCNJAMK.js';
14
- import './chunk-QGRVYPQC.js';
15
- import './chunk-2H4XAES7.js';
14
+ import './chunk-KQMZ226I.js';
15
+ import './chunk-POCNK7FY.js';
16
16
  import './chunk-JDLQ6QIB.js';
17
- import './chunk-DIIGFBYT.js';
17
+ import './chunk-6NSPCR5C.js';
18
18
  import './chunk-Y53CVZVV.js';
19
- import './chunk-X7XVRJK2.js';
19
+ import './chunk-XSTTM74F.js';
20
20
  import './chunk-CKF2FBUP.js';
21
21
  import './chunk-FNZZ5JJL.js';
22
- import './chunk-K22NDWSD.js';
22
+ import './chunk-6HXJEIDT.js';
23
23
  import './chunk-PJAWNFJV.js';
24
24
  import './chunk-XRGAH6IQ.js';
25
25
  import './chunk-QJAZXCFQ.js';
26
26
  import './chunk-GLYINMOR.js';
27
- import './chunk-ZZBZPBO5.js';
28
- import './chunk-D4L5BN64.js';
29
- import './chunk-WZ3EJVS6.js';
27
+ import './chunk-S36ZLWDC.js';
28
+ import './chunk-VXVLQ3LX.js';
30
29
  import './chunk-4VJ3MDOV.js';
31
30
  import './chunk-6CPQVLHT.js';
32
31
  import './chunk-ERT444RG.js';
33
- import './chunk-DDINUPO3.js';
32
+ import './chunk-CXBF63PL.js';
34
33
  import './chunk-SDZEAIIE.js';
35
34
  import './chunk-K2X63CR2.js';
36
35
  import './chunk-Y7FKJJMF.js';
37
36
  import './chunk-TYI2XOSI.js';
38
37
  import './chunk-G77IGC3Y.js';
39
38
  import './chunk-JL7CASN5.js';
40
- import './chunk-A6Q4FWB6.js';
39
+ import './chunk-UDS2FA24.js';
41
40
  import './chunk-UULVIT25.js';
42
41
  import './chunk-PDODDDHY.js';
43
42
  import './chunk-JKLZ6YZ3.js';
@@ -300,6 +300,18 @@ interface IWorkflowConfig {
300
300
  dataSaving?: WorkflowDataSaving;
301
301
  retention?: WorkflowRetention;
302
302
  dataPrivacy?: WorkflowDataPrivacy;
303
+ budget?: WorkflowRunBudget;
304
+ }
305
+ type WorkflowBudgetMode = "SOFT" | "HARD";
306
+ interface WorkflowBudgetLimit {
307
+ limit: number;
308
+ mode: WorkflowBudgetMode;
309
+ }
310
+ interface WorkflowRunBudget {
311
+ maxSteps?: WorkflowBudgetLimit;
312
+ maxWallTimeSec?: WorkflowBudgetLimit;
313
+ maxTokens?: WorkflowBudgetLimit;
314
+ maxCostMicroUsd?: WorkflowBudgetLimit;
303
315
  }
304
316
  interface WorkflowDefinition {
305
317
  id: string;
@@ -1,4 +1,4 @@
1
- export { I as IFlowState, Q as WorkflowBuilder, U as WorkflowBuilderCore, V as WorkflowBuilderCoreProps, X as WorkflowBuilderPage, Y as WorkflowBuilderProps, a2 as WorkflowSearchRedirect, a7 as refetchStoreNodes, ac as useFlowStore } from './workflow-builder-DQ2VFyg8.js';
1
+ export { I as IFlowState, Q as WorkflowBuilder, U as WorkflowBuilderCore, V as WorkflowBuilderCoreProps, X as WorkflowBuilderPage, Y as WorkflowBuilderProps, a2 as WorkflowSearchRedirect, a7 as refetchStoreNodes, ac as useFlowStore } from './workflow-builder-DgZQtyWL.js';
2
2
  import 'react';
3
3
  import '@apollo/client/core';
4
4
  import '@xyflow/react';
@@ -1,44 +1,43 @@
1
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-OVZA4IM7.js';
2
- export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-CBX2CXGH.js';
1
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-OIMQHAGU.js';
2
+ export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-U5P7E3PA.js';
3
3
  import './chunk-NRI7AUBH.js';
4
4
  import './chunk-PIKYQE7P.js';
5
- import './chunk-7UFE2CHD.js';
5
+ import './chunk-SKMWUKT5.js';
6
6
  import './chunk-JNSHR2J2.js';
7
7
  import './chunk-GEMNVFPK.js';
8
8
  import './chunk-B6CCE2RW.js';
9
9
  import './chunk-IEVSFCFS.js';
10
10
  import './chunk-YXMFRQYV.js';
11
11
  import './chunk-TFCIZFDM.js';
12
- import './chunk-3JGAI5YC.js';
13
- import './chunk-HORSE7WX.js';
14
- import './chunk-5V7PMLQN.js';
15
- import './chunk-PI4AW4T2.js';
12
+ import './chunk-QUYK5PAZ.js';
13
+ import './chunk-DELQGUVF.js';
14
+ import './chunk-QYHRRSEC.js';
15
+ import './chunk-V6KLU67V.js';
16
16
  import './chunk-KZCNJAMK.js';
17
- import './chunk-QGRVYPQC.js';
18
- import './chunk-2H4XAES7.js';
17
+ import './chunk-KQMZ226I.js';
18
+ import './chunk-POCNK7FY.js';
19
19
  import './chunk-JDLQ6QIB.js';
20
- import './chunk-DIIGFBYT.js';
20
+ import './chunk-6NSPCR5C.js';
21
21
  import './chunk-Y53CVZVV.js';
22
- import './chunk-X7XVRJK2.js';
22
+ import './chunk-XSTTM74F.js';
23
23
  import './chunk-CKF2FBUP.js';
24
- import './chunk-K22NDWSD.js';
24
+ import './chunk-6HXJEIDT.js';
25
25
  import './chunk-XRGAH6IQ.js';
26
26
  import './chunk-QJAZXCFQ.js';
27
27
  import './chunk-GLYINMOR.js';
28
- import './chunk-ZZBZPBO5.js';
29
- import './chunk-D4L5BN64.js';
30
- import './chunk-WZ3EJVS6.js';
28
+ import './chunk-S36ZLWDC.js';
29
+ import './chunk-VXVLQ3LX.js';
31
30
  import './chunk-4VJ3MDOV.js';
32
31
  import './chunk-6CPQVLHT.js';
33
32
  import './chunk-ERT444RG.js';
34
- export { refetchStoreNodes } from './chunk-DDINUPO3.js';
33
+ export { refetchStoreNodes } from './chunk-CXBF63PL.js';
35
34
  import './chunk-SDZEAIIE.js';
36
35
  export { useFlowStore } from './chunk-K2X63CR2.js';
37
36
  import './chunk-Y7FKJJMF.js';
38
37
  import './chunk-TYI2XOSI.js';
39
38
  import './chunk-G77IGC3Y.js';
40
39
  import './chunk-JL7CASN5.js';
41
- import './chunk-A6Q4FWB6.js';
40
+ import './chunk-UDS2FA24.js';
42
41
  import './chunk-UULVIT25.js';
43
42
  import './chunk-PDODDDHY.js';
44
43
  import './chunk-JKLZ6YZ3.js';
@@ -1,22 +1,22 @@
1
- export { WorkflowsList } from './chunk-I3DBTNWQ.js';
1
+ export { WorkflowsList } from './chunk-XYLWH24V.js';
2
2
  import './chunk-NRI7AUBH.js';
3
- import './chunk-2DBAQR6F.js';
3
+ import './chunk-LOU6RJIB.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-QGRVYPQC.js';
5
+ import './chunk-KQMZ226I.js';
6
6
  import './chunk-FNZZ5JJL.js';
7
- import './chunk-K22NDWSD.js';
7
+ import './chunk-6HXJEIDT.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-4VJ3MDOV.js';
10
10
  import './chunk-6CPQVLHT.js';
11
11
  import './chunk-ERT444RG.js';
12
- import './chunk-DDINUPO3.js';
12
+ import './chunk-CXBF63PL.js';
13
13
  import './chunk-SDZEAIIE.js';
14
14
  import './chunk-K2X63CR2.js';
15
15
  import './chunk-Y7FKJJMF.js';
16
16
  import './chunk-TYI2XOSI.js';
17
17
  import './chunk-G77IGC3Y.js';
18
18
  import './chunk-JL7CASN5.js';
19
- import './chunk-A6Q4FWB6.js';
19
+ import './chunk-UDS2FA24.js';
20
20
  import './chunk-UULVIT25.js';
21
21
  import './chunk-PDODDDHY.js';
22
22
  import './chunk-JKLZ6YZ3.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fluidgrids-fe-sdk",
3
- "version": "2026.1110.2",
3
+ "version": "2026.1110.4",
4
4
  "description": "FluidGrids Workflow Builder SDK - Embeddable visual workflow automation",
5
5
  "type": "module",
6
6
  "imports": {