@burdenoff/fluidgrids-fe-sdk 2026.925.2 → 2026.929.1

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 (57) hide show
  1. package/dist/ExecutionDetailPage-F5XOP3JQ.js +12 -0
  2. package/dist/{ExecutionDetailPage-3ZJMNWBY.js.map → ExecutionDetailPage-F5XOP3JQ.js.map} +1 -1
  3. package/dist/ExecutionsListPage-KQZK2T4O.js +11 -0
  4. package/dist/{ExecutionsListPage-FPNETFQX.js.map → ExecutionsListPage-KQZK2T4O.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-IS2ZZ6JY.js → WorkflowBuilder-TJFZ2TA3.js} +7 -7
  6. package/dist/{WorkflowBuilder-IS2ZZ6JY.js.map → WorkflowBuilder-TJFZ2TA3.js.map} +1 -1
  7. package/dist/WorkflowsList-72U6TS4Y.js +13 -0
  8. package/dist/{WorkflowsList-GEPG3OZ6.js.map → WorkflowsList-72U6TS4Y.js.map} +1 -1
  9. package/dist/{chunk-6DQDX6LD.js → chunk-5FFVT22V.js} +5 -5
  10. package/dist/{chunk-6DQDX6LD.js.map → chunk-5FFVT22V.js.map} +1 -1
  11. package/dist/{chunk-6SXISR7B.js → chunk-C44DTSC6.js} +195 -50
  12. package/dist/chunk-C44DTSC6.js.map +1 -0
  13. package/dist/chunk-EXJYUEXA.js +9834 -0
  14. package/dist/chunk-EXJYUEXA.js.map +1 -0
  15. package/dist/{chunk-O4UTOCZJ.js → chunk-EXNXJ7VL.js} +3 -3
  16. package/dist/{chunk-O4UTOCZJ.js.map → chunk-EXNXJ7VL.js.map} +1 -1
  17. package/dist/{chunk-UBKJDGYS.js → chunk-FJC2RJ4Y.js} +27 -3
  18. package/dist/chunk-FJC2RJ4Y.js.map +1 -0
  19. package/dist/{chunk-A6PDDUMN.js → chunk-GZCHKR3C.js} +4 -4
  20. package/dist/{chunk-A6PDDUMN.js.map → chunk-GZCHKR3C.js.map} +1 -1
  21. package/dist/{chunk-CGQG3QUR.js → chunk-IFQXZBKJ.js} +5 -5
  22. package/dist/{chunk-CGQG3QUR.js.map → chunk-IFQXZBKJ.js.map} +1 -1
  23. package/dist/{chunk-ZZ3SFJXV.js → chunk-OCE32VUK.js} +4 -4
  24. package/dist/{chunk-ZZ3SFJXV.js.map → chunk-OCE32VUK.js.map} +1 -1
  25. package/dist/{chunk-IOP2IBDV.js → chunk-PTHYN6HY.js} +4 -4
  26. package/dist/{chunk-IOP2IBDV.js.map → chunk-PTHYN6HY.js.map} +1 -1
  27. package/dist/{chunk-QV6T4R4T.js → chunk-TPDO2EIC.js} +3 -3
  28. package/dist/{chunk-QV6T4R4T.js.map → chunk-TPDO2EIC.js.map} +1 -1
  29. package/dist/{chunk-YMD3T6J2.js → chunk-ULNNTBJO.js} +12 -2
  30. package/dist/chunk-ULNNTBJO.js.map +1 -0
  31. package/dist/{chunk-T7FJ2TBD.js → chunk-XBQBM3SE.js} +4 -4
  32. package/dist/{chunk-T7FJ2TBD.js.map → chunk-XBQBM3SE.js.map} +1 -1
  33. package/dist/{chunk-YQ4GDK4I.js → chunk-YBX7EDDR.js} +3 -3
  34. package/dist/{chunk-YQ4GDK4I.js.map → chunk-YBX7EDDR.js.map} +1 -1
  35. package/dist/{chunk-H5LGKSBM.js → chunk-ZTLWHD2V.js} +3 -3
  36. package/dist/{chunk-H5LGKSBM.js.map → chunk-ZTLWHD2V.js.map} +1 -1
  37. package/dist/executions.js +5 -5
  38. package/dist/history.js +3 -3
  39. package/dist/index.d.ts +81325 -35214
  40. package/dist/index.js +20 -20
  41. package/dist/index.js.map +1 -1
  42. package/dist/nodes.js +2 -2
  43. package/dist/settings.js +3 -3
  44. package/dist/templates.js +5 -5
  45. package/dist/{workflow-builder-Y7PcoT2O.d.ts → workflow-builder-DIjITfNE.d.ts} +17 -0
  46. package/dist/workflow-builder.d.ts +1 -1
  47. package/dist/workflow-builder.js +6 -6
  48. package/dist/workflows-list.js +4 -4
  49. package/package.json +1 -1
  50. package/dist/ExecutionDetailPage-3ZJMNWBY.js +0 -12
  51. package/dist/ExecutionsListPage-FPNETFQX.js +0 -11
  52. package/dist/WorkflowsList-GEPG3OZ6.js +0 -13
  53. package/dist/chunk-6SXISR7B.js.map +0 -1
  54. package/dist/chunk-HCL5CCLH.js +0 -4940
  55. package/dist/chunk-HCL5CCLH.js.map +0 -1
  56. package/dist/chunk-UBKJDGYS.js.map +0 -1
  57. package/dist/chunk-YMD3T6J2.js.map +0 -1
@@ -7,10 +7,10 @@ import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, Instal
7
7
  import { QuotaExhaustedDialog } from './chunk-AANIWER2.js';
8
8
  import { SdkPermissionGate, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-W23ZXNKU.js';
9
9
  import { cn as cn$1 } from './chunk-3ZYUGTIT.js';
10
- import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-H5LGKSBM.js';
10
+ import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useLazyWorkflowDefinition, useDeactivateWorkflow } from './chunk-ZTLWHD2V.js';
11
11
  import { config, getFluidGridsConfig, validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-U4AJLVHA.js';
12
- import { useFlowStore } from './chunk-YMD3T6J2.js';
13
- import { NodeEndpointConfigsDocument, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowRunDocument, FluidgridsEntityTagsDocument, AvailableFluidgridsTagsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, UntagFluidgridsEntityDocument, ReplaceFluidgridsEntityTagsDocument, CreateFluidgridsTagDocument, NodeSchemaIntrospectionDocument, useWorkflowPinnedDataQuery, usePinNodeDataMutation, useUnpinNodeDataMutation, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-UBKJDGYS.js';
12
+ import { useFlowStore } from './chunk-ULNNTBJO.js';
13
+ import { NodeEndpointConfigsDocument, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowRunDocument, FluidgridsEntityTagsDocument, AvailableFluidgridsTagsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, UntagFluidgridsEntityDocument, ReplaceFluidgridsEntityTagsDocument, CreateFluidgridsTagDocument, NodeSchemaIntrospectionDocument, useWorkflowPinnedDataQuery, usePinNodeDataMutation, useUnpinNodeDataMutation, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-FJC2RJ4Y.js';
14
14
  import { throwIfResultError, describeOperationError } from './chunk-LMO5ASOE.js';
15
15
  import { useTr, FluidGridsTranslationProvider, ENGLISH_FALLBACK_TRANSLATOR } from './chunk-7YWBH2A5.js';
16
16
  import { waitForFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-5BDQNSP3.js';
@@ -3601,6 +3601,7 @@ function ConnectionSelector({
3601
3601
  ] });
3602
3602
  }
3603
3603
  var TRIGGER_WORKFLOW = TriggerWorkflowDocument;
3604
+ var EXECUTE_STEP = ExecuteStepDocument;
3604
3605
  var WORKFLOW_RUN = WorkflowRunDocument;
3605
3606
  var RUN_FROM_NODE = RunFromNodeDocument;
3606
3607
  var EXECUTION_DETAIL = ExecutionDetailDocument;
@@ -3640,6 +3641,7 @@ function useNodeExecution() {
3640
3641
  const startExecution = useFlowStore(
3641
3642
  (s) => s.actions.execution.startExecution
3642
3643
  );
3644
+ const setStepPlan = useFlowStore((s) => s.actions.execution.setStepPlan);
3643
3645
  const addLog = useFlowStore((s) => s.actions.execution.addLog);
3644
3646
  const updateLog = useFlowStore((s) => s.actions.execution.updateLog);
3645
3647
  const setNodeStatus = useFlowStore((s) => s.actions.execution.setNodeStatus);
@@ -3824,58 +3826,51 @@ function useNodeExecution() {
3824
3826
  },
3825
3827
  [processNodeStates, completeExecution, cleanup]
3826
3828
  );
3827
- const executeNode = useCallback(
3828
- async (stopAtNodeId) => {
3829
- const triggerNode = findTriggerNode();
3830
- if (!triggerNode) {
3831
- console.error("[useNodeExecution] No trigger node found in workflow");
3832
- return { success: false, error: "No trigger node found" };
3833
- }
3829
+ const executeStep = useCallback(
3830
+ async (nodeId) => {
3834
3831
  cleanup();
3835
3832
  clearLogs();
3836
3833
  const workflowKey = workflow.workflowKey || workflow.id;
3837
3834
  const version = workflow.version || "1.0.0";
3838
3835
  if (!workflowKey) {
3839
3836
  console.error(
3840
- "[useNodeExecution] Workflow must be saved before execution. No workflowKey found."
3837
+ "[useNodeExecution] Workflow must be saved before step execution. No workflowKey found."
3841
3838
  );
3842
3839
  return {
3843
3840
  success: false,
3844
3841
  error: "Workflow must be saved before execution"
3845
3842
  };
3846
3843
  }
3847
- setNodeStatus(stopAtNodeId, "running");
3844
+ setNodeStatus(nodeId, "running");
3848
3845
  try {
3849
3846
  const client = getFluidGridsClient();
3850
3847
  const result = throwIfResultError(
3851
3848
  await client.mutate({
3852
- mutation: TRIGGER_WORKFLOW,
3849
+ mutation: EXECUTE_STEP,
3853
3850
  variables: {
3854
3851
  input: {
3855
3852
  workflowKey,
3856
3853
  version,
3857
- triggerNodeId: triggerNode.id,
3858
- triggerData: {},
3859
- context: {},
3860
- stopAtNodeId,
3861
- // Step execution from the builder is always a manual/debug
3862
- // run (BOFF-7511) — pinned node data only ever applies here,
3863
- // never on a PRODUCTION trigger (webhook, schedule, API).
3864
- mode: "TEST"
3854
+ nodeId
3865
3855
  }
3866
3856
  }
3867
3857
  })
3868
3858
  );
3869
- const triggerResult = result.data?.triggerWorkflow;
3870
- if (triggerResult) {
3871
- const backendRunId = triggerResult.runId;
3872
- startExecution(stopAtNodeId, backendRunId);
3859
+ const stepResult = result.data?.executeStep;
3860
+ if (stepResult) {
3861
+ const backendRunId = stepResult.runId;
3862
+ startExecution(nodeId, backendRunId);
3863
+ setStepPlan({
3864
+ runId: backendRunId,
3865
+ ...stepResult.plan,
3866
+ sourceRunId: stepResult.plan.sourceRunId ?? null
3867
+ });
3873
3868
  const initialLog = {
3874
- id: `${backendRunId}-${stopAtNodeId}`,
3869
+ id: `${backendRunId}-${nodeId}`,
3875
3870
  runId: backendRunId,
3876
- nodeId: stopAtNodeId,
3877
- nodeType: workflow.nodes.find((n) => n.id === stopAtNodeId)?.type || "unknown",
3878
- nodeName: getNodeName(stopAtNodeId),
3871
+ nodeId,
3872
+ nodeType: workflow.nodes.find((node) => node.id === nodeId)?.type || "unknown",
3873
+ nodeName: getNodeName(nodeId),
3879
3874
  status: "running",
3880
3875
  inputArgs: null,
3881
3876
  output: null,
@@ -3886,21 +3881,21 @@ function useNodeExecution() {
3886
3881
  };
3887
3882
  addLog(initialLog);
3888
3883
  pollRunUpdates(backendRunId);
3889
- return { success: true, runId: backendRunId };
3884
+ return { success: true, runId: backendRunId, plan: stepResult.plan };
3890
3885
  }
3891
- console.error("[useNodeExecution] No result from trigger");
3892
- setNodeStatus(stopAtNodeId, "error");
3893
- return { success: false, error: "No result from trigger" };
3886
+ console.error("[useNodeExecution] No result from executeStep");
3887
+ setNodeStatus(nodeId, "error");
3888
+ return { success: false, error: "No result from executeStep" };
3894
3889
  } catch (error) {
3895
- console.error("[useNodeExecution] Error triggering workflow:", error);
3890
+ console.error("[useNodeExecution] Error executing step:", error);
3896
3891
  const errorMessage = describeOperationError(error);
3897
3892
  const errorRunId = nanoid$1();
3898
3893
  const errorLog = {
3899
- id: `${errorRunId}-${stopAtNodeId}`,
3894
+ id: `${errorRunId}-${nodeId}`,
3900
3895
  runId: errorRunId,
3901
- nodeId: stopAtNodeId,
3902
- nodeType: workflow.nodes.find((n) => n.id === stopAtNodeId)?.type || "unknown",
3903
- nodeName: getNodeName(stopAtNodeId),
3896
+ nodeId,
3897
+ nodeType: workflow.nodes.find((node) => node.id === nodeId)?.type || "unknown",
3898
+ nodeName: getNodeName(nodeId),
3904
3899
  status: "failed",
3905
3900
  inputArgs: null,
3906
3901
  output: null,
@@ -3910,16 +3905,16 @@ function useNodeExecution() {
3910
3905
  endTime: (/* @__PURE__ */ new Date()).toISOString()
3911
3906
  };
3912
3907
  addLog(errorLog);
3913
- setNodeStatus(stopAtNodeId, "error");
3908
+ setNodeStatus(nodeId, "error");
3914
3909
  completeExecution();
3915
3910
  return { success: false, error: errorMessage };
3916
3911
  }
3917
3912
  },
3918
3913
  [
3919
- findTriggerNode,
3920
3914
  cleanup,
3921
3915
  clearLogs,
3922
3916
  startExecution,
3917
+ setStepPlan,
3923
3918
  workflow,
3924
3919
  getNodeName,
3925
3920
  addLog,
@@ -3961,8 +3956,9 @@ function useNodeExecution() {
3961
3956
  triggerNodeId: triggerNode.id,
3962
3957
  triggerData: customTriggerData || {},
3963
3958
  context: {},
3964
- // Builder "Test workflow" is always a manual/debug run
3965
- // (BOFF-7511) — see the note on executeNode above.
3959
+ // Builder "Test workflow" is always a manual/debug run.
3960
+ // Pinned node data only applies to TEST executions, never a
3961
+ // production trigger (webhook, schedule, API).
3966
3962
  mode: "TEST"
3967
3963
  }
3968
3964
  }
@@ -4030,7 +4026,7 @@ function useNodeExecution() {
4030
4026
  sourceRunId,
4031
4027
  nodeId,
4032
4028
  // Run-from-node is a debug affordance — always TEST, same
4033
- // rule as executeNode/executeFullWorkflow above.
4029
+ // rule as the other builder debug execution paths.
4034
4030
  mode: "TEST"
4035
4031
  }
4036
4032
  }
@@ -4117,7 +4113,7 @@ function useNodeExecution() {
4117
4113
  };
4118
4114
  }, [cleanup, completeExecution]);
4119
4115
  return {
4120
- executeNode,
4116
+ executeStep,
4121
4117
  executeFullWorkflow,
4122
4118
  executeFromNode,
4123
4119
  loadExecution,
@@ -6665,7 +6661,7 @@ var getNodeMetadata = (value) => {
6665
6661
  return updated;
6666
6662
  });
6667
6663
  }, [nodeType, id, edges, data, setNodes, zustandSetNodes]);
6668
- const { executeNode } = useNodeExecution();
6664
+ const { executeStep } = useNodeExecution();
6669
6665
  const deleteNode = useDeleteNode();
6670
6666
  const handleDeleteNode = () => {
6671
6667
  deleteNode(id);
@@ -6723,11 +6719,11 @@ var getNodeMetadata = (value) => {
6723
6719
  openNdv({ nodeId: id, type: value?.type });
6724
6720
  }, [id, openNdv]);
6725
6721
  const handleExecuteStep = useCallback(() => {
6726
- executeNode(id).then((_result) => {
6722
+ executeStep(id).then((_result) => {
6727
6723
  }).catch((error) => {
6728
- console.error("[NodeComponent] Execute error:", error);
6724
+ console.error("[NodeComponent] Execute step error:", error);
6729
6725
  });
6730
- }, [executeNode, id]);
6726
+ }, [executeStep, id]);
6731
6727
  const missingCredentials = useMemo(() => {
6732
6728
  const visibleAdapters = getVisibleConnectionAdapters(
6733
6729
  String(value?.type ?? ""),
@@ -23856,11 +23852,13 @@ function NodeDetailView() {
23856
23852
  const [inputView, setInputView] = useState("schema");
23857
23853
  const executionLogs = useFlowStore((s) => s.execution.logs);
23858
23854
  const currentRunId = useFlowStore((s) => s.execution.currentRunId);
23855
+ const stepPlan = useFlowStore((s) => s.execution.stepPlan);
23859
23856
  const nodeLog = useMemo(() => {
23860
23857
  if (!ndv?.nodeId) return null;
23861
23858
  const matches = executionLogs.filter((l) => l.nodeId === ndv.nodeId);
23862
23859
  return matches.length > 0 ? matches[matches.length - 1] : null;
23863
23860
  }, [executionLogs, ndv?.nodeId]);
23861
+ const stepPlanForNode = stepPlan?.runId === currentRunId && stepPlan.targetNodeId === ndv?.nodeId ? stepPlan : null;
23864
23862
  const hasRealOutput = !!nodeLog?.output && Object.keys(nodeLog.output).length > 0;
23865
23863
  const hasRealInput = !!nodeLog?.inputArgs && Object.keys(nodeLog.inputArgs).length > 0;
23866
23864
  const realOutputFields = useMemo(
@@ -24025,6 +24023,7 @@ function NodeDetailView() {
24025
24023
  }
24026
24024
  )
24027
24025
  ] }),
24026
+ stepPlanForNode && /* @__PURE__ */ jsx(StepExecutionPlanSummary, { plan: stepPlanForNode }),
24028
24027
  !threePaneLayout && /* @__PURE__ */ jsxs(
24029
24028
  "div",
24030
24029
  {
@@ -24349,6 +24348,152 @@ function NodeDetailView() {
24349
24348
  }
24350
24349
  ) });
24351
24350
  }
24351
+ function StepExecutionPlanSummary({ plan }) {
24352
+ const tr = useTr();
24353
+ return /* @__PURE__ */ jsxs(
24354
+ "section",
24355
+ {
24356
+ className: "shrink-0 border-b border-border bg-muted/30 px-4 py-2.5",
24357
+ "data-testid": "ndv-step-execution-plan",
24358
+ "aria-live": "polite",
24359
+ children: [
24360
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1", children: [
24361
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-foreground", children: tr(
24362
+ "fluidgrids.builder.nodeDetailView.stepPlanTitle",
24363
+ "TEST execution plan"
24364
+ ) }),
24365
+ /* @__PURE__ */ jsx(
24366
+ PlanMetric,
24367
+ {
24368
+ label: tr(
24369
+ "fluidgrids.builder.nodeDetailView.stepPlanExecute",
24370
+ "Execute"
24371
+ ),
24372
+ count: plan.executeNodeIds.length
24373
+ }
24374
+ ),
24375
+ /* @__PURE__ */ jsx(
24376
+ PlanMetric,
24377
+ {
24378
+ label: tr("fluidgrids.builder.nodeDetailView.stepPlanReuse", "Reuse"),
24379
+ count: plan.reusedNodeIds.length
24380
+ }
24381
+ ),
24382
+ /* @__PURE__ */ jsx(
24383
+ PlanMetric,
24384
+ {
24385
+ label: tr(
24386
+ "fluidgrids.builder.nodeDetailView.stepPlanPinned",
24387
+ "Pinned"
24388
+ ),
24389
+ count: plan.pinnedNodeIds.length
24390
+ }
24391
+ ),
24392
+ /* @__PURE__ */ jsx(
24393
+ PlanMetric,
24394
+ {
24395
+ label: tr(
24396
+ "fluidgrids.builder.nodeDetailView.stepPlanBlockers",
24397
+ "Blockers"
24398
+ ),
24399
+ count: plan.blockers.length
24400
+ }
24401
+ )
24402
+ ] }),
24403
+ plan.sourceRunId && /* @__PURE__ */ jsxs("p", { className: "mt-1 text-[11px] text-muted-foreground", children: [
24404
+ tr(
24405
+ "fluidgrids.builder.nodeDetailView.stepPlanSource",
24406
+ "Using compatible TEST data from run"
24407
+ ),
24408
+ " ",
24409
+ /* @__PURE__ */ jsx("code", { className: "font-mono text-foreground", children: plan.sourceRunId })
24410
+ ] }),
24411
+ /* @__PURE__ */ jsxs("div", { className: "mt-2 grid gap-2 sm:grid-cols-2", children: [
24412
+ /* @__PURE__ */ jsx(
24413
+ PlanNodeList,
24414
+ {
24415
+ label: tr(
24416
+ "fluidgrids.builder.nodeDetailView.stepPlanExecuteNodes",
24417
+ "Nodes to execute"
24418
+ ),
24419
+ nodeIds: plan.executeNodeIds,
24420
+ emptyLabel: tr(
24421
+ "fluidgrids.builder.nodeDetailView.stepPlanExecuteNodesEmpty",
24422
+ "No nodes need execution."
24423
+ )
24424
+ }
24425
+ ),
24426
+ /* @__PURE__ */ jsx(
24427
+ PlanNodeList,
24428
+ {
24429
+ label: tr(
24430
+ "fluidgrids.builder.nodeDetailView.stepPlanReusedNodes",
24431
+ "Reused nodes"
24432
+ ),
24433
+ nodeIds: plan.reusedNodeIds,
24434
+ emptyLabel: tr(
24435
+ "fluidgrids.builder.nodeDetailView.stepPlanReusedNodesEmpty",
24436
+ "No prior node data reused."
24437
+ )
24438
+ }
24439
+ ),
24440
+ /* @__PURE__ */ jsx(
24441
+ PlanNodeList,
24442
+ {
24443
+ label: tr(
24444
+ "fluidgrids.builder.nodeDetailView.stepPlanPinnedNodes",
24445
+ "Pinned nodes"
24446
+ ),
24447
+ nodeIds: plan.pinnedNodeIds,
24448
+ emptyLabel: tr(
24449
+ "fluidgrids.builder.nodeDetailView.stepPlanPinnedNodesEmpty",
24450
+ "No pinned data used."
24451
+ )
24452
+ }
24453
+ ),
24454
+ /* @__PURE__ */ jsx(
24455
+ PlanNodeList,
24456
+ {
24457
+ label: tr(
24458
+ "fluidgrids.builder.nodeDetailView.stepPlanBlockerNodes",
24459
+ "Blockers"
24460
+ ),
24461
+ nodeIds: plan.blockers,
24462
+ emptyLabel: tr(
24463
+ "fluidgrids.builder.nodeDetailView.stepPlanBlockerNodesEmpty",
24464
+ "No blockers."
24465
+ )
24466
+ }
24467
+ )
24468
+ ] })
24469
+ ]
24470
+ }
24471
+ );
24472
+ }
24473
+ function PlanMetric({ label, count: count2 }) {
24474
+ return /* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
24475
+ label,
24476
+ ": ",
24477
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: count2 })
24478
+ ] });
24479
+ }
24480
+ function PlanNodeList({
24481
+ label,
24482
+ nodeIds,
24483
+ emptyLabel
24484
+ }) {
24485
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0 rounded-md border border-border bg-background/60 px-2 py-1.5", children: [
24486
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: label }),
24487
+ nodeIds.length > 0 ? /* @__PURE__ */ jsx("div", { className: "mt-1 flex flex-wrap gap-1", children: nodeIds.map((nodeId) => /* @__PURE__ */ jsx(
24488
+ "code",
24489
+ {
24490
+ className: "max-w-full truncate rounded bg-muted px-1 py-0.5 font-mono text-[10px] text-foreground",
24491
+ children: nodeId
24492
+ },
24493
+ `${label}-${nodeId}`
24494
+ )) }) : /* @__PURE__ */ jsx("p", { className: "mt-1 text-[10px] text-muted-foreground", children: emptyLabel })
24495
+ ] });
24496
+ }
24352
24497
  function ResizeHandle({ onStart }) {
24353
24498
  return /* @__PURE__ */ jsx(
24354
24499
  "div",
@@ -26040,5 +26185,5 @@ var FlowBuilderPage = ({
26040
26185
  };
26041
26186
 
26042
26187
  export { Card2 as Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConnectionFormDialog, ConnectionSelector, EntityTagPicker, FLUIDGRIDS_ENTITY_TYPES, FlowBuilderPage, FluidGridsMark, FluidGridsProvider, ProviderPicker, SchemaConnectionForm, ScopePicker, TemplateCard, buildNodeCheck, buildRequiredNodeTypes, listCustomBlocks, mergeStickyNotes, refetchStoreNodes, registerCustomBlock, resolveUiSpec, stripSubmitActions, tagLabel, useAvailableTags, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useCreateTag, useDraftEntityTags, useEntityTags, useFluidGridsContext, useImportWorkflowTemplate, useInitiateOAuth, useInstalledNodes, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useReplaceEntityTags, useSearchTags, useTagEntity, useUntagEntity, useWorkflowTemplates };
26043
- //# sourceMappingURL=chunk-6SXISR7B.js.map
26044
- //# sourceMappingURL=chunk-6SXISR7B.js.map
26188
+ //# sourceMappingURL=chunk-C44DTSC6.js.map
26189
+ //# sourceMappingURL=chunk-C44DTSC6.js.map