@html-graph/html-graph 3.0.0 → 3.2.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/README.md CHANGED
@@ -62,6 +62,7 @@ const canvas = new CanvasBuilder()
62
62
  })
63
63
  .enableUserDraggableNodes()
64
64
  .enableUserTransformableViewport()
65
+ .enableBackground()
65
66
  .build();
66
67
 
67
68
  canvas
@@ -14,14 +14,6 @@ declare interface AddEdgeRequest_2 {
14
14
  readonly priority: number;
15
15
  }
16
16
 
17
- declare interface AddEdgeRequest_3 {
18
- readonly id: unknown;
19
- readonly from: unknown;
20
- readonly to: unknown;
21
- readonly shape: EdgeShape;
22
- readonly priority: number;
23
- }
24
-
25
17
  export declare type AddNodePorts = Iterable<MarkNodePortRequest>;
26
18
 
27
19
  export declare interface AddNodeRequest {
@@ -43,15 +35,6 @@ declare interface AddNodeRequest_2 {
43
35
  readonly priority: number;
44
36
  }
45
37
 
46
- declare interface AddNodeRequest_3 {
47
- readonly id: unknown;
48
- readonly element: HTMLElement;
49
- readonly x: number;
50
- readonly y: number;
51
- readonly centerFn: CenterFn;
52
- readonly priority: number;
53
- }
54
-
55
38
  declare interface AddPortRequest {
56
39
  readonly id: unknown;
57
40
  readonly nodeId: unknown;
@@ -59,6 +42,15 @@ declare interface AddPortRequest {
59
42
  readonly direction: number;
60
43
  }
61
44
 
45
+ declare interface BackgroundOptions {
46
+ readonly tileDimensions?: {
47
+ readonly width?: number;
48
+ readonly height?: number;
49
+ };
50
+ readonly renderer?: DotsRenderer | SVGElement;
51
+ readonly maxViewportScale?: number;
52
+ }
53
+
62
54
  export declare interface BezierEdgeParams {
63
55
  readonly color?: string | undefined;
64
56
  readonly width?: number | undefined;
@@ -96,24 +88,50 @@ declare type BezierEdgeShapeConfig = {
96
88
  readonly type?: "bezier" | undefined;
97
89
  } & BezierEdgeParams;
98
90
 
91
+ /**
92
+ * Responsibility: provides graph rendering API for end user
93
+ */
99
94
  export declare class Canvas {
95
+ /**
96
+ * @deprecated access element directly instead
97
+ */
100
98
  readonly element: HTMLElement;
101
- private readonly controller;
102
- private readonly nodeIdGenerator;
103
- private readonly portIdGenerator;
104
- private readonly edgeIdGenerator;
105
- private readonly defaults;
99
+ private readonly graphStore;
100
+ private readonly viewportStore;
101
+ private readonly htmlView;
106
102
  /**
107
- * provides api for accessing graph model
103
+ * provides api for accessing model of rendered graph
108
104
  */
109
105
  readonly graph: Graph;
110
106
  /**
111
107
  * provides api for accessing viewport state
112
108
  */
113
109
  readonly viewport: Viewport;
114
- constructor(element: HTMLElement, controller: CanvasController, options: CanvasDefaults);
110
+ private readonly defaults;
111
+ private readonly nodeIdGenerator;
112
+ private readonly portIdGenerator;
113
+ private readonly edgeIdGenerator;
114
+ private readonly onAfterNodeAdded;
115
+ private readonly onAfterNodeUpdated;
116
+ private readonly onAfterNodePriorityUpdated;
117
+ private readonly onBeforeNodeRemoved;
118
+ private readonly onAfterPortUpdated;
119
+ private readonly onBeforePortUnmarked;
120
+ private readonly onAfterEdgeAdded;
121
+ private readonly onAfterEdgeShapeUpdated;
122
+ private readonly onAfterEdgeUpdated;
123
+ private readonly onAfterEdgePriorityUpdated;
124
+ private readonly onBeforeEdgeRemoved;
125
+ private readonly onBeforeClear;
126
+ private readonly onBeforeDestroyEmitter;
127
+ readonly onBeforeDestroy: EventHandler<void>;
128
+ constructor(
129
+ /**
130
+ * @deprecated access element directly instead
131
+ */
132
+ element: HTMLElement, graphStore: GraphStore, viewportStore: ViewportStore, htmlView: HtmlView, options: CanvasDefaults);
115
133
  /**
116
- * adds node to graph
134
+ * adds new node
117
135
  */
118
136
  addNode(request: AddNodeRequest): Canvas;
119
137
  /**
@@ -121,42 +139,42 @@ export declare class Canvas {
121
139
  */
122
140
  updateNode(nodeId: unknown, request?: UpdateNodeRequest): Canvas;
123
141
  /**
124
- * removes node from graph
142
+ * removes specified node
125
143
  * all the ports of node get unmarked
126
144
  * all the edges adjacent to node get removed
127
145
  */
128
146
  removeNode(nodeId: unknown): Canvas;
129
147
  /**
130
- * marks element as port of node
148
+ * marks specified element as a port for specified node
131
149
  */
132
150
  markPort(request: MarkPortRequest): Canvas;
133
151
  /**
134
- * updates port and attached edges
152
+ * updates port and edges attached to it
135
153
  */
136
154
  updatePort(portId: unknown, request?: UpdatePortRequest): Canvas;
137
155
  /**
138
- * ummarks element as port of node
139
- * all the edges adjacent to port get removed
156
+ * unmarks specified port
157
+ * all the edges adjacent to the port get removed
140
158
  */
141
159
  unmarkPort(portId: unknown): Canvas;
142
160
  /**
143
- * adds edge to graph
161
+ * adds new edge
144
162
  */
145
163
  addEdge(request: AddEdgeRequest): Canvas;
146
164
  /**
147
- * updates edge
165
+ * updates specified edge
148
166
  */
149
167
  updateEdge(edgeId: unknown, request?: UpdateEdgeRequest): Canvas;
150
168
  /**
151
- * removes edge from graph
169
+ * removes specified edge
152
170
  */
153
171
  removeEdge(edgeId: unknown): Canvas;
154
172
  /**
155
- * applies transformation for viewport
173
+ * applies transformation for viewport matrix
156
174
  */
157
175
  patchViewportMatrix(request: PatchMatrixRequest): Canvas;
158
176
  /**
159
- * applies transformation for content
177
+ * applies transformation for content matrix
160
178
  */
161
179
  patchContentMatrix(request: PatchMatrixRequest): Canvas;
162
180
  /**
@@ -171,15 +189,20 @@ export declare class Canvas {
171
189
  destroy(): void;
172
190
  }
173
191
 
192
+ /**
193
+ * Responsibility: Constructs canvas based on specified configuration
194
+ */
174
195
  export declare class CanvasBuilder {
175
196
  private element;
176
197
  private canvasDefaults;
177
198
  private dragOptions;
178
199
  private transformOptions;
200
+ private backgroundOptions;
179
201
  private virtualScrollOptions;
180
202
  private hasDraggableNode;
181
203
  private hasTransformableViewport;
182
204
  private hasResizeReactiveNodes;
205
+ private hasBackground;
183
206
  private boxRenderingTrigger;
184
207
  setElement(element: HTMLElement): CanvasBuilder;
185
208
  /**
@@ -203,31 +226,18 @@ export declare class CanvasBuilder {
203
226
  */
204
227
  enableBoxAreaRendering(trigger: EventSubject<RenderingBox>): CanvasBuilder;
205
228
  enableVirtualScroll(options: VirtualScrollOptions): CanvasBuilder;
229
+ enableBackground(options?: BackgroundOptions): CanvasBuilder;
206
230
  /**
207
231
  * builds final canvas
208
232
  */
209
233
  build(): Canvas;
234
+ /**
235
+ * @deprecated
236
+ * CanvasBuilder should be single use object
237
+ */
210
238
  private reset;
211
239
  }
212
240
 
213
- declare interface CanvasController {
214
- readonly graph: Graph;
215
- readonly viewport: Viewport;
216
- addNode(node: AddNodeRequest_3): void;
217
- updateNode(nodeId: unknown, request: UpdateNodeRequest_3): void;
218
- removeNode(nodeId: unknown): void;
219
- markPort(port: MarkPortRequest_2): void;
220
- updatePort(portId: unknown, request: UpdatePortRequest_3): void;
221
- unmarkPort(portId: unknown): void;
222
- addEdge(edge: AddEdgeRequest_3): void;
223
- updateEdge(edgeId: unknown, request: UpdateEdgeRequest_3): void;
224
- removeEdge(edgeId: unknown): void;
225
- patchViewportMatrix(request: PatchMatrixRequest_2): void;
226
- patchContentMatrix(request: PatchMatrixRequest_2): void;
227
- clear(): void;
228
- destroy(): void;
229
- }
230
-
231
241
  export declare interface CanvasDefaults {
232
242
  /**
233
243
  * nodes related behavior
@@ -273,6 +283,11 @@ declare type ConstantPriority = number;
273
283
 
274
284
  declare type CustomPriority = PriorityFn;
275
285
 
286
+ declare interface DotsRenderer {
287
+ readonly radius?: number;
288
+ readonly color?: string;
289
+ }
290
+
276
291
  export declare interface DragOptions {
277
292
  readonly moveOnTop?: boolean;
278
293
  readonly mouse?: {
@@ -309,6 +324,9 @@ export declare interface EdgeRenderPort {
309
324
  readonly nodeId: unknown;
310
325
  }
311
326
 
327
+ /**
328
+ * Responsibility: Rendering edge via SVG
329
+ */
312
330
  export declare interface EdgeShape {
313
331
  readonly svg: SVGSVGElement;
314
332
  render(params: EdgeRenderParams): void;
@@ -318,15 +336,24 @@ declare type EdgeShapeConfig = BezierEdgeShapeConfig | StraightEdgeShapeConfig |
318
336
 
319
337
  declare type EdgeShapeFactory = () => EdgeShape;
320
338
 
339
+ /**
340
+ * Responsibility: Provides a way to trigger events
341
+ */
321
342
  export declare interface EventEmitter<T> {
322
343
  emit(payload: T): void;
323
344
  }
324
345
 
346
+ /**
347
+ * Responsibility: Provides a way to handle events
348
+ */
325
349
  export declare interface EventHandler<T> {
326
350
  subscribe(callback: (payload: T) => void): void;
327
351
  unsubscribe(callback: (payload: T) => void): void;
328
352
  }
329
353
 
354
+ /**
355
+ * Responsibility: Connects events and event handlers
356
+ */
330
357
  export declare class EventSubject<T> implements EventEmitter<T>, EventHandler<T> {
331
358
  private readonly callbacks;
332
359
  subscribe(callback: (payload: T) => void): void;
@@ -335,7 +362,7 @@ export declare class EventSubject<T> implements EventEmitter<T>, EventHandler<T>
335
362
  }
336
363
 
337
364
  /**
338
- * This entity is responsible for providing access to end user in a safe way
365
+ * Responsibility: Provides access to graph model for end user
339
366
  */
340
367
  export declare class Graph {
341
368
  private readonly graphStore;
@@ -391,14 +418,14 @@ export declare interface GraphPort {
391
418
  }
392
419
 
393
420
  /**
394
- * This entity is responsible for storing state of graph
421
+ * Responsibility: Stores stae of graph
395
422
  */
396
423
  declare class GraphStore {
397
424
  private readonly nodes;
398
425
  private readonly ports;
399
426
  private readonly edges;
400
- private readonly incommingEdges;
401
- private readonly outcommingEdges;
427
+ private readonly incomingEdges;
428
+ private readonly outcomingEdges;
402
429
  private readonly cycleEdges;
403
430
  private readonly afterNodeAddedEmitter;
404
431
  readonly onAfterNodeAdded: EventHandler<unknown>;
@@ -493,10 +520,31 @@ declare type HorizontalEdgeShapeConfig = {
493
520
  readonly type: "horizontal";
494
521
  } & HorizontalEdgeParams;
495
522
 
523
+ /**
524
+ * Responsibility: Library specific error to throw when unexpected action
525
+ * occured
526
+ */
496
527
  export declare class HtmlGraphError extends Error {
497
528
  readonly name = "HtmlGraphError";
498
529
  }
499
530
 
531
+ /**
532
+ * Responsibility: Provides access to DOM modifications
533
+ */
534
+ declare interface HtmlView {
535
+ attachNode(nodeId: unknown): void;
536
+ detachNode(nodeId: unknown): void;
537
+ attachEdge(edgeId: unknown): void;
538
+ detachEdge(edgeId: unknown): void;
539
+ clear(): void;
540
+ destroy(): void;
541
+ updateNodePosition(nodeId: unknown): void;
542
+ updateNodePriority(nodeId: unknown): void;
543
+ updateEdgeShape(edgeId: unknown): void;
544
+ renderEdge(edgeId: unknown): void;
545
+ updateEdgePriority(edgeId: unknown): void;
546
+ }
547
+
500
548
  declare type IncrementalPriority = "incremental";
501
549
 
502
550
  export declare type MarkNodePortRequest = {
@@ -512,13 +560,6 @@ export declare interface MarkPortRequest {
512
560
  readonly direction?: number;
513
561
  }
514
562
 
515
- declare interface MarkPortRequest_2 {
516
- readonly id: unknown;
517
- readonly element: HTMLElement;
518
- readonly nodeId: unknown;
519
- readonly direction: number;
520
- }
521
-
522
563
  export declare interface NodeDragPayload {
523
564
  readonly nodeId: unknown;
524
565
  readonly element: HTMLElement;
@@ -541,18 +582,15 @@ export declare interface PatchMatrixRequest {
541
582
  readonly y?: number | undefined;
542
583
  }
543
584
 
544
- declare interface PatchMatrixRequest_2 {
545
- readonly scale?: number | undefined;
546
- readonly x?: number | undefined;
547
- readonly y?: number | undefined;
548
- }
549
-
550
585
  declare interface PatchTransformRequest {
551
586
  readonly scale?: number;
552
587
  readonly x?: number;
553
588
  readonly y?: number;
554
589
  }
555
590
 
591
+ /**
592
+ * Responsibility: Specifies point coordinates
593
+ */
556
594
  export declare interface Point {
557
595
  readonly x: number;
558
596
  readonly y: number;
@@ -566,6 +604,9 @@ declare interface PortPayload {
566
604
 
567
605
  declare type Priority = ConstantPriority | IncrementalPriority | CustomPriority;
568
606
 
607
+ /**
608
+ * Responsibility: Specifies how to determine Z-index of an entity in DOM
609
+ */
569
610
  export declare type PriorityFn = () => number;
570
611
 
571
612
  export declare interface RenderingBox {
@@ -693,13 +734,6 @@ declare interface UpdateEdgeRequest_2 {
693
734
  readonly priority?: number;
694
735
  }
695
736
 
696
- declare interface UpdateEdgeRequest_3 {
697
- readonly from?: unknown | undefined;
698
- readonly to?: unknown | undefined;
699
- readonly shape?: EdgeShape | undefined;
700
- readonly priority?: number | undefined;
701
- }
702
-
703
737
  export declare interface UpdateNodeRequest {
704
738
  readonly x?: number | undefined;
705
739
  readonly y?: number | undefined;
@@ -714,13 +748,6 @@ declare interface UpdateNodeRequest_2 {
714
748
  readonly priority?: number;
715
749
  }
716
750
 
717
- declare interface UpdateNodeRequest_3 {
718
- readonly x?: number | undefined;
719
- readonly y?: number | undefined;
720
- readonly priority?: number | undefined;
721
- readonly centerFn?: CenterFn | undefined;
722
- }
723
-
724
751
  export declare interface UpdatePortRequest {
725
752
  readonly direction?: number;
726
753
  }
@@ -729,10 +756,6 @@ declare interface UpdatePortRequest_2 {
729
756
  readonly direction?: number;
730
757
  }
731
758
 
732
- declare interface UpdatePortRequest_3 {
733
- readonly direction?: number;
734
- }
735
-
736
759
  export declare interface VerticalEdgeParams {
737
760
  readonly color?: string | undefined;
738
761
  readonly width?: number | undefined;
@@ -771,7 +794,7 @@ declare type VerticalEdgeShapeConfig = {
771
794
  } & VerticalEdgeParams;
772
795
 
773
796
  /**
774
- * This entity is responsible for providing viewport API
797
+ * Responsibility: Provides access to viewport state for end user
775
798
  */
776
799
  export declare class Viewport {
777
800
  private readonly transformer;
@@ -783,7 +806,7 @@ export declare class Viewport {
783
806
  }
784
807
 
785
808
  /**
786
- * This entity is responsible for storing viewport transformation
809
+ * Responsibility: Stores viewport transformation state
787
810
  */
788
811
  declare class ViewportStore {
789
812
  private viewportMatrix;