@infinit-canvas/react 0.1.8 → 0.1.11
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/LICENSE +21 -0
- package/README.md +129 -37
- package/dist/react-infinite-canvas.cjs +513 -476
- package/dist/react-infinite-canvas.js +3273 -2806
- package/package.json +4 -2
- package/src/types.d.ts +88 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@infinit-canvas/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "A performant infinite canvas React component powered by OffscreenCanvas and Web Workers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/react-infinite-canvas.cjs",
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
19
|
-
"src/types.d.ts"
|
|
19
|
+
"src/types.d.ts",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"README.md"
|
|
20
22
|
],
|
|
21
23
|
"sideEffects": false,
|
|
22
24
|
"keywords": [
|
package/src/types.d.ts
CHANGED
|
@@ -40,11 +40,11 @@ export interface NodeHandle {
|
|
|
40
40
|
y?: number;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export interface Node<T = Record<string, unknown
|
|
43
|
+
export interface Node<T = Record<string, unknown>, TType extends string = string> {
|
|
44
44
|
id: string;
|
|
45
45
|
position: XYPosition;
|
|
46
46
|
data: T;
|
|
47
|
-
type?:
|
|
47
|
+
type?: TType;
|
|
48
48
|
width?: number;
|
|
49
49
|
height?: number;
|
|
50
50
|
selected?: boolean;
|
|
@@ -62,17 +62,18 @@ export interface Node<T = Record<string, unknown>> {
|
|
|
62
62
|
ariaLabel?: string;
|
|
63
63
|
className?: string;
|
|
64
64
|
style?: React.CSSProperties;
|
|
65
|
+
measured?: { width?: number; height?: number };
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
// ─── Edge Types ──────────────────────────────────────────────────
|
|
68
69
|
|
|
69
70
|
export type EdgeType = 'default' | 'straight' | 'step' | 'smoothstep';
|
|
70
71
|
|
|
71
|
-
export interface Edge<T = Record<string, unknown
|
|
72
|
+
export interface Edge<T = Record<string, unknown>, TType extends string = string> {
|
|
72
73
|
id: string;
|
|
73
74
|
source: string;
|
|
74
75
|
target: string;
|
|
75
|
-
type?:
|
|
76
|
+
type?: TType;
|
|
76
77
|
sourceHandle?: string | null;
|
|
77
78
|
targetHandle?: string | null;
|
|
78
79
|
data?: T;
|
|
@@ -336,6 +337,13 @@ export interface InfiniteCanvasProps {
|
|
|
336
337
|
edgesReconnectable?: boolean;
|
|
337
338
|
elevateNodesOnSelect?: boolean;
|
|
338
339
|
elevateEdgesOnSelect?: boolean;
|
|
340
|
+
noDragClassName?: string;
|
|
341
|
+
noPanClassName?: string;
|
|
342
|
+
|
|
343
|
+
// Selection drag events
|
|
344
|
+
onSelectionDragStart?: SelectionDragHandler;
|
|
345
|
+
onSelectionDrag?: SelectionDragHandler;
|
|
346
|
+
onSelectionDragStop?: SelectionDragHandler;
|
|
339
347
|
|
|
340
348
|
// DOM event passthrough
|
|
341
349
|
onDragOver?: (event: React.DragEvent) => void;
|
|
@@ -401,6 +409,10 @@ export interface PanelProps {
|
|
|
401
409
|
|
|
402
410
|
// ─── Hook Return Types ───────────────────────────────────────────
|
|
403
411
|
|
|
412
|
+
export interface ViewportAnimationOptions {
|
|
413
|
+
duration?: number;
|
|
414
|
+
}
|
|
415
|
+
|
|
404
416
|
export interface ReactFlowInstance {
|
|
405
417
|
getNodes: () => Node[];
|
|
406
418
|
getEdges: () => Edge[];
|
|
@@ -412,15 +424,18 @@ export interface ReactFlowInstance {
|
|
|
412
424
|
addEdges: (edges: Edge | Edge[]) => void;
|
|
413
425
|
deleteElements: (params: { nodes?: Node[]; edges?: Edge[] }) => void;
|
|
414
426
|
getViewport: () => Viewport;
|
|
415
|
-
setViewport: (viewport: Partial<Viewport
|
|
427
|
+
setViewport: (viewport: Partial<Viewport>, options?: ViewportAnimationOptions) => void;
|
|
416
428
|
getZoom: () => number;
|
|
417
|
-
zoomIn: () => void;
|
|
418
|
-
zoomOut: () => void;
|
|
419
|
-
zoomTo: (zoom: number) => void;
|
|
429
|
+
zoomIn: (options?: ViewportAnimationOptions) => void;
|
|
430
|
+
zoomOut: (options?: ViewportAnimationOptions) => void;
|
|
431
|
+
zoomTo: (zoom: number, options?: ViewportAnimationOptions) => void;
|
|
420
432
|
fitView: (options?: FitViewOptions) => void;
|
|
421
|
-
|
|
433
|
+
fitBounds: (bounds: Rect, options?: FitViewOptions) => void;
|
|
434
|
+
setCenter: (x: number, y: number, options?: { zoom?: number; duration?: number }) => void;
|
|
422
435
|
screenToFlowPosition: (position: XYPosition) => XYPosition;
|
|
423
436
|
flowToScreenPosition: (position: XYPosition) => XYPosition;
|
|
437
|
+
updateNodeData: (nodeId: string, dataUpdate: Partial<Node['data']> | ((node: Node) => Partial<Node['data']>)) => void;
|
|
438
|
+
toObject: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
|
|
424
439
|
}
|
|
425
440
|
|
|
426
441
|
export interface UseOnViewportChangeOptions {
|
|
@@ -434,7 +449,7 @@ export interface UseOnSelectionChangeOptions {
|
|
|
434
449
|
}
|
|
435
450
|
|
|
436
451
|
export interface UseHandleConnectionsOptions {
|
|
437
|
-
nodeId
|
|
452
|
+
nodeId?: string;
|
|
438
453
|
type: HandleType;
|
|
439
454
|
handleId?: string;
|
|
440
455
|
}
|
|
@@ -443,7 +458,7 @@ export interface UseHandleConnectionsOptions {
|
|
|
443
458
|
|
|
444
459
|
// Core
|
|
445
460
|
export declare function InfiniteCanvas(props: InfiniteCanvasProps): JSX.Element;
|
|
446
|
-
export declare function InfiniteCanvasProvider(props: { children: React.ReactNode }): JSX.Element;
|
|
461
|
+
export declare function InfiniteCanvasProvider(props: { children: React.ReactNode; initialNodes?: Node[]; initialEdges?: Edge[] }): JSX.Element;
|
|
447
462
|
export declare function useInfiniteCanvas(options?: Partial<InfiniteCanvasProps>): {
|
|
448
463
|
wrapRef: React.RefObject<HTMLDivElement>;
|
|
449
464
|
canvasRef: React.RefObject<HTMLCanvasElement>;
|
|
@@ -482,6 +497,30 @@ export declare function useKeyPress(keyOrKeys: string | string[]): boolean;
|
|
|
482
497
|
export declare function useUpdateNodeInternals(): (nodeId: string | string[]) => void;
|
|
483
498
|
export declare function useNodesInitialized(options?: { includeHiddenNodes?: boolean }): boolean;
|
|
484
499
|
export declare function useInternalNode(nodeId: string): Node | undefined;
|
|
500
|
+
export declare function useStore<T>(selector: (state: InfiniteCanvasState) => T, equalityFn?: (a: T, b: T) => boolean): T;
|
|
501
|
+
export declare function useStoreApi(): { getState: () => InfiniteCanvasState; setState: (partial: Partial<InfiniteCanvasState>) => void; subscribe: (listener: (state: InfiniteCanvasState) => void) => () => void };
|
|
502
|
+
|
|
503
|
+
// Undo/Redo
|
|
504
|
+
export interface UseUndoRedoOptions {
|
|
505
|
+
maxHistorySize?: number;
|
|
506
|
+
}
|
|
507
|
+
export interface UseUndoRedoReturn {
|
|
508
|
+
undo: () => void;
|
|
509
|
+
redo: () => void;
|
|
510
|
+
takeSnapshot: () => void;
|
|
511
|
+
canUndo: boolean;
|
|
512
|
+
canRedo: boolean;
|
|
513
|
+
}
|
|
514
|
+
export declare function useUndoRedo(options?: UseUndoRedoOptions): UseUndoRedoReturn;
|
|
515
|
+
|
|
516
|
+
// Change middleware
|
|
517
|
+
export declare function useOnNodesChangeMiddleware<NodeType extends Node = Node>(
|
|
518
|
+
middleware: (changes: NodeChange<NodeType>[]) => NodeChange<NodeType>[] | false | void
|
|
519
|
+
): (originalOnNodesChange: OnNodesChange<NodeType>) => OnNodesChange<NodeType>;
|
|
520
|
+
|
|
521
|
+
export declare function useOnEdgesChangeMiddleware<EdgeType extends Edge = Edge>(
|
|
522
|
+
middleware: (changes: EdgeChange<EdgeType>[]) => EdgeChange<EdgeType>[] | false | void
|
|
523
|
+
): (originalOnEdgesChange: OnEdgesChange<EdgeType>) => OnEdgesChange<EdgeType>;
|
|
485
524
|
|
|
486
525
|
// Utilities
|
|
487
526
|
export declare function applyNodeChanges<NodeType extends Node = Node>(changes: NodeChange<NodeType>[], nodes: NodeType[]): NodeType[];
|
|
@@ -504,6 +543,14 @@ export declare function Controls(props: ControlsProps): JSX.Element;
|
|
|
504
543
|
export declare function MiniMap(props: MiniMapProps): JSX.Element;
|
|
505
544
|
export declare function Background(props: BackgroundProps): JSX.Element;
|
|
506
545
|
export declare function Panel(props: PanelProps): JSX.Element;
|
|
546
|
+
export declare function Handle(props: HandleProps): JSX.Element;
|
|
547
|
+
export declare function NodeResizer(props: NodeResizerProps): JSX.Element;
|
|
548
|
+
export declare function NodeToolbar(props: NodeToolbarProps): JSX.Element;
|
|
549
|
+
export declare function EdgeToolbar(props: { children?: React.ReactNode; style?: React.CSSProperties; className?: string }): JSX.Element;
|
|
550
|
+
export declare function EdgeLabelRenderer(props: { children?: React.ReactNode }): JSX.Element;
|
|
551
|
+
export declare function ViewportPortal(props: { children?: React.ReactNode }): JSX.Element;
|
|
552
|
+
export declare function ConnectionLine(props: ConnectionLineComponentProps): JSX.Element;
|
|
553
|
+
export declare function SelectionBox(props: { selectionKeyCode?: string; selectionMode?: SelectionMode }): JSX.Element;
|
|
507
554
|
|
|
508
555
|
// ─── React Flow Compatibility Types ─────────────────────────────
|
|
509
556
|
|
|
@@ -575,6 +622,33 @@ export interface HandleProps {
|
|
|
575
622
|
children?: React.ReactNode;
|
|
576
623
|
}
|
|
577
624
|
|
|
625
|
+
export interface NodeResizerProps {
|
|
626
|
+
minWidth?: number;
|
|
627
|
+
minHeight?: number;
|
|
628
|
+
maxWidth?: number;
|
|
629
|
+
maxHeight?: number;
|
|
630
|
+
keepAspectRatio?: boolean;
|
|
631
|
+
shouldResize?: (event: any) => boolean;
|
|
632
|
+
onResizeStart?: (event: any, params: { width: number; height: number }) => void;
|
|
633
|
+
onResize?: (event: any, params: { width: number; height: number }) => void;
|
|
634
|
+
onResizeEnd?: (event: any, params: { width: number; height: number }) => void;
|
|
635
|
+
color?: string;
|
|
636
|
+
handleStyle?: React.CSSProperties;
|
|
637
|
+
lineStyle?: React.CSSProperties;
|
|
638
|
+
isVisible?: boolean;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
export interface NodeToolbarProps {
|
|
642
|
+
nodeId?: string | string[];
|
|
643
|
+
isVisible?: boolean;
|
|
644
|
+
position?: Position;
|
|
645
|
+
offset?: number;
|
|
646
|
+
align?: 'center' | 'start' | 'end';
|
|
647
|
+
style?: React.CSSProperties;
|
|
648
|
+
className?: string;
|
|
649
|
+
children?: React.ReactNode;
|
|
650
|
+
}
|
|
651
|
+
|
|
578
652
|
export interface ConnectionLineComponentProps {
|
|
579
653
|
fromX: number;
|
|
580
654
|
fromY: number;
|
|
@@ -609,6 +683,9 @@ export type InfiniteCanvasState = {
|
|
|
609
683
|
domNode: HTMLDivElement | null;
|
|
610
684
|
width: number;
|
|
611
685
|
height: number;
|
|
686
|
+
minZoom: number;
|
|
687
|
+
maxZoom: number;
|
|
688
|
+
[key: string]: unknown;
|
|
612
689
|
};
|
|
613
690
|
|
|
614
691
|
export type NodeOrigin = [number, number];
|