Graduation
/
ui
/node_modules
/@xyflow
/svelte
/dist
/lib
/container
/NodeRenderer
/NodeRenderer.svelte
<script>import { onDestroy } from 'svelte'; | |
import { nodeHasDimensions } from '@xyflow/system'; | |
import { NodeWrapper } from '../../components/NodeWrapper'; | |
import { useStore } from '../../store'; | |
export let nodeClickDistance = 0; | |
const { visibleNodes, nodesDraggable, nodesConnectable, elementsSelectable, updateNodeInternals, parentLookup } = useStore(); | |
const resizeObserver = typeof ResizeObserver === 'undefined' | |
? null | |
: new ResizeObserver((entries) => { | |
const updates = new Map(); | |
entries.forEach((entry) => { | |
const id = entry.target.getAttribute('data-id'); | |
updates.set(id, { | |
id, | |
nodeElement: entry.target, | |
force: true | |
}); | |
}); | |
updateNodeInternals(updates); | |
}); | |
onDestroy(() => { | |
resizeObserver?.disconnect(); | |
}); | |
</script> | |
<div class="svelte-flow__nodes"> | |
{#each $visibleNodes as node (node.id)} | |
<NodeWrapper | |
{node} | |
id={node.id} | |
data={node.data} | |
selected={!!node.selected} | |
hidden={!!node.hidden} | |
draggable={!!(node.draggable || ($nodesDraggable && typeof node.draggable === 'undefined'))} | |
selectable={!!( | |
node.selectable || | |
($elementsSelectable && typeof node.selectable === 'undefined') | |
)} | |
connectable={!!( | |
node.connectable || | |
($nodesConnectable && typeof node.connectable === 'undefined') | |
)} | |
deletable={node.deletable ?? true} | |
positionX={node.internals.positionAbsolute.x} | |
positionY={node.internals.positionAbsolute.y} | |
isParent={$parentLookup.has(node.id)} | |
style={node.style} | |
class={node.class} | |
type={node.type ?? 'default'} | |
sourcePosition={node.sourcePosition} | |
targetPosition={node.targetPosition} | |
dragging={node.dragging} | |
zIndex={node.internals.z ?? 0} | |
dragHandle={node.dragHandle} | |
initialized={nodeHasDimensions(node)} | |
width={node.width} | |
height={node.height} | |
initialWidth={node.initialWidth} | |
initialHeight={node.initialHeight} | |
measuredWidth={node.measured.width} | |
measuredHeight={node.measured.height} | |
parentId={node.parentId} | |
{resizeObserver} | |
{nodeClickDistance} | |
on:nodeclick | |
on:nodemouseenter | |
on:nodemousemove | |
on:nodemouseleave | |
on:nodedrag | |
on:nodedragstart | |
on:nodedragstop | |
on:nodecontextmenu | |
/> | |
{/each} | |
</div> | |
<style> | |
.svelte-flow__nodes { | |
width: 100%; | |
height: 100%; | |
position: absolute; | |
left: 0; | |
top: 0; | |
} | |
</style> | |