@oomol-lab/open-flow 0.1.0-beta.90 → 0.1.0-beta.91

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 (37) hide show
  1. package/dist/browser/{FlowCanvas-C4iuvVKB.js → FlowCanvas-CZEphIhX.js} +169 -2324
  2. package/dist/browser/{createResourceDialog-BstGO0m4.js → createResourceDialog-CJbZa2gA.js} +2 -2
  3. package/dist/browser/{dialog-Bi-MVTGj.js → dialog-E1WkapJU.js} +10 -2
  4. package/dist/browser/{exportPng-DMsB9ku_.js → exportPng-c4or5th8.js} +2 -2
  5. package/dist/browser/{flowChanges-SKYJBr6X.js → flowChanges-DsLZdENA.js} +20 -37
  6. package/dist/browser/{flowWorkspace-4UHRaHcz.js → flowWorkspace-CxLQWUdj.js} +54 -19
  7. package/dist/browser/{markdownContent-B75ojl0E.js → markdownContent-BsdTdwBU.js} +1 -1
  8. package/dist/browser/preview.js +231 -68
  9. package/dist/browser/workbench.js +6 -6
  10. package/dist/browser/{workbenchSelect-CHOeceKA.js → workbenchSelect-BfQfMWuY.js} +1 -1
  11. package/dist/browser/{wrapLayout-DU5HG1qH.js → wrapLayout-ZOG4AikN.js} +2493 -200
  12. package/dist/command/index.js +58 -55
  13. package/dist/common/control-api-conformance.js +896 -8
  14. package/dist/common/control-api.js +896 -8
  15. package/dist/common/control-requests.js +17 -6
  16. package/dist/common/decision.js +10 -2
  17. package/dist/common/flow-authoring.js +896 -8
  18. package/dist/common/flow-change.js +896 -8
  19. package/dist/common/flow-encoding.js +896 -8
  20. package/dist/common/flow-semantics.js +10 -2
  21. package/dist/common/integration-trigger.js +10 -2
  22. package/dist/common/licenses.md +2 -0
  23. package/dist/common/mcp.js +896 -8
  24. package/dist/common/openapi.js +10 -2
  25. package/dist/common/poll-trigger.js +10 -2
  26. package/dist/common/provider-triggers.js +1 -1
  27. package/dist/common/scheduler.js +10 -2
  28. package/dist/common/webhook-trigger.js +890 -2
  29. package/dist/common/workflow.js +14 -3
  30. package/dist/render/browser/runtime.js +966 -59
  31. package/dist/render/node/index.js +792 -4
  32. package/package.json +1 -1
  33. package/src/control/common/authoringTools.ts +4 -2
  34. package/src/flow/common/schemaComparer.ts +12 -2
  35. package/src/json-schema-subset/checker/equals.ts +3 -0
  36. package/src/trigger/providers/catalog.generated.json +9 -1
  37. package/src/workflow/common/workflow.ts +4 -3
@@ -7002,9 +7002,24 @@ function hasRouteCrossings(routes) {
7002
7002
  //#region src/canvas/browser/base/routeLayout.ts
7003
7003
  var clearance = 16;
7004
7004
  var portOffset = 24;
7005
+ function componentIndex(sets) {
7006
+ return new Map(sets.flatMap((ids, index) => ids.map((id) => [id, index])));
7007
+ }
7005
7008
  /** Orthogonal channels around the measured cards, in primary/cross coordinates. */
7006
- function routeLayout(nodes, edges) {
7009
+ function routeLayout(nodes, edges, options = {}) {
7007
7010
  const byId = new Map(nodes.map((node) => [node.id, node]));
7011
+ const graph = new ie.Graph();
7012
+ for (const node of nodes) graph.setNode(node.id);
7013
+ for (const edge of edges) graph.setEdge(edge.source, edge.target);
7014
+ const components = componentIndex(ie.alg.components(graph));
7015
+ const cycles = componentIndex(ie.alg.tarjan(graph));
7016
+ const obstacles = nodes.map((node) => ({
7017
+ component: components.get(node.id),
7018
+ left: node.x - clearance,
7019
+ right: node.x + node.width + clearance,
7020
+ top: node.y - clearance,
7021
+ bottom: node.y + node.height + clearance
7022
+ }));
7008
7023
  const connections = edges.map((edge) => {
7009
7024
  const source = byId.get(edge.source);
7010
7025
  const target = byId.get(edge.target);
@@ -7017,11 +7032,15 @@ function routeLayout(nodes, edges) {
7017
7032
  y: target.y + (edge.targetOffset?.y ?? target.height / 2)
7018
7033
  };
7019
7034
  const offset = output.x < input.x ? Math.min(portOffset, (input.x - output.x) / 2) : portOffset;
7035
+ const feedback = input.x <= output.x && cycles.get(edge.source) === cycles.get(edge.target);
7020
7036
  return {
7021
7037
  id: edge.id,
7038
+ component: components.get(edge.source),
7022
7039
  source: output,
7023
7040
  target: input,
7024
7041
  returnSide: input.x <= output.x ? Math.sign(input.y - output.y) : 0,
7042
+ feedback,
7043
+ returnLane: void 0,
7025
7044
  start: {
7026
7045
  x: output.x + offset,
7027
7046
  y: output.y
@@ -7032,12 +7051,23 @@ function routeLayout(nodes, edges) {
7032
7051
  }
7033
7052
  };
7034
7053
  });
7035
- const obstacles = nodes.map((node) => ({
7036
- left: node.x - clearance,
7037
- right: node.x + node.width + clearance,
7038
- top: node.y - clearance,
7039
- bottom: node.y + node.height + clearance
7040
- }));
7054
+ const feedback = connections.filter((edge) => edge.feedback).toSorted((a, b) => a.source.x - a.target.x - (b.source.x - b.target.x));
7055
+ for (const [index, edge] of feedback.entries()) {
7056
+ const side = edge.source.y <= edge.target.y ? -1 : 1;
7057
+ const span = obstacles.filter((rect) => rect.component === edge.component && rect.right >= edge.end.x && rect.left <= edge.start.x);
7058
+ let lane = side < 0 ? Math.min(...span.map((rect) => rect.top)) : Math.max(...span.map((rect) => rect.bottom));
7059
+ let previousLane;
7060
+ do {
7061
+ previousLane = lane;
7062
+ for (const rect of obstacles) if (rect.right >= edge.end.x && rect.left <= edge.start.x && lane > rect.top && lane < rect.bottom) lane = side < 0 ? rect.top : rect.bottom;
7063
+ for (const other of feedback.slice(0, index)) {
7064
+ if (other.component !== edge.component || other.start.x < edge.end.x || other.end.x > edge.start.x) continue;
7065
+ if (side < 0 && other.returnLane <= lane) lane = other.returnLane - clearance;
7066
+ if (side > 0 && other.returnLane >= lane) lane = other.returnLane + clearance;
7067
+ }
7068
+ } while (lane !== previousLane);
7069
+ edge.returnLane = lane;
7070
+ }
7041
7071
  const routes = /* @__PURE__ */ new Map();
7042
7072
  const pending = connections.filter((edge) => {
7043
7073
  if (edge.start.x > edge.end.x) return true;
@@ -7069,7 +7099,11 @@ function routeLayout(nodes, edges) {
7069
7099
  });
7070
7100
  if (!pending.length) return routes;
7071
7101
  const xs = [.../* @__PURE__ */ new Set([...obstacles.flatMap((rect) => [rect.left, rect.right]), ...pending.flatMap((edge) => [edge.start.x, edge.end.x])])].toSorted((a, b) => a - b);
7072
- const ys = [.../* @__PURE__ */ new Set([...obstacles.flatMap((rect) => [rect.top, rect.bottom]), ...pending.flatMap((edge) => [edge.start.y, edge.end.y])])].toSorted((a, b) => a - b);
7102
+ const ys = [.../* @__PURE__ */ new Set([...obstacles.flatMap((rect) => [rect.top, rect.bottom]), ...pending.flatMap((edge) => edge.returnLane == null ? [edge.start.y, edge.end.y] : [
7103
+ edge.start.y,
7104
+ edge.end.y,
7105
+ edge.returnLane
7106
+ ])])].toSorted((a, b) => a - b);
7073
7107
  const xIndex = new Map(xs.map((value, index) => [value, index]));
7074
7108
  const yIndex = new Map(ys.map((value, index) => [value, index]));
7075
7109
  const columns = xs.length;
@@ -7119,7 +7153,9 @@ function routeLayout(nodes, edges) {
7119
7153
  ];
7120
7154
  for (const [index, next] of moves.entries()) {
7121
7155
  if (next < 0 || vertex === start && index === 0 || next === end && index === 0) continue;
7122
- if (edge.returnSide * (ys[Math.floor(next / columns)] - edge.start.y) < -1e-6) continue;
7156
+ if (edge.returnLane != null) {
7157
+ if (index === 0 && ys[y] !== edge.returnLane) continue;
7158
+ } else if (edge.returnSide * (ys[Math.floor(next / columns)] - edge.start.y) < -1e-6) continue;
7123
7159
  const axis = index < 2 ? 0 : 1;
7124
7160
  const state = next * 2 + axis;
7125
7161
  const length = Math.abs(xs[next % columns] - xs[x]) + Math.abs(ys[Math.floor(next / columns)] - ys[y]);
@@ -7134,7 +7170,10 @@ function routeLayout(nodes, edges) {
7134
7170
  });
7135
7171
  }
7136
7172
  }
7137
- if (finish < 0) throw new Error("Could not route the compact workflow connection.");
7173
+ if (finish < 0) {
7174
+ if (options.allowBlockedPorts) continue;
7175
+ throw new Error("Could not route the compact workflow connection.");
7176
+ }
7138
7177
  const points = [];
7139
7178
  for (let state = finish; state >= 0; state = previous[state]) {
7140
7179
  const vertex = Math.floor(state / 2);
@@ -13317,7 +13356,8 @@ var CanvasStore = class {
13317
13356
  constructor(model, editable, language, callbacks, options = {}) {
13318
13357
  this.canDeleteNodes = true;
13319
13358
  this.dispose = disposableStore();
13320
- this.connectionRoutes = this.dispose.add(val(/* @__PURE__ */ new Map()));
13359
+ this.exportRoutes = this.dispose.add(val(/* @__PURE__ */ new Map()));
13360
+ this.layoutRequest = this.dispose.add(val(0));
13321
13361
  this.ignoredNodeIds = this.dispose.add(val([]));
13322
13362
  this.ignoreNodes = (nodeIds, ignored) => {
13323
13363
  if (this.$.editable.value) this.#callbacks.onIgnoreNodes?.(nodeIds, ignored);
@@ -13344,16 +13384,27 @@ var CanvasStore = class {
13344
13384
  };
13345
13385
  this.disposed = false;
13346
13386
  this.layoutMeasurementAttempts = 0;
13387
+ this.initialLayoutPending = false;
13347
13388
  this.#modelDirection = "horizontal";
13348
13389
  this.pendingNodeDeletes = /* @__PURE__ */ new Set();
13349
13390
  this.pendingDisconnects = /* @__PURE__ */ new Map();
13350
13391
  this.#entries = /* @__PURE__ */ new Map();
13351
13392
  this.#modelPositions = /* @__PURE__ */ new Map();
13352
13393
  this.#selectedNodeIds = /* @__PURE__ */ new Set();
13394
+ this.requestLayout = () => {
13395
+ if (this.disposed) return;
13396
+ this.layoutComplete = false;
13397
+ this.layoutMeasurementAttempts = 0;
13398
+ this.initialLayoutPending = true;
13399
+ this.layoutRequest.set(this.layoutRequest.value + 1);
13400
+ };
13353
13401
  this.completeLayout = (availableWidth) => {
13354
13402
  if (this.disposed || this.layoutComplete) return true;
13355
13403
  const nodes = this.allLayoutNodes();
13356
- if (nodes.length === 0 && !this.$.changingDirection.value) return true;
13404
+ if (nodes.length === 0 && !this.$.changingDirection.value) {
13405
+ this.resolveInitialLayout(void 0);
13406
+ return true;
13407
+ }
13357
13408
  for (const node of nodes) {
13358
13409
  const measured = node.$.measured.value;
13359
13410
  if (!measured?.width || !measured.height) {
@@ -13361,6 +13412,7 @@ var CanvasStore = class {
13361
13412
  this.layoutMeasurementAttempts = 0;
13362
13413
  this.layoutComplete = true;
13363
13414
  this.#restoreDirection();
13415
+ this.resolveInitialLayout(void 0);
13364
13416
  return true;
13365
13417
  }
13366
13418
  }
@@ -13368,6 +13420,10 @@ var CanvasStore = class {
13368
13420
  this.applyPositions(positions);
13369
13421
  this.layoutMeasurementAttempts = 0;
13370
13422
  this.layoutComplete = true;
13423
+ this.resolveInitialLayout({
13424
+ direction: this.$.direction.value,
13425
+ positions
13426
+ });
13371
13427
  if (this.$.changingDirection.value) this.#saveDirection(positions);
13372
13428
  else this.#callbacks.onMoveNodes(positions);
13373
13429
  return "relayout";
@@ -13502,7 +13558,7 @@ var CanvasStore = class {
13502
13558
  const commentNodes = this.dispose.add(reactiveMap(null, { onDeleted: dispose }));
13503
13559
  const viewport = this.dispose.add(val(model.viewport, { equal: isSameViewport }));
13504
13560
  this.rfCommand = this.dispose.add(createRFCommand(nodes));
13505
- this.layoutComplete = !options.autoLayout;
13561
+ this.layoutComplete = true;
13506
13562
  this.#runStatus = this.dispose.add(val(model.runStatus == "running" ? FLOW_RUN_STATUS.Running : FLOW_RUN_STATUS.Idle));
13507
13563
  this.#connections = this.dispose.add(val([]));
13508
13564
  const edges = this.dispose.add(deriveEdges(this.#connections, nodes));
@@ -13539,8 +13595,14 @@ var CanvasStore = class {
13539
13595
  nodeMiniMapPhase: this.dispose.add(compute((get) => getNodeMinimap(get(nodes.$).size + get(commentNodes.$).size, get(viewport)?.zoom ?? 1)))
13540
13596
  };
13541
13597
  this.#syncModel(model);
13598
+ if (options.autoLayout) this.requestLayout();
13542
13599
  if (options.defaultDirection != null) this.changeDirection(options.defaultDirection);
13543
13600
  }
13601
+ resolveInitialLayout(layout) {
13602
+ if (!this.initialLayoutPending) return;
13603
+ this.initialLayoutPending = false;
13604
+ this.#callbacks.onInitialLayout?.(layout);
13605
+ }
13544
13606
  async #saveDirection(positions) {
13545
13607
  try {
13546
13608
  if (!await this.#callbacks.onChangeDirection?.(this.$.direction.value, positions) && !this.disposed) this.#restoreDirection();
@@ -13646,7 +13708,7 @@ var CanvasStore = class {
13646
13708
  edges
13647
13709
  }, insets, aspectRatio);
13648
13710
  this.applyPositions(result.positions);
13649
- this.connectionRoutes.set(result.routes);
13711
+ this.exportRoutes.set(result.routes);
13650
13712
  return result.bounds;
13651
13713
  }
13652
13714
  doRemoveNodes(nodes) {
@@ -33556,6 +33618,70 @@ function roundedConnectionPath(input) {
33556
33618
  return `${path} L ${end.x} ${end.y}`;
33557
33619
  }
33558
33620
  //#endregion
33621
+ //#region src/canvas/browser/graph/Edges/ConnectionRoutes.tsx
33622
+ var emptyRoutes = /* @__PURE__ */ new Map();
33623
+ var emptyNodes = [];
33624
+ var emptyEdges = [];
33625
+ var ConnectionRoutesContext = createContext(emptyRoutes);
33626
+ function inactiveNodes() {
33627
+ return emptyNodes;
33628
+ }
33629
+ function measuredNodes(state) {
33630
+ return [...state.nodeLookup.values()].flatMap((node) => node.hidden || !node.measured.width || !node.measured.height ? [] : [{
33631
+ id: node.id,
33632
+ ...layoutAxes(node.internals.positionAbsolute, "vertical"),
33633
+ width: node.measured.height,
33634
+ height: node.measured.width,
33635
+ column: 0,
33636
+ handles: node.internals.handleBounds
33637
+ }]);
33638
+ }
33639
+ function sameNodes(a, b) {
33640
+ return a.length === b.length && a.every((node, index) => shallowPlainObjectEqual(node, b[index]));
33641
+ }
33642
+ /** Share obstacle-aware routes using React Flow's measured cards and actual ports. */
33643
+ function ConnectionRoutesProvider({ direction, routes$, children }) {
33644
+ const planned = useVal(routes$);
33645
+ const active = direction === "vertical" && !planned?.size;
33646
+ const nodes = useStore$1(active ? measuredNodes : inactiveNodes, sameNodes);
33647
+ const edges = useStore$1((state) => active ? state.edges : emptyEdges);
33648
+ const routes = useMemo(() => {
33649
+ if (planned?.size) return planned;
33650
+ if (direction !== "vertical") return emptyRoutes;
33651
+ const byId = new Map(nodes.map((node) => [node.id, node]));
33652
+ const connections = edges.flatMap((edge) => {
33653
+ const source = byId.get(edge.source);
33654
+ const target = byId.get(edge.target);
33655
+ const output = source?.handles?.source?.find((handle) => edge.sourceHandle == null || handle.id === edge.sourceHandle);
33656
+ const input = target?.handles?.target?.find((handle) => edge.targetHandle == null || handle.id === edge.targetHandle);
33657
+ if (edge.hidden || !source || !target || output?.position !== Position$1.Bottom || input?.position !== Position$1.Top) return [];
33658
+ return [{
33659
+ id: edge.id,
33660
+ source: edge.source,
33661
+ target: edge.target,
33662
+ sourceOffset: {
33663
+ x: output.y + output.height,
33664
+ y: output.x + output.width / 2
33665
+ },
33666
+ targetOffset: {
33667
+ x: input.y,
33668
+ y: input.x + input.width / 2
33669
+ }
33670
+ }];
33671
+ });
33672
+ return new Map([...routeLayout(nodes, connections, { allowBlockedPorts: true })].map(([id, points]) => [id, points.map((point) => layoutAxes(point, "vertical"))]));
33673
+ }, [
33674
+ direction,
33675
+ nodes,
33676
+ edges,
33677
+ planned
33678
+ ]);
33679
+ return /* @__PURE__ */ jsx(ConnectionRoutesContext.Provider, {
33680
+ value: routes,
33681
+ children
33682
+ });
33683
+ }
33684
+ //#endregion
33559
33685
  //#region src/canvas/browser/graph/Edges/EdgeGradient.tsx
33560
33686
  function EdgeGradient({ id, sourceX, sourceY, targetX, targetY, sourceColor, targetColor }) {
33561
33687
  return /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", {
@@ -33582,7 +33708,7 @@ function BasicEdge(props) {
33582
33708
  const error = useVal(edgeStore?.$.error);
33583
33709
  const canvasStore = useCanvasStore();
33584
33710
  const scale = useVal(canvasStore.$.scale);
33585
- const routes = useVal(canvasStore.connectionRoutes);
33711
+ const routes = useContext(ConnectionRoutesContext);
33586
33712
  const gap = 3;
33587
33713
  const targetX = props.targetX + (props.targetPosition == Position$1.Left ? -3 : props.targetPosition == Position$1.Right ? gap : 0);
33588
33714
  const targetY = props.targetY + (props.targetPosition == Position$1.Top ? -3 : props.targetPosition == Position$1.Bottom ? gap : 0);
@@ -55640,9 +55766,13 @@ var ReactFlowContainer = (props) => {
55640
55766
  i18n: props.i18n,
55641
55767
  children: /* @__PURE__ */ jsx(TooltipProvider, {
55642
55768
  delay: 300,
55643
- children: /* @__PURE__ */ jsx(ReactFlowProvider, { children: /* @__PURE__ */ jsx(HandleContextProvider, {
55644
- Handle: Handle$1,
55645
- children: /* @__PURE__ */ jsx(ReactFlowContainerInner, { ...props })
55769
+ children: /* @__PURE__ */ jsx(ReactFlowProvider, { children: /* @__PURE__ */ jsx(ConnectionRoutesProvider, {
55770
+ direction: props.direction,
55771
+ routes$: props.connectionRoutes$,
55772
+ children: /* @__PURE__ */ jsx(HandleContextProvider, {
55773
+ Handle: Handle$1,
55774
+ children: /* @__PURE__ */ jsx(ReactFlowContainerInner, { ...props })
55775
+ })
55646
55776
  }) })
55647
55777
  })
55648
55778
  })
@@ -55894,7 +56024,11 @@ var ReactFlowContainerInner = (props) => {
55894
56024
  ]);
55895
56025
  useLayoutEffect(() => {
55896
56026
  setLayoutReady(props.layoutMotion !== false || props.onLayoutMeasured == null);
55897
- }, [props.layoutMotion, props.onLayoutMeasured]);
56027
+ }, [
56028
+ props.layoutMotion,
56029
+ props.onLayoutMeasured,
56030
+ props.layoutRequest
56031
+ ]);
55898
56032
  useEffect(() => {
55899
56033
  let active = true;
55900
56034
  let measurementFrame = 0;
@@ -55941,6 +56075,7 @@ var ReactFlowContainerInner = (props) => {
55941
56075
  onBeforeFitView,
55942
56076
  props.layoutMotion,
55943
56077
  props.onLayoutMeasured,
56078
+ props.layoutRequest,
55944
56079
  props.direction,
55945
56080
  rf,
55946
56081
  updateNodeInternals
@@ -56366,6 +56501,7 @@ function tooShort(from, to) {
56366
56501
  var FlowCanvas = ({ flowCanvasStore, annotationContext, onActivateSelection, onSelectionStart, onSelectionEnd, onInspectSelection, inspectorOpen = false, onRequestAddNode, cornerTools, cornerLeading, topLeftTools, bottomRightTools, toolbar, dark, dottedBackground, fitView, nodesDraggable, layoutMotion, className, addNodeRequest, addItemRequest, onInit, onMove, onMoveEnd, onNodeDragStop, onSelectionChange, isValidConnection, onDropAddItem }) => {
56367
56502
  const editable = useVal(flowCanvasStore.$.editable);
56368
56503
  const direction = useVal(flowCanvasStore.$.direction);
56504
+ const layoutRequest = useVal(flowCanvasStore.layoutRequest);
56369
56505
  const changingDirection = useVal(flowCanvasStore.$.changingDirection);
56370
56506
  const nodeMiniMapPhase = useVal(flowCanvasStore.$.nodeMiniMapPhase);
56371
56507
  useEffect(flowCanvasStore.setupForceDelete, []);
@@ -56399,12 +56535,14 @@ var FlowCanvas = ({ flowCanvasStore, annotationContext, onActivateSelection, onS
56399
56535
  fitView: fitView ?? !editable,
56400
56536
  fitViewOptions,
56401
56537
  layoutMotion,
56538
+ layoutRequest,
56402
56539
  nodeTypes: NODE_TYPES,
56403
56540
  edgeTypes: EDGE_TYPES,
56404
56541
  miniMapExpanded$: flowCanvasStore.$$.miniMapExpanded,
56405
56542
  interactiveMode$: flowCanvasStore.$$.interactiveMode,
56406
56543
  nodes$: flowCanvasStore.$.rfNodes,
56407
56544
  edges$: flowCanvasStore.$.rfEdges,
56545
+ connectionRoutes$: flowCanvasStore.exportRoutes,
56408
56546
  viewport$: flowCanvasStore.$$.viewport,
56409
56547
  onRequestAddNode,
56410
56548
  addNodeRequest,
@@ -56449,6 +56587,7 @@ function callbacksFromProps(props) {
56449
56587
  onChangeDirection: props.onChangeDirection,
56450
56588
  onAddNode: props.onAddNode,
56451
56589
  onMoveNodes: props.onMoveNodes,
56590
+ onInitialLayout: props.onInitialLayout,
56452
56591
  onChangeNodeContentHidden: props.onChangeNodeContentHidden,
56453
56592
  onChangeNodeWidth: props.onChangeNodeWidth,
56454
56593
  onChangeComment: props.onChangeComment,
@@ -56469,6 +56608,10 @@ function FlowCanvasView(props) {
56469
56608
  defaultMiniMapExpanded: props.defaultMiniMapExpanded
56470
56609
  }), [props.identity]);
56471
56610
  const previousStore = useRef(store);
56611
+ const previousLayoutRequest = useRef({
56612
+ store,
56613
+ requested: props.autoLayout
56614
+ });
56472
56615
  const propsRef = useRef(props);
56473
56616
  const selectedEdge = useRef();
56474
56617
  propsRef.current = props;
@@ -56536,6 +56679,14 @@ function FlowCanvasView(props) {
56536
56679
  props.selectedNodeIds,
56537
56680
  props.ignoredNodeIds
56538
56681
  ]);
56682
+ useLayoutEffect(() => {
56683
+ const previous = previousLayoutRequest.current;
56684
+ previousLayoutRequest.current = {
56685
+ store,
56686
+ requested: props.autoLayout
56687
+ };
56688
+ if (previous.store === store && !previous.requested && props.autoLayout) store.requestLayout();
56689
+ }, [store, props.autoLayout]);
56539
56690
  useEffect(() => {
56540
56691
  if (props.focusNodeRequest != null) {
56541
56692
  const reducedMotion = typeof window != "undefined" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
@@ -60475,6 +60626,7 @@ function schemaEqualsChecker(extendsContext) {
60475
60626
  if (value1 === null || value2 === null) return false;
60476
60627
  if (typeof value1 !== "object") return false;
60477
60628
  if (typeof value1 !== typeof value2) return false;
60629
+ if (extendsContext.isExtendsSchema(value1) || extendsContext.isExtendsSchema(value2)) return extendsContext.equals(value1, value2);
60478
60630
  if (isCompiledSchema(value1) && isCompiledSchema(value2)) return isCompiledSchemaEquals(value1, value2);
60479
60631
  return isObjectLikeEquals(value1, value2);
60480
60632
  }
@@ -61197,10 +61349,17 @@ var SingleSelectSchema = class SingleSelectSchema extends SpecialSchema {
61197
61349
  }
61198
61350
  constructor(id, value, context) {
61199
61351
  if (!SingleSelectSchema.isMatch(value)) throw new TypeError("Invalid single-select schema.");
61200
- super(id, value, context);
61352
+ const validator = new Validator(structuredClone(value), "7");
61353
+ super(id, { enum: value.enum.filter((item) => validator.validate(item).valid) }, context);
61201
61354
  }
61202
61355
  compareImpl(other) {
61203
- if (isStringLikeSchema(other)) return [ExpressionSingleResult.ContainedBy];
61356
+ if (this.value.enum.length == 0) return [(other instanceof SingleSelectSchema ? other.value.enum.length == 0 : isCompiledSchema(other) && getKind(other) === CompiledKind.Never) ? ExpressionSingleResult.Equals : ExpressionSingleResult.ContainedBy];
61357
+ if (isStringLikeSchema(other)) {
61358
+ const validator = new Validator(structuredClone(other), "7");
61359
+ const accepted = this.value.enum.filter((item) => validator.validate(item).valid).length;
61360
+ if (accepted == this.value.enum.length) return [ExpressionSingleResult.ContainedBy];
61361
+ return [accepted == 0 ? ExpressionSingleResult.Rejection : ExpressionSingleResult.Intersection];
61362
+ }
61204
61363
  if (other instanceof SingleSelectSchema) {
61205
61364
  const f = new Set(this.value.enum);
61206
61365
  let result = ExpressionSingleResult.Equals;
@@ -65461,7 +65620,10 @@ function workflowAgentTool(id, name, target, previous) {
65461
65620
  id,
65462
65621
  description: previous?.description ?? target.name,
65463
65622
  approval: previous?.approval ?? false,
65464
- inputs: capability.inputs.map((port) => Object.assign({}, port, { source: previous?.inputs.find((old) => old.handle == port.handle)?.source ?? { kind: "model" } }))
65623
+ inputs: capability.inputs.map((input) => {
65624
+ const { value: _value, ...port } = input;
65625
+ return Object.assign({}, port, { source: previous?.inputs.find((old) => old.handle == port.handle)?.source ?? { kind: "model" } });
65626
+ })
65465
65627
  };
65466
65628
  }
65467
65629
  //#endregion
@@ -66576,9 +66738,8 @@ function projectEdges(graph, nodeIds) {
66576
66738
  edges
66577
66739
  };
66578
66740
  }
66579
- function layoutNodes(nodeIds, dependencies, dependents) {
66741
+ function orderNodes(nodeIds, dependencies, dependents) {
66580
66742
  const indegree = new Map([...dependencies].map(([nodeId, sources]) => [nodeId, sources.size]));
66581
- const depth = /* @__PURE__ */ new Map();
66582
66743
  const ordered = [];
66583
66744
  const orderedIds = /* @__PURE__ */ new Set();
66584
66745
  const ready = [...indegree].filter(([, count]) => count == 0).map(([nodeId]) => nodeId).toSorted();
@@ -66586,23 +66747,14 @@ function layoutNodes(nodeIds, dependencies, dependents) {
66586
66747
  const nodeId = ready[cursor];
66587
66748
  ordered.push(nodeId);
66588
66749
  orderedIds.add(nodeId);
66589
- const nextDepth = (depth.get(nodeId) ?? 0) + 1;
66590
66750
  for (const targetId of [...dependents.get(nodeId)].toSorted()) {
66591
- depth.set(targetId, Math.max(depth.get(targetId) ?? 0, nextDepth));
66592
66751
  const count = indegree.get(targetId) - 1;
66593
66752
  indegree.set(targetId, count);
66594
66753
  if (count == 0) ready.push(targetId);
66595
66754
  }
66596
66755
  }
66597
- const cycleDepth = Math.max(0, ...depth.values()) + 1;
66598
- for (const nodeId of [...nodeIds].filter((candidate) => !orderedIds.has(candidate)).toSorted()) {
66599
- depth.set(nodeId, cycleDepth);
66600
- ordered.push(nodeId);
66601
- }
66602
- return {
66603
- depth,
66604
- ordered
66605
- };
66756
+ for (const nodeId of [...nodeIds].filter((candidate) => !orderedIds.has(candidate)).toSorted()) ordered.push(nodeId);
66757
+ return ordered;
66606
66758
  }
66607
66759
  function designerInputs(nodeId, node, ports, revision) {
66608
66760
  if (isTriggerNode(node)) return [];
@@ -66799,6 +66951,7 @@ function designerGraph(draft, presentation = {}, diagnostics = [], connectorActi
66799
66951
  const graph = revision == null ? void 0 : revision.graph();
66800
66952
  if (revision == null || graph == null) return {
66801
66953
  edges: [],
66954
+ needsLayout: false,
66802
66955
  nodes: [],
66803
66956
  viewport: {
66804
66957
  x: 0,
@@ -66812,7 +66965,7 @@ function designerGraph(draft, presentation = {}, diagnostics = [], connectorActi
66812
66965
  const nodeIds = new Set(entries.map(([nodeId]) => nodeId));
66813
66966
  const ports = new Map([...definitions].map(([nodeId, node]) => [nodeId, nodePorts(node, revision)]));
66814
66967
  const edgeProjection = projectEdges(graph, nodeIds);
66815
- const layout = layoutNodes(nodeIds, edgeProjection.dependencies, edgeProjection.dependents);
66968
+ const ordered = orderNodes(nodeIds, edgeProjection.dependencies, edgeProjection.dependents);
66816
66969
  const direction = savedDirection(presentation);
66817
66970
  const positions = savedPositions(presentation);
66818
66971
  const hiddenNodeContent = savedHiddenNodeContent(presentation);
@@ -66827,33 +66980,21 @@ function designerGraph(draft, presentation = {}, diagnostics = [], connectorActi
66827
66980
  runNodes: projectedRun.nodes,
66828
66981
  t
66829
66982
  };
66830
- const rows = /* @__PURE__ */ new Map();
66831
- const defaultNodes = layout.ordered.map((nodeId) => {
66832
- const column = layout.depth.get(nodeId) ?? 0;
66833
- const row = rows.get(column) ?? 0;
66834
- rows.set(column, row + 1);
66835
- return direction === "vertical" ? {
66836
- id: nodeId,
66837
- column,
66838
- x: 80 + row * 400,
66839
- y: 80 + column * 240,
66840
- width: 320,
66841
- height: 160
66842
- } : {
66983
+ const defaultNodes = ordered.every((nodeId) => positions[nodeId] != null) ? [] : graphLayout(ordered.map((nodeId) => {
66984
+ const { kind } = definitions.get(nodeId);
66985
+ return {
66843
66986
  id: nodeId,
66844
- column,
66845
- x: 80 + column * 500,
66846
- y: 80 + row * 240,
66847
- width: 420,
66848
- height: 240
66987
+ width: direction === "vertical" ? 320 : 420,
66988
+ height: direction === "vertical" ? 160 : 240,
66989
+ branchHandles: kind === "condition" || kind === "approval" || kind === "wait" ? [...ports.get(nodeId).outputs.keys()].map((handle) => "$branch:" + handle) : void 0
66849
66990
  };
66850
- });
66991
+ }), edgeProjection.edges, direction).nodes;
66851
66992
  const automaticPositions = direction === "horizontal" ? wrapLayout(defaultNodes) : Object.fromEntries(defaultNodes.map(({ id, x, y }) => [id, {
66852
66993
  x,
66853
66994
  y
66854
66995
  }]));
66855
66996
  const nodes = [];
66856
- for (const nodeId of layout.ordered) {
66997
+ for (const nodeId of ordered) {
66857
66998
  const position = positions[nodeId] ?? automaticPositions[nodeId];
66858
66999
  const resolved = definitions.get(nodeId);
66859
67000
  if (resolved.kind == "trigger") {
@@ -66881,6 +67022,7 @@ function designerGraph(draft, presentation = {}, diagnostics = [], connectorActi
66881
67022
  return {
66882
67023
  direction,
66883
67024
  edges: edgeProjection.edges,
67025
+ needsLayout: nodes.length > 0 && nodes.every((node) => positions[node.id] == null),
66884
67026
  nodes,
66885
67027
  ...projectedRun.status == null ? {} : { runStatus: projectedRun.status },
66886
67028
  viewport: savedViewport(presentation)
@@ -120445,6 +120587,15 @@ function changeRevisionCanvasSession(session, graphId, change) {
120445
120587
  const previous = session[graphId];
120446
120588
  let next;
120447
120589
  switch (change.kind) {
120590
+ case "initialize":
120591
+ next = {
120592
+ ...previous,
120593
+ initialLayout: previous?.initialLayout ?? {
120594
+ direction: change.direction,
120595
+ positions: change.positions
120596
+ }
120597
+ };
120598
+ break;
120448
120599
  case "move":
120449
120600
  next = {
120450
120601
  ...previous,
@@ -120579,19 +120730,32 @@ function RevisionCanvas({ draft, presentation, theme, interactiveMode$, defaultI
120579
120730
  return baseline.nodes.filter((node) => ids.has(node.id)).map((node) => node.id);
120580
120731
  });
120581
120732
  const session = sessions[graphId];
120733
+ const needsInitialLayout = baseline.needsLayout && session?.initialLayout == null;
120582
120734
  const model = useMemo(() => ({
120583
120735
  ...baseline,
120584
- direction: session?.direction ?? baseline.direction,
120736
+ direction: session?.direction ?? session?.initialLayout?.direction ?? baseline.direction,
120585
120737
  viewport: session?.viewport ?? baseline.viewport,
120586
120738
  nodes: baseline.nodes.map((node) => ({
120587
120739
  ...node,
120588
- position: session?.positions?.[node.id] ?? node.position
120740
+ position: session?.positions?.[node.id] ?? session?.initialLayout?.positions[node.id] ?? node.position
120589
120741
  }))
120590
120742
  }), [baseline, session]);
120591
- const layoutChanged = model.direction !== baseline.direction || baseline.nodes.some((node) => {
120743
+ const layoutChanged = model.direction !== (session?.initialLayout?.direction ?? baseline.direction) || baseline.nodes.some((node) => {
120592
120744
  const position = session?.positions?.[node.id];
120593
- return position != null && (position.x !== node.position.x || position.y !== node.position.y);
120745
+ const original = session?.initialLayout?.positions[node.id] ?? node.position;
120746
+ return position != null && (position.x !== original.x || position.y !== original.y);
120594
120747
  });
120748
+ const changeLayout = (positions, direction) => {
120749
+ const change = direction == null ? {
120750
+ kind: "move",
120751
+ positions
120752
+ } : {
120753
+ kind: "direction",
120754
+ positions,
120755
+ direction
120756
+ };
120757
+ setSessions((current) => changeRevisionCanvasSession(current, graphId, change));
120758
+ };
120595
120759
  const selection = selected.length === 1 ? revision.node(selected[0]) : void 0;
120596
120760
  const selectedNode = selected.length === 1 ? model.nodes.find((node) => node.id === selected[0]) : void 0;
120597
120761
  const panelTitle = selectedNode?.title ?? (selected.length > 1 ? t("inspector.multipleSelected", { count: selected.length }) : t("inspector.outline"));
@@ -120623,6 +120787,7 @@ function RevisionCanvas({ draft, presentation, theme, interactiveMode$, defaultI
120623
120787
  children: [/* @__PURE__ */ jsxs("div", {
120624
120788
  className: "revision-viewer-canvas",
120625
120789
  children: [/* @__PURE__ */ jsx(FlowCanvasView, {
120790
+ autoLayout: needsInitialLayout,
120626
120791
  identity: graphId,
120627
120792
  model,
120628
120793
  editable: false,
@@ -120640,16 +120805,14 @@ function RevisionCanvas({ draft, presentation, theme, interactiveMode$, defaultI
120640
120805
  selectedNodeIds: selected,
120641
120806
  ignoredNodeIds: [],
120642
120807
  focusNodeRequest: focus,
120643
- onMoveNodes: (positions) => setSessions((current) => changeRevisionCanvasSession(current, graphId, {
120644
- kind: "move",
120645
- positions
120808
+ onMoveNodes: changeLayout,
120809
+ onInitialLayout: (layout) => setSessions((current) => changeRevisionCanvasSession(current, graphId, {
120810
+ kind: "initialize",
120811
+ direction: layout?.direction ?? canvasDirection(baseline.direction),
120812
+ positions: layout?.positions ?? Object.fromEntries(baseline.nodes.map((node) => [node.id, node.position]))
120646
120813
  })),
120647
120814
  onChangeDirection: (direction, positions) => {
120648
- setSessions((current) => changeRevisionCanvasSession(current, graphId, {
120649
- kind: "direction",
120650
- direction,
120651
- positions
120652
- }));
120815
+ changeLayout(positions, direction);
120653
120816
  return true;
120654
120817
  },
120655
120818
  onMoveViewport: (viewport) => setSessions((current) => changeRevisionCanvasSession(current, graphId, {
@@ -1,9 +1,9 @@
1
- import { A as DropdownMenuItem, C as IconifyProvider, E as DropdownMenu, O as DropdownMenuContent, P as DropdownMenuSeparator, R as DropdownMenuTrigger, c as PopoverContent, f as PopoverTitle, ht as IconThemeContext, p as PopoverTrigger, pt as ProviderIconCacheContext, s as Popover, v as ContentIcon } from "./wrapLayout-DU5HG1qH.js";
1
+ import { A as DropdownMenuContent, B as DropdownMenuTrigger, I as DropdownMenuSeparator, M as DropdownMenuItem, O as DropdownMenu, T as IconifyProvider, _t as IconThemeContext, b as ContentIcon, h as PopoverTrigger, ht as ProviderIconCacheContext, l as Popover, m as PopoverTitle, u as PopoverContent } from "./wrapLayout-ZOG4AikN.js";
2
2
  import { a as derive, i as compute, l as val } from "./dist-bO8nvHFH.js";
3
3
  import { c as useLang, l as useTranslate, o as I18nProvider, u as useVal } from "./dist-BFmpkX4P.js";
4
4
  import { Cr as cn, i as TooltipTrigger, n as TooltipContent, t as Tooltip, xr as Button } from "./tooltip-BZ6tpqnr.js";
5
- import { Bt as schemaObject, C as upgradeManualTrigger, Dt as connectorProxyTask, M as mapConditionSources, N as nodeInputMappings, Rt as matchesSchema, S as resourceNameIssue, Yt as dequal, _ as applyFlowChanges, a as DialogFooter, bt as connectorProxyConfigSchema, d as Field, g as FlowChangeError, h as FieldLabel, hn as Input, i as DialogDescription, l as Icon, m as FieldGroup, o as DialogHeader, p as FieldError, r as DialogContent, s as DialogTitle, t as Dialog, u as Spinner, v as isTriggerNode, w as upgradeRevisionContent } from "./dialog-Bi-MVTGj.js";
6
- import { $ as resourceValue, $n as allConnectorConnectionsQuery, $t as WorkflowExportDialog, At as actionWithConnections, Bn as EmptyMedia, Br as ApiError, Bt as setNodeContentHidden, C as updateValue, Ct as flowResourceReferences, Et as diagnosticItems, Fn as InputGroupInput, Ft as removeComments, Gt as setCodeActions, Hn as Badge, Ht as setVerticalNodeWidth, In as Empty, It as restoreCanvasPresentation, J as scopedValue, Jt as setServiceConnections, K as combineSources, Kn as createI18n, Kt as setConnectorConnection, Ln as EmptyContent, Lt as setCanvasLayout, Mn as followWorkbenchLink, Mt as canvasPresentationChange, Nn as InputGroup, Nt as commentIds, Pn as InputGroupAddon, Pr as workflowCandidate, Pt as flowPresentation, Q as resourceData, Qn as randomId, Qt as WorkflowBundleSummary, Rn as EmptyDescription, Rr as invalidResponse, Rt as setComment, S as updateTriggerConfig, St as revisionView, Tt as deriveInspectorDiagnostics, U as addNodeIntent, Un as EventSourcesPage, Ut as repairNodeNames, Vn as EmptyTitle, Vr as controlErrorCode, Vt as setNodePositions, W as deriveAddNodeOptions, Wt as resetInputValues, X as CacheResource, Xn as WorkbenchClient, Xt as updateTriggerSchedule, Y as connectorActionPresentation, Yn as errorNotice, Yt as updateStartInputDefs, Zn as normalizeFlowQuery, Zt as dequal$1, _ as updateRequestParameters, _r as workflowBundleFromPreview, a as nameCreatedNodes, an as FlowTagChips, at as getActionsCache, b as updateTaskAdditionalInputs, br as workflowNameFromFile, c as setInputVariable, cr as normalizeTriggerOutputs, ct as getProvidersCache, d as updateCondition, en as WorkflowExportMenuItem, et as action, f as updateNodeDescription, fr as isJsonValue, ft as designerGraph, g as updateOutputPorts, gr as parseWorkflowImportFile, h as updateNodeSettings, hr as encodeWorkflowBundle, i as deleteSelection, in as FlowSettingsDialog, jn as useFlowQuery, jt as connectionCatalog, l as setTriggerConnection, lr as sampleErrorOutputs, lt as createPersistentCache, m as updateNodeName, mr as connectorActionMetadata, nn as IdTooltip, nt as proxyResponse, o as selectWebhookResponse, on as TagPicker, p as updateNodeIcon, pr as connection, qt as setInputSources, r as applyFlowChanges$1, rt as validateAction, s as setInputValue, st as getConnectionsCache, t as addNode, tn as useWorkflowExportAction, tr as decodeTriggerCatalog, tt as provider, u as setTriggerEventSource, ur as triggerOutputDefinitions, ut as createSessionCache, v as updateResolution, vr as encodeWorkflowFile, vt as providerIcon, w as updateWebhook, wt as Latest, x as updateTaskPorts, y as updateTask, yr as workflowFileName, yt as RunStore, zn as EmptyHeader, zr as record, zt as setFlowViewport } from "./flowChanges-SKYJBr6X.js";
5
+ import { Bt as schemaObject, C as upgradeManualTrigger, Dt as connectorProxyTask, M as mapConditionSources, N as nodeInputMappings, Rt as matchesSchema, S as resourceNameIssue, Yt as dequal, _ as applyFlowChanges, a as DialogFooter, bt as connectorProxyConfigSchema, d as Field, g as FlowChangeError, h as FieldLabel, hn as Input, i as DialogDescription, l as Icon, m as FieldGroup, o as DialogHeader, p as FieldError, r as DialogContent, s as DialogTitle, t as Dialog, u as Spinner, v as isTriggerNode, w as upgradeRevisionContent } from "./dialog-E1WkapJU.js";
6
+ import { $ as resourceValue, $n as allConnectorConnectionsQuery, $t as WorkflowExportDialog, At as actionWithConnections, Bn as EmptyMedia, Br as ApiError, Bt as setNodeContentHidden, C as updateValue, Ct as flowResourceReferences, Et as diagnosticItems, Fn as InputGroupInput, Ft as removeComments, Gt as setCodeActions, Hn as Badge, Ht as setVerticalNodeWidth, In as Empty, It as restoreCanvasPresentation, J as scopedValue, Jt as setServiceConnections, K as combineSources, Kn as createI18n, Kt as setConnectorConnection, Ln as EmptyContent, Lt as setCanvasLayout, Mn as followWorkbenchLink, Mt as canvasPresentationChange, Nn as InputGroup, Nt as commentIds, Pn as InputGroupAddon, Pr as workflowCandidate, Pt as flowPresentation, Q as resourceData, Qn as randomId, Qt as WorkflowBundleSummary, Rn as EmptyDescription, Rr as invalidResponse, Rt as setComment, S as updateTriggerConfig, St as revisionView, Tt as deriveInspectorDiagnostics, U as addNodeIntent, Un as EventSourcesPage, Ut as repairNodeNames, Vn as EmptyTitle, Vr as controlErrorCode, Vt as setNodePositions, W as deriveAddNodeOptions, Wt as resetInputValues, X as CacheResource, Xn as WorkbenchClient, Xt as updateTriggerSchedule, Y as connectorActionPresentation, Yn as errorNotice, Yt as updateStartInputDefs, Zn as normalizeFlowQuery, Zt as dequal$1, _ as updateRequestParameters, _r as workflowBundleFromPreview, a as nameCreatedNodes, an as FlowTagChips, at as getActionsCache, b as updateTaskAdditionalInputs, br as workflowNameFromFile, c as setInputVariable, cr as normalizeTriggerOutputs, ct as getProvidersCache, d as updateCondition, en as WorkflowExportMenuItem, et as action, f as updateNodeDescription, fr as isJsonValue, ft as designerGraph, g as updateOutputPorts, gr as parseWorkflowImportFile, h as updateNodeSettings, hr as encodeWorkflowBundle, i as deleteSelection, in as FlowSettingsDialog, jn as useFlowQuery, jt as connectionCatalog, l as setTriggerConnection, lr as sampleErrorOutputs, lt as createPersistentCache, m as updateNodeName, mr as connectorActionMetadata, nn as IdTooltip, nt as proxyResponse, o as selectWebhookResponse, on as TagPicker, p as updateNodeIcon, pr as connection, qt as setInputSources, r as applyFlowChanges$1, rt as validateAction, s as setInputValue, st as getConnectionsCache, t as addNode, tn as useWorkflowExportAction, tr as decodeTriggerCatalog, tt as provider, u as setTriggerEventSource, ur as triggerOutputDefinitions, ut as createSessionCache, v as updateResolution, vr as encodeWorkflowFile, vt as providerIcon, w as updateWebhook, wt as Latest, x as updateTaskPorts, y as updateTask, yr as workflowFileName, yt as RunStore, zn as EmptyHeader, zr as record, zt as setFlowViewport } from "./flowChanges-DsLZdENA.js";
7
7
  import { a as uiLanguages, i as uiLanguageNames, n as isUiLanguage, r as resolveUiLanguage, t as importedWorkflowName } from "./languages-gYzoQqCi.js";
8
8
  import { i as objectValue, n as isJsonValue$1, s as valueType, t as initialValue } from "./value-BbFQZZ_V.js";
9
9
  import { Suspense, forwardRef, lazy, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
@@ -520,7 +520,7 @@ function FlowDeletionDialog({ flow, workspace, container, busy, finalFocus, onCl
520
520
  }
521
521
  //#endregion
522
522
  //#region src/workbench/browser/runtime/shell/resourceBrowser.tsx
523
- var CreateResourceDialog = lazy(() => import("./createResourceDialog-BstGO0m4.js"));
523
+ var CreateResourceDialog = lazy(() => import("./createResourceDialog-CJbZa2gA.js"));
524
524
  var flowIdTooltipAlignOffset = 44;
525
525
  var renamePopoverAlignOffset = -12;
526
526
  function compactFlowId(flowId) {
@@ -7047,7 +7047,7 @@ var WorkbenchStore = class {
7047
7047
  async downloadPng(result) {
7048
7048
  const title = this.workspace.$.flow.value?.name ?? this.workspace.$.flowId.value ?? "Workflow";
7049
7049
  try {
7050
- const { downloadPng } = await import("./exportPng-DMsB9ku_.js");
7050
+ const { downloadPng } = await import("./exportPng-c4or5th8.js");
7051
7051
  downloadPng(result, title);
7052
7052
  if (!this.#disposed) this.#notice.set({
7053
7053
  kind: "success",
@@ -7314,7 +7314,7 @@ var WorkbenchStore = class {
7314
7314
  };
7315
7315
  //#endregion
7316
7316
  //#region src/workbench/browser/runtime/openFlowWorkbench.tsx
7317
- var FlowWorkspace = lazy(() => import("./flowWorkspace-4UHRaHcz.js"));
7317
+ var FlowWorkspace = lazy(() => import("./flowWorkspace-CxLQWUdj.js"));
7318
7318
  function OpenFlowSessionGate({ action, description, error, onSubmit, onTokenChange, pending = false, title, token, tokenLabel }) {
7319
7319
  const hasToken = token != null && tokenLabel != null && onTokenChange != null;
7320
7320
  const tokenValue = token ?? "";
@@ -1,5 +1,5 @@
1
1
  import { Cr as cn } from "./tooltip-BZ6tpqnr.js";
2
- import { $t as SelectGroup, Qt as SelectContent, Xt as Select, en as SelectItem, nn as SelectTrigger, rn as SelectValue } from "./dialog-Bi-MVTGj.js";
2
+ import { $t as SelectGroup, Qt as SelectContent, Xt as Select, en as SelectItem, nn as SelectTrigger, rn as SelectValue } from "./dialog-E1WkapJU.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/workbench/browser/runtime/shell/workbenchSelect.tsx
5
5
  function WorkbenchSelect({ ariaLabel, className, disabled = false, id, onValueChange, options, portalRoot, size, value, variant }) {