feat(editor): Improve UX of embedded NDV experiment (no-changelog) (#17515)

This commit is contained in:
Suguru Inoue
2025-07-23 14:04:16 +02:00
committed by GitHub
parent 4b2be26379
commit 7330e2d0af
16 changed files with 223 additions and 89 deletions

View File

@@ -160,6 +160,7 @@ const {
nodesSelectionActive,
userSelectionRect,
setViewport,
setCenter,
onEdgeMouseLeave,
onEdgeMouseEnter,
onEdgeMouseMove,
@@ -285,6 +286,18 @@ function selectUpstreamNodes(id: string) {
onSelectNodes({ ids: [...upstreamNodes.map((node) => node.id), id] });
}
function onToggleZoomMode() {
experimentalNdvStore.toggleZoomMode({
canvasViewport: viewport.value,
canvasDimensions: dimensions.value,
selectedNodes: selectedNodes.value,
setViewport,
fitView,
zoomTo,
setCenter,
});
}
const keyMap = computed(() => {
const readOnlyKeymap: KeyMap = {
ctrl_shift_o: emitWithLastSelectedNode((id) => emit('open:sub-workflow', id)),
@@ -308,6 +321,7 @@ const keyMap = computed(() => {
l: () => emit('update:logs-open'),
i: () => emit('update:logs:input-open'),
o: () => emit('update:logs:output-open'),
z: onToggleZoomMode,
};
if (props.readOnly) return readOnlyKeymap;
@@ -431,7 +445,7 @@ function onSelectNodes({ ids, panIntoView }: CanvasEventBusEvents['nodes:select'
const newViewport = updateViewportToContainNodes(viewport.value, dimensions.value, nodes, 100);
void setViewport(newViewport, { duration: 200 });
void setViewport(newViewport, { duration: 200, interpolate: 'linear' });
}
}
@@ -455,6 +469,18 @@ function onUpdateNodeOutputs(id: string) {
emit('update:node:outputs', id);
}
function onFocusNode(id: string) {
const node = vueFlow.nodeLookup.value.get(id);
if (node) {
experimentalNdvStore.focusNode(node, {
canvasViewport: viewport.value,
canvasDimensions: dimensions.value,
setCenter,
});
}
}
/**
* Connections / Edges
*/
@@ -896,7 +922,6 @@ provide(CanvasKey, {
:event-bus="eventBus"
:hovered="nodesHoveredById[nodeProps.id]"
:nearby-hovered="nodeProps.id === hoveredTriggerNode.id.value"
:is-experimental-ndv-active="isExperimentalNdvActive"
@delete="onDeleteNode"
@run="onRunNode"
@select="onSelectNode"
@@ -909,6 +934,7 @@ provide(CanvasKey, {
@update:outputs="onUpdateNodeOutputs"
@move="onUpdateNodePosition"
@add="onClickNodeAdd"
@focus="onFocusNode"
>
<template v-if="$slots.nodeToolbar" #toolbar="toolbarProps">
<slot name="nodeToolbar" v-bind="toolbarProps" />
@@ -972,6 +998,7 @@ provide(CanvasKey, {
@zoom-out="onZoomOut"
@reset-zoom="onResetZoom"
@tidy-up="onTidyUp({ source: 'canvas-button' })"
@toggle-zoom-mode="onToggleZoomMode"
/>
<Suspense>
@@ -1004,7 +1031,7 @@ provide(CanvasKey, {
}
&.isExperimentalNdvActive {
--canvas-zoom-compensation-factor: 0.67;
--canvas-zoom-compensation-factor: 0.5;
}
}
</style>