@pixerate/editor-svelte 0.3.12 → 0.5.0
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.
- package/dist/canvas/index.d.ts +572 -0
- package/dist/canvas/index.js +1197 -0
- package/dist/canvas/index.js.map +1 -0
- package/package.json +24 -1
- package/src/canvas/README.md +167 -0
- package/src/canvas/__tests__/canvas-clipboard.test.ts +154 -0
- package/src/canvas/__tests__/canvas-docking.test.ts +136 -0
- package/src/canvas/__tests__/canvas-explosion.test.ts +249 -0
- package/src/canvas/__tests__/canvas-graph.test.ts +159 -0
- package/src/canvas/__tests__/canvas-interactions.test.ts +86 -0
- package/src/canvas/__tests__/canvas-layout.test.ts +75 -0
- package/src/canvas/__tests__/canvas-shortcuts.test.ts +59 -0
- package/src/canvas/createCanvasClipboard.svelte.ts +219 -0
- package/src/canvas/createCanvasDisplacement.ts +226 -0
- package/src/canvas/createCanvasDocking.svelte.ts +145 -0
- package/src/canvas/createCanvasExplosion.svelte.ts +368 -0
- package/src/canvas/createCanvasGraph.svelte.ts +330 -0
- package/src/canvas/createCanvasInteractions.svelte.ts +112 -0
- package/src/canvas/createCanvasLayout.ts +120 -0
- package/src/canvas/createCanvasShortcuts.ts +99 -0
- package/src/canvas/createCanvasTrajectory.ts +188 -0
- package/src/canvas/index.d.ts +572 -0
- package/src/canvas/index.ts +68 -0
- package/src/canvas/types.ts +212 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import type { Node, Edge, XYPosition, Rect, ColorMode, Position } from '@xyflow/svelte';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generic node interface representing an element on the canvas.
|
|
5
|
+
*/
|
|
6
|
+
export type CanvasNode<
|
|
7
|
+
TData extends Record<string, any> = Record<string, any>,
|
|
8
|
+
TType extends string | undefined = string | undefined
|
|
9
|
+
> = Node<TData, TType>;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generic edge interface representing a connection on the canvas.
|
|
13
|
+
*/
|
|
14
|
+
export type CanvasEdge<
|
|
15
|
+
TData extends Record<string, any> = Record<string, any>,
|
|
16
|
+
TType extends string | undefined = string | undefined
|
|
17
|
+
> = Edge<TData, TType>;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Differences computed between two graph states.
|
|
21
|
+
*/
|
|
22
|
+
export interface GraphDifferences<
|
|
23
|
+
TNode extends CanvasNode = CanvasNode,
|
|
24
|
+
TEdge extends CanvasEdge = CanvasEdge
|
|
25
|
+
> {
|
|
26
|
+
changedNodes: TNode[];
|
|
27
|
+
changedEdges: TEdge[];
|
|
28
|
+
removedNodes: TNode[];
|
|
29
|
+
removedEdges: TEdge[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Standard serialized clipboard payload for nodes and optional edges.
|
|
34
|
+
*/
|
|
35
|
+
export interface CanvasClipboardPayload<
|
|
36
|
+
TNode extends CanvasNode = CanvasNode,
|
|
37
|
+
TEdge extends CanvasEdge = CanvasEdge
|
|
38
|
+
> {
|
|
39
|
+
version?: number;
|
|
40
|
+
nodes: TNode[];
|
|
41
|
+
edges?: TEdge[];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Options for Dagre graph layout.
|
|
46
|
+
*/
|
|
47
|
+
export interface CanvasLayoutOptions {
|
|
48
|
+
direction?: 'LR' | 'TB' | 'RL' | 'BT';
|
|
49
|
+
ranksep?: number;
|
|
50
|
+
nodesep?: number;
|
|
51
|
+
defaultNodeWidth?: number;
|
|
52
|
+
defaultNodeHeight?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Options for keyboard shortcuts.
|
|
57
|
+
*/
|
|
58
|
+
export interface CanvasShortcutsOptions<TNode extends CanvasNode = CanvasNode> {
|
|
59
|
+
targetElement?: HTMLElement | Window;
|
|
60
|
+
onCopy?: () => void;
|
|
61
|
+
onCut?: () => void;
|
|
62
|
+
onPaste?: (event: ClipboardEvent) => void;
|
|
63
|
+
onDelete?: (selectedNodes: TNode[]) => void;
|
|
64
|
+
onDuplicate?: (selectedNodes: TNode[]) => void;
|
|
65
|
+
onSelectAll?: () => void;
|
|
66
|
+
onGroup?: (selectedNodes: TNode[]) => void;
|
|
67
|
+
onUngroup?: (selectedNodes: TNode[]) => void;
|
|
68
|
+
onZoomIn?: () => void;
|
|
69
|
+
onZoomOut?: () => void;
|
|
70
|
+
onFitView?: () => void;
|
|
71
|
+
onSearch?: () => void;
|
|
72
|
+
getSelectedNodes?: () => TNode[];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Docking and intersection callbacks.
|
|
77
|
+
*/
|
|
78
|
+
export interface CanvasDockingCallbacks<TNode extends CanvasNode = CanvasNode> {
|
|
79
|
+
onDockHover?: (dockTarget: TNode, draggedNode: TNode) => void;
|
|
80
|
+
onDockLeave?: (dockTarget: TNode, draggedNode: TNode) => void;
|
|
81
|
+
onDockDrop?: (dockTarget: TNode, draggedNode: TNode) => void;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Configuration options for SvelteFlow presets.
|
|
86
|
+
*/
|
|
87
|
+
export interface CanvasInteractionPresetConfig {
|
|
88
|
+
snapGrid?: [number, number];
|
|
89
|
+
panOnDrag?: number[] | boolean;
|
|
90
|
+
panOnScroll?: boolean;
|
|
91
|
+
selectionOnDrag?: boolean;
|
|
92
|
+
colorMode?: ColorMode;
|
|
93
|
+
multiSelectionKey?: string[];
|
|
94
|
+
minZoom?: number;
|
|
95
|
+
maxZoom?: number;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Parametric point returned by a trajectory evaluation.
|
|
100
|
+
*/
|
|
101
|
+
export interface TrajectoryPoint {
|
|
102
|
+
position: XYPosition;
|
|
103
|
+
scale?: number;
|
|
104
|
+
opacity?: number;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Trajectory evaluation function determining path, scale, and opacity over time t in [0, 1].
|
|
109
|
+
*/
|
|
110
|
+
export type TrajectoryFunction = (
|
|
111
|
+
origin: XYPosition,
|
|
112
|
+
target: XYPosition,
|
|
113
|
+
progress: number,
|
|
114
|
+
index: number,
|
|
115
|
+
total: number
|
|
116
|
+
) => TrajectoryPoint;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Options for fan-out trajectory generator.
|
|
120
|
+
*/
|
|
121
|
+
export interface FanOutTrajectoryOptions {
|
|
122
|
+
curvature?: number;
|
|
123
|
+
spreadAngle?: number;
|
|
124
|
+
startScale?: number;
|
|
125
|
+
endScale?: number;
|
|
126
|
+
startOpacity?: number;
|
|
127
|
+
endOpacity?: number;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Single node animation transition definition.
|
|
132
|
+
*/
|
|
133
|
+
export interface NodeTransition<TNode extends CanvasNode = CanvasNode> {
|
|
134
|
+
node: TNode;
|
|
135
|
+
from: XYPosition;
|
|
136
|
+
to: XYPosition;
|
|
137
|
+
trajectory?: TrajectoryFunction;
|
|
138
|
+
delay?: number;
|
|
139
|
+
duration?: number;
|
|
140
|
+
easing?: (t: number) => number;
|
|
141
|
+
index?: number;
|
|
142
|
+
total?: number;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Displacement axis / direction.
|
|
147
|
+
*/
|
|
148
|
+
export type DisplacementDirection = 'right' | 'left' | 'down' | 'up';
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Options for directional displacement calculation.
|
|
152
|
+
*/
|
|
153
|
+
export interface DirectionalDisplacementOptions {
|
|
154
|
+
direction?: DisplacementDirection;
|
|
155
|
+
gap?: number;
|
|
156
|
+
spreadSiblingLanes?: boolean;
|
|
157
|
+
siblingTolerance?: number;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Options for Dagre reflow displacement calculation.
|
|
162
|
+
*/
|
|
163
|
+
export interface ReflowDisplacementOptions extends CanvasLayoutOptions {
|
|
164
|
+
anchorNodeId: string;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Snapshot of canvas graph state prior to node explosion, enabling exact reversibility.
|
|
169
|
+
*/
|
|
170
|
+
export interface ExplosionSnapshot<
|
|
171
|
+
TNode extends CanvasNode = CanvasNode,
|
|
172
|
+
TEdge extends CanvasEdge = CanvasEdge
|
|
173
|
+
> {
|
|
174
|
+
parentId: string;
|
|
175
|
+
childNodeIds: string[];
|
|
176
|
+
childEdgeIds: string[];
|
|
177
|
+
displacedNodes: { id: string; originalPosition: XYPosition }[];
|
|
178
|
+
timestamp: number;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Options for exploding a node.
|
|
183
|
+
*/
|
|
184
|
+
export interface ExplodeNodeOptions<
|
|
185
|
+
TNode extends CanvasNode = CanvasNode,
|
|
186
|
+
TEdge extends CanvasEdge = CanvasEdge
|
|
187
|
+
> {
|
|
188
|
+
childNodes: TNode[];
|
|
189
|
+
childEdges?: TEdge[];
|
|
190
|
+
connectParentToChildren?: boolean | 'first' | 'all';
|
|
191
|
+
connectChildrenToDownstream?: boolean;
|
|
192
|
+
displacementStrategy?: 'directional' | 'dagre' | 'none';
|
|
193
|
+
directionalOptions?: DirectionalDisplacementOptions;
|
|
194
|
+
reflowOptions?: Partial<ReflowDisplacementOptions>;
|
|
195
|
+
trajectory?: TrajectoryFunction;
|
|
196
|
+
duration?: number;
|
|
197
|
+
staggerDelay?: number;
|
|
198
|
+
easing?: (t: number) => number;
|
|
199
|
+
onComplete?: () => void;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Options for collapsing an exploded node.
|
|
204
|
+
*/
|
|
205
|
+
export interface CollapseNodeOptions {
|
|
206
|
+
duration?: number;
|
|
207
|
+
staggerDelay?: number;
|
|
208
|
+
easing?: (t: number) => number;
|
|
209
|
+
trajectory?: TrajectoryFunction;
|
|
210
|
+
onComplete?: () => void;
|
|
211
|
+
}
|
|
212
|
+
|