@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinit-canvas/react",
3
- "version": "0.1.8",
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?: string;
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?: EdgeType | string;
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>) => void;
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
- setCenter: (x: number, y: number, options?: { zoom?: number }) => void;
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: string;
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];