@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.
Files changed (119) hide show
  1. package/README.md +41 -0
  2. package/dist/AiStudioPage-BHVEU4Wp.js +774 -0
  3. package/dist/ApprovalInboxPage-dbBDSJ-f.js +558 -0
  4. package/dist/DataSinkDashboardPage-1h2QsMzH.js +270 -0
  5. package/dist/DataTablesPage-BZy2z0LB.js +1690 -0
  6. package/dist/EntityTagPicker-BqRNsLCQ.js +135 -0
  7. package/dist/{ExecutionDetailPage-D-0_POAf.js → ExecutionDetailPage-BdcZmLT4.js} +799 -4420
  8. package/dist/ExecutionDetailPage-DvQ667OE.d.ts +10 -0
  9. package/dist/ExecutionsListPage-BCUJoAIE.js +2742 -0
  10. package/dist/{FailureTriagePanel-BHiduL7A.js → FailureTriagePanel-B9hDQymi.js} +4 -97
  11. package/dist/{FluidGridsProvider-DmvFADFa.js → FluidGridsProvider-dvZSNtSW.js} +10 -350
  12. package/dist/HistoryPage-BLoRpJ1R.d.ts +6 -0
  13. package/dist/{HistoryPage-BbUgxx1I.js → HistoryPage-U0tqupBN.js} +6 -4
  14. package/dist/HumanRequestCard-D-ooVPDn.js +439 -0
  15. package/dist/{InsightsPage-s6f5bU-8.js → InsightsPage-CALo16eB.js} +17 -328
  16. package/dist/ManagedAiPolicyAuthority-BxwJ3ptd.js +40 -0
  17. package/dist/{ManagedAiPolicyAuthority-CGux_DaV.d.ts → ManagedAiPolicyAuthority-DM3t3wNr.d.ts} +1 -5
  18. package/dist/ManagedAiPolicyAuthorityContext-CNkxIOZ1.js +10 -0
  19. package/dist/{MissingNodesInstallModal-B-9gHy2K.js → MissingNodesInstallModal-CMybsI8h.js} +3 -2
  20. package/dist/{NodesPage-ClvhUfbh.js → NodesPage-Bf5PhfBK.js} +7 -3
  21. package/dist/NodesPage-DEbnz9iU.d.ts +6 -0
  22. package/dist/{PublishCustomNodeAction-D2F7oN0S.js → PublishCustomNodeAction-5XXnSA3H.js} +3 -45
  23. package/dist/QuotaExhaustedDialog-7IFSaLyi.js +54 -0
  24. package/dist/RunnerStatusPill-Ctg4TJcP.js +187 -0
  25. package/dist/RunnersPage-CLCOCclc.js +467 -0
  26. package/dist/{ManagedAiPolicyAuthority-DsSaz-vg.js → SettingsPage-CJLZvv4J.js} +743 -773
  27. package/dist/SettingsPage-DMHQFj5-.d.ts +9 -0
  28. package/dist/TagFilterSelect-DCBOH6Ou.js +41 -0
  29. package/dist/TaskQueuesPage-9VgSnLdL.js +951 -0
  30. package/dist/TemplateCard-DsC0KNH1.js +1416 -0
  31. package/dist/{TemplateConfigurationModal-D_Mvgxqa.js → TemplateConfigurationModal-BhGWIzpm.js} +3 -2
  32. package/dist/{TemplateDetailPanel-DfFfUcOe.js → TemplateDetailPanel-D4cUVr-m.js} +3 -3
  33. package/dist/TemplatePreview-FayF6jxh.js +231 -0
  34. package/dist/TemplatesPage-BG3H-6v6.d.ts +10 -0
  35. package/dist/{TemplatesPage-Cku13bav.js → TemplatesPage-CsDNT54N.js} +11 -228
  36. package/dist/VariablesPage-67WR_lVE.js +949 -0
  37. package/dist/{VersionDiffDialog-Dq2xlPFI.js → VersionDiffDialog-DSN0mU0f.js} +2 -1
  38. package/dist/WorkflowBuilder-CPnXEL5J.js +555 -0
  39. package/dist/{WorkflowSearchRedirect-CaoOOpEl.js → WorkflowBuilder-YXRysvZc.js} +19 -585
  40. package/dist/{WorkflowProposalCard-8Vr56kQa.js → WorkflowProposalCard-qrEeNyYG.js} +4 -405
  41. package/dist/WorkflowSearchRedirect-DwDNZ_q5.js +36 -0
  42. package/dist/WorkflowShareDialog-mbIwRQUY.js +168 -0
  43. package/dist/WorkflowsList-CcNDQge5.d.ts +6 -0
  44. package/dist/{WorkflowsList-B2j1Pehb.js → WorkflowsList-DiiGyZkT.js} +12 -6
  45. package/dist/agent-form-Bfvm32j1.js +83 -0
  46. package/dist/{agentTools-DJ5o2ekg.js → agentTools-8s_25Q_F.js} +3 -2
  47. package/dist/{ai-usage-D5p7ZeRR.js → ai-usage-glCwHyQz.js} +1 -1
  48. package/dist/api-BrCHB5oA.js +224 -0
  49. package/dist/api-C8e0iV-Q.js +55 -0
  50. package/dist/button-DG7y_FVJ.js +48 -0
  51. package/dist/{canvasNoteTools-D3zUdEeg.js → canvasNoteTools-B6pYARgU.js} +2 -2
  52. package/dist/client-C9XSzSXr.js +1147 -0
  53. package/dist/code-editor-field-9-GdVE_8.js +111 -0
  54. package/dist/{codec-client-DstqyzTN.js → codec-client-CJ95Rmqo.js} +1 -1
  55. package/dist/constants-B2lhWNoN.js +202 -0
  56. package/dist/constants-XdvUxeWK.d.ts +162 -0
  57. package/dist/dialog-Cjb4lB4D.js +105 -0
  58. package/dist/executions.d.ts +1 -1
  59. package/dist/executions.js +2 -1
  60. package/dist/feature-flags-DM5myWaD.js +296 -0
  61. package/dist/flags.d.ts +3 -0
  62. package/dist/flags.js +4 -0
  63. package/dist/{flow-builder-DEzT8TQu.js → flow-builder-CZDKRc6f.js} +662 -10716
  64. package/dist/{node-endpoint-configs-DHFGA5MQ.js → graphql-operation-types-kX-MMjgW.js} +1 -1194
  65. package/dist/{graphql-types-XcDLtFwU.js → graphql-types-CDKVWH2R.js} +2 -202
  66. package/dist/history.d.ts +1 -1
  67. package/dist/history.js +1 -1
  68. package/dist/{index-DRf25-D3.d.ts → index-6JR2vD9J.d.ts} +33 -215
  69. package/dist/index-72XFgvbn.d.ts +132 -0
  70. package/dist/index-BcdtKBM-.d.ts +56 -0
  71. package/dist/{index-B3BWqafN.d.ts → index-DjiFgEQl.d.ts} +5 -131
  72. package/dist/index.d.ts +13 -9
  73. package/dist/index.js +52 -5300
  74. package/dist/{node-detail-view-LNqeIqN-.js → node-detail-view-CV4ZRwqh.js} +13 -8
  75. package/dist/node-editor-tab-body-DU-dh35X.js +174 -0
  76. package/dist/node-endpoint-configs-B5bjNMDW.js +37 -0
  77. package/dist/node-registry-refresh-Dy0uRg9f.js +84 -0
  78. package/dist/nodes.d.ts +1 -1
  79. package/dist/nodes.js +1 -1
  80. package/dist/observability.d.ts +1 -1
  81. package/dist/observability.js +2 -1
  82. package/dist/popover-BJHvrFGR.js +472 -0
  83. package/dist/{quick-config-panel-D3ogsaFL.js → quick-config-panel-ws3pLvbt.js} +3 -2
  84. package/dist/rolldown-runtime-hDbaFkMy.js +18 -0
  85. package/dist/run-display-BycKYSU0.js +46 -0
  86. package/dist/run-list-links-ByYC0OlV.js +98 -0
  87. package/dist/schedule-panel-C0mfGQSD.js +7542 -0
  88. package/dist/settings.d.ts +2 -1
  89. package/dist/settings.js +2 -1
  90. package/dist/shared-CMfn30xT.js +196 -0
  91. package/dist/sidebar-node-editor-CR1PiZO-.js +177 -0
  92. package/dist/templates.d.ts +1 -1
  93. package/dist/templates.js +2 -1
  94. package/dist/theme-provider-B3mIuz2d.js +11 -0
  95. package/dist/{useAgentDefinitions-NFtLytDR.js → useAgentDefinitions-B0dam3_o.js} +3 -397
  96. package/dist/useConnections-Cs7LCWEM.js +401 -0
  97. package/dist/useDurableParity-CzUQMFJ3.js +415 -0
  98. package/dist/useEntityTags-DhnsZcTl.js +236 -0
  99. package/dist/{useExecutions-DAzeWHS6.js → useExecutions-9aLuOt1c.js} +4 -3
  100. package/dist/{useObservability-COCZ0hUS.js → useObservability-CfEw3ZFD.js} +2 -2
  101. package/dist/{useRunHistory-CsYUbouO.js → useRunHistory-B1xJDwl1.js} +4 -3
  102. package/dist/{WorkflowShareDialog-6RRDe-_v.js → useWorkflowCodeExport-Bu2QYJzA.js} +7 -210
  103. package/dist/{useWorkflows-w4Dx2fF2.js → useWorkflows-BlVVu8NM.js} +3 -2
  104. package/dist/utils-uaL5UVxb.js +65 -0
  105. package/dist/workflow-builder.d.ts +1 -1
  106. package/dist/workflow-builder.js +4 -2
  107. package/dist/workflow-host.d.ts +6 -0
  108. package/dist/workflow-host.js +9 -0
  109. package/dist/workflow-pages.d.ts +55 -0
  110. package/dist/workflow-pages.js +113 -0
  111. package/dist/workflows-list.d.ts +1 -1
  112. package/dist/workflows-list.js +1 -1
  113. package/package.json +13 -1
  114. package/dist/ExecutionDetailPage-MvsnOnE1.d.ts +0 -4
  115. package/dist/HistoryPage-BqUizaFv.d.ts +0 -3
  116. package/dist/NodesPage-C97-9K2Y.d.ts +0 -3
  117. package/dist/TemplatesPage-D0qnXzHh.d.ts +0 -4
  118. package/dist/WorkflowsList-0d5GSKdh.d.ts +0 -3
  119. package/dist/agent-form-BvMWhQ42.js +0 -496
@@ -1,3 +1,4 @@
1
1
 
2
- import { n as ManagedAiRequestScope, r as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-CGux_DaV.js";
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 { n as SettingsPage, t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-DsSaz-vg.js";
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 };
@@ -1,3 +1,3 @@
1
1
 
2
- import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-D0qnXzHh.js";
2
+ import { r as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-BG3H-6v6.js";
3
3
  export { TemplatePreview, TemplatesPage };
package/dist/templates.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use client";
2
- import { n as TemplatePreview, t as TemplatesPage } from "./TemplatesPage-Cku13bav.js";
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 };