@krainovsd/graph 0.4.5 → 0.6.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.
Files changed (48) hide show
  1. package/lib/cjs/index.cjs +1144 -0
  2. package/lib/cjs/index.cjs.map +1 -0
  3. package/lib/esm/index.js +12 -935
  4. package/lib/esm/index.js.map +1 -1
  5. package/lib/esm/lib/check-type.js +6 -0
  6. package/lib/esm/lib/check-type.js.map +1 -0
  7. package/lib/esm/lib/color-getter.js +28 -0
  8. package/lib/esm/lib/color-getter.js.map +1 -0
  9. package/lib/esm/lib/color-to-rgb.js +22 -0
  10. package/lib/esm/lib/color-to-rgb.js.map +1 -0
  11. package/lib/esm/lib/extract-rgb.js +15 -0
  12. package/lib/esm/lib/extract-rgb.js.map +1 -0
  13. package/lib/esm/lib/fade-rgb.js +11 -0
  14. package/lib/esm/lib/fade-rgb.js.map +1 -0
  15. package/lib/esm/lib/rgb-animation-by-progress.js +10 -0
  16. package/lib/esm/lib/rgb-animation-by-progress.js.map +1 -0
  17. package/lib/esm/module/GraphCanvas/GraphCanvas.js +731 -0
  18. package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -0
  19. package/lib/esm/module/GraphCanvas/constants/settings.js +95 -0
  20. package/lib/esm/module/GraphCanvas/constants/settings.js.map +1 -0
  21. package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js +11 -0
  22. package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js.map +1 -0
  23. package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js +11 -0
  24. package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js.map +1 -0
  25. package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js +19 -0
  26. package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js.map +1 -0
  27. package/lib/esm/module/GraphCanvas/lib/settings/listeners-getter.js +6 -0
  28. package/lib/esm/module/GraphCanvas/lib/settings/listeners-getter.js.map +1 -0
  29. package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js +53 -0
  30. package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js.map +1 -0
  31. package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.js +20 -0
  32. package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.js.map +1 -0
  33. package/lib/esm/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.js +11 -0
  34. package/lib/esm/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.js.map +1 -0
  35. package/lib/esm/module/GraphCanvas/lib/utils/draw-text.js +47 -0
  36. package/lib/esm/module/GraphCanvas/lib/utils/draw-text.js.map +1 -0
  37. package/lib/esm/module/GraphCanvas/lib/utils/is-overlaps-node.js +10 -0
  38. package/lib/esm/module/GraphCanvas/lib/utils/is-overlaps-node.js.map +1 -0
  39. package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js +37 -0
  40. package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js.map +1 -0
  41. package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js +26 -0
  42. package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js.map +1 -0
  43. package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js +37 -0
  44. package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js.map +1 -0
  45. package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js +8 -0
  46. package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js.map +1 -0
  47. package/lib/index.d.ts +135 -29
  48. package/package.json +20 -28
@@ -0,0 +1,37 @@
1
+ import { checkType } from '../../../../lib/check-type.js';
2
+ import '@krainovsd/js-helpers';
3
+
4
+ function nodeIterationExtractor(node, i, nodes, state, option, optionConstantGetter) {
5
+ let customOptions;
6
+ let constantOptions;
7
+ if (typeof option === "function")
8
+ customOptions = option(node, i, nodes, state);
9
+ else
10
+ customOptions = option;
11
+ if (customOptions && typeof customOptions === "object" && !Array.isArray(customOptions)) {
12
+ for (const key in customOptions) {
13
+ if (customOptions[key] === undefined)
14
+ delete customOptions[key];
15
+ }
16
+ }
17
+ if (optionConstantGetter) {
18
+ if (typeof optionConstantGetter === "function")
19
+ constantOptions = optionConstantGetter(node, i, nodes, state);
20
+ else
21
+ constantOptions = optionConstantGetter;
22
+ if (constantOptions &&
23
+ typeof constantOptions === "object" &&
24
+ !Array.isArray(constantOptions) &&
25
+ checkType(customOptions, customOptions === undefined ||
26
+ (typeof customOptions === "object" && !Array.isArray(customOptions)))) {
27
+ return {
28
+ ...constantOptions,
29
+ ...customOptions,
30
+ };
31
+ }
32
+ }
33
+ return customOptions;
34
+ }
35
+
36
+ export { nodeIterationExtractor };
37
+ //# sourceMappingURL=node-iteration-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphState, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":";;;AA4BgB,SAAA,sBAAsB,CAKpC,IAA6B,EAC7B,CAAS,EACT,KAAgC,EAChC,KAAqC,EACrC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;QAC1E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;YAC1D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;;;"}
@@ -0,0 +1,8 @@
1
+ function pointerGetter(mouseEvent, areaRect, areaTransform) {
2
+ const px = (mouseEvent.clientX - areaRect.left - areaTransform.x) / areaTransform.k;
3
+ const py = (mouseEvent.clientY - areaRect.top - areaTransform.y) / areaTransform.k;
4
+ return [px, py];
5
+ }
6
+
7
+ export { pointerGetter };
8
+ //# sourceMappingURL=pointer-getter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer-getter.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/pointer-getter.ts"],"sourcesContent":["import type { ZoomTransform } from \"d3-zoom\";\n\nexport function pointerGetter(\n mouseEvent: MouseEvent,\n areaRect: DOMRect,\n areaTransform: ZoomTransform,\n) {\n const px = (mouseEvent.clientX - areaRect.left - areaTransform.x) / areaTransform.k;\n const py = (mouseEvent.clientY - areaRect.top - areaTransform.y) / areaTransform.k;\n\n return [px, py];\n}\n"],"names":[],"mappings":"SAEgB,aAAa,CAC3B,UAAsB,EACtB,QAAiB,EACjB,aAA4B,EAAA;AAE5B,IAAA,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AACnF,IAAA,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AAElF,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB;;;;"}
package/lib/index.d.ts CHANGED
@@ -1,13 +1,16 @@
1
1
  import { SimulationNodeDatum, SimulationLinkDatum, Simulation } from 'd3-force';
2
- import { D3DragEvent } from 'd3-drag';
3
2
  import { D3ZoomEvent, ZoomTransform } from 'd3-zoom';
3
+ import { D3DragEvent } from 'd3-drag';
4
4
 
5
5
  interface NodeInterface<NodeData extends Record<string, unknown>> extends SimulationNodeDatum {
6
6
  id: number | string;
7
7
  linkCount?: number;
8
8
  group?: number | string;
9
9
  neighbors?: (string | number)[];
10
+ _radius?: number;
11
+ name?: string;
10
12
  data?: NodeData;
13
+ drag?: boolean;
11
14
  }
12
15
  type CachedNodeTextInterface = Record<string | number, string[]>;
13
16
 
@@ -24,26 +27,39 @@ type ListenersInterface<NodeData extends Record<string, unknown>, LinkData exten
24
27
  onWheelClick?: (event: MouseEvent, node?: NodeInterface<NodeData>) => void;
25
28
  onMove?: (event: MouseEvent, node?: NodeInterface<NodeData>) => void;
26
29
  onZoom?: (event: ZoomEventInterface) => void;
27
- onDragSubject?: (event: DragEventInterface<NodeData>, transform: ZoomTransform, nodes: NodeInterface<NodeData>[]) => NodeInterface<NodeData> | undefined;
28
- onDraw?: (canvasContext: CanvasRenderingContext2D, transform: ZoomTransform) => void;
29
- onStartDragFinished?: (event: DragEventInterface<NodeData>, simulations: GraphCanvasSimulation<NodeData, LinkData> | undefined, transform: ZoomTransform) => void;
30
- onMoveDragFinished?: (event: DragEventInterface<NodeData>, simulations: GraphCanvasSimulation<NodeData, LinkData> | undefined, transform: ZoomTransform) => void;
31
- onEndDragFinished?: (event: DragEventInterface<NodeData>, simulations: GraphCanvasSimulation<NodeData, LinkData> | undefined, transform: ZoomTransform) => void;
32
- onDrawFinished?: (canvasContext: CanvasRenderingContext2D, transform: ZoomTransform) => void;
33
- onSimulationEnd?: (simulations: GraphCanvasSimulation<NodeData, LinkData> | undefined) => void;
30
+ onDragSubject?: (event: DragEventInterface<NodeData>, state: GraphState<NodeData, LinkData>) => NodeInterface<NodeData> | undefined;
31
+ onDraw?: (state: GraphState<NodeData, LinkData>, toggleHighlightStatus: (status: boolean) => void, clearHighlightState: () => void) => void;
32
+ onStartDragFinished?: (event: DragEventInterface<NodeData>, state: GraphState<NodeData, LinkData>) => void;
33
+ onMoveDragFinished?: (event: DragEventInterface<NodeData>, state: GraphState<NodeData, LinkData>) => void;
34
+ onEndDragFinished?: (event: DragEventInterface<NodeData>, state: GraphState<NodeData, LinkData>) => void;
35
+ onDrawFinished?: (state: GraphState<NodeData, LinkData>) => void;
36
+ onSimulationEnd?: (state: GraphState<NodeData, LinkData>) => void;
34
37
  };
35
38
 
36
39
  type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
40
+ highlightOnlyRoot?: boolean;
37
41
  highlightFadingMin?: number;
42
+ highlightLinkFadingMin?: number;
43
+ highlightColorFadingMin?: number;
44
+ highlightTextFadingMin?: number;
45
+ highlightSizingAdditional?: number;
46
+ highlightTextSizingAdditional?: number;
47
+ highlightTextShiftXAdditional?: number;
48
+ highlightTextShiftYAdditional?: number;
49
+ highlightTextWeightAdditional?: number;
50
+ highlightTextWidthAdditional?: number;
38
51
  highlightByHover?: boolean;
39
52
  highlightDownStep?: number;
40
53
  highlightUpStep?: number;
41
54
  stickAfterDrag?: boolean;
42
55
  zoomExtent?: [number, number];
56
+ translateExtent?: [[number?, number?], [number?, number?]];
57
+ translateExtentCoefficient?: number | [number, number];
58
+ translateExtentEnable?: boolean;
43
59
  zoomInitial?: {
44
- k: number;
45
- x: number;
46
- y: number;
60
+ k?: number;
61
+ x?: number;
62
+ y?: number;
47
63
  } | null;
48
64
  dragPlaceCoefficient?: (node: NodeInterface<NodeData>, pxEvent: number, pyEvent: number, radius: number) => number | undefined;
49
65
  nodeRadiusInitial?: number;
@@ -57,14 +73,14 @@ type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData e
57
73
  nodes: number;
58
74
  links: number;
59
75
  };
60
- collideRadius?: NodeIterationPropsInterface<NodeData> | number | null;
76
+ collideRadius?: NodeIterationPropsInterface<NodeData, LinkData> | number | null;
61
77
  collideAdditionalRadius?: number;
62
78
  collideStrength?: number;
63
79
  collideIterations?: number;
64
80
  linkDistance?: LinkIterationPropsInterface<NodeData, LinkData> | number;
65
81
  linkStrength?: LinkIterationPropsInterface<NodeData, LinkData> | number;
66
82
  linkIterations?: number;
67
- chargeStrength?: NodeIterationPropsInterface<NodeData> | number;
83
+ chargeStrength?: NodeIterationPropsInterface<NodeData, LinkData> | number;
68
84
  chargeDistanceMax?: number;
69
85
  chargeDistanceMin?: number;
70
86
  centerPosition?: {
@@ -72,16 +88,21 @@ type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData e
72
88
  y?: number;
73
89
  };
74
90
  centerStrength?: number;
75
- xForce?: NodeIterationPropsInterface<NodeData> | number;
76
- xStrength?: NodeIterationPropsInterface<NodeData> | number;
77
- yForce?: NodeIterationPropsInterface<NodeData> | number;
78
- yStrength?: NodeIterationPropsInterface<NodeData> | number;
91
+ xForce?: NodeIterationPropsInterface<NodeData, LinkData> | number;
92
+ xStrength?: NodeIterationPropsInterface<NodeData, LinkData> | number;
93
+ yForce?: NodeIterationPropsInterface<NodeData, LinkData> | number;
94
+ yStrength?: NodeIterationPropsInterface<NodeData, LinkData> | number;
79
95
  };
80
- type NodeSettingsInterface<NodeData extends Record<string, unknown>> = {
81
- idGetter?: NodeIterationPropsInterface<NodeData, string | number>;
82
- options?: NodeIterationPropsInterface<NodeData, NodeOptionsInterface> | NodeOptionsInterface;
96
+ type NodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
97
+ idGetter?: NodeIterationPropsInterface<NodeData, LinkData, string | number>;
98
+ options?: NodeIterationPropsInterface<NodeData, LinkData, NodeOptionsInterface> | NodeOptionsInterface;
83
99
  };
84
100
  type NodeOptionsInterface = {
101
+ highlightFading?: boolean;
102
+ highlightSizing?: boolean;
103
+ highlightTextFading?: boolean;
104
+ highlightTextSizing?: boolean;
105
+ highlightColor?: boolean;
85
106
  borderColor?: string;
86
107
  borderWidth?: number;
87
108
  radius?: number;
@@ -90,6 +111,7 @@ type NodeOptionsInterface = {
90
111
  color?: string;
91
112
  textVisible?: boolean;
92
113
  text?: string | null;
114
+ textAlpha?: number;
93
115
  textShiftY?: number;
94
116
  textShiftX?: number;
95
117
  textFont?: string;
@@ -98,10 +120,10 @@ type NodeOptionsInterface = {
98
120
  textAlign?: CanvasTextAlign;
99
121
  textWidth?: number;
100
122
  textStyle?: TextStyleEnum;
101
- textWeight?: TextWeightEnum;
123
+ textWeight?: number;
102
124
  textGap?: number;
103
125
  };
104
- type NodeIterationPropsInterface<NodeData extends Record<string, unknown>, Return = number> = (node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], transform?: ZoomTransform) => Return;
126
+ type NodeIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state?: GraphState<NodeData, LinkData>) => Return;
105
127
  type LinkSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
106
128
  options?: LinkIterationPropsInterface<NodeData, LinkData, LinkOptionsInterface> | LinkOptionsInterface;
107
129
  };
@@ -109,10 +131,11 @@ type LinkOptionsInterface = {
109
131
  alpha?: number;
110
132
  color?: string;
111
133
  width?: number;
134
+ highlightFading?: boolean;
135
+ pretty?: boolean;
112
136
  };
113
- type LinkIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], transform?: ZoomTransform | null) => Return;
137
+ type LinkIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], state?: GraphState<NodeData, LinkData>) => Return;
114
138
  type TextStyleEnum = "normal" | "italic" | "oblique";
115
- type TextWeightEnum = "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900";
116
139
 
117
140
  type GraphCanvasInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
118
141
  nodes: NodeInterface<NodeData>[];
@@ -120,11 +143,38 @@ type GraphCanvasInterface<NodeData extends Record<string, unknown>, LinkData ext
120
143
  root: HTMLElement;
121
144
  graphSettings?: GraphSettingsInterface<NodeData>;
122
145
  forceSettings?: ForceSettingsInterface<NodeData, LinkData>;
123
- nodeSettings?: NodeSettingsInterface<NodeData>;
146
+ nodeSettings?: NodeSettingsInterface<NodeData, LinkData>;
124
147
  linkSettings?: LinkSettingsInterface<NodeData, LinkData>;
125
148
  listeners?: ListenersInterface<NodeData, LinkData>;
126
149
  };
127
150
  type GraphCanvasSimulation<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = Simulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>;
151
+ type GraphState<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
152
+ context: CanvasRenderingContext2D | null | undefined;
153
+ simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;
154
+ areaTransform: ZoomTransform;
155
+ eventAbortController: AbortController;
156
+ cachedNodeText: CachedNodeTextInterface;
157
+ simulationWorking: boolean;
158
+ isDragging: boolean;
159
+ highlightedNode: NodeInterface<NodeData> | null;
160
+ highlightedNeighbors: Set<string | number> | null;
161
+ highlightProgress: number;
162
+ highlightWorking: boolean;
163
+ highlightDrawing: boolean;
164
+ width: number;
165
+ height: number;
166
+ nodes: NodeInterface<NodeData>[];
167
+ links: LinkInterface<NodeData, LinkData>[];
168
+ graphSettings: Required<GraphSettingsInterface<NodeData>>;
169
+ forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;
170
+ nodeSettings: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, "options">> & Pick<NodeSettingsInterface<NodeData, LinkData>, "options">;
171
+ linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, "options">> & Pick<LinkSettingsInterface<NodeData, LinkData>, "options">;
172
+ };
173
+ type RGB = {
174
+ r: number;
175
+ g: number;
176
+ b: number;
177
+ };
128
178
 
129
179
  declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> {
130
180
  /** initial data */
@@ -149,13 +199,14 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
149
199
  private draw;
150
200
  private eventAbortController;
151
201
  private cachedNodeText;
152
- private simulationWorking;
153
202
  private isDragging;
154
203
  private highlightedNode;
155
204
  private highlightedNeighbors;
156
- private highlighFading;
157
- private highlightFadingWorking;
205
+ private highlightProgress;
206
+ private highlightWorking;
158
207
  private highlightDrawing;
208
+ private get simulationWorking();
209
+ private get state();
159
210
  constructor({ links, nodes, root, forceSettings, linkSettings, listeners, nodeSettings, graphSettings, }: GraphCanvasInterface<NodeData, LinkData>);
160
211
  get dpi(): number;
161
212
  getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
@@ -185,4 +236,59 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
185
236
  private initZoom;
186
237
  }
187
238
 
188
- export { type CachedNodeTextInterface, type DragEventInterface, type ForceSettingsInterface, GraphCanvas, type GraphCanvasInterface, type GraphCanvasSimulation, type GraphSettingsInterface, type LinkInterface, type LinkIterationPropsInterface, type LinkOptionsInterface, type LinkSettingsInterface, type ListenersInterface, type NodeInterface, type NodeIterationPropsInterface, type NodeOptionsInterface, type NodeSettingsInterface, type TextStyleEnum, type TextWeightEnum, type ZoomEventInterface };
239
+ declare function linkOptionsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(_: LinkInterface<NodeData, LinkData>, __: number, ___: LinkInterface<NodeData, LinkData>[], state?: GraphState<NodeData, LinkData>): Required<LinkOptionsInterface>;
240
+
241
+ declare function nodeOptionsGetter<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(node: NodeInterface<NodeData>, _: number, __: NodeInterface<NodeData>[], state?: GraphState<NodeData, LinkData>): Required<NodeOptionsInterface>;
242
+ type NodeRadiusGetterOptions = {
243
+ linkCount: number | undefined;
244
+ radiusFlexible: boolean;
245
+ radiusCoefficient: number;
246
+ radiusFactor: number;
247
+ radiusInitial: number;
248
+ };
249
+ declare function nodeRadiusGetter({ radiusFlexible, radiusInitial, linkCount, radiusCoefficient, radiusFactor, }: NodeRadiusGetterOptions): number;
250
+
251
+ declare function linkIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[]>(link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], state: GraphState<NodeData, LinkData>, option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: undefined): Result;
252
+ declare function linkIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[]>(link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], state: GraphState<NodeData, LinkData>, option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: LinkIterationPropsInterface<NodeData, LinkData, Required<Result>> | Required<Result>): Required<Result>;
253
+
254
+ declare function nodeIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null>(node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state: GraphState<NodeData, LinkData>, option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: undefined): Result;
255
+ declare function nodeIterationExtractor<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null>(node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state: GraphState<NodeData, LinkData>, option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result, optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result): Required<Result>;
256
+
257
+ type DrawTextOptions = {
258
+ id: string | number;
259
+ x: number;
260
+ y: number;
261
+ text: string;
262
+ textSize: number;
263
+ textStyle: TextStyleEnum;
264
+ textWeight: number;
265
+ textFont: string;
266
+ textColor: string;
267
+ textGap: number;
268
+ textAlign: CanvasTextAlign;
269
+ context: CanvasRenderingContext2D;
270
+ cachedNodeText: CachedNodeTextInterface;
271
+ maxWidth?: number;
272
+ };
273
+ declare function drawText({ context, id, textAlign, textColor, textFont, textStyle, textGap, textWeight, textSize, text, x, y, cachedNodeText, maxWidth, }: DrawTextOptions): void;
274
+
275
+ declare function calculateLinkPositionByRadius<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(link: LinkInterface<NodeData, LinkData>): {
276
+ x1: number;
277
+ y1: number;
278
+ x2: number;
279
+ y2: number;
280
+ } | null;
281
+
282
+ declare function colorToRgb(color: string): string | null;
283
+
284
+ declare function extractRgb(color: string | null): {
285
+ r: number;
286
+ g: number;
287
+ b: number;
288
+ } | null;
289
+
290
+ declare function fadeRgb(color: RGB, fade: number): RGB;
291
+
292
+ declare function rgbAnimationByProgress(start: RGB, end: RGB, progress: number): RGB;
293
+
294
+ export { type CachedNodeTextInterface, type DragEventInterface, type ForceSettingsInterface, GraphCanvas, type GraphCanvasInterface, type GraphCanvasSimulation, type GraphSettingsInterface, type GraphState, type LinkInterface, type LinkIterationPropsInterface, type LinkOptionsInterface, type LinkSettingsInterface, type ListenersInterface, type NodeInterface, type NodeIterationPropsInterface, type NodeOptionsInterface, type NodeSettingsInterface, type RGB, type TextStyleEnum, type ZoomEventInterface, calculateLinkPositionByRadius, colorToRgb, drawText, extractRgb, fadeRgb, linkIterationExtractor, linkOptionsGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, rgbAnimationByProgress };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krainovsd/graph",
3
- "version": "0.4.5",
3
+ "version": "0.6.0",
4
4
  "description": "Krainov graph",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",
@@ -28,38 +28,29 @@
28
28
  ],
29
29
  "scripts": {
30
30
  "publish-package": "npm run lint && npm run build && npm publish",
31
- "dev": "vite",
32
- "build:dev": "vite build",
31
+ "dev": "vite --host",
32
+ "clear": "rm -rf ./lib",
33
+ "build-dev": "vite build",
33
34
  "build": "npm run clear && npm run build:types && npm run build:js",
34
- "build:js": "rm -rf lib && rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:production,NODE_ENV:production",
35
- "build:js-dev": "rm -rf lib && rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:development,NODE_ENV:development",
35
+ "build-singleton": "rm -rf dist && rollup --config rollup-singleton.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:production,NODE_ENV:production",
36
+ "build:js": "rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:production,NODE_ENV:production",
36
37
  "build:types": "tspc -p tsconfig.build.json",
37
- "lint": "eslint src/** -c ./eslint.config.js --color --max-warnings 0",
38
- "lint:debug": "eslint --debug eslint.config.js",
39
- "clear": "rm -rf ./lib",
40
- "format": "prettier --write 'src/**/*.{js,ts,tsx,scss,css,json}'"
38
+ "lint": "eslint . -c ./eslint.config.js --color --max-warnings 0",
39
+ "lint-check": "eslint --debug eslint.config.js",
40
+ "format": "prettier --write 'src/**/*.{js,ts,tsx,scss,css,json}'",
41
+ "format-check": "prettier --check ./src",
42
+ "lint-debug": "npx eslint --print-config eslint.config.js > eslint-config-rules.json",
43
+ "type-debug": "tsc --showConfig > typescript-config.json"
41
44
  },
42
45
  "devDependencies": {
43
- "@krainovsd/eslint-presets": "0.2.1",
44
- "@rollup/plugin-commonjs": "28.0.2",
45
- "@rollup/plugin-json": "6.1.0",
46
- "@rollup/plugin-node-resolve": "16.0.0",
47
- "@rollup/plugin-typescript": "12.1.2",
48
- "rollup-plugin-dts": "6.1.1",
49
- "rollup-plugin-bundle-stats": "4.17.0",
50
- "rollup-plugin-visualizer": "5.12.0",
51
- "rollup": "4.21.2",
52
- "@types/rollup-plugin-peer-deps-external": "2.2.5",
53
- "rollup-plugin-peer-deps-external": "2.2.4",
54
- "@trivago/prettier-plugin-sort-imports": "4.3.0",
55
- "@types/node": "22.8.6",
56
- "eslint": "9.17.0",
57
- "prettier": "3.3.3",
46
+ "@krainovsd/presets": "0.2.0",
47
+ "eslint": "9.21.0",
48
+ "prettier": "3.5.2",
49
+ "rollup": "4.34.9",
50
+ "typescript": "5.7.3",
51
+ "typescript-transform-paths": "3.5.3",
58
52
  "ts-patch": "3.3.0",
59
- "typescript": "5.6.3",
60
- "typescript-transform-paths": "3.5.2",
61
- "pixi-viewport": "6.0.3",
62
- "pixi.js": "8.6.6",
53
+ "@types/node": "22.8.6",
63
54
  "@types/d3-selection": "3.0.11",
64
55
  "@types/d3-drag": "3.0.7",
65
56
  "@types/d3-array": "3.2.1",
@@ -67,6 +58,7 @@
67
58
  "@types/lodash": "4.17.14"
68
59
  },
69
60
  "dependencies": {
61
+ "@krainovsd/js-helpers": "0.12.0",
70
62
  "@types/d3-zoom": "3.0.8",
71
63
  "@types/d3-force": "3.0.10",
72
64
  "@types/d3-drag": "3.0.7",