@burdenoff/fluidgrids-fe-sdk 2026.1111.16 → 2026.1111.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/AiStudioPage-BHVEU4Wp.js +774 -0
- package/dist/ApprovalInboxPage-dbBDSJ-f.js +558 -0
- package/dist/DataSinkDashboardPage-1h2QsMzH.js +270 -0
- package/dist/DataTablesPage-BZy2z0LB.js +1690 -0
- package/dist/EntityTagPicker-BqRNsLCQ.js +135 -0
- package/dist/{ExecutionDetailPage-D-0_POAf.js → ExecutionDetailPage-BdcZmLT4.js} +799 -4420
- package/dist/ExecutionDetailPage-DvQ667OE.d.ts +10 -0
- package/dist/ExecutionsListPage-BCUJoAIE.js +2742 -0
- package/dist/{FailureTriagePanel-BHiduL7A.js → FailureTriagePanel-B9hDQymi.js} +4 -97
- package/dist/{FluidGridsProvider-DmvFADFa.js → FluidGridsProvider-dvZSNtSW.js} +10 -350
- package/dist/HistoryPage-BLoRpJ1R.d.ts +6 -0
- package/dist/{HistoryPage-BbUgxx1I.js → HistoryPage-U0tqupBN.js} +6 -4
- package/dist/HumanRequestCard-D-ooVPDn.js +439 -0
- package/dist/{InsightsPage-s6f5bU-8.js → InsightsPage-CALo16eB.js} +17 -328
- package/dist/ManagedAiPolicyAuthority-BxwJ3ptd.js +40 -0
- package/dist/{ManagedAiPolicyAuthority-CGux_DaV.d.ts → ManagedAiPolicyAuthority-DM3t3wNr.d.ts} +1 -5
- package/dist/ManagedAiPolicyAuthorityContext-CNkxIOZ1.js +10 -0
- package/dist/{MissingNodesInstallModal-B-9gHy2K.js → MissingNodesInstallModal-CMybsI8h.js} +3 -2
- package/dist/{NodesPage-ClvhUfbh.js → NodesPage-Bf5PhfBK.js} +7 -3
- package/dist/NodesPage-DEbnz9iU.d.ts +6 -0
- package/dist/{PublishCustomNodeAction-D2F7oN0S.js → PublishCustomNodeAction-5XXnSA3H.js} +3 -45
- package/dist/QuotaExhaustedDialog-7IFSaLyi.js +54 -0
- package/dist/RunnerStatusPill-Ctg4TJcP.js +187 -0
- package/dist/RunnersPage-CLCOCclc.js +467 -0
- package/dist/{ManagedAiPolicyAuthority-DsSaz-vg.js → SettingsPage-CJLZvv4J.js} +743 -773
- package/dist/SettingsPage-DMHQFj5-.d.ts +9 -0
- package/dist/TagFilterSelect-DCBOH6Ou.js +41 -0
- package/dist/TaskQueuesPage-9VgSnLdL.js +951 -0
- package/dist/TemplateCard-DsC0KNH1.js +1416 -0
- package/dist/{TemplateConfigurationModal-D_Mvgxqa.js → TemplateConfigurationModal-BhGWIzpm.js} +3 -2
- package/dist/{TemplateDetailPanel-DfFfUcOe.js → TemplateDetailPanel-D4cUVr-m.js} +3 -3
- package/dist/TemplatePreview-FayF6jxh.js +231 -0
- package/dist/TemplatesPage-BG3H-6v6.d.ts +10 -0
- package/dist/{TemplatesPage-Cku13bav.js → TemplatesPage-CsDNT54N.js} +11 -228
- package/dist/VariablesPage-67WR_lVE.js +949 -0
- package/dist/{VersionDiffDialog-Dq2xlPFI.js → VersionDiffDialog-DSN0mU0f.js} +2 -1
- package/dist/WorkflowBuilder-CPnXEL5J.js +555 -0
- package/dist/{WorkflowSearchRedirect-CaoOOpEl.js → WorkflowBuilder-YXRysvZc.js} +19 -585
- package/dist/{WorkflowProposalCard-8Vr56kQa.js → WorkflowProposalCard-qrEeNyYG.js} +4 -405
- package/dist/WorkflowSearchRedirect-DwDNZ_q5.js +36 -0
- package/dist/WorkflowShareDialog-mbIwRQUY.js +168 -0
- package/dist/WorkflowsList-CcNDQge5.d.ts +6 -0
- package/dist/{WorkflowsList-B2j1Pehb.js → WorkflowsList-DiiGyZkT.js} +12 -6
- package/dist/agent-form-Bfvm32j1.js +83 -0
- package/dist/{agentTools-DJ5o2ekg.js → agentTools-8s_25Q_F.js} +3 -2
- package/dist/{ai-usage-D5p7ZeRR.js → ai-usage-glCwHyQz.js} +1 -1
- package/dist/api-BrCHB5oA.js +224 -0
- package/dist/api-C8e0iV-Q.js +55 -0
- package/dist/button-DG7y_FVJ.js +48 -0
- package/dist/{canvasNoteTools-D3zUdEeg.js → canvasNoteTools-B6pYARgU.js} +2 -2
- package/dist/client-C9XSzSXr.js +1147 -0
- package/dist/code-editor-field-9-GdVE_8.js +111 -0
- package/dist/{codec-client-DstqyzTN.js → codec-client-CJ95Rmqo.js} +1 -1
- package/dist/constants-B2lhWNoN.js +202 -0
- package/dist/constants-XdvUxeWK.d.ts +162 -0
- package/dist/dialog-Cjb4lB4D.js +105 -0
- package/dist/executions.d.ts +1 -1
- package/dist/executions.js +2 -1
- package/dist/feature-flags-DM5myWaD.js +296 -0
- package/dist/flags.d.ts +3 -0
- package/dist/flags.js +4 -0
- package/dist/{flow-builder-DEzT8TQu.js → flow-builder-CZDKRc6f.js} +662 -10716
- package/dist/{node-endpoint-configs-DHFGA5MQ.js → graphql-operation-types-kX-MMjgW.js} +1 -1194
- package/dist/{graphql-types-XcDLtFwU.js → graphql-types-CDKVWH2R.js} +2 -202
- package/dist/history.d.ts +1 -1
- package/dist/history.js +1 -1
- package/dist/{index-DRf25-D3.d.ts → index-6JR2vD9J.d.ts} +33 -215
- package/dist/index-72XFgvbn.d.ts +132 -0
- package/dist/index-BcdtKBM-.d.ts +56 -0
- package/dist/{index-B3BWqafN.d.ts → index-DjiFgEQl.d.ts} +5 -131
- package/dist/index.d.ts +13 -9
- package/dist/index.js +52 -5300
- package/dist/{node-detail-view-LNqeIqN-.js → node-detail-view-CV4ZRwqh.js} +13 -8
- package/dist/node-editor-tab-body-DU-dh35X.js +174 -0
- package/dist/node-endpoint-configs-B5bjNMDW.js +37 -0
- package/dist/node-registry-refresh-Dy0uRg9f.js +84 -0
- package/dist/nodes.d.ts +1 -1
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -1
- package/dist/popover-BJHvrFGR.js +472 -0
- package/dist/{quick-config-panel-D3ogsaFL.js → quick-config-panel-ws3pLvbt.js} +3 -2
- package/dist/rolldown-runtime-hDbaFkMy.js +18 -0
- package/dist/run-display-BycKYSU0.js +46 -0
- package/dist/run-list-links-ByYC0OlV.js +98 -0
- package/dist/schedule-panel-C0mfGQSD.js +7542 -0
- package/dist/settings.d.ts +2 -1
- package/dist/settings.js +2 -1
- package/dist/shared-CMfn30xT.js +196 -0
- package/dist/sidebar-node-editor-CR1PiZO-.js +177 -0
- package/dist/templates.d.ts +1 -1
- package/dist/templates.js +2 -1
- package/dist/theme-provider-B3mIuz2d.js +11 -0
- package/dist/{useAgentDefinitions-NFtLytDR.js → useAgentDefinitions-B0dam3_o.js} +3 -397
- package/dist/useConnections-Cs7LCWEM.js +401 -0
- package/dist/useDurableParity-CzUQMFJ3.js +415 -0
- package/dist/useEntityTags-DhnsZcTl.js +236 -0
- package/dist/{useExecutions-DAzeWHS6.js → useExecutions-9aLuOt1c.js} +4 -3
- package/dist/{useObservability-COCZ0hUS.js → useObservability-CfEw3ZFD.js} +2 -2
- package/dist/{useRunHistory-CsYUbouO.js → useRunHistory-B1xJDwl1.js} +4 -3
- package/dist/{WorkflowShareDialog-6RRDe-_v.js → useWorkflowCodeExport-Bu2QYJzA.js} +7 -210
- package/dist/{useWorkflows-w4Dx2fF2.js → useWorkflows-BlVVu8NM.js} +3 -2
- package/dist/utils-uaL5UVxb.js +65 -0
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +4 -2
- package/dist/workflow-host.d.ts +6 -0
- package/dist/workflow-host.js +9 -0
- package/dist/workflow-pages.d.ts +55 -0
- package/dist/workflow-pages.js +113 -0
- package/dist/workflows-list.d.ts +1 -1
- package/dist/workflows-list.js +1 -1
- package/package.json +13 -1
- package/dist/ExecutionDetailPage-MvsnOnE1.d.ts +0 -4
- package/dist/HistoryPage-BqUizaFv.d.ts +0 -3
- package/dist/NodesPage-C97-9K2Y.d.ts +0 -3
- package/dist/TemplatesPage-D0qnXzHh.d.ts +0 -4
- package/dist/WorkflowsList-0d5GSKdh.d.ts +0 -3
- package/dist/agent-form-BvMWhQ42.js +0 -496
package/dist/settings.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import { t as SettingsPage } from "./SettingsPage-DMHQFj5-.js";
|
|
3
|
+
import { n as ManagedAiRequestScope, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-DM3t3wNr.js";
|
|
3
4
|
export { ManagedAiPolicyAuthorityProvider, type ManagedAiRequestScope, SettingsPage };
|
package/dist/settings.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { t as SettingsPage } from "./SettingsPage-CJLZvv4J.js";
|
|
3
|
+
import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
|
|
3
4
|
|
|
4
5
|
export { ManagedAiPolicyAuthorityProvider, SettingsPage };
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient } from "./client-C9XSzSXr.js";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { Label, Textarea } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
|
|
7
|
+
// src/graphql/typed-calls.ts
|
|
8
|
+
async function readTyped(query, variables) {
|
|
9
|
+
const result = await getFluidGridsClient().query({
|
|
10
|
+
query,
|
|
11
|
+
variables,
|
|
12
|
+
fetchPolicy: "network-only"
|
|
13
|
+
});
|
|
14
|
+
throwIfResultError(result);
|
|
15
|
+
if (!result.data) throw new Error("The request returned no data");
|
|
16
|
+
return result.data;
|
|
17
|
+
}
|
|
18
|
+
async function writeTyped(mutation, variables) {
|
|
19
|
+
const result = await getFluidGridsClient().mutate({
|
|
20
|
+
mutation,
|
|
21
|
+
variables
|
|
22
|
+
});
|
|
23
|
+
throwIfResultError(result);
|
|
24
|
+
if (!result.data) throw new Error("The request returned no data");
|
|
25
|
+
return result.data;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// src/modules/run-control/hooks/useResource.ts
|
|
29
|
+
/**
|
|
30
|
+
* A read keyed by its arguments that sends nothing while `enabled` is false,
|
|
31
|
+
* keeps the last good answer, ignores answers to superseded requests, and
|
|
32
|
+
* re-reads every `intervalMs` while `live`. The Phase C views use it so that
|
|
33
|
+
* a gateway or service without the Phase C release only leaves a view empty.
|
|
34
|
+
*/
|
|
35
|
+
function useResource(key, enabled, load, { live = false, intervalMs = 0 } = {}) {
|
|
36
|
+
const [data, setData] = useState(null);
|
|
37
|
+
const [loading, setLoading] = useState(false);
|
|
38
|
+
const [error, setError] = useState(null);
|
|
39
|
+
const request = useRef(0);
|
|
40
|
+
const loadRef = useRef(load);
|
|
41
|
+
loadRef.current = load;
|
|
42
|
+
const active = enabled && key !== null;
|
|
43
|
+
const refetch = useCallback(async () => {
|
|
44
|
+
if (!enabled || key === null) return;
|
|
45
|
+
const id = ++request.current;
|
|
46
|
+
setLoading(true);
|
|
47
|
+
try {
|
|
48
|
+
const next = await loadRef.current();
|
|
49
|
+
if (id !== request.current) return;
|
|
50
|
+
setData(next);
|
|
51
|
+
setError(null);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
if (id !== request.current) return;
|
|
54
|
+
setError(describeOperationError(err));
|
|
55
|
+
} finally {
|
|
56
|
+
if (id === request.current) setLoading(false);
|
|
57
|
+
}
|
|
58
|
+
}, [enabled, key]);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
request.current += 1;
|
|
61
|
+
setData(null);
|
|
62
|
+
setError(null);
|
|
63
|
+
setLoading(false);
|
|
64
|
+
refetch();
|
|
65
|
+
}, [refetch]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!live || !active || intervalMs <= 0) return;
|
|
68
|
+
const timer = setInterval(() => void refetch(), intervalMs);
|
|
69
|
+
return () => clearInterval(timer);
|
|
70
|
+
}, [
|
|
71
|
+
live,
|
|
72
|
+
active,
|
|
73
|
+
intervalMs,
|
|
74
|
+
refetch
|
|
75
|
+
]);
|
|
76
|
+
const set = useCallback((value) => {
|
|
77
|
+
request.current += 1;
|
|
78
|
+
setData(value);
|
|
79
|
+
setError(null);
|
|
80
|
+
setLoading(false);
|
|
81
|
+
}, []);
|
|
82
|
+
return {
|
|
83
|
+
data: active ? data : null,
|
|
84
|
+
loading,
|
|
85
|
+
error,
|
|
86
|
+
refetch,
|
|
87
|
+
set
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// src/modules/run-control/utils/json-input.ts
|
|
92
|
+
function parseJsonInput(text) {
|
|
93
|
+
const trimmed = text.trim();
|
|
94
|
+
if (!trimmed) return {
|
|
95
|
+
ok: true,
|
|
96
|
+
value: void 0
|
|
97
|
+
};
|
|
98
|
+
try {
|
|
99
|
+
return {
|
|
100
|
+
ok: true,
|
|
101
|
+
value: JSON.parse(trimmed)
|
|
102
|
+
};
|
|
103
|
+
} catch (error) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
error: error instanceof Error ? error.message : String(error)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Like {@link parseJsonInput}, but the value must be a JSON object. */
|
|
111
|
+
function parseJsonObjectInput(text) {
|
|
112
|
+
const parsed = parseJsonInput(text);
|
|
113
|
+
if (!parsed.ok) return parsed;
|
|
114
|
+
const value = parsed.value;
|
|
115
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return {
|
|
116
|
+
ok: false,
|
|
117
|
+
error: "Enter a JSON object, for example {\"key\": 1}"
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
ok: true,
|
|
121
|
+
value: Object.fromEntries(Object.entries(value))
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Pretty JSON for display; `undefined` and `null` show as an em dash. */
|
|
125
|
+
function formatJson(value) {
|
|
126
|
+
if (value === void 0 || value === null) return "—";
|
|
127
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
128
|
+
return JSON.stringify(value, null, 2);
|
|
129
|
+
}
|
|
130
|
+
/** A fresh idempotency id for an update (kept while its dialog stays open). */
|
|
131
|
+
function newRunControlId(prefix) {
|
|
132
|
+
return `${prefix}-${typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`}`;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// src/modules/run-control/components/shared.tsx
|
|
136
|
+
/** Dialog layers sit above the builder's canvas and the NDV (1100). */
|
|
137
|
+
const RUN_CONTROL_DIALOG_STYLE = { zIndex: 1100 };
|
|
138
|
+
function FieldError({ message, testId }) {
|
|
139
|
+
if (!message) return null;
|
|
140
|
+
return /* @__PURE__ */ jsx("p", {
|
|
141
|
+
role: "alert",
|
|
142
|
+
className: "text-sm text-[var(--color-status-error-text)]",
|
|
143
|
+
"data-testid": testId,
|
|
144
|
+
children: message
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function JsonField({ id, label, value, onChange, placeholder, error, rows = 4, testId }) {
|
|
148
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
149
|
+
className: "space-y-1.5",
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ jsx(Label, {
|
|
152
|
+
htmlFor: id,
|
|
153
|
+
children: label
|
|
154
|
+
}),
|
|
155
|
+
/* @__PURE__ */ jsx(Textarea, {
|
|
156
|
+
id,
|
|
157
|
+
value,
|
|
158
|
+
onChange: (event) => onChange(event.target.value),
|
|
159
|
+
placeholder,
|
|
160
|
+
rows,
|
|
161
|
+
className: "font-mono text-xs",
|
|
162
|
+
"data-testid": testId
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ jsx(FieldError, { message: error })
|
|
165
|
+
]
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function JsonBlock({ value, testId }) {
|
|
169
|
+
return /* @__PURE__ */ jsx("pre", {
|
|
170
|
+
className: "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background-primary p-3 font-mono text-xs text-text-primary",
|
|
171
|
+
"data-testid": testId,
|
|
172
|
+
children: formatJson(value)
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function NativeSelect({ id, value, onChange, children, testId, disabled, ariaLabel }) {
|
|
176
|
+
return /* @__PURE__ */ jsx("select", {
|
|
177
|
+
id,
|
|
178
|
+
value,
|
|
179
|
+
disabled,
|
|
180
|
+
"aria-label": ariaLabel,
|
|
181
|
+
onChange: (event) => onChange(event.target.value),
|
|
182
|
+
className: "h-9 w-full rounded-md border border-border-primary bg-background-primary px-2 text-sm text-text-primary",
|
|
183
|
+
"data-testid": testId,
|
|
184
|
+
children
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function StatusPill({ tone, children, testId }) {
|
|
188
|
+
const classes = tone === "neutral" ? "border-border-secondary bg-background-tertiary text-text-secondary" : `border-[var(--color-status-${tone}-border)] bg-[var(--color-status-${tone}-bg-subtle)] text-[var(--color-status-${tone}-text)]`;
|
|
189
|
+
return /* @__PURE__ */ jsx("span", {
|
|
190
|
+
className: `inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${classes}`,
|
|
191
|
+
"data-testid": testId,
|
|
192
|
+
children
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export { RUN_CONTROL_DIALOG_STYLE as a, parseJsonInput as c, readTyped as d, writeTyped as f, NativeSelect as i, parseJsonObjectInput as l, JsonBlock as n, StatusPill as o, JsonField as r, newRunControlId as s, FieldError as t, useResource as u };
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { A as nodeAccent, H as useFlowStore, j as NodeTypeIcon } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
+
import { G as nodeSubtitle, K as nodeTitle, Mn as getNodeDetail, X as useNodeConfig, rn as useNodeExecution } from "./FluidGridsProvider-dvZSNtSW.js";
|
|
4
|
+
import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-DU-dh35X.js";
|
|
5
|
+
import { r as NodeExecutionActions } from "./schedule-panel-C0mfGQSD.js";
|
|
6
|
+
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
8
|
+
import { Icon } from "@iconify/react";
|
|
9
|
+
import { cn } from "@burdenoff/fe-libs/utils";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
|
|
12
|
+
// src/builder/components/sidebar-node-editor/sidebar-node-editor.tsx
|
|
13
|
+
/**
|
|
14
|
+
* The node editor in the builder's right sidebar (BOFF-11325).
|
|
15
|
+
*
|
|
16
|
+
* It is the NDV's middle column in sidebar form: the same `useNodeConfig`
|
|
17
|
+
* model and the same `NodeParamsForm` / `NodeSettingsPanel` (and the Schedule
|
|
18
|
+
* tab for a Schedule Trigger), so a node is configured identically from the
|
|
19
|
+
* NDV, the single-click quick panel and here. Writes go straight to the flow
|
|
20
|
+
* store, as in the other two editors. It replaces the legacy property panels,
|
|
21
|
+
* which rendered the manifest's adaptive card instead.
|
|
22
|
+
*/
|
|
23
|
+
function SidebarNodeEditor({ nodeId, type }) {
|
|
24
|
+
return /* @__PURE__ */ jsx(SidebarNodeEditorInner, {
|
|
25
|
+
nodeId,
|
|
26
|
+
type
|
|
27
|
+
}, nodeId);
|
|
28
|
+
}
|
|
29
|
+
function SidebarNodeEditorInner({ nodeId, type }) {
|
|
30
|
+
const config = useNodeConfig({
|
|
31
|
+
nodeId,
|
|
32
|
+
type
|
|
33
|
+
}, { webhookEnabled: true });
|
|
34
|
+
const { node, nodes } = config;
|
|
35
|
+
const setSelectedNode = useFlowStore((s) => s.actions.sidebar.panels.nodeProperties.setSelectedNode);
|
|
36
|
+
const { tab, setTab, hasSchedule } = useNodeEditorTab(node?.type);
|
|
37
|
+
const [showInput, setShowInput] = useState(false);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (!nodes.some((n) => n.id === nodeId)) setSelectedNode(null);
|
|
40
|
+
}, [
|
|
41
|
+
nodes,
|
|
42
|
+
nodeId,
|
|
43
|
+
setSelectedNode
|
|
44
|
+
]);
|
|
45
|
+
if (!node) return null;
|
|
46
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
47
|
+
className: "flex min-h-0 flex-1 flex-col",
|
|
48
|
+
"data-testid": "sidebar-node-editor",
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ jsx(EditorHeader, {
|
|
51
|
+
config,
|
|
52
|
+
nodeId,
|
|
53
|
+
type,
|
|
54
|
+
showInput,
|
|
55
|
+
onToggleInput: () => setShowInput((v) => !v)
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ jsx(NodeEditorTabs, {
|
|
58
|
+
active: tab,
|
|
59
|
+
onChange: setTab,
|
|
60
|
+
hasSchedule,
|
|
61
|
+
testIdPrefix: "sp"
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", {
|
|
64
|
+
className: "min-h-0 flex-1 overflow-auto",
|
|
65
|
+
children: [showInput && /* @__PURE__ */ jsx("div", {
|
|
66
|
+
className: "m-3 flex max-h-64 flex-col overflow-hidden rounded-lg border border-border bg-card",
|
|
67
|
+
"data-testid": "sp-input-fields",
|
|
68
|
+
children: /* @__PURE__ */ jsx(NodeInputFields, {
|
|
69
|
+
config,
|
|
70
|
+
testIdPrefix: "sp"
|
|
71
|
+
})
|
|
72
|
+
}), /* @__PURE__ */ jsx(NodeEditorTabBody, {
|
|
73
|
+
tab,
|
|
74
|
+
config,
|
|
75
|
+
nodeId,
|
|
76
|
+
testIdPrefix: "sp"
|
|
77
|
+
})]
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ jsx(EditorRunActions, { nodeId })
|
|
80
|
+
]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** The node, plus the input-mapper toggle and the switch to the full NDV. */
|
|
84
|
+
function EditorHeader({ config, nodeId, type, showInput, onToggleInput }) {
|
|
85
|
+
const tr = useTr();
|
|
86
|
+
const openNdv = useFlowStore((s) => s.actions.ndv.open);
|
|
87
|
+
const meta = getNodeDetail(config.node?.type);
|
|
88
|
+
const accent = nodeAccent(config.node?.type || meta.title);
|
|
89
|
+
const subtitle = nodeSubtitle(config.node);
|
|
90
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
91
|
+
className: "flex shrink-0 items-center gap-2.5 border-b border-border px-3 py-2.5",
|
|
92
|
+
style: { borderTop: `3px solid ${accent}` },
|
|
93
|
+
children: [
|
|
94
|
+
/* @__PURE__ */ jsx("div", {
|
|
95
|
+
className: "flex size-7 shrink-0 items-center justify-center rounded-lg",
|
|
96
|
+
style: {
|
|
97
|
+
backgroundColor: `color-mix(in srgb, ${accent} 13%, transparent)`,
|
|
98
|
+
color: accent,
|
|
99
|
+
border: `1px solid color-mix(in srgb, ${accent} 26%, transparent)`
|
|
100
|
+
},
|
|
101
|
+
children: /* @__PURE__ */ jsx(NodeTypeIcon, {
|
|
102
|
+
icon: meta.icon,
|
|
103
|
+
className: "size-4"
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ jsxs("div", {
|
|
107
|
+
className: "min-w-0 flex-1",
|
|
108
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
109
|
+
className: "truncate text-sm font-semibold leading-tight text-foreground",
|
|
110
|
+
children: nodeTitle(config.node)
|
|
111
|
+
}), subtitle && /* @__PURE__ */ jsx("p", {
|
|
112
|
+
className: "truncate font-mono text-[11px] leading-tight text-muted-foreground",
|
|
113
|
+
children: subtitle
|
|
114
|
+
})]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ jsx("button", {
|
|
117
|
+
type: "button",
|
|
118
|
+
title: showInput ? tr("fluidgrids.builder.quickConfigPanel.hideInputDataTooltip", "Hide input data") : tr("fluidgrids.builder.quickConfigPanel.mapInputDataTooltip", "Map data from input"),
|
|
119
|
+
"aria-label": tr("fluidgrids.builder.quickConfigPanel.toggleMapperAriaLabel", "Toggle input mapper"),
|
|
120
|
+
"aria-pressed": showInput,
|
|
121
|
+
onClick: onToggleInput,
|
|
122
|
+
className: cn("rounded-md p-1.5 transition-colors hover:bg-muted hover:text-foreground", showInput ? "text-primary" : "text-muted-foreground"),
|
|
123
|
+
"data-testid": "sp-toggle-mapper",
|
|
124
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
125
|
+
icon: "mdi:tray-arrow-down",
|
|
126
|
+
className: "size-4"
|
|
127
|
+
})
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ jsx("button", {
|
|
130
|
+
type: "button",
|
|
131
|
+
title: tr("fluidgrids.builder.quickConfigPanel.openFullEditorTooltip", "Open full editor"),
|
|
132
|
+
"aria-label": tr("fluidgrids.builder.quickConfigPanel.openFullEditorAriaLabel", "Open full editor"),
|
|
133
|
+
onClick: () => openNdv({
|
|
134
|
+
nodeId,
|
|
135
|
+
type
|
|
136
|
+
}),
|
|
137
|
+
className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
|
|
138
|
+
"data-testid": "sp-expand",
|
|
139
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
140
|
+
icon: "mdi:arrow-expand",
|
|
141
|
+
className: "size-4"
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/** Run this step / continue from this node, as in the NDV and the quick panel. */
|
|
148
|
+
function EditorRunActions({ nodeId }) {
|
|
149
|
+
const nodes = useFlowStore((s) => s.workflow.nodes);
|
|
150
|
+
const edges = useFlowStore((s) => s.workflow.edges);
|
|
151
|
+
const workflowKey = useFlowStore((s) => s.workflow.workflowKey);
|
|
152
|
+
const workflowId = useFlowStore((s) => s.workflow.id);
|
|
153
|
+
const workflowVersion = useFlowStore((s) => s.workflow.version);
|
|
154
|
+
const logs = useFlowStore((s) => s.execution.logs);
|
|
155
|
+
const sourceRun = useFlowStore((s) => s.execution.sourceRun);
|
|
156
|
+
const isExecuting = useFlowStore((s) => s.execution.isExecuting);
|
|
157
|
+
const { executeStep, executeFromNode } = useNodeExecution();
|
|
158
|
+
return /* @__PURE__ */ jsx(NodeExecutionActions, {
|
|
159
|
+
targetNodeId: nodeId,
|
|
160
|
+
nodes,
|
|
161
|
+
edges,
|
|
162
|
+
logs,
|
|
163
|
+
workflowKey: workflowKey || workflowId,
|
|
164
|
+
workflowVersion: workflowVersion || "1.0.0",
|
|
165
|
+
sourceRun,
|
|
166
|
+
isExecuting,
|
|
167
|
+
onExecuteStep: async (targetId) => {
|
|
168
|
+
await executeStep(targetId);
|
|
169
|
+
},
|
|
170
|
+
onContinueFromNode: async (sourceRunId, targetId) => {
|
|
171
|
+
await executeFromNode(sourceRunId, targetId);
|
|
172
|
+
},
|
|
173
|
+
testIdPrefix: "sp"
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export { SidebarNodeEditor };
|
package/dist/templates.d.ts
CHANGED
package/dist/templates.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { t as TemplatesPage } from "./TemplatesPage-CsDNT54N.js";
|
|
3
|
+
import { t as TemplatePreview } from "./TemplatePreview-FayF6jxh.js";
|
|
3
4
|
|
|
4
5
|
export { TemplatePreview, TemplatesPage };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { ThemeProvider } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
5
|
+
|
|
6
|
+
// src/builder/components/theme-provider.tsx
|
|
7
|
+
function ThemeProvider$1({ children }) {
|
|
8
|
+
return /* @__PURE__ */ jsx(ThemeProvider, { children });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { ThemeProvider$1 as t };
|