@burdenoff/fluidgrids-fe-sdk 2026.1113.1 → 2026.1113.2

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 (127) hide show
  1. package/dist/{AiStudioPage-D3MAk-bs.js → AiStudioPage-5KYZ8r8-.js} +464 -7
  2. package/dist/{ApprovalInboxPage-Bb8H9ruw.js → ApprovalInboxPage-BsJX4osU.js} +4 -3
  3. package/dist/{ConnectionFormDialog-Bg9_OdHX.js → ConnectionFormDialog-Dr1-CTan.js} +2 -1
  4. package/dist/CreateFluidgridsTagDocument-Dtp9KPLJ.js +1055 -0
  5. package/dist/{DataSinkDashboardPage-Dc2QuJbL.js → DataSinkDashboardPage-8ZDn85e2.js} +1 -1
  6. package/dist/{DataTablesPage-Cv4veaKK.js → DataTablesPage-BBvABuxE.js} +5 -4
  7. package/dist/{EntityTagPicker-D8ws706D.js → EntityTagPicker-BppBSEJk.js} +2 -2
  8. package/dist/{ExecutionDetailPage-CTVGE-d-.js → ExecutionDetailPage-BXDF2eoT.js} +1444 -18
  9. package/dist/ExecutionsListDocument-CzdLPpj5.js +1259 -0
  10. package/dist/{ExecutionsListPage-J0sJPuoM.js → ExecutionsListPage--4BthM8L.js} +285 -11
  11. package/dist/FailureTriagePanel-B5WCSRFo.js +1252 -0
  12. package/dist/{FluidGridsProvider-C4FVNz0n.js → FluidGridsProvider-Dc_Jhtch.js} +8666 -8734
  13. package/dist/{HistoryPage-B9XcTPrO.js → HistoryPage-BvFk2m1m.js} +4 -3
  14. package/dist/{InsightsPage-DFOltjyj.js → InsightsPage-Dwmb02F6.js} +2682 -5
  15. package/dist/{MissingNodesInstallModal-D8H-YNCJ.js → MissingNodesInstallModal-Cze674hp.js} +2 -2
  16. package/dist/{NodesPage-YQ-hP60x.js → NodesPage-C5Dq-ru-.js} +3 -2
  17. package/dist/{OpenTemplateAsCodeButton-hH26HQCk.js → OpenTemplateAsCodeButton-8MZHih6I.js} +2 -2
  18. package/dist/{PaidTemplateConfirm-DoKWMBtR.js → PaidTemplateConfirm-0G-gv29n.js} +1 -1
  19. package/dist/{PublishCustomNodeAction-5XXnSA3H.js → PublishCustomNodeAction-OOY35dUv.js} +1 -1
  20. package/dist/QuotaExhaustedDialog-wvu_-WJ-.js +55 -0
  21. package/dist/{RunnerStatusPill-Ctg4TJcP.js → RunnerStatusPill-Bh7mEsPh.js} +2 -1
  22. package/dist/{RunnersPage-CAt4YDhB.js → RunnersPage-DHeuUDil.js} +2 -2
  23. package/dist/{SettingsPage-DEKPCVVP.js → SettingsPage-CfjXiGpb.js} +694 -14
  24. package/dist/{TagFilterSelect-CwM2-DU6.js → TagFilterSelect-CAShgvbS.js} +1 -1
  25. package/dist/{TaskQueuesPage-Dhi6SIT4.js → TaskQueuesPage--Mmn36b-.js} +3 -3
  26. package/dist/{TemplateCard-DVSd_4zJ.js → TemplateCard-BA_9em22.js} +644 -352
  27. package/dist/{TemplateConfigurationModal-BKi1z7z7.js → TemplateConfigurationModal-BT3PaR0O.js} +4 -3
  28. package/dist/{TemplateDetailPanel-DK1gF7P5.js → TemplateDetailPanel-BxFNnlXm.js} +2 -1
  29. package/dist/{TemplatePreview-DuSX2Q7H.js → TemplatePreview-Bagja6WN.js} +7 -7
  30. package/dist/{TemplatesPage-CAWHh61l.js → TemplatesPage-CAajpJ5w.js} +711 -6
  31. package/dist/{VariablesPage-D7CoatWf.js → VariablesPage-CgUBKhAe.js} +3 -3
  32. package/dist/{VersionDiffDialog-DGwysiyE.js → VersionDiffDialog-D9W5Fm56.js} +233 -129
  33. package/dist/VersionLifecycleBar-DuphLOT0.js +131 -0
  34. package/dist/{WorkflowBuilder-DAeoQi5E.js → WorkflowBuilder-DMpSPElu.js} +16 -13
  35. package/dist/{WorkflowBuilder-BJgqDboZ.js → WorkflowBuilder-v8h8skwG.js} +5 -5
  36. package/dist/WorkflowDefinitionDocument-DZLbTPUZ.js +321 -0
  37. package/dist/WorkflowEditLeaseStatusDocument-Dp62med3.js +627 -0
  38. package/dist/WorkflowProposalCard-zCdUpCk8.js +249 -0
  39. package/dist/WorkflowProposalDocument-BdUbsrd0.js +620 -0
  40. package/dist/{WorkflowSearchRedirect-CMEvd_AR.js → WorkflowSearchRedirect-G78lINAE.js} +1 -1
  41. package/dist/{WorkflowShareDialog-BgHRsDP0.js → WorkflowShareDialog-B7VOgr4-.js} +304 -3
  42. package/dist/WorkflowVersionsDocument-CfPMloRW.js +3195 -0
  43. package/dist/{WorkflowsList-CcQPxWKL.js → WorkflowsList-CPYzfE4K.js} +11 -9
  44. package/dist/agent-form-D0uLvzx4.js +718 -0
  45. package/dist/{agentTools-DKpNKztf.js → agentTools-DTXUqtfu.js} +4 -4
  46. package/dist/api-BZVyX5d2.js +2286 -0
  47. package/dist/api-BqA-f-AD.js +8064 -0
  48. package/dist/app-BJUvugPM.js +3813 -0
  49. package/dist/assert-rules-CPNrO44K.js +318 -0
  50. package/dist/attach-node-helpers-CNsYtLOR.js +32 -0
  51. package/dist/badge-CXfPhoMH.js +26 -0
  52. package/dist/{canvasNoteTools-C_AN79m0.js → canvasNoteTools-DmfZwtnL.js} +3 -3
  53. package/dist/{channel-CZ70oI81.js → channel-DtF1n_ab.js} +1 -1
  54. package/dist/client-Ctl4jmY3.js +127 -0
  55. package/dist/code-editor-diagnostics-Zr0cIcx1.js +46 -0
  56. package/dist/{code-editor-field-Dt6KNWwN.js → code-editor-field-Cv907s3W.js} +2 -2
  57. package/dist/{codec-client-CJ95Rmqo.js → codec-client-CAYl6j46.js} +2 -1
  58. package/dist/conditionBuilder-D8aLGL1w.js +1134 -0
  59. package/dist/config-X97zrIvn.js +600 -0
  60. package/dist/{definition-canvas-Bshn_dSP.js → definition-canvas-DL25_6NH.js} +1 -1
  61. package/dist/{dialog-Cjb4lB4D.js → dialog-BVd152GS.js} +3 -14
  62. package/dist/durable-nodes-DXCCQYWD.js +81 -0
  63. package/dist/errors-xPZ-IbQd.js +142 -0
  64. package/dist/executions.js +2 -2
  65. package/dist/{flow-builder-D3Hl2AFk.js → flow-builder-Dv5fWJ6F.js} +9301 -8189
  66. package/dist/{node-registry-refresh-Dy0uRg9f.js → global-client-DP_Wxe5t.js} +2 -27
  67. package/dist/global-operations-7pvXw_j9.js +145 -0
  68. package/dist/history.js +1 -1
  69. package/dist/{index-CWcP-tG1.d.ts → index-DtMUtXNq.d.ts} +247 -247
  70. package/dist/index.d.ts +1 -1
  71. package/dist/index.js +4403 -46
  72. package/dist/input-ChT6Q-Pr.js +17 -0
  73. package/dist/logs-panel-DtG93ocy.js +342 -0
  74. package/dist/mapping-colors-BIX_YeCQ.js +48 -0
  75. package/dist/{node-detail-view-bVLeYarT.js → node-detail-view-BKI_2kM6.js} +12 -11
  76. package/dist/{node-editor-tab-body-JHHVtQgR.js → node-editor-tab-body-Cc1MWEFR.js} +3 -3
  77. package/dist/{node-operation-selection-DAbS6jSY.js → node-operation-selection-Czeeb2D4.js} +2 -139
  78. package/dist/node-registry-refresh-s3okf83X.js +27 -0
  79. package/dist/nodes.js +1 -1
  80. package/dist/notesKey-5EaREBGA.js +12 -0
  81. package/dist/observability.d.ts +1 -1
  82. package/dist/observability.js +2 -2
  83. package/dist/{popover-Xx3gN7vg.js → popover-DDv7J1Kl.js} +717 -6
  84. package/dist/{quick-config-panel-BvVQXuIL.js → quick-config-panel-BPCRfqWI.js} +4 -4
  85. package/dist/read-only-context-Dt9N9SIG.js +18 -0
  86. package/dist/{schedule-panel-DCb40TPN.js → schedule-panel-C1KwfLCE.js} +14 -12
  87. package/dist/settings.js +1 -1
  88. package/dist/{shared-CMfn30xT.js → shared-Ctl9ZHo1.js} +2 -1
  89. package/dist/{sidebar-node-editor-DxCWFZG2.js → sidebar-node-editor-d9Rlq5pU.js} +4 -4
  90. package/dist/sticky-notes-23j-wL6Q.js +96 -0
  91. package/dist/template-code-dqRunGOv.js +184 -0
  92. package/dist/template-preview-C01KV277.js +29 -0
  93. package/dist/templates.js +2 -2
  94. package/dist/token-refresh-link-BjN7H4qA.js +291 -0
  95. package/dist/useAgentDefinitions-ZKX2N9aP.js +3101 -0
  96. package/dist/useConnections-BlB0gbOB.js +931 -0
  97. package/dist/useDurableParity-BgLH_SCF.js +2088 -0
  98. package/dist/{useEntityTags-Db4Pc8_M.js → useEntityTags-4iW6UTly.js} +227 -3
  99. package/dist/{useExecutions-DOpG1pUQ.js → useExecutions-Bm7q_UwN.js} +6 -3
  100. package/dist/useGlobalStoreClient-DMTrywdX.js +24 -0
  101. package/dist/{useHumanRequests-ZiR0sSzS.js → useHumanRequests-DwG2tQ3f.js} +2 -1
  102. package/dist/{useObservability-rQmwhoZZ.js → useObservability-DPATdbw7.js} +4 -2
  103. package/dist/{useRunHistory-COn6dl7l.js → useRunHistory-CGfjCsJ3.js} +1122 -4
  104. package/dist/{useVariables-2ddyJX4a.js → useVariables-DFdZofLQ.js} +2 -1
  105. package/dist/{useWorkflowCodeExport-ZoUJKRSK.js → useWorkflowCodeExport-D_mCuhKP.js} +289 -4
  106. package/dist/useWorkflowOrganization-r5FWNBs6.js +1690 -0
  107. package/dist/useWorkflowProposal-Bh2_qjmM.js +7478 -0
  108. package/dist/{useWorkflows-jOW60YmD.js → useWorkflows-aqVD7kGa.js} +694 -4
  109. package/dist/workflow-builder.js +5 -5
  110. package/dist/{workflow-code-transfer-l9wO34S0.js → workflow-code-transfer-5C0HUzae.js} +1 -53
  111. package/dist/workflow-host.js +4 -2
  112. package/dist/workflow-pages.d.ts +1 -1
  113. package/dist/workflow-pages.js +19 -19
  114. package/dist/workflow-preview.js +3 -2
  115. package/dist/workflows-list.js +1 -1
  116. package/package.json +1 -1
  117. package/dist/FailureTriagePanel-BbYFYeV_.js +0 -311
  118. package/dist/WorkflowProposalCard-DGMdZC4R.js +0 -1432
  119. package/dist/agent-form-Bfvm32j1.js +0 -83
  120. package/dist/api-DQtHXbIg.js +0 -224
  121. package/dist/api-MeAm6g7E.js +0 -55
  122. package/dist/client-C9XSzSXr.js +0 -1147
  123. package/dist/graphql-operation-types-C9qbvRa8.js +0 -53122
  124. package/dist/useAgentDefinitions-_hgNCK1A.js +0 -550
  125. package/dist/useConnections-Cs7LCWEM.js +0 -401
  126. package/dist/useDurableParity-CcLeCDfv.js +0 -504
  127. package/dist/useWorkflowOrganization-QxVePSkk.js +0 -282
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-QqidFIgr.js";
3
+ import { forwardRef } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ // src/ui/input.tsx
7
+ const Input = forwardRef(({ className, type, ...props }, ref) => {
8
+ return /* @__PURE__ */ jsx("input", {
9
+ type,
10
+ className: cn("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className),
11
+ ref,
12
+ ...props
13
+ });
14
+ });
15
+ Input.displayName = "Input";
16
+
17
+ export { Input as t };
@@ -0,0 +1,342 @@
1
+ "use client";
2
+ import { M as useFlowStore } from "./node-operation-selection-Czeeb2D4.js";
3
+ import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
+ import { useCallback, useEffect, useRef, useState } from "react";
5
+ import { Icon } from "@iconify/react";
6
+ import { cn } from "@burdenoff/fe-libs/utils";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { useShallow } from "zustand/shallow";
9
+ import { Button } from "@burdenoff/fe-libs/ui";
10
+
11
+ // src/builder/components/flow-builder/components/logs-panel/logs-panel.tsx
12
+ const JsonView = ({ data }) => {
13
+ const tr = useTr();
14
+ if (!data) return /* @__PURE__ */ jsx("div", {
15
+ className: "text-tertiary p-4",
16
+ children: tr("fluidgrids.builder.logsPanel.jsonViewNoData", "No data")
17
+ });
18
+ return /* @__PURE__ */ jsx("pre", {
19
+ className: "text-xs overflow-auto p-4 bg-card/50 rounded h-full",
20
+ children: JSON.stringify(data, null, 2)
21
+ });
22
+ };
23
+ const TableView = ({ data }) => {
24
+ const tr = useTr();
25
+ if (!data) return /* @__PURE__ */ jsx("div", {
26
+ className: "text-tertiary p-4",
27
+ children: tr("fluidgrids.builder.logsPanel.tableViewNoData", "No data")
28
+ });
29
+ const entries = Object.entries(data);
30
+ if (entries.length === 0) return /* @__PURE__ */ jsx("div", {
31
+ className: "text-tertiary p-4",
32
+ children: tr("fluidgrids.builder.logsPanel.tableViewEmptyObject", "Empty object")
33
+ });
34
+ return /* @__PURE__ */ jsx("div", {
35
+ className: "overflow-auto h-full",
36
+ children: /* @__PURE__ */ jsxs("table", {
37
+ className: "w-full text-xs",
38
+ children: [/* @__PURE__ */ jsx("thead", {
39
+ className: "bg-card-foreground/10 sticky top-0",
40
+ children: /* @__PURE__ */ jsxs("tr", { children: [
41
+ /* @__PURE__ */ jsx("th", {
42
+ className: "text-left p-2",
43
+ children: tr("fluidgrids.builder.logsPanel.tableColumnField", "Field")
44
+ }),
45
+ /* @__PURE__ */ jsx("th", {
46
+ className: "text-left p-2",
47
+ children: tr("fluidgrids.builder.logsPanel.tableColumnType", "Type")
48
+ }),
49
+ /* @__PURE__ */ jsx("th", {
50
+ className: "text-left p-2",
51
+ children: tr("fluidgrids.builder.logsPanel.tableColumnValue", "Value")
52
+ })
53
+ ] })
54
+ }), /* @__PURE__ */ jsx("tbody", { children: entries.map(([key, value]) => /* @__PURE__ */ jsxs("tr", {
55
+ className: "border-b border-card-foreground/10",
56
+ children: [
57
+ /* @__PURE__ */ jsx("td", {
58
+ className: "p-2 font-medium text-accent",
59
+ children: key
60
+ }),
61
+ /* @__PURE__ */ jsx("td", {
62
+ className: "p-2 text-secondary",
63
+ children: typeof value
64
+ }),
65
+ /* @__PURE__ */ jsx("td", {
66
+ className: "p-2 truncate max-w-[200px]",
67
+ children: typeof value === "object" ? JSON.stringify(value) : String(value)
68
+ })
69
+ ]
70
+ }, key)) })]
71
+ })
72
+ });
73
+ };
74
+ const LogListItem = ({ log, isSelected, onClick }) => {
75
+ const statusIcon = {
76
+ pending: "mdi:clock-outline",
77
+ running: "svg-spinners:ring-resize",
78
+ completed: "mdi:check-circle",
79
+ failed: "mdi:close-circle"
80
+ }[log.status];
81
+ const statusColor = {
82
+ pending: "text-tertiary",
83
+ running: "text-accent",
84
+ completed: "text-[var(--color-status-success-text)]",
85
+ failed: "text-[var(--color-status-error-text)]"
86
+ }[log.status];
87
+ return /* @__PURE__ */ jsxs("button", {
88
+ onClick,
89
+ className: cn("w-full text-left p-2 flex items-center gap-2 text-xs transition-colors", isSelected ? "bg-primary/20 border-l-2 border-primary" : "hover:bg-card-foreground/10"),
90
+ children: [
91
+ /* @__PURE__ */ jsx(Icon, {
92
+ icon: statusIcon,
93
+ className: cn("size-4", statusColor)
94
+ }),
95
+ /* @__PURE__ */ jsx("span", {
96
+ className: "truncate flex-1",
97
+ children: log.nodeName
98
+ }),
99
+ log.duration && /* @__PURE__ */ jsxs("span", {
100
+ className: "text-tertiary text-[10px]",
101
+ children: [log.duration.toFixed(2), "s"]
102
+ })
103
+ ]
104
+ });
105
+ };
106
+ const LogDetailView = ({ log }) => {
107
+ const tr = useTr();
108
+ const [activeTab, setActiveTab] = useState("output");
109
+ const [viewMode, setViewMode] = useState("json");
110
+ if (!log) return /* @__PURE__ */ jsx("div", {
111
+ className: "flex-1 flex items-center justify-center text-tertiary text-sm",
112
+ children: tr("fluidgrids.builder.logsPanel.detailEmptyState", "Select a step to view details")
113
+ });
114
+ const statusColor = {
115
+ pending: "text-tertiary",
116
+ running: "text-accent",
117
+ completed: "text-[var(--color-status-success-text)]",
118
+ failed: "text-[var(--color-status-error-text)]"
119
+ }[log.status];
120
+ const data = activeTab === "input" ? log.inputArgs : log.output;
121
+ const itemCount = data ? Object.keys(data).length : 0;
122
+ const resumeUrl = typeof log.output?._resumeUrl === "string" ? log.output._resumeUrl : null;
123
+ return /* @__PURE__ */ jsxs("div", {
124
+ className: "flex-1 flex flex-col",
125
+ children: [
126
+ /* @__PURE__ */ jsxs("div", {
127
+ className: "flex items-center justify-between p-2 border-b border-card-foreground/10",
128
+ children: [/* @__PURE__ */ jsxs("div", {
129
+ className: "flex items-center gap-2",
130
+ children: [
131
+ /* @__PURE__ */ jsx("span", {
132
+ className: "text-sm font-medium",
133
+ children: log.nodeName
134
+ }),
135
+ /* @__PURE__ */ jsx("span", {
136
+ className: cn("text-xs capitalize", statusColor),
137
+ children: log.status === "completed" ? tr("fluidgrids.builder.logsPanel.statusSuccess", "Success") : log.status
138
+ }),
139
+ log.duration && /* @__PURE__ */ jsxs("span", {
140
+ className: "text-xs text-text-muted",
141
+ children: [
142
+ "in ",
143
+ (log.duration * 1e3).toFixed(0),
144
+ "ms"
145
+ ]
146
+ })
147
+ ]
148
+ }), /* @__PURE__ */ jsxs("div", {
149
+ className: "flex items-center gap-1",
150
+ children: [/* @__PURE__ */ jsx(Button, {
151
+ variant: viewMode === "json" ? "secondary" : "ghost",
152
+ size: "icon",
153
+ className: "size-6",
154
+ onClick: () => setViewMode("json"),
155
+ title: tr("fluidgrids.builder.logsPanel.jsonViewTooltip", "JSON View"),
156
+ children: /* @__PURE__ */ jsx(Icon, {
157
+ icon: "mdi:code-json",
158
+ className: "size-3"
159
+ })
160
+ }), /* @__PURE__ */ jsx(Button, {
161
+ variant: viewMode === "table" ? "secondary" : "ghost",
162
+ size: "icon",
163
+ className: "size-6",
164
+ onClick: () => setViewMode("table"),
165
+ title: tr("fluidgrids.builder.logsPanel.tableViewTooltip", "Table View"),
166
+ children: /* @__PURE__ */ jsx(Icon, {
167
+ icon: "mdi:table",
168
+ className: "size-3"
169
+ })
170
+ })]
171
+ })]
172
+ }),
173
+ resumeUrl && /* @__PURE__ */ jsxs("div", {
174
+ className: "flex items-center gap-2 border-b border-card-foreground/10 px-2 py-2",
175
+ children: [
176
+ /* @__PURE__ */ jsx("span", {
177
+ className: "shrink-0 text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground",
178
+ children: tr("fluidgrids.builder.logsPanel.resumeUrl", "Resume URL")
179
+ }),
180
+ /* @__PURE__ */ jsx("input", {
181
+ readOnly: true,
182
+ value: resumeUrl,
183
+ onFocus: (e) => e.currentTarget.select(),
184
+ className: "min-w-0 flex-1 rounded-md border border-border bg-muted/40 px-2 py-1 font-mono text-[11px] outline-none focus:border-primary"
185
+ }),
186
+ /* @__PURE__ */ jsx("button", {
187
+ type: "button",
188
+ onClick: () => void navigator.clipboard?.writeText(resumeUrl),
189
+ className: "shrink-0 rounded-md border border-border px-2 py-1 text-[11px] font-medium hover:bg-muted",
190
+ children: tr("fluidgrids.builder.logsPanel.copy", "Copy")
191
+ })
192
+ ]
193
+ }),
194
+ /* @__PURE__ */ jsxs("div", {
195
+ className: "flex border-b border-card-foreground/10",
196
+ children: [
197
+ /* @__PURE__ */ jsx("button", {
198
+ className: cn("px-4 py-2 text-xs font-medium transition-colors duration-200", activeTab === "input" ? "border-b-2 border-primary text-primary" : "text-secondary hover:text-primary"),
199
+ onClick: () => setActiveTab("input"),
200
+ children: tr("fluidgrids.builder.logsPanel.tabInput", "Input")
201
+ }),
202
+ /* @__PURE__ */ jsx("button", {
203
+ className: cn("px-4 py-2 text-xs font-medium transition-colors duration-200", activeTab === "output" ? "border-b-2 border-primary text-primary" : "text-secondary hover:text-primary"),
204
+ onClick: () => setActiveTab("output"),
205
+ children: tr("fluidgrids.builder.logsPanel.tabOutput", "Output")
206
+ }),
207
+ /* @__PURE__ */ jsx("div", { className: "flex-1" }),
208
+ /* @__PURE__ */ jsxs("span", {
209
+ className: "px-4 py-2 text-xs text-tertiary",
210
+ children: [
211
+ itemCount,
212
+ " ",
213
+ itemCount !== 1 ? tr("fluidgrids.builder.logsPanel.itemCountOther", "items") : tr("fluidgrids.builder.logsPanel.itemCountOne", "item")
214
+ ]
215
+ })
216
+ ]
217
+ }),
218
+ /* @__PURE__ */ jsx("div", {
219
+ className: "flex-1 overflow-auto",
220
+ children: log.error && activeTab === "output" ? /* @__PURE__ */ jsxs("div", {
221
+ className: "p-4 bg-[var(--color-status-error-bg-subtle)] text-[var(--color-status-error-text)] text-xs",
222
+ children: [/* @__PURE__ */ jsx("div", {
223
+ className: "font-medium mb-1",
224
+ children: tr("fluidgrids.builder.logsPanel.errorHeading", "Error:")
225
+ }), log.error]
226
+ }) : viewMode === "json" ? /* @__PURE__ */ jsx(JsonView, { data }) : /* @__PURE__ */ jsx(TableView, { data })
227
+ })
228
+ ]
229
+ });
230
+ };
231
+ const LogsPanel = () => {
232
+ const tr = useTr();
233
+ const [logs, selectedLogId, panelExpanded, selectLog, togglePanel, clearLogs] = useFlowStore(useShallow((s) => [
234
+ s.execution.logs,
235
+ s.execution.selectedLogId,
236
+ s.execution.panelExpanded,
237
+ s.actions.execution.selectLog,
238
+ s.actions.execution.togglePanel,
239
+ s.actions.execution.clearLogs
240
+ ]));
241
+ const selectedLog = logs.find((l) => l.id === selectedLogId) || null;
242
+ const [panelHeight, setPanelHeight] = useState(350);
243
+ const isResizing = useRef(false);
244
+ const startY = useRef(0);
245
+ const startHeight = useRef(0);
246
+ const handleMouseDown = useCallback((e) => {
247
+ e.preventDefault();
248
+ isResizing.current = true;
249
+ startY.current = e.clientY;
250
+ startHeight.current = panelHeight;
251
+ document.body.style.cursor = "ns-resize";
252
+ document.body.style.userSelect = "none";
253
+ }, [panelHeight]);
254
+ useEffect(() => {
255
+ const handleMouseMove = (e) => {
256
+ if (!isResizing.current) return;
257
+ const deltaY = startY.current - e.clientY;
258
+ const newHeight = Math.max(150, Math.min(600, startHeight.current + deltaY));
259
+ setPanelHeight(newHeight);
260
+ };
261
+ const handleMouseUp = () => {
262
+ isResizing.current = false;
263
+ document.body.style.cursor = "";
264
+ document.body.style.userSelect = "";
265
+ };
266
+ document.addEventListener("mousemove", handleMouseMove);
267
+ document.addEventListener("mouseup", handleMouseUp);
268
+ return () => {
269
+ document.removeEventListener("mousemove", handleMouseMove);
270
+ document.removeEventListener("mouseup", handleMouseUp);
271
+ };
272
+ }, []);
273
+ if (!panelExpanded && logs.length === 0) return null;
274
+ return /* @__PURE__ */ jsxs("div", {
275
+ className: cn("relative border-t border-card-foreground/10 bg-card/95 backdrop-blur-sm transition-[height] duration-150", !panelExpanded && "h-10"),
276
+ style: { height: panelExpanded ? panelHeight : 40 },
277
+ children: [
278
+ panelExpanded && /* @__PURE__ */ jsx("div", {
279
+ className: "absolute top-0 left-0 right-0 h-1.5 cursor-ns-resize bg-transparent hover:bg-primary/30 transition-colors z-10 group",
280
+ onMouseDown: handleMouseDown,
281
+ children: /* @__PURE__ */ jsx("div", { className: "absolute top-0.5 left-1/2 -translate-x-1/2 w-8 h-0.5 rounded-full bg-card-foreground/20 group-hover:bg-primary/50 transition-colors" })
282
+ }),
283
+ /* @__PURE__ */ jsxs("div", {
284
+ className: "h-10 flex items-center justify-between px-3 border-b border-card-foreground/10",
285
+ children: [/* @__PURE__ */ jsxs("div", {
286
+ className: "flex items-center gap-2",
287
+ children: [
288
+ /* @__PURE__ */ jsx(Button, {
289
+ variant: "ghost",
290
+ size: "icon",
291
+ className: "size-6",
292
+ onClick: togglePanel,
293
+ children: /* @__PURE__ */ jsx(Icon, {
294
+ icon: panelExpanded ? "mdi:chevron-down" : "mdi:chevron-up",
295
+ className: "size-4"
296
+ })
297
+ }),
298
+ /* @__PURE__ */ jsx("span", {
299
+ className: "text-sm font-medium",
300
+ children: tr("fluidgrids.builder.logsPanel.title", "Logs")
301
+ }),
302
+ logs.length > 0 && /* @__PURE__ */ jsxs("span", {
303
+ className: "text-xs text-tertiary",
304
+ children: [
305
+ "(",
306
+ logs.length,
307
+ " ",
308
+ tr("fluidgrids.builder.logsPanel.stepsSuffix", "steps"),
309
+ ")"
310
+ ]
311
+ })
312
+ ]
313
+ }), logs.length > 0 && /* @__PURE__ */ jsxs(Button, {
314
+ variant: "ghost",
315
+ size: "sm",
316
+ className: "h-6 text-xs",
317
+ onClick: clearLogs,
318
+ children: [/* @__PURE__ */ jsx(Icon, {
319
+ icon: "mdi:trash-can-outline",
320
+ className: "size-3 mr-1"
321
+ }), tr("fluidgrids.builder.logsPanel.clearExecution", "Clear execution")]
322
+ })]
323
+ }),
324
+ panelExpanded && /* @__PURE__ */ jsxs("div", {
325
+ className: "flex h-[calc(100%-40px)]",
326
+ children: [/* @__PURE__ */ jsx("div", {
327
+ className: "w-[200px] border-r border-card-foreground/10 overflow-y-auto",
328
+ children: logs.length === 0 ? /* @__PURE__ */ jsx("div", {
329
+ className: "p-4 text-xs text-tertiary text-center",
330
+ children: tr("fluidgrids.builder.logsPanel.emptyState", "No execution logs yet")
331
+ }) : logs.map((log) => /* @__PURE__ */ jsx(LogListItem, {
332
+ log,
333
+ isSelected: log.id === selectedLogId,
334
+ onClick: () => selectLog(log.id)
335
+ }, log.id))
336
+ }), /* @__PURE__ */ jsx(LogDetailView, { log: selectedLog })]
337
+ })
338
+ ]
339
+ });
340
+ };
341
+
342
+ export { LogsPanel as n, TableView as r, JsonView as t };
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { edgeColor } from "@burdenoff/fe-libs/shared/utils";
3
+
4
+ // src/builder/components/mapper/config/mapping-colors.ts
5
+ /**
6
+ * Colours for mapper edges and mapping-type chips (G19).
7
+ *
8
+ * Every value is a semantic token (a CSS `var()` reference to a `--color-`
9
+ * custom property) from fe-libs: the compatible / incompatible pair uses the
10
+ * canvas edge tokens and each mapping type gets a fixed categorical chart
11
+ * colour series, so the mapper follows light / dark mode, the brand and the
12
+ * high-contrast theme. These literal CSS-variable strings work in React Flow
13
+ * edge styles, SVG `style` props and inline styles.
14
+ *
15
+ * NOTE: never write syntactically class-like placeholders (ellipsis or
16
+ * wildcard arbitrary-value examples such as bracketed var references) in this
17
+ * file's docs — Tailwind v4 extracts candidates from published package
18
+ * content, and placeholder prose becomes invalid generated CSS in every
19
+ * consuming app (BOFF-6688 / BOFF-6718).
20
+ */
21
+ const MAPPING_COMPATIBILITY_COLORS = {
22
+ compatible: edgeColor("compatible"),
23
+ incompatible: edgeColor("incompatible")
24
+ };
25
+ const MAPPING_TYPE_COLORS = {
26
+ direct: MAPPING_COMPATIBILITY_COLORS.compatible,
27
+ expression: "var(--color-chart-3)",
28
+ transform: "var(--color-chart-10)",
29
+ cast: "var(--color-chart-2)",
30
+ array: "var(--color-chart-4)",
31
+ object: "var(--color-chart-12)",
32
+ context: "var(--color-chart-11)"
33
+ };
34
+ /** Colour for a mapping type that is unknown or has no colour configured. */
35
+ const MAPPING_FALLBACK_COLOR = edgeColor("default");
36
+ function isMappingTypeKey(value) {
37
+ return Object.prototype.hasOwnProperty.call(MAPPING_TYPE_COLORS, value);
38
+ }
39
+ /** The token colour of a mapping type; unknown types get the default edge colour. */
40
+ function mappingTypeColor(mappingType) {
41
+ return isMappingTypeKey(mappingType) ? MAPPING_TYPE_COLORS[mappingType] : MAPPING_FALLBACK_COLOR;
42
+ }
43
+ /** Edge colour for a direct mapping, by whether the two field types are compatible. */
44
+ function compatibilityColor(isCompatible) {
45
+ return isCompatible ? MAPPING_COMPATIBILITY_COLORS.compatible : MAPPING_COMPATIBILITY_COLORS.incompatible;
46
+ }
47
+
48
+ export { mappingTypeColor as a, compatibilityColor as i, MAPPING_FALLBACK_COLOR as n, MAPPING_TYPE_COLORS as r, MAPPING_COMPATIBILITY_COLORS as t };
@@ -1,18 +1,19 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { H as useFlowStore, a as changedSourceFiles, c as diagnosticsByPath, d as isEditableSourcePath, f as projectLanguage, h as sourceLanguageOf, l as interfaceFields, o as childRunIdOf, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, s as defaultSourcePath, u as interfaceHandlers } from "./node-operation-selection-DAbS6jSY.js";
4
- import { Cn as clearCodeWorkflowDefinitionCache, Dn as declaredSignals, Rn as getNodeDetail, Tn as useCodeWorkflowInterface, X as nodeTitle, Y as nodeSubtitle, et as useNodeConfig, ft as latestNodeLog, gn as fieldsFromValue, ht as useGuardedNavigate, ln as useNodeExecution, ut as FieldTree } from "./FluidGridsProvider-C4FVNz0n.js";
5
- import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-DCb40TPN.js";
6
- import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-C9XSzSXr.js";
7
- import { Fr as WorkflowEditLeaseStatusDocument, It as NodeStatesDocument, kr as WorkflowCodeSourceDocument, m as BuildWorkflowCodeDocument, vt as FileDownloadUrlDocument } from "./graphql-operation-types-C9qbvRa8.js";
8
- import { h as TableView, m as JsonView } from "./flow-builder-D3Hl2AFk.js";
9
- import { jt as useUnpinNodeDataMutation, qt as useWorkflowPinnedDataQuery, st as usePinNodeDataMutation } from "./useAgentDefinitions-_hgNCK1A.js";
3
+ import { M as useFlowStore, a as changedSourceFiles, c as diagnosticsByPath, d as isEditableSourcePath, f as projectLanguage, h as sourceLanguageOf, l as interfaceFields, o as childRunIdOf, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, s as defaultSourcePath, u as interfaceHandlers } from "./node-operation-selection-Czeeb2D4.js";
4
+ import { F as nodeTitle, In as getNodeDetail, Jt as useNodeExecution, P as nodeSubtitle, Y as FieldTree, Z as latestNodeLog, cn as clearCodeWorkflowDefinitionCache, et as useGuardedNavigate, fn as declaredSignals, tn as fieldsFromValue, un as useCodeWorkflowInterface, z as useNodeConfig } from "./FluidGridsProvider-Dc_Jhtch.js";
5
+ import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-C1KwfLCE.js";
6
+ import { n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-Ctl4jmY3.js";
7
+ import { o as throwIfResultError, t as describeOperationError } from "./errors-xPZ-IbQd.js";
8
+ import { i as FileDownloadUrlDocument, n as WorkflowCodeSourceDocument, r as BuildWorkflowCodeDocument, t as WorkflowEditLeaseStatusDocument } from "./WorkflowEditLeaseStatusDocument-Dp62med3.js";
9
+ import { r as TableView, t as JsonView } from "./logs-panel-DtG93ocy.js";
10
+ import { hn as NodeStatesDocument, jt as useUnpinNodeDataMutation, qt as useWorkflowPinnedDataQuery, st as usePinNodeDataMutation } from "./useAgentDefinitions-ZKX2N9aP.js";
10
11
  import { l as useDurableFunctionNodesEnabled, m as usePhaseCFlags } from "./feature-flags-B_b8PJ6Z.js";
11
12
  import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
12
- import { t as CodeEditorField } from "./code-editor-field-Dt6KNWwN.js";
13
- import { h as fetchCodeBundleSdk } from "./api-DQtHXbIg.js";
14
- import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-COn6dl7l.js";
15
- import { s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
13
+ import { t as CodeEditorField } from "./code-editor-field-Cv907s3W.js";
14
+ import { h as fetchCodeBundleSdk } from "./api-BqA-f-AD.js";
15
+ import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-CGfjCsJ3.js";
16
+ import { s as isAgentNodeType } from "./agent-form-D0uLvzx4.js";
16
17
  import { n as agentTracePath } from "./ai-usage-bmUn-gJP.js";
17
18
  import * as React$1 from "react";
18
19
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { H as useFlowStore } from "./node-operation-selection-DAbS6jSY.js";
3
- import { X as nodeTitle, ut as FieldTree } from "./FluidGridsProvider-C4FVNz0n.js";
2
+ import { M as useFlowStore } from "./node-operation-selection-Czeeb2D4.js";
3
+ import { F as nodeTitle, Y as FieldTree } from "./FluidGridsProvider-Dc_Jhtch.js";
4
4
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
5
5
  import { m as usePhaseCFlags } from "./feature-flags-B_b8PJ6Z.js";
6
6
  import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
7
- import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-DCb40TPN.js";
7
+ import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-C1KwfLCE.js";
8
8
  import { useState } from "react";
9
9
  import { Icon } from "@iconify/react";
10
10
  import { cn } from "@burdenoff/fe-libs/utils";
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
+ import { t as editorSeverity } from "./code-editor-diagnostics-Zr0cIcx1.js";
3
4
  import * as React$1 from "react";
4
5
  import { useCallback, useEffect, useMemo } from "react";
5
6
  import { create } from "zustand";
@@ -825,100 +826,6 @@ const useFlowStore = create()((set, get) => {
825
826
  });
826
827
  if (typeof window !== "undefined" && import.meta.env?.DEV) window.__fgFlowStore = useFlowStore;
827
828
 
828
- // src/builder/contants/symbols.ts
829
- const NODE_TYPE_DRAG_DATA_FORMAT = "application/flow-builder.node-type";
830
- /**
831
- * Optional companion to NODE_TYPE_DRAG_DATA_FORMAT: carries the operation name
832
- * a node instance should be pinned to when dropped. Set by the Node Store
833
- * operation rows so a dragged operation lands on the canvas already configured
834
- * (no on-card operation dropdown). Absent for built-in / control-flow drags.
835
- */
836
- const NODE_OPERATION_DRAG_DATA_FORMAT = "application/flow-builder.node-operation";
837
- /**
838
- * Node type of the canvas sticky note (n8n-style annotation). Stickies are
839
- * pure canvas decorations persisted in the workflow definition: they have no
840
- * handles, are skipped by flow validation, and are never reached by execution
841
- * (the run planner is trigger-rooted and edge-driven).
842
- */
843
- const STICKY_NOTE_TYPE = "sticky-note";
844
-
845
- // src/builder/lib/sticky-notes.ts
846
- /**
847
- * Sticky notes are persisted OUTSIDE `definitionJson.data.nodes`, under a
848
- * sibling `stickyNotes` key, so nothing execution-adjacent (backend
849
- * validators, run planning, trigger sync, analytics over nodes) ever sees
850
- * them. On the canvas they still live as React Flow nodes; these helpers
851
- * convert between the two shapes at the save/load boundary.
852
- */
853
- /**
854
- * n8n-parity sticky-note palette. The keys are persisted in workflow JSON
855
- * (`data.color`); each value is built from semantic categorical tokens
856
- * (fe-libs chart-* series), so the tints follow light/dark mode and the brand
857
- * themes. The default theme has no orange series, so orange is mixed from
858
- * the yellow and red series rather than borrowed from a status token: the
859
- * warning token resolves to the same hue as chart-4, which made orange and
860
- * yellow notes look identical.
861
- */
862
- const STICKY_COLORS = {
863
- yellow: "var(--color-chart-4)",
864
- orange: "color-mix(in srgb, var(--color-chart-4) 50%, var(--color-chart-5))",
865
- blue: "var(--color-chart-1)",
866
- green: "var(--color-chart-2)",
867
- red: "var(--color-chart-5)",
868
- purple: "var(--color-chart-3)",
869
- gray: "var(--color-chart-axis)"
870
- };
871
- const DEFAULT_STICKY_COLOR = "yellow";
872
- /** Palette key for a stored note colour; unknown or missing keys fall back to the default. */
873
- function resolveStickyColor(color) {
874
- return typeof color === "string" && Object.hasOwn(STICKY_COLORS, color) ? color : DEFAULT_STICKY_COLOR;
875
- }
876
- /**
877
- * Opacity of a sticky note's body fill and border, in percent. These match
878
- * the hex alpha suffixes the notes used before the palette moved to semantic
879
- * tokens (`1F` ≈ 12 %, `59` ≈ 35 %), so existing notes look the same.
880
- */
881
- const STICKY_FILL_PERCENT = 12;
882
- const STICKY_BORDER_PERCENT = 35;
883
- /**
884
- * Translucent tint of a palette colour. The palette holds CSS variables
885
- * (`var(--color-chart-4)`), so a hex alpha suffix cannot be appended: the
886
- * result (`var(--color-chart-4)1F`) is invalid CSS and the browser drops the
887
- * whole declaration. `color-mix` works with any colour value, including
888
- * variables, and keeps the note following the active theme.
889
- */
890
- function stickyTint(color, percent) {
891
- return `color-mix(in srgb, ${color} ${Math.min(100, Math.max(0, percent))}%, transparent)`;
892
- }
893
- /** Inline fill and border colours for a sticky note body. */
894
- function stickySurfaceStyle(color) {
895
- return {
896
- backgroundColor: stickyTint(color, 12),
897
- borderColor: stickyTint(color, 35)
898
- };
899
- }
900
- function isStickyNode(node) {
901
- return node?.type === STICKY_NOTE_TYPE;
902
- }
903
- /** Split canvas nodes into executable nodes and sticky notes (for save). */
904
- function partitionStickyNotes(nodes) {
905
- return {
906
- nodes: nodes.filter((n) => !isStickyNode(n)),
907
- stickyNotes: nodes.filter((n) => isStickyNode(n))
908
- };
909
- }
910
- /**
911
- * Combine a loaded definition's nodes + stickyNotes into one canvas node list
912
- * (for load). Tolerates legacy definitions that still carry sticky nodes
913
- * inside `nodes` (de-duplicated by id).
914
- */
915
- function mergeStickyNotes(def) {
916
- const nodes = Array.isArray(def.nodes) ? def.nodes : [];
917
- const stickies = Array.isArray(def.stickyNotes) ? def.stickyNotes : [];
918
- const seen = new Set(nodes.map((n) => n.id));
919
- return [...nodes, ...stickies.filter((s) => s?.id && !seen.has(s.id))];
920
- }
921
-
922
829
  // src/builder/components/flow-builder/components/ui/node-type-icon.tsx
923
830
  /**
924
831
  * True when a manifest icon value is an image reference (URL / data URI)
@@ -1805,50 +1712,6 @@ function LogicNodeCard({ title, subtitle, icon, accent, selected, executionStatu
1805
1712
  });
1806
1713
  }
1807
1714
 
1808
- // src/builder/components/ndv/code-editor-diagnostics.ts
1809
- /** Maps the service's severity strings onto CodeMirror's three. */
1810
- function editorSeverity(value) {
1811
- const lower = value.toLowerCase();
1812
- if (lower.startsWith("warn")) return "warning";
1813
- if (lower === "info" || lower === "hint" || lower === "suggestion") return "info";
1814
- return "error";
1815
- }
1816
- /** Start offsets of each line of `text`. */
1817
- function lineStarts(text) {
1818
- const starts = [0];
1819
- for (let i = 0; i < text.length; i += 1) if (text.charCodeAt(i) === 10) starts.push(i + 1);
1820
- return starts;
1821
- }
1822
- /**
1823
- * Converts line/column diagnostics into CodeMirror ranges over `text`. A
1824
- * position beyond the text is clamped to its end, so a diagnostic computed for
1825
- * an older text never throws. A column marks the token that starts there (up
1826
- * to the next non-word character); no column marks the whole line.
1827
- */
1828
- function toCodeMirrorDiagnostics(text, diagnostics) {
1829
- const starts = lineStarts(text);
1830
- return diagnostics.map((diagnostic) => {
1831
- const lineIndex = Math.min(Math.max((diagnostic.line ?? 1) - 1, 0), starts.length - 1);
1832
- const lineStart = starts[lineIndex];
1833
- const lineEnd = lineIndex + 1 < starts.length ? starts[lineIndex + 1] - 1 : text.length;
1834
- let from = lineStart;
1835
- let to = lineEnd;
1836
- if (diagnostic.column && diagnostic.column > 0) {
1837
- from = Math.min(lineStart + diagnostic.column - 1, lineEnd);
1838
- to = from;
1839
- while (to < lineEnd && /[\w$]/.test(text.charAt(to))) to += 1;
1840
- if (to === from) to = Math.min(from + 1, lineEnd);
1841
- }
1842
- const message = diagnostic.code ? `${diagnostic.code}: ${diagnostic.message}` : diagnostic.message;
1843
- return {
1844
- from,
1845
- to,
1846
- severity: diagnostic.severity,
1847
- message
1848
- };
1849
- });
1850
- }
1851
-
1852
1715
  // src/builder/components/code-workflow/code-workflow-state.ts
1853
1716
  /**
1854
1717
  * Pure helpers behind the code-workflow node's card, Source, Trace and
@@ -2011,4 +1874,4 @@ function synchronizeOperationUpdate(currentData, updates, registeredOperations)
2011
1874
  };
2012
1875
  }
2013
1876
 
2014
- export { nodeAccent as A, NODE_TYPE_DRAG_DATA_FORMAT as B, nodeAdaptersOf as C, NodeCard as D, resolveOutputHandles as E, mergeStickyNotes as F, isTriggerOperation as G, useFlowStore as H, partitionStickyNotes as I, resolveStickyColor as L, isImageIcon as M, DEFAULT_STICKY_COLOR as N, NodeCardBody as O, STICKY_COLORS as P, stickySurfaceStyle as R, landingSourceHandle as S, resolveInputHandles as T, useIsValidConnection as U, STICKY_NOTE_TYPE as V, isNodeTrigger as W, LogicNodeCard as _, changedSourceFiles as a, alignPlainOutputEdges as b, diagnosticsByPath as c, isEditableSourcePath as d, projectLanguage as f, toCodeMirrorDiagnostics as g, sourceLanguageOf as h, WAIT_FOR_SIGNAL_NODE_TYPE as i, NodeTypeIcon as j, NodeCardHeader as k, interfaceFields as l, readSignalName as m, synchronizeOperationUpdate as n, childRunIdOf as o, readCodeWorkflowState as p, CODE_WORKFLOW_NODE_TYPE as r, defaultSourcePath as s, resolveOperationName as t, interfaceHandlers as u, InputHandles as v, outputHandlesSpacerHeight as w, hasNodeManifest as x, OutputHandles as y, NODE_OPERATION_DRAG_DATA_FORMAT as z };
1877
+ export { NodeTypeIcon as A, outputHandlesSpacerHeight as C, NodeCardBody as D, NodeCard as E, isTriggerOperation as F, useFlowStore as M, useIsValidConnection as N, NodeCardHeader as O, isNodeTrigger as P, nodeAdaptersOf as S, resolveOutputHandles as T, InputHandles as _, changedSourceFiles as a, hasNodeManifest as b, diagnosticsByPath as c, isEditableSourcePath as d, projectLanguage as f, LogicNodeCard as g, sourceLanguageOf as h, WAIT_FOR_SIGNAL_NODE_TYPE as i, isImageIcon as j, nodeAccent as k, interfaceFields as l, readSignalName as m, synchronizeOperationUpdate as n, childRunIdOf as o, readCodeWorkflowState as p, CODE_WORKFLOW_NODE_TYPE as r, defaultSourcePath as s, resolveOperationName as t, interfaceHandlers as u, OutputHandles as v, resolveInputHandles as w, landingSourceHandle as x, alignPlainOutputEdges as y };
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ // src/builder/node-registry-refresh.ts
3
+ /**
4
+ * Refreshing the builder's node registry without loading it (BOFF-11826).
5
+ *
6
+ * A host calls `refreshNodeRegistry()` when it sets the workspace's clients, so
7
+ * a registry that is already loaded reloads for the new workspace. The registry
8
+ * itself (`blocks/index.ts`) is part of the builder's code. Importing it for
9
+ * this call put the builder's registry, its node components and every GraphQL
10
+ * document into each workflow page's first load. While the registry module has
11
+ * not loaded there is nothing loaded to refresh, so this module only holds the
12
+ * refresh the registry hands it when it loads.
13
+ */
14
+ let refresh = null;
15
+ /** Called once by the registry module when it loads. */
16
+ function provideNodeRegistryRefresh(fn) {
17
+ refresh = fn;
18
+ }
19
+ /**
20
+ * Reloads the node registry if it has loaded; otherwise there is nothing to
21
+ * refresh and it resolves at once. The builder loads the registry on demand.
22
+ */
23
+ function refreshNodeRegistry() {
24
+ return refresh ? refresh() : Promise.resolve();
25
+ }
26
+
27
+ export { refreshNodeRegistry as n, provideNodeRegistryRefresh as t };
package/dist/nodes.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { t as NodesPage } from "./NodesPage-YQ-hP60x.js";
2
+ import { t as NodesPage } from "./NodesPage-C5Dq-ru-.js";
3
3
 
4
4
  export { NodesPage };