feat(svelte): add zIndexMode

This commit is contained in:
moklick
2025-12-01 12:11:19 +01:00
parent fe3bb90c54
commit 4eb42952f0
6 changed files with 37 additions and 9 deletions
@@ -692,5 +692,11 @@ export interface ReactFlowProps<NodeType extends Node = Node, EdgeType extends E
* Allows localization, customization of ARIA descriptions, control labels, minimap labels, and other UI strings. * Allows localization, customization of ARIA descriptions, control labels, minimap labels, and other UI strings.
*/ */
ariaLabelConfig?: Partial<AriaLabelConfig>; ariaLabelConfig?: Partial<AriaLabelConfig>;
/**
* Used to define how z-indexing is calculated for nodes and edges.
* 'auto' is for selections and sub flows, 'basic' for selections only, and 'manual' for no auto z-indexing.
*
* @default 'auto'
*/
zIndexMode?: ZIndexMode; zIndexMode?: ZIndexMode;
} }
@@ -96,6 +96,7 @@
ariaLabelConfig, ariaLabelConfig,
autoPanSpeed, autoPanSpeed,
panOnScrollSpeed, panOnScrollSpeed,
zIndexMode,
...divAttributes ...divAttributes
} = $derived(rest); } = $derived(rest);
/* eslint-enable @typescript-eslint/no-unused-vars */ /* eslint-enable @typescript-eslint/no-unused-vars */
@@ -21,7 +21,8 @@ import type {
OnReconnect, OnReconnect,
OnReconnectStart, OnReconnectStart,
OnReconnectEnd, OnReconnectEnd,
AriaLabelConfig AriaLabelConfig,
ZIndexMode
} from '@xyflow/system'; } from '@xyflow/system';
import type { import type {
@@ -500,4 +501,11 @@ export type SvelteFlowProps<
* Allows localization, customization of ARIA descriptions, control labels, minimap labels, and other UI strings. * Allows localization, customization of ARIA descriptions, control labels, minimap labels, and other UI strings.
*/ */
ariaLabelConfig?: Partial<AriaLabelConfig>; ariaLabelConfig?: Partial<AriaLabelConfig>;
/**
* Used to define how z-indexing is calculated for nodes and edges.
* 'auto' is for selections and sub flows, 'basic' for selections only, and 'manual' for no auto z-indexing.
*
* @default 'auto'
*/
zIndexMode?: ZIndexMode;
}; };
+5 -2
View File
@@ -62,7 +62,9 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
store.nodeLookup, store.nodeLookup,
store.parentLookup, store.parentLookup,
store.domNode, store.domNode,
store.nodeOrigin store.nodeOrigin,
store.nodeExtent,
store.zIndexMode
); );
if (!updatedInternals) { if (!updatedInternals) {
@@ -71,7 +73,8 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
updateAbsolutePositions(store.nodeLookup, store.parentLookup, { updateAbsolutePositions(store.nodeLookup, store.parentLookup, {
nodeOrigin: store.nodeOrigin, nodeOrigin: store.nodeOrigin,
nodeExtent: store.nodeExtent nodeExtent: store.nodeExtent,
zIndexMode: store.zIndexMode
}); });
if (store.fitViewQueued) { if (store.fitViewQueued) {
@@ -36,7 +36,8 @@ import {
type OnReconnect, type OnReconnect,
type OnReconnectStart, type OnReconnectStart,
type OnReconnectEnd, type OnReconnectEnd,
type AriaLabelConfig type AriaLabelConfig,
type ZIndexMode
} from '@xyflow/system'; } from '@xyflow/system';
import DefaultNode from '$lib/components/nodes/DefaultNode.svelte'; import DefaultNode from '$lib/components/nodes/DefaultNode.svelte';
@@ -116,13 +117,15 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
panZoom: PanZoomInstance | null = $state.raw(null); panZoom: PanZoomInstance | null = $state.raw(null);
width = $state.raw<number>(signals.width ?? 0); width = $state.raw<number>(signals.width ?? 0);
height = $state.raw<number>(signals.height ?? 0); height = $state.raw<number>(signals.height ?? 0);
zIndexMode = $state.raw<ZIndexMode>(signals.props.zIndexMode ?? 'auto');
nodesInitialized: boolean = $derived.by(() => { nodesInitialized: boolean = $derived.by(() => {
const nodesInitialized = adoptUserNodes(signals.nodes, this.nodeLookup, this.parentLookup, { const nodesInitialized = adoptUserNodes(signals.nodes, this.nodeLookup, this.parentLookup, {
nodeExtent: this.nodeExtent, nodeExtent: this.nodeExtent,
nodeOrigin: this.nodeOrigin, nodeOrigin: this.nodeOrigin,
elevateNodesOnSelect: signals.props.elevateNodesOnSelect ?? true, elevateNodesOnSelect: signals.props.elevateNodesOnSelect ?? true,
checkEquality: true checkEquality: true,
zIndexMode: this.zIndexMode
}); });
if (this.fitViewQueued && nodesInitialized) { if (this.fitViewQueued && nodesInitialized) {
@@ -226,7 +229,8 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
connectionMode, connectionMode,
onerror, onerror,
onlyRenderVisibleElements, onlyRenderVisibleElements,
defaultEdgeOptions defaultEdgeOptions,
zIndexMode
} = this; } = this;
let visibleNodes: Map<string, InternalNode<NodeType>>; let visibleNodes: Map<string, InternalNode<NodeType>>;
@@ -239,6 +243,7 @@ export function getInitialStore<NodeType extends Node = Node, EdgeType extends E
nodeLookup, nodeLookup,
connectionMode, connectionMode,
elevateEdgesOnSelect: signals.props.elevateEdgesOnSelect ?? true, elevateEdgesOnSelect: signals.props.elevateEdgesOnSelect ?? true,
zIndexMode,
onerror onerror
}; };
@@ -7,7 +7,8 @@ import {
isEdgeVisible, isEdgeVisible,
type NodeLookup, type NodeLookup,
type OnError, type OnError,
type Transform type Transform,
type ZIndexMode
} from '@xyflow/system'; } from '@xyflow/system';
export function getVisibleNodes<NodeType extends Node = Node>( export function getVisibleNodes<NodeType extends Node = Node>(
@@ -42,6 +43,7 @@ export interface EdgeLayoutAllOptions<NodeType extends Node = Node, EdgeType ext
transform: never; transform: never;
width: never; width: never;
height: never; height: never;
zIndexMode: never;
} }
export interface EdgeLayoutOnlyVisibleOptions< export interface EdgeLayoutOnlyVisibleOptions<
@@ -53,6 +55,7 @@ export interface EdgeLayoutOnlyVisibleOptions<
width: number; width: number;
height: number; height: number;
onlyRenderVisible: true; onlyRenderVisible: true;
zIndexMode: ZIndexMode;
} }
export type EdgeLayoutOptions<NodeType extends Node = Node, EdgeType extends Edge = Edge> = export type EdgeLayoutOptions<NodeType extends Node = Node, EdgeType extends Edge = Edge> =
@@ -70,7 +73,8 @@ export function getLayoutedEdges<NodeType extends Node = Node, EdgeType extends
connectionMode, connectionMode,
onerror, onerror,
onlyRenderVisible, onlyRenderVisible,
elevateEdgesOnSelect elevateEdgesOnSelect,
zIndexMode
} = options; } = options;
const layoutedEdges = new Map<string, EdgeLayouted<EdgeType>>(); const layoutedEdges = new Map<string, EdgeLayouted<EdgeType>>();
for (const edge of edges) { for (const edge of edges) {
@@ -134,7 +138,8 @@ export function getLayoutedEdges<NodeType extends Node = Node, EdgeType extends
zIndex: edge.zIndex ?? defaultEdgeOptions.zIndex, zIndex: edge.zIndex ?? defaultEdgeOptions.zIndex,
sourceNode, sourceNode,
targetNode, targetNode,
elevateOnSelect: elevateEdgesOnSelect elevateOnSelect: elevateEdgesOnSelect,
zIndexMode
}), }),
sourceNode, sourceNode,
targetNode, targetNode,