refactor(libs) add width, height and positionAbsolute props to NodeProps
This commit is contained in:
@@ -7,7 +7,7 @@ const sourceHandleStyleB: CSSProperties = {
|
|||||||
left: 'auto',
|
left: 'auto',
|
||||||
};
|
};
|
||||||
|
|
||||||
const CustomNode: FC<NodeProps> = ({ data, xPos, yPos }) => {
|
const CustomNode: FC<NodeProps> = ({ data, positionAbsolute }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Handle type="target" position={Position.Top} />
|
<Handle type="target" position={Position.Top} />
|
||||||
@@ -18,7 +18,7 @@ const CustomNode: FC<NodeProps> = ({ data, xPos, yPos }) => {
|
|||||||
<div>
|
<div>
|
||||||
Position:{' '}
|
Position:{' '}
|
||||||
<strong>
|
<strong>
|
||||||
{xPos.toFixed(2)},{yPos.toFixed(2)}
|
{positionAbsolute.x.toFixed(2)},{positionAbsolute.y.toFixed(2)}
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ const idStyle: CSSProperties = {
|
|||||||
left: 2,
|
left: 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
const DebugNode: FC<NodeProps> = ({ zIndex, xPos, yPos, id }) => {
|
const DebugNode: FC<NodeProps> = ({ zIndex, positionAbsolute, id }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Handle type="target" position={Position.Top} />
|
<Handle type="target" position={Position.Top} />
|
||||||
<div style={idStyle}>{id}</div>
|
<div style={idStyle}>{id}</div>
|
||||||
<div style={infoStyle}>
|
<div style={infoStyle}>
|
||||||
x:{Math.round(xPos || 0)} y:{Math.round(yPos || 0)} z:{zIndex}
|
x:{Math.round(positionAbsolute.x)} y:{Math.round(positionAbsolute.y)} z:{zIndex}
|
||||||
</div>
|
</div>
|
||||||
<Handle type="source" position={Position.Bottom} />
|
<Handle type="source" position={Position.Bottom} />
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Handle, Position, type NodeProps } from '@xyflow/svelte';
|
import { Handle, Position, type NodeProps, type XYPosition } from '@xyflow/svelte';
|
||||||
|
|
||||||
type $$Props = NodeProps;
|
type $$Props = NodeProps;
|
||||||
|
|
||||||
export let data: { label: string } = { label: 'Node' };
|
export let data: { label: string } = { label: 'Node' };
|
||||||
export let xPos: number = 0;
|
export let positionAbsolute: XYPosition = { x: 0, y: 0 };
|
||||||
export let yPos: number = 0;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="custom">
|
<div class="custom">
|
||||||
<div>{data.label}</div>
|
<div>{data.label}</div>
|
||||||
<div>{~~xPos}, {~~yPos}</div>
|
<div>{~~positionAbsolute.x}, {~~positionAbsolute.y}</div>
|
||||||
|
|
||||||
<Handle type="target" position={Position.Top} />
|
<Handle type="target" position={Position.Top} />
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,16 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Handle, Position, type NodeProps } from '@xyflow/svelte';
|
import { Handle, Position, type NodeProps, type XYPosition } from '@xyflow/svelte';
|
||||||
|
|
||||||
type $$Props = NodeProps;
|
type $$Props = NodeProps;
|
||||||
|
|
||||||
export let id: string;
|
export let id: string;
|
||||||
export let xPos: number = 0;
|
export let positionAbsolute: XYPosition = { x: 0, y: 0 };
|
||||||
export let yPos: number = 0;
|
|
||||||
export let zIndex: number = 0;
|
export let zIndex: number = 0;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Handle type="target" position={Position.Top} />
|
<Handle type="target" position={Position.Top} />
|
||||||
<div>{id}</div>
|
<div>{id}</div>
|
||||||
<div>
|
<div>
|
||||||
x:{Math.round(xPos || 0)} y:{Math.round(yPos || 0)} z:{zIndex}
|
x:{Math.round(positionAbsolute.x)} y:{Math.round(positionAbsolute.y)} z:{zIndex}
|
||||||
</div>
|
</div>
|
||||||
<Handle type="source" position={Position.Bottom} />
|
<Handle type="source" position={Position.Bottom} />
|
||||||
|
|
||||||
<style>
|
|
||||||
.custom {
|
|
||||||
background: #ffcc00;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
disableKeyboardA11y,
|
disableKeyboardA11y,
|
||||||
ariaLabel,
|
ariaLabel,
|
||||||
rfId,
|
rfId,
|
||||||
|
positionAbsolute,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
}: WrapNodeProps) => {
|
}: WrapNodeProps) => {
|
||||||
@@ -209,8 +210,9 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
id={id}
|
id={id}
|
||||||
data={data}
|
data={data}
|
||||||
type={type}
|
type={type}
|
||||||
xPos={xPos}
|
width={width}
|
||||||
yPos={yPos}
|
height={height}
|
||||||
|
positionAbsolute={positionAbsolute}
|
||||||
selected={selected}
|
selected={selected}
|
||||||
isConnectable={isConnectable}
|
isConnectable={isConnectable}
|
||||||
sourcePosition={sourcePosition}
|
sourcePosition={sourcePosition}
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ const NodeRenderer = (props: NodeRendererProps) => {
|
|||||||
yPos={posY}
|
yPos={posY}
|
||||||
xPosOrigin={posOrigin.x}
|
xPosOrigin={posOrigin.x}
|
||||||
yPosOrigin={posOrigin.y}
|
yPosOrigin={posOrigin.y}
|
||||||
|
positionAbsolute={clampedPosition || { x: 0, y: 0 }}
|
||||||
onClick={props.onNodeClick}
|
onClick={props.onNodeClick}
|
||||||
onMouseEnter={props.onNodeMouseEnter}
|
onMouseEnter={props.onNodeMouseEnter}
|
||||||
onMouseMove={props.onNodeMouseMove}
|
onMouseMove={props.onNodeMouseMove}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { CSSProperties, MouseEvent as ReactMouseEvent } from 'react';
|
import type { CSSProperties, MouseEvent as ReactMouseEvent } from 'react';
|
||||||
import type { NodeBase } from '@xyflow/system';
|
import type { NodeBase, XYPosition } from '@xyflow/system';
|
||||||
|
|
||||||
export type Node<NodeData = any, NodeType extends string | undefined = string | undefined> = NodeBase<
|
export type Node<NodeData = any, NodeType extends string | undefined = string | undefined> = NodeBase<
|
||||||
NodeData,
|
NodeData,
|
||||||
@@ -24,6 +24,7 @@ export type WrapNodeProps<NodeData = any> = Pick<
|
|||||||
yPos: number;
|
yPos: number;
|
||||||
xPosOrigin: number;
|
xPosOrigin: number;
|
||||||
yPosOrigin: number;
|
yPosOrigin: number;
|
||||||
|
positionAbsolute: XYPosition;
|
||||||
initialized: boolean;
|
initialized: boolean;
|
||||||
isSelectable: boolean;
|
isSelectable: boolean;
|
||||||
isDraggable: boolean;
|
isDraggable: boolean;
|
||||||
|
|||||||
@@ -191,8 +191,9 @@
|
|||||||
{dragging}
|
{dragging}
|
||||||
{dragHandle}
|
{dragHandle}
|
||||||
isConnectable={connectable}
|
isConnectable={connectable}
|
||||||
xPos={positionX}
|
positionAbsolute={{ x: positionX, y: positionY }}
|
||||||
yPos={positionY}
|
{width}
|
||||||
|
{height}
|
||||||
on:connectstart
|
on:connectstart
|
||||||
on:connect
|
on:connect
|
||||||
on:connectend
|
on:connectend
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ export type NodeWrapperProps = Pick<
|
|||||||
| 'selected'
|
| 'selected'
|
||||||
| 'selectable'
|
| 'selectable'
|
||||||
| 'style'
|
| 'style'
|
||||||
| 'width'
|
|
||||||
| 'height'
|
|
||||||
| 'type'
|
| 'type'
|
||||||
| 'sourcePosition'
|
| 'sourcePosition'
|
||||||
| 'targetPosition'
|
| 'targetPosition'
|
||||||
| 'dragHandle'
|
| 'dragHandle'
|
||||||
| 'hidden'
|
| 'hidden'
|
||||||
> & {
|
> & {
|
||||||
|
width?: number;
|
||||||
|
height?: number;
|
||||||
type: string;
|
type: string;
|
||||||
positionX: number;
|
positionX: number;
|
||||||
positionY: number;
|
positionY: number;
|
||||||
|
|||||||
@@ -11,24 +11,29 @@
|
|||||||
|
|
||||||
// unused props - we need to list them here in order to prevent warnings
|
// unused props - we need to list them here in order to prevent warnings
|
||||||
export let id: $$Props['id'] = '';
|
export let id: $$Props['id'] = '';
|
||||||
|
export let width: $$Props['width'] = undefined;
|
||||||
|
export let height: $$Props['height'] = undefined;
|
||||||
export let selected: $$Props['selected'] = undefined;
|
export let selected: $$Props['selected'] = undefined;
|
||||||
export let type: $$Props['type'] = undefined;
|
export let type: $$Props['type'] = undefined;
|
||||||
export let zIndex: $$Props['zIndex'] = undefined;
|
export let zIndex: $$Props['zIndex'] = undefined;
|
||||||
export let dragging: $$Props['dragging'] = false;
|
export let dragging: $$Props['dragging'] = false;
|
||||||
export let dragHandle: $$Props['dragHandle'] = undefined;
|
export let dragHandle: $$Props['dragHandle'] = undefined;
|
||||||
export let xPos: $$Props['xPos'] = 0;
|
export let positionAbsolute: $$Props['positionAbsolute'] = {
|
||||||
export let yPos: $$Props['yPos'] = 0;
|
x: 0,
|
||||||
|
y: 0
|
||||||
|
};
|
||||||
export let isConnectable: $$Props['isConnectable'] = undefined;
|
export let isConnectable: $$Props['isConnectable'] = undefined;
|
||||||
|
|
||||||
// @todo: there must be a better way to do this
|
// @todo: there must be a better way to do this
|
||||||
id;
|
id;
|
||||||
|
width;
|
||||||
|
height;
|
||||||
selected;
|
selected;
|
||||||
type;
|
type;
|
||||||
zIndex;
|
zIndex;
|
||||||
dragging;
|
dragging;
|
||||||
dragHandle;
|
dragHandle;
|
||||||
xPos;
|
positionAbsolute;
|
||||||
yPos;
|
|
||||||
isConnectable;
|
isConnectable;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
// unused props - we need to list them here in order to prevent warnings
|
// unused props - we need to list them here in order to prevent warnings
|
||||||
export let id: $$Props['id'] = '';
|
export let id: $$Props['id'] = '';
|
||||||
|
export let width: $$Props['width'] = undefined;
|
||||||
|
export let height: $$Props['height'] = undefined;
|
||||||
export let data: $$Props['data'] = {};
|
export let data: $$Props['data'] = {};
|
||||||
export let selected: $$Props['selected'] = undefined;
|
export let selected: $$Props['selected'] = undefined;
|
||||||
export let sourcePosition: $$Props['sourcePosition'] = undefined;
|
export let sourcePosition: $$Props['sourcePosition'] = undefined;
|
||||||
@@ -13,12 +15,16 @@
|
|||||||
export let zIndex: $$Props['zIndex'] = undefined;
|
export let zIndex: $$Props['zIndex'] = undefined;
|
||||||
export let dragging: $$Props['dragging'] = false;
|
export let dragging: $$Props['dragging'] = false;
|
||||||
export let dragHandle: $$Props['dragHandle'] = undefined;
|
export let dragHandle: $$Props['dragHandle'] = undefined;
|
||||||
export let xPos: $$Props['xPos'] = 0;
|
export let positionAbsolute: $$Props['positionAbsolute'] = {
|
||||||
export let yPos: $$Props['yPos'] = 0;
|
x: 0,
|
||||||
|
y: 0
|
||||||
|
};
|
||||||
export let isConnectable: $$Props['isConnectable'] = undefined;
|
export let isConnectable: $$Props['isConnectable'] = undefined;
|
||||||
|
|
||||||
// @todo: there must be a better way to do this
|
// @todo: there must be a better way to do this
|
||||||
id;
|
id;
|
||||||
|
width;
|
||||||
|
height;
|
||||||
data;
|
data;
|
||||||
selected;
|
selected;
|
||||||
sourcePosition;
|
sourcePosition;
|
||||||
@@ -27,7 +33,6 @@
|
|||||||
zIndex;
|
zIndex;
|
||||||
dragging;
|
dragging;
|
||||||
dragHandle;
|
dragHandle;
|
||||||
xPos;
|
positionAbsolute;
|
||||||
yPos;
|
|
||||||
isConnectable;
|
isConnectable;
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -10,26 +10,31 @@
|
|||||||
|
|
||||||
// unused props - we need to list them here in order to prevent warnings
|
// unused props - we need to list them here in order to prevent warnings
|
||||||
export let id: $$Props['id'] = '';
|
export let id: $$Props['id'] = '';
|
||||||
|
export let width: $$Props['width'] = undefined;
|
||||||
|
export let height: $$Props['height'] = undefined;
|
||||||
export let selected: $$Props['selected'] = undefined;
|
export let selected: $$Props['selected'] = undefined;
|
||||||
export let targetPosition: $$Props['targetPosition'] = undefined;
|
export let targetPosition: $$Props['targetPosition'] = undefined;
|
||||||
export let type: $$Props['type'] = undefined;
|
export let type: $$Props['type'] = undefined;
|
||||||
export let zIndex: $$Props['zIndex'] = undefined;
|
export let zIndex: $$Props['zIndex'] = undefined;
|
||||||
export let dragging: $$Props['dragging'] = false;
|
export let dragging: $$Props['dragging'] = false;
|
||||||
export let dragHandle: $$Props['dragHandle'] = undefined;
|
export let dragHandle: $$Props['dragHandle'] = undefined;
|
||||||
export let xPos: $$Props['xPos'] = 0;
|
export let positionAbsolute: $$Props['positionAbsolute'] = {
|
||||||
export let yPos: $$Props['yPos'] = 0;
|
x: 0,
|
||||||
|
y: 0
|
||||||
|
};
|
||||||
export let isConnectable: $$Props['isConnectable'] = undefined;
|
export let isConnectable: $$Props['isConnectable'] = undefined;
|
||||||
|
|
||||||
// @todo: there must be a better way to do this
|
// @todo: there must be a better way to do this
|
||||||
id;
|
id;
|
||||||
|
width;
|
||||||
|
height;
|
||||||
selected;
|
selected;
|
||||||
targetPosition;
|
targetPosition;
|
||||||
type;
|
type;
|
||||||
zIndex;
|
zIndex;
|
||||||
dragging;
|
dragging;
|
||||||
dragHandle;
|
dragHandle;
|
||||||
xPos;
|
positionAbsolute;
|
||||||
yPos;
|
|
||||||
isConnectable;
|
isConnectable;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -10,26 +10,28 @@
|
|||||||
|
|
||||||
// unused props - we need to list them here in order to prevent warnings
|
// unused props - we need to list them here in order to prevent warnings
|
||||||
export let id: $$Props['id'] = '';
|
export let id: $$Props['id'] = '';
|
||||||
|
export let width: $$Props['width'] = undefined;
|
||||||
|
export let height: $$Props['height'] = undefined;
|
||||||
export let selected: $$Props['selected'] = undefined;
|
export let selected: $$Props['selected'] = undefined;
|
||||||
export let sourcePosition: $$Props['sourcePosition'] = undefined;
|
export let sourcePosition: $$Props['sourcePosition'] = undefined;
|
||||||
export let type: $$Props['type'] = undefined;
|
export let type: $$Props['type'] = undefined;
|
||||||
export let zIndex: $$Props['zIndex'] = undefined;
|
export let zIndex: $$Props['zIndex'] = undefined;
|
||||||
export let dragging: $$Props['dragging'] = false;
|
export let dragging: $$Props['dragging'] = false;
|
||||||
export let dragHandle: $$Props['dragHandle'] = undefined;
|
export let dragHandle: $$Props['dragHandle'] = undefined;
|
||||||
export let xPos: $$Props['xPos'] = 0;
|
export let positionAbsolute: $$Props['positionAbsolute'] = { x: 0, y: 0 };
|
||||||
export let yPos: $$Props['yPos'] = 0;
|
|
||||||
export let isConnectable: $$Props['isConnectable'] = undefined;
|
export let isConnectable: $$Props['isConnectable'] = undefined;
|
||||||
|
|
||||||
// @todo: there must be a better way to do this
|
// @todo: there must be a better way to do this
|
||||||
id;
|
id;
|
||||||
|
width;
|
||||||
|
height;
|
||||||
selected;
|
selected;
|
||||||
sourcePosition;
|
sourcePosition;
|
||||||
type;
|
type;
|
||||||
zIndex;
|
zIndex;
|
||||||
dragging;
|
dragging;
|
||||||
dragHandle;
|
dragHandle;
|
||||||
xPos;
|
positionAbsolute;
|
||||||
yPos;
|
|
||||||
isConnectable;
|
isConnectable;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -68,14 +68,14 @@
|
|||||||
isParent={!!node[internalsSymbol]?.isParent}
|
isParent={!!node[internalsSymbol]?.isParent}
|
||||||
style={node.style}
|
style={node.style}
|
||||||
class={node.class}
|
class={node.class}
|
||||||
type={node.type || 'default'}
|
type={node.type ?? 'default'}
|
||||||
sourcePosition={node.sourcePosition}
|
sourcePosition={node.sourcePosition}
|
||||||
targetPosition={node.targetPosition}
|
targetPosition={node.targetPosition}
|
||||||
dragging={node.dragging}
|
dragging={node.dragging}
|
||||||
zIndex={node[internalsSymbol]?.z ?? 0}
|
zIndex={node[internalsSymbol]?.z ?? 0}
|
||||||
dragHandle={node.dragHandle}
|
dragHandle={node.dragHandle}
|
||||||
width={node.width}
|
width={node.width ?? undefined}
|
||||||
height={node.height}
|
height={node.height ?? undefined}
|
||||||
initialized={(!!node.computed?.width && !!node.computed?.height) ||
|
initialized={(!!node.computed?.width && !!node.computed?.height) ||
|
||||||
(!!node.width && !!node.height)}
|
(!!node.width && !!node.height)}
|
||||||
{resizeObserver}
|
{resizeObserver}
|
||||||
|
|||||||
@@ -52,8 +52,9 @@ export type NodeProps<T = any> = {
|
|||||||
selected: NodeBase['selected'];
|
selected: NodeBase['selected'];
|
||||||
isConnectable: NodeBase['connectable'];
|
isConnectable: NodeBase['connectable'];
|
||||||
zIndex: NodeBase['zIndex'];
|
zIndex: NodeBase['zIndex'];
|
||||||
xPos: number;
|
positionAbsolute: XYPosition;
|
||||||
yPos: number;
|
width?: number;
|
||||||
|
height?: number;
|
||||||
dragging: boolean;
|
dragging: boolean;
|
||||||
targetPosition?: Position;
|
targetPosition?: Position;
|
||||||
sourcePosition?: Position;
|
sourcePosition?: Position;
|
||||||
|
|||||||
@@ -254,8 +254,8 @@ export function calcNextPosition<NodeType extends NodeBase>(
|
|||||||
? [
|
? [
|
||||||
[parentPos.x + nodeWidth * currNodeOrigin[0], parentPos.y + nodeHeight * currNodeOrigin[1]],
|
[parentPos.x + nodeWidth * currNodeOrigin[0], parentPos.y + nodeHeight * currNodeOrigin[1]],
|
||||||
[
|
[
|
||||||
parentPos.x + parentNode.computed.width - nodeWidth + nodeWidth * currNodeOrigin[0],
|
parentPos.x + (parentNode.computed?.width ?? 0) - nodeWidth + nodeWidth * currNodeOrigin[0],
|
||||||
parentPos.y + parentNode.computed.height - nodeHeight + nodeHeight * currNodeOrigin[1],
|
parentPos.y + (parentNode.computed?.height ?? 0) - nodeHeight + nodeHeight * currNodeOrigin[1],
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
: currentExtent;
|
: currentExtent;
|
||||||
|
|||||||
Reference in New Issue
Block a user