@burdenoff/fluidgrids-fe-sdk 2026.1102.3 → 2026.1103.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 (45) hide show
  1. package/dist/{ExecutionDetailPage-XHII23QR.js → ExecutionDetailPage-JRBUIU5J.js} +9 -9
  2. package/dist/{ExecutionsListPage-GTCSYSC6.js → ExecutionsListPage-RC342VCZ.js} +5 -5
  3. package/dist/{WorkflowBuilder-ZIXEU7DQ.js → WorkflowBuilder-TCS4JELN.js} +10 -10
  4. package/dist/{WorkflowsList-NYSQEZWU.js → WorkflowsList-6ES2EDGZ.js} +6 -6
  5. package/dist/{agentTools-PA62A53S.js → agentTools-4JT66UQB.js} +3 -3
  6. package/dist/{chunk-JCHE4V55.js → chunk-52OIBKPO.js} +1 -1
  7. package/dist/{chunk-QAXP5HON.js → chunk-6WPW42TX.js} +1 -1
  8. package/dist/chunk-742OIXMP.js +18 -0
  9. package/dist/{chunk-B2DNUVKW.js → chunk-BP6YPKNK.js} +4 -4
  10. package/dist/{chunk-DLKGWGRN.js → chunk-BVCMAGLJ.js} +1 -1
  11. package/dist/{chunk-OR7KZZ2D.js → chunk-EKB3EIIC.js} +1 -1
  12. package/dist/{chunk-UETHT3KG.js → chunk-G2FPOWN5.js} +1 -1
  13. package/dist/{chunk-A4XNCGWT.js → chunk-H2KIJEYM.js} +1 -1
  14. package/dist/{chunk-7SY2SL5Y.js → chunk-ILPQAQB5.js} +5 -5
  15. package/dist/{chunk-ZTJX5ONT.js → chunk-K6HD5GC7.js} +2 -2
  16. package/dist/{chunk-MY752OLT.js → chunk-LTINUSLK.js} +49 -208
  17. package/dist/{chunk-XNVYPEBO.js → chunk-LVTOWRAM.js} +2 -2
  18. package/dist/{chunk-7JLLH4YE.js → chunk-M23H4LSY.js} +3 -3
  19. package/dist/{chunk-OZCJHPMH.js → chunk-MY4HMUWU.js} +3 -3
  20. package/dist/{chunk-PBCBDSVA.js → chunk-N6XYVO7N.js} +1 -1
  21. package/dist/{chunk-3Y4266JL.js → chunk-OBWB73Y7.js} +1 -1
  22. package/dist/{chunk-EFOJEQDS.js → chunk-QXACKASD.js} +1 -1
  23. package/dist/{chunk-P6IRD5SA.js → chunk-RFOKJE3A.js} +8 -8
  24. package/dist/{chunk-YVOHCC7J.js → chunk-SHYDX2LO.js} +4 -4
  25. package/dist/{chunk-4FDMLKLL.js → chunk-SIVS3XSV.js} +1 -1
  26. package/dist/{chunk-W74MXVFX.js → chunk-SUIH376K.js} +1 -1
  27. package/dist/{chunk-CXNJKM4D.js → chunk-UH7JKPUF.js} +1 -1
  28. package/dist/{chunk-37BKVPO7.js → chunk-UMULDJCK.js} +5 -5
  29. package/dist/{chunk-BDBSRN2O.js → chunk-UW5GY6LQ.js} +9 -5
  30. package/dist/{chunk-A7QPQ6MO.js → chunk-VQZEGCRF.js} +1 -1
  31. package/dist/{chunk-6VODFT2Q.js → chunk-Y7BNGLRI.js} +4 -4
  32. package/dist/{chunk-TJ2PFY7I.js → chunk-Y7MQ3LYB.js} +1 -1
  33. package/dist/{chunk-23LYGZ27.js → chunk-YC76QFWZ.js} +353 -7
  34. package/dist/executions.js +10 -10
  35. package/dist/history.js +4 -4
  36. package/dist/index.js +38 -38
  37. package/dist/{node-detail-view-KET5DNEH.js → node-detail-view-CMQ7DUYM.js} +7 -7
  38. package/dist/observability.js +4 -4
  39. package/dist/{quick-config-panel-L6CTZQUG.js → quick-config-panel-NJ72QZPM.js} +4 -4
  40. package/dist/settings.js +5 -5
  41. package/dist/templates.js +9 -9
  42. package/dist/workflow-builder.js +11 -11
  43. package/dist/workflows-list.js +6 -6
  44. package/package.json +1 -1
  45. package/dist/chunk-OUYEMZT6.js +0 -185
@@ -1,4 +1,4 @@
1
- import { useAgentDefinitions, useAgentDefinitionList, useConnections, describeOperationError } from './chunk-23LYGZ27.js';
1
+ import { useAgentDefinitions, useAgentDefinitionList, useConnections, describeOperationError } from './chunk-YC76QFWZ.js';
2
2
  import { useTr } from './chunk-UULVIT25.js';
3
3
  import { useState, useCallback, useEffect } from 'react';
4
4
  import { Icon } from '@iconify/react';
@@ -1,8 +1,8 @@
1
- import { AgentsTab } from './chunk-A7QPQ6MO.js';
2
- import { ActionPoliciesTab } from './chunk-DLKGWGRN.js';
3
- import { LogStreamingTab } from './chunk-CXNJKM4D.js';
1
+ import { AgentsTab } from './chunk-VQZEGCRF.js';
2
+ import { ActionPoliciesTab } from './chunk-BVCMAGLJ.js';
3
+ import { LogStreamingTab } from './chunk-UH7JKPUF.js';
4
4
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
5
- import { useFlowStore, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useSaveStatusStore, findSaveConflict, useDurableParityEnabled, throwIfResultError, describeOperationError, useConnections } from './chunk-23LYGZ27.js';
5
+ import { useFlowStore, useFluidGridsFlag, FLUIDGRIDS_FLAGS, useSaveStatusStore, findSaveConflict, useDurableParityEnabled, throwIfResultError, describeOperationError, useConnections } from './chunk-YC76QFWZ.js';
6
6
  import { useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS } from './chunk-ZUVFD5KV.js';
7
7
  import { getGlobalStoreClient } from './chunk-PXIFUMLA.js';
8
8
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
@@ -1,4 +1,4 @@
1
- import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-23LYGZ27.js';
1
+ import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-YC76QFWZ.js';
2
2
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
3
3
  import { EventRegistrationsDocument } from './chunk-JTQFBZTV.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
@@ -23,7 +23,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
23
23
  import { toast } from 'sonner';
24
24
  import { nodeCategoryColor, chartSeriesColor, chartSeriesIndex } from '@burdenoff/fe-libs/shared/utils';
25
25
  import { gql } from '@apollo/client';
26
- import { Textarea, Input, Button, Card, Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator } from '@burdenoff/fe-libs/ui';
26
+ import { Textarea, Input, Button, Card, Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel } from '@burdenoff/fe-libs/ui';
27
27
  import * as AdaptiveCards from 'adaptivecards';
28
28
  import { formatDistanceToNow } from 'date-fns';
29
29
  import { ProviderIcon, ConnectionDialog } from '@burdenoff/fe-libs/connections';
@@ -33,6 +33,7 @@ import { useEventBus } from '@burdenoff/fe-libs/shared/events';
33
33
  import { ApolloProvider } from '@apollo/client/react';
34
34
  import { useShallow } from 'zustand/shallow';
35
35
  import { InfoCircledIcon } from '@radix-ui/react-icons';
36
+ import { Button as Button$1 } from '@burdenoff/fe-libs/button';
36
37
 
37
38
  // src/feature-flags/durable-nodes.ts
38
39
  var DURABLE_FUNCTION_NODE_TYPES = /* @__PURE__ */ new Set([
@@ -8674,6 +8675,348 @@ function useNodeExecution() {
8674
8675
  findTriggerNode
8675
8676
  };
8676
8677
  }
8678
+ function findEdges(node, connectedEdges) {
8679
+ const outgoingEdges = connectedEdges.filter(
8680
+ (edge) => edge.source === node.id
8681
+ );
8682
+ const incomingEdges = connectedEdges.filter(
8683
+ (edge) => edge.target === node.id
8684
+ );
8685
+ return { outgoingEdges, incomingEdges };
8686
+ }
8687
+ function checkFlowTerminalNode(outgoingEdges, incomingEdges, isTrigger, type) {
8688
+ if (isTrigger) {
8689
+ return outgoingEdges.length >= 1;
8690
+ }
8691
+ switch (type) {
8692
+ case "end" /* END */:
8693
+ return incomingEdges.length >= 1;
8694
+ default:
8695
+ return false;
8696
+ }
8697
+ }
8698
+ function checkLoneNode(outgoingEdges, incomingEdges, isTrigger) {
8699
+ if (isTrigger) {
8700
+ return outgoingEdges.length === 0;
8701
+ }
8702
+ return incomingEdges.length === 0;
8703
+ }
8704
+ function isFlowComplete(nodes, edges) {
8705
+ const connectedEdges = getConnectedEdges(nodes, edges);
8706
+ let isTriggerConnected = false;
8707
+ let hasTriggerNode = false;
8708
+ let hasEndNode = false;
8709
+ let isEndConnected = false;
8710
+ const nodesWithEmptyTarget = [];
8711
+ for (const node of nodes) {
8712
+ if (node.type === STICKY_NOTE_TYPE) continue;
8713
+ const { outgoingEdges, incomingEdges } = findEdges(node, connectedEdges);
8714
+ const isTrigger = isNodeTrigger(node);
8715
+ if (isTrigger) {
8716
+ hasTriggerNode = true;
8717
+ if (checkFlowTerminalNode(
8718
+ outgoingEdges,
8719
+ incomingEdges,
8720
+ true,
8721
+ node.type
8722
+ )) {
8723
+ isTriggerConnected = true;
8724
+ }
8725
+ } else if (node.type === "end" /* END */) {
8726
+ hasEndNode = true;
8727
+ isEndConnected = checkFlowTerminalNode(
8728
+ outgoingEdges,
8729
+ incomingEdges,
8730
+ false,
8731
+ "end" /* END */
8732
+ );
8733
+ }
8734
+ if (checkLoneNode(outgoingEdges, incomingEdges, isTrigger))
8735
+ nodesWithEmptyTarget.push(node);
8736
+ }
8737
+ const hasAnyLoneNode = nodesWithEmptyTarget.length > 0;
8738
+ const isEndValid = !hasEndNode || isEndConnected;
8739
+ return hasTriggerNode && isTriggerConnected && isEndValid && !hasAnyLoneNode;
8740
+ }
8741
+ function useFlowValidator(onValidate) {
8742
+ const [isValidating, setIsValidating] = useState(false);
8743
+ const { getNodes, getEdges } = useReactFlow();
8744
+ const validate = useCallback(async () => {
8745
+ setIsValidating(true);
8746
+ await new Promise((resolve) => setTimeout(resolve, 300));
8747
+ onValidate?.(isFlowComplete(getNodes(), getEdges()));
8748
+ setIsValidating(false);
8749
+ }, [getNodes, getEdges, onValidate]);
8750
+ return [isValidating, validate];
8751
+ }
8752
+
8753
+ // src/builder/lib/save-guards.ts
8754
+ function editingLeaseLocked() {
8755
+ return isLocked(useEditLeaseStore.getState().phase);
8756
+ }
8757
+ function autosaveAllowedFor(workflow) {
8758
+ return useSaveStatusStore.getState().autosaveEnabled && canAutosave(workflow);
8759
+ }
8760
+ function editStateFor(state) {
8761
+ return editStateOf(
8762
+ useSaveStatusStore.getState().baseline,
8763
+ {
8764
+ fingerprint: workflowFingerprint(state.workflow),
8765
+ generation: state.loadGeneration,
8766
+ editRevision: state.editRevision
8767
+ },
8768
+ Date.now()
8769
+ );
8770
+ }
8771
+ function departingSave(state) {
8772
+ const status = useSaveStatusStore.getState();
8773
+ if (status.autosavePaused || editingLeaseLocked()) return null;
8774
+ if (editStateFor(state) !== "dirty") return null;
8775
+ if (!autosaveAllowedFor(state.workflow)) return null;
8776
+ const { nodes, edges } = state.workflow;
8777
+ if (!isFlowComplete(nodes, edges)) return null;
8778
+ return snapshotForSave(state.workflow, state.loadGeneration);
8779
+ }
8780
+ function touchesSavedFields(state, previous) {
8781
+ return state.workflow.nodes !== previous.workflow.nodes || state.workflow.edges !== previous.workflow.edges || state.workflow.name !== previous.workflow.name || state.workflow.alias !== previous.workflow.alias || state.workflow.status !== previous.workflow.status || state.loadGeneration !== previous.loadGeneration;
8782
+ }
8783
+ function unsavedState() {
8784
+ const flow = useFlowStore.getState();
8785
+ const status = useSaveStatusStore.getState();
8786
+ return {
8787
+ // Checked fresh: the dirty flag trails the last edit by a moment.
8788
+ dirty: status.dirty || editStateFor(flow) === "dirty",
8789
+ // A paused autosave (a refused save), or a page someone else is editing
8790
+ // from, does not save on the way out either.
8791
+ autosaveAllowed: autosaveAllowedFor(flow.workflow) && !status.autosavePaused && !editingLeaseLocked(),
8792
+ incomplete: status.incomplete || !isFlowComplete(flow.workflow.nodes, flow.workflow.edges),
8793
+ failed: status.failure !== null
8794
+ };
8795
+ }
8796
+ function leavingLosesChanges() {
8797
+ return leaveNeedsConfirmation(unsavedState());
8798
+ }
8799
+ function runPreparation() {
8800
+ return runPreparationOf(unsavedState());
8801
+ }
8802
+ function savedEverythingBeforeLeaving() {
8803
+ return editStateFor(useFlowStore.getState()) !== "dirty";
8804
+ }
8805
+ function watchLeavingLosesChanges(onChange, delayMs) {
8806
+ let current;
8807
+ let timer;
8808
+ const report = (losesChanges) => {
8809
+ if (losesChanges === current) return;
8810
+ current = losesChanges;
8811
+ onChange(losesChanges);
8812
+ };
8813
+ const settle = () => {
8814
+ timer = void 0;
8815
+ report(leavingLosesChanges());
8816
+ };
8817
+ const settleLater = () => {
8818
+ if (timer) clearTimeout(timer);
8819
+ timer = setTimeout(settle, delayMs);
8820
+ };
8821
+ const settleNow = () => {
8822
+ if (timer) clearTimeout(timer);
8823
+ settle();
8824
+ };
8825
+ settle();
8826
+ const unsubscribeFlow = useFlowStore.subscribe((state, previous) => {
8827
+ if (!touchesSavedFields(state, previous)) return;
8828
+ if (state.loadGeneration === previous.loadGeneration) report(true);
8829
+ settleLater();
8830
+ });
8831
+ const unsubscribeStatus = useSaveStatusStore.subscribe(settleLater);
8832
+ const unsubscribeLease = useEditLeaseStore.subscribe((state, previous) => {
8833
+ if (isLocked(state.phase) !== isLocked(previous.phase)) settleNow();
8834
+ });
8835
+ return () => {
8836
+ unsubscribeFlow();
8837
+ unsubscribeStatus();
8838
+ unsubscribeLease();
8839
+ if (timer) clearTimeout(timer);
8840
+ };
8841
+ }
8842
+
8843
+ // src/builder/hooks/use-builder-save.ts
8844
+ function useManualSave() {
8845
+ const tr = useTr();
8846
+ const { saveToBackend } = useSaveWorkflow();
8847
+ return useCallback(async () => {
8848
+ const { nodes, edges } = useFlowStore.getState().workflow;
8849
+ if (!isFlowComplete(nodes, edges)) {
8850
+ toast.error(
8851
+ tr(
8852
+ "fluidgrids.builder.saveFlowButton.invalidToastTitle",
8853
+ "Flow is invalid"
8854
+ ),
8855
+ {
8856
+ description: tr(
8857
+ "fluidgrids.builder.saveFlowButton.invalidToastDescription",
8858
+ "Please check if the flow is complete and has no lone nodes"
8859
+ )
8860
+ }
8861
+ );
8862
+ return false;
8863
+ }
8864
+ return saveToBackend();
8865
+ }, [saveToBackend, tr]);
8866
+ }
8867
+ function useGuardedNavigate() {
8868
+ const navigate = useNavigate();
8869
+ return useCallback(
8870
+ (to, options) => {
8871
+ if (leavingLosesChanges()) {
8872
+ useSaveStatusStore.getState().actions.requestLeave({ to, options });
8873
+ return;
8874
+ }
8875
+ navigate(to, options);
8876
+ },
8877
+ [navigate]
8878
+ );
8879
+ }
8880
+ function useRunGuard(startRun) {
8881
+ const { saveToBackend } = useSaveWorkflow();
8882
+ const [confirmOpen, setConfirmOpen] = useState(false);
8883
+ const [preparing, setPreparing] = useState(false);
8884
+ const requestRun = useCallback(async () => {
8885
+ const preparation = runPreparation();
8886
+ if (preparation === "run") {
8887
+ startRun();
8888
+ return;
8889
+ }
8890
+ if (preparation === "save-first") {
8891
+ setPreparing(true);
8892
+ let saved = false;
8893
+ try {
8894
+ saved = await saveToBackend({ silent: true }) && savedEverythingBeforeLeaving();
8895
+ } finally {
8896
+ setPreparing(false);
8897
+ }
8898
+ if (saved) {
8899
+ startRun();
8900
+ return;
8901
+ }
8902
+ }
8903
+ setConfirmOpen(true);
8904
+ }, [saveToBackend, startRun]);
8905
+ const dialog = /* @__PURE__ */ jsx(
8906
+ UnsavedRunDialog,
8907
+ {
8908
+ open: confirmOpen,
8909
+ onOpenChange: setConfirmOpen,
8910
+ onRunSaved: () => {
8911
+ setConfirmOpen(false);
8912
+ startRun();
8913
+ },
8914
+ onSavedAndRunnable: () => {
8915
+ setConfirmOpen(false);
8916
+ startRun();
8917
+ }
8918
+ }
8919
+ );
8920
+ return { requestRun, preparing, dialog };
8921
+ }
8922
+ function UnsavedRunDialog({
8923
+ open,
8924
+ onOpenChange,
8925
+ onRunSaved,
8926
+ onSavedAndRunnable
8927
+ }) {
8928
+ const tr = useTr();
8929
+ const manualSave = useManualSave();
8930
+ const [version, dbId, status, codeBuildId] = useFlowStore(
8931
+ useShallow((s) => [
8932
+ s.workflow.version,
8933
+ s.workflow.dbId,
8934
+ s.workflow.status,
8935
+ s.workflow.codeBuildId
8936
+ ])
8937
+ );
8938
+ const [saving, setSaving] = useState(false);
8939
+ const hasSavedVersion = !!dbId;
8940
+ const runsAfterSave = !hasSavedVersion || savesInPlace({ dbId, status, codeBuildId });
8941
+ const save = useCallback(async () => {
8942
+ setSaving(true);
8943
+ try {
8944
+ const saved = await manualSave();
8945
+ if (!saved) return;
8946
+ if (!runsAfterSave) {
8947
+ onOpenChange(false);
8948
+ return;
8949
+ }
8950
+ if (savedEverythingBeforeLeaving()) onSavedAndRunnable();
8951
+ } finally {
8952
+ setSaving(false);
8953
+ }
8954
+ }, [runsAfterSave, manualSave, onOpenChange, onSavedAndRunnable]);
8955
+ return /* @__PURE__ */ jsx(
8956
+ AlertDialog,
8957
+ {
8958
+ open,
8959
+ onOpenChange: (next) => {
8960
+ if (!next && saving) return;
8961
+ onOpenChange(next);
8962
+ },
8963
+ children: /* @__PURE__ */ jsxs(AlertDialogContent, { "data-testid": "fluidgrids-unsaved-run-dialog", children: [
8964
+ /* @__PURE__ */ jsxs(AlertDialogHeader, { children: [
8965
+ /* @__PURE__ */ jsx(AlertDialogTitle, { children: tr(
8966
+ "fluidgrids.builder.runGuard.title",
8967
+ "Run without your unsaved changes?"
8968
+ ) }),
8969
+ /* @__PURE__ */ jsxs(AlertDialogDescription, { children: [
8970
+ hasSavedVersion ? tr(
8971
+ "fluidgrids.builder.runGuard.description",
8972
+ "This workflow has changes that are not saved. A run uses the saved version {{version}}, without them.",
8973
+ { version }
8974
+ ) : tr(
8975
+ "fluidgrids.builder.runGuard.descriptionNotSaved",
8976
+ "This workflow has not been saved yet. Save it before you run it."
8977
+ ),
8978
+ " ",
8979
+ runsAfterSave ? null : tr(
8980
+ "fluidgrids.builder.runGuard.newVersionHint",
8981
+ "Saving keeps your changes as a new version and opens it; run that version."
8982
+ )
8983
+ ] })
8984
+ ] }),
8985
+ /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [
8986
+ /* @__PURE__ */ jsx(AlertDialogCancel, { disabled: saving, children: tr("fluidgrids.builder.runGuard.cancelButton", "Cancel") }),
8987
+ hasSavedVersion && /* @__PURE__ */ jsx(
8988
+ Button$1,
8989
+ {
8990
+ "data-agent": "confirm",
8991
+ variant: "outline",
8992
+ onClick: onRunSaved,
8993
+ disabled: saving,
8994
+ children: tr(
8995
+ "fluidgrids.builder.runGuard.runSavedButton",
8996
+ "Run saved version"
8997
+ )
8998
+ }
8999
+ ),
9000
+ /* @__PURE__ */ jsx(
9001
+ Button$1,
9002
+ {
9003
+ "data-agent": "confirm",
9004
+ onClick: () => void save(),
9005
+ disabled: saving,
9006
+ children: saving ? tr("fluidgrids.builder.runGuard.savingButton", "Saving\u2026") : runsAfterSave ? tr(
9007
+ "fluidgrids.builder.runGuard.saveAndRunButton",
9008
+ "Save and run"
9009
+ ) : tr(
9010
+ "fluidgrids.builder.runGuard.saveAsNewVersionButton",
9011
+ "Save as new version"
9012
+ )
9013
+ }
9014
+ )
9015
+ ] })
9016
+ ] })
9017
+ }
9018
+ );
9019
+ }
8677
9020
  function buildOperationSeed(type, operationName, existingData) {
8678
9021
  const config = NODE_CONFIGS.find((c) => c.type === type);
8679
9022
  if (!config) return null;
@@ -9266,6 +9609,7 @@ var getNodeMetadata = (value) => {
9266
9609
  console.error("[NodeComponent] Execute step error:", error);
9267
9610
  });
9268
9611
  }, [executeStep, id]);
9612
+ const stepGuard = useRunGuard(handleExecuteStep);
9269
9613
  const missingCredentials = useMemo(() => {
9270
9614
  const visibleAdapters = getVisibleConnectionAdapters(
9271
9615
  String(value?.type ?? ""),
@@ -9345,14 +9689,14 @@ var getNodeMetadata = (value) => {
9345
9689
  executionStatus,
9346
9690
  itemCount,
9347
9691
  isTrigger,
9348
- isExecuting: isThisNodeExecuting,
9692
+ isExecuting: isThisNodeExecuting || stepGuard.preparing,
9349
9693
  inputHandles,
9350
9694
  outputHandles,
9351
9695
  isConnectable: typeof isConnectable === "boolean" ? isConnectable : void 0,
9352
9696
  onClick: handleCardClick,
9353
9697
  onDoubleClick: handleOpenNdv,
9354
9698
  onSettings: handleOpenNdv,
9355
- onExecute: handleExecuteStep,
9699
+ onExecute: () => void stepGuard.requestRun(),
9356
9700
  onDelete: readOnly ? void 0 : handleDeleteNode,
9357
9701
  infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
9358
9702
  disabled: isDisabled,
@@ -9369,7 +9713,8 @@ var getNodeMetadata = (value) => {
9369
9713
  nodeId: id,
9370
9714
  adapters: data?.nodeData?.nodeAdapters
9371
9715
  }
9372
- )
9716
+ ),
9717
+ stepGuard.dialog
9373
9718
  ] });
9374
9719
  }
9375
9720
  return /* @__PURE__ */ jsxs("div", { children: [
@@ -9384,9 +9729,9 @@ var getNodeMetadata = (value) => {
9384
9729
  itemCount,
9385
9730
  isTrigger,
9386
9731
  accent: roleAccent,
9387
- isExecuting: isThisNodeExecuting,
9732
+ isExecuting: isThisNodeExecuting || stepGuard.preparing,
9388
9733
  onSettings: handleOpenNdv,
9389
- onExecute: handleExecuteStep,
9734
+ onExecute: () => void stepGuard.requestRun(),
9390
9735
  onDelete: readOnly ? void 0 : handleDeleteNode,
9391
9736
  infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
9392
9737
  disabled: isDisabled,
@@ -9441,6 +9786,7 @@ var getNodeMetadata = (value) => {
9441
9786
  ]
9442
9787
  }
9443
9788
  ),
9789
+ stepGuard.dialog,
9444
9790
  /* @__PURE__ */ jsx(
9445
9791
  AdapterConnectors,
9446
9792
  {
@@ -9791,4 +10137,4 @@ function createNodeWithDefaultData(type, data) {
9791
10137
  return Object.assign(createNodeData(type, defaultData), data);
9792
10138
  }
9793
10139
 
9794
- export { AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, CODE_WORKFLOW_NODE_TYPE, ConnectionFormDialog, ConnectionSelector, DURABLE_FUNCTION_NODE_TYPES, EDIT_SESSION_ID, ExpressionEditor, FLUIDGRIDS_FLAGS, FLUIDGRIDS_FLAG_DEFAULTS, FluidGridsContext, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, PHASE_C_FLAGS_OFF, RUNS_QUOTA_NAME, RUN_CONTROL_NODE_TYPES, STICKY_NOTE_TYPE, WORKFLOWS_QUOTA_NAME, WORKFLOW_TEST_NODE_TYPES, bannerOf, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, builderPathOf, canAutosave, canRenderOperationPanel, canSignalRun, changedSourceFiles, childRunIdOf, classifyCreateRefusal, clearCodeWorkflowDefinitionCache, codeBuildIdOf, components_default, createConfiguredNode, createThenOpen, declaredOutputFields, declaredSignals, defaultSourcePath, describeOperationError, diagnosticsByPath, editStateOf, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, fieldsFromIO, fieldsFromValue, filterPaletteNodes, findQuotaRefusal, findSaveConflict, forgetSessionForReload, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, interfaceFields, interfaceHandlers, isDurableFunctionNodeType, isEditableSourcePath, isForbiddenError, isImageIcon, isLocked, isNodeConfigsInitialized, isNodeTrigger, isNodeTypeHiddenFromPalette, isParamVisible, isQuotaExhaustedFailure, isRunControlNodeType, isTriggerOperation, leaseCallQueue, leaveNeedsConfirmation, listCustomBlocks, liveInternalOperations, loadDefinitionJson, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, parseRawSignalPayload, pathToExpression, payloadFromCardValues, phaseAfterAcquire, phaseAfterTakeOver, projectLanguage, readCodeWorkflowState, readDisplayOptions, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, releasesOnClose, rememberOwnStatusChange, rememberRevision, rememberSessionForReload, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolvePhaseCFlags, resolveUiSpec, runPreparationOf, runSignalTargets, runTriggerFromMode, saveIndicatorOf, savesInPlace, sessionBeforeReload, shouldReleaseForIdle, signalPayloadCard, snapshotForSave, sourceLanguageOf, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, tickAction, useAgentDefinitionList, useAgentDefinitions, useCodeWorkflowInterface, useConnection, useConnections, useConnectionsByProvider, useContinuousOptimisationEnabled, useCreateConnection, useDurableFunctionNodesEnabled, useDurableParityEnabled, useEditLeaseLocked, useEditLeaseStore, useFlowStore, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsFlag, useInitiateOAuth, useInsertNode, useIsValidConnection, useNodeExecution, useNodeRegistryRevision, usePaletteGates, usePhaseCFlags, useProviders, useSaveStatusStore, useSaveWorkflow, useSelfHostedWorkersEnabled, useWorkflowTestsEnabled, workflowFingerprint };
10140
+ export { AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, CODE_WORKFLOW_NODE_TYPE, ConnectionFormDialog, ConnectionSelector, DURABLE_FUNCTION_NODE_TYPES, EDIT_SESSION_ID, ExpressionEditor, FLUIDGRIDS_FLAGS, FLUIDGRIDS_FLAG_DEFAULTS, FluidGridsContext, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, PHASE_C_FLAGS_OFF, RUNS_QUOTA_NAME, RUN_CONTROL_NODE_TYPES, STICKY_NOTE_TYPE, WORKFLOWS_QUOTA_NAME, WORKFLOW_TEST_NODE_TYPES, autosaveAllowedFor, bannerOf, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, builderPathOf, canAutosave, canRenderOperationPanel, canSignalRun, changedSourceFiles, childRunIdOf, classifyCreateRefusal, clearCodeWorkflowDefinitionCache, codeBuildIdOf, components_default, createConfiguredNode, createThenOpen, declaredOutputFields, declaredSignals, defaultSourcePath, departingSave, describeOperationError, diagnosticsByPath, editStateFor, editingLeaseLocked, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, fieldsFromIO, fieldsFromValue, filterPaletteNodes, findQuotaRefusal, findSaveConflict, forgetSessionForReload, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, interfaceFields, interfaceHandlers, isDurableFunctionNodeType, isEditableSourcePath, isFlowComplete, isForbiddenError, isImageIcon, isLocked, isNodeConfigsInitialized, isNodeTypeHiddenFromPalette, isParamVisible, isQuotaExhaustedFailure, isRunControlNodeType, isTriggerOperation, leaseCallQueue, leavingLosesChanges, listCustomBlocks, liveInternalOperations, loadDefinitionJson, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, parseRawSignalPayload, pathToExpression, payloadFromCardValues, phaseAfterAcquire, phaseAfterTakeOver, projectLanguage, readCodeWorkflowState, readDisplayOptions, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, releasesOnClose, rememberOwnStatusChange, rememberRevision, rememberSessionForReload, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolvePhaseCFlags, resolveUiSpec, runSignalTargets, runTriggerFromMode, saveIndicatorOf, savedEverythingBeforeLeaving, sessionBeforeReload, shouldReleaseForIdle, signalPayloadCard, sourceLanguageOf, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, tickAction, touchesSavedFields, useAgentDefinitionList, useAgentDefinitions, useCodeWorkflowInterface, useConnection, useConnections, useConnectionsByProvider, useContinuousOptimisationEnabled, useCreateConnection, useDurableFunctionNodesEnabled, useDurableParityEnabled, useEditLeaseLocked, useEditLeaseStore, useFlowStore, useFlowValidator, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsFlag, useGuardedNavigate, useInitiateOAuth, useInsertNode, useIsValidConnection, useManualSave, useNodeExecution, useNodeRegistryRevision, usePaletteGates, usePhaseCFlags, useProviders, useRunGuard, useSaveStatusStore, useSaveWorkflow, useSelfHostedWorkersEnabled, useWorkflowTestsEnabled, watchLeavingLosesChanges, workflowFingerprint };
@@ -1,22 +1,22 @@
1
1
  import './chunk-AD3BXTJS.js';
2
- export { ExecutionsListPage } from './chunk-B2DNUVKW.js';
3
- export { ExecutionDetailPage } from './chunk-P6IRD5SA.js';
4
- import './chunk-UETHT3KG.js';
5
- import './chunk-ZTJX5ONT.js';
6
- import './chunk-QAXP5HON.js';
7
- import './chunk-A4XNCGWT.js';
8
- import './chunk-DLKGWGRN.js';
2
+ export { ExecutionsListPage } from './chunk-BP6YPKNK.js';
3
+ export { ExecutionDetailPage } from './chunk-RFOKJE3A.js';
4
+ import './chunk-G2FPOWN5.js';
5
+ import './chunk-K6HD5GC7.js';
6
+ import './chunk-6WPW42TX.js';
7
+ import './chunk-H2KIJEYM.js';
8
+ import './chunk-BVCMAGLJ.js';
9
9
  import './chunk-5ERAJC2I.js';
10
- import './chunk-3Y4266JL.js';
10
+ import './chunk-OBWB73Y7.js';
11
11
  import './chunk-JDLQ6QIB.js';
12
12
  import './chunk-PC3CICOW.js';
13
13
  import './chunk-Y53CVZVV.js';
14
14
  import './chunk-FNZZ5JJL.js';
15
- import './chunk-EFOJEQDS.js';
15
+ import './chunk-QXACKASD.js';
16
16
  import './chunk-PJAWNFJV.js';
17
17
  import './chunk-AOLY5INN.js';
18
18
  import './chunk-4VJ3MDOV.js';
19
- import './chunk-23LYGZ27.js';
19
+ import './chunk-YC76QFWZ.js';
20
20
  import './chunk-ZUVFD5KV.js';
21
21
  import './chunk-JL7CASN5.js';
22
22
  import './chunk-OCJTTHTS.js';
package/dist/history.js CHANGED
@@ -1,10 +1,10 @@
1
- export { HistoryPage } from './chunk-XNVYPEBO.js';
2
- import './chunk-PBCBDSVA.js';
1
+ export { HistoryPage } from './chunk-LVTOWRAM.js';
2
+ import './chunk-N6XYVO7N.js';
3
3
  import './chunk-FNZZ5JJL.js';
4
- import './chunk-EFOJEQDS.js';
4
+ import './chunk-QXACKASD.js';
5
5
  import './chunk-PJAWNFJV.js';
6
6
  import './chunk-4VJ3MDOV.js';
7
- import './chunk-23LYGZ27.js';
7
+ import './chunk-YC76QFWZ.js';
8
8
  import './chunk-ZUVFD5KV.js';
9
9
  import './chunk-JL7CASN5.js';
10
10
  import './chunk-OCJTTHTS.js';