@infinit-canvas/react 0.1.7 → 0.1.10

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.7",
3
+ "version": "0.1.10",
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",
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;
@@ -401,6 +402,10 @@ export interface PanelProps {
401
402
 
402
403
  // ─── Hook Return Types ───────────────────────────────────────────
403
404
 
405
+ export interface ViewportAnimationOptions {
406
+ duration?: number;
407
+ }
408
+
404
409
  export interface ReactFlowInstance {
405
410
  getNodes: () => Node[];
406
411
  getEdges: () => Edge[];
@@ -412,15 +417,18 @@ export interface ReactFlowInstance {
412
417
  addEdges: (edges: Edge | Edge[]) => void;
413
418
  deleteElements: (params: { nodes?: Node[]; edges?: Edge[] }) => void;
414
419
  getViewport: () => Viewport;
415
- setViewport: (viewport: Partial<Viewport>) => void;
420
+ setViewport: (viewport: Partial<Viewport>, options?: ViewportAnimationOptions) => void;
416
421
  getZoom: () => number;
417
- zoomIn: () => void;
418
- zoomOut: () => void;
419
- zoomTo: (zoom: number) => void;
422
+ zoomIn: (options?: ViewportAnimationOptions) => void;
423
+ zoomOut: (options?: ViewportAnimationOptions) => void;
424
+ zoomTo: (zoom: number, options?: ViewportAnimationOptions) => void;
420
425
  fitView: (options?: FitViewOptions) => void;
421
- setCenter: (x: number, y: number, options?: { zoom?: number }) => void;
426
+ fitBounds: (bounds: Rect, options?: FitViewOptions) => void;
427
+ setCenter: (x: number, y: number, options?: { zoom?: number; duration?: number }) => void;
422
428
  screenToFlowPosition: (position: XYPosition) => XYPosition;
423
429
  flowToScreenPosition: (position: XYPosition) => XYPosition;
430
+ updateNodeData: (nodeId: string, dataUpdate: Partial<Node['data']> | ((node: Node) => Partial<Node['data']>)) => void;
431
+ toObject: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
424
432
  }
425
433
 
426
434
  export interface UseOnViewportChangeOptions {
@@ -434,7 +442,7 @@ export interface UseOnSelectionChangeOptions {
434
442
  }
435
443
 
436
444
  export interface UseHandleConnectionsOptions {
437
- nodeId: string;
445
+ nodeId?: string;
438
446
  type: HandleType;
439
447
  handleId?: string;
440
448
  }
@@ -443,7 +451,7 @@ export interface UseHandleConnectionsOptions {
443
451
 
444
452
  // Core
445
453
  export declare function InfiniteCanvas(props: InfiniteCanvasProps): JSX.Element;
446
- export declare function InfiniteCanvasProvider(props: { children: React.ReactNode }): JSX.Element;
454
+ export declare function InfiniteCanvasProvider(props: { children: React.ReactNode; initialNodes?: Node[]; initialEdges?: Edge[] }): JSX.Element;
447
455
  export declare function useInfiniteCanvas(options?: Partial<InfiniteCanvasProps>): {
448
456
  wrapRef: React.RefObject<HTMLDivElement>;
449
457
  canvasRef: React.RefObject<HTMLCanvasElement>;
@@ -482,6 +490,30 @@ export declare function useKeyPress(keyOrKeys: string | string[]): boolean;
482
490
  export declare function useUpdateNodeInternals(): (nodeId: string | string[]) => void;
483
491
  export declare function useNodesInitialized(options?: { includeHiddenNodes?: boolean }): boolean;
484
492
  export declare function useInternalNode(nodeId: string): Node | undefined;
493
+ export declare function useStore<T>(selector: (state: InfiniteCanvasState) => T, equalityFn?: (a: T, b: T) => boolean): T;
494
+ export declare function useStoreApi(): { getState: () => InfiniteCanvasState; setState: (partial: Partial<InfiniteCanvasState>) => void; subscribe: (listener: (state: InfiniteCanvasState) => void) => () => void };
495
+
496
+ // Undo/Redo
497
+ export interface UseUndoRedoOptions {
498
+ maxHistorySize?: number;
499
+ }
500
+ export interface UseUndoRedoReturn {
501
+ undo: () => void;
502
+ redo: () => void;
503
+ takeSnapshot: () => void;
504
+ canUndo: boolean;
505
+ canRedo: boolean;
506
+ }
507
+ export declare function useUndoRedo(options?: UseUndoRedoOptions): UseUndoRedoReturn;
508
+
509
+ // Change middleware
510
+ export declare function useOnNodesChangeMiddleware<NodeType extends Node = Node>(
511
+ middleware: (changes: NodeChange<NodeType>[]) => NodeChange<NodeType>[] | false | void
512
+ ): (originalOnNodesChange: OnNodesChange<NodeType>) => OnNodesChange<NodeType>;
513
+
514
+ export declare function useOnEdgesChangeMiddleware<EdgeType extends Edge = Edge>(
515
+ middleware: (changes: EdgeChange<EdgeType>[]) => EdgeChange<EdgeType>[] | false | void
516
+ ): (originalOnEdgesChange: OnEdgesChange<EdgeType>) => OnEdgesChange<EdgeType>;
485
517
 
486
518
  // Utilities
487
519
  export declare function applyNodeChanges<NodeType extends Node = Node>(changes: NodeChange<NodeType>[], nodes: NodeType[]): NodeType[];
@@ -504,6 +536,14 @@ export declare function Controls(props: ControlsProps): JSX.Element;
504
536
  export declare function MiniMap(props: MiniMapProps): JSX.Element;
505
537
  export declare function Background(props: BackgroundProps): JSX.Element;
506
538
  export declare function Panel(props: PanelProps): JSX.Element;
539
+ export declare function Handle(props: HandleProps): JSX.Element;
540
+ export declare function NodeResizer(props: NodeResizerProps): JSX.Element;
541
+ export declare function NodeToolbar(props: NodeToolbarProps): JSX.Element;
542
+ export declare function EdgeToolbar(props: { children?: React.ReactNode; style?: React.CSSProperties; className?: string }): JSX.Element;
543
+ export declare function EdgeLabelRenderer(props: { children?: React.ReactNode }): JSX.Element;
544
+ export declare function ViewportPortal(props: { children?: React.ReactNode }): JSX.Element;
545
+ export declare function ConnectionLine(props: ConnectionLineComponentProps): JSX.Element;
546
+ export declare function SelectionBox(props: { selectionKeyCode?: string; selectionMode?: SelectionMode }): JSX.Element;
507
547
 
508
548
  // ─── React Flow Compatibility Types ─────────────────────────────
509
549
 
@@ -575,6 +615,33 @@ export interface HandleProps {
575
615
  children?: React.ReactNode;
576
616
  }
577
617
 
618
+ export interface NodeResizerProps {
619
+ minWidth?: number;
620
+ minHeight?: number;
621
+ maxWidth?: number;
622
+ maxHeight?: number;
623
+ keepAspectRatio?: boolean;
624
+ shouldResize?: (event: any) => boolean;
625
+ onResizeStart?: (event: any, params: { width: number; height: number }) => void;
626
+ onResize?: (event: any, params: { width: number; height: number }) => void;
627
+ onResizeEnd?: (event: any, params: { width: number; height: number }) => void;
628
+ color?: string;
629
+ handleStyle?: React.CSSProperties;
630
+ lineStyle?: React.CSSProperties;
631
+ isVisible?: boolean;
632
+ }
633
+
634
+ export interface NodeToolbarProps {
635
+ nodeId?: string | string[];
636
+ isVisible?: boolean;
637
+ position?: Position;
638
+ offset?: number;
639
+ align?: 'center' | 'start' | 'end';
640
+ style?: React.CSSProperties;
641
+ className?: string;
642
+ children?: React.ReactNode;
643
+ }
644
+
578
645
  export interface ConnectionLineComponentProps {
579
646
  fromX: number;
580
647
  fromY: number;
@@ -609,6 +676,9 @@ export type InfiniteCanvasState = {
609
676
  domNode: HTMLDivElement | null;
610
677
  width: number;
611
678
  height: number;
679
+ minZoom: number;
680
+ maxZoom: number;
681
+ [key: string]: unknown;
612
682
  };
613
683
 
614
684
  export type NodeOrigin = [number, number];