@krainovsd/graph 0.10.0-rc1 → 0.10.0-rc2

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.
@@ -137,7 +137,7 @@ function initCollideForce(forceUpdate) {
137
137
  maxWidth: width,
138
138
  textStyle: nodeOptions.textStyle,
139
139
  textWeight: nodeOptions.textWeight,
140
- });
140
+ }).lines;
141
141
  height =
142
142
  lines.length * nodeOptions.textSize +
143
143
  (lines.length - 1) * nodeOptions.textGap +
@@ -1 +1 @@
1
- {"version":3,"file":"init-simulation.js","sources":["../../../../../src/module/GraphCanvas/slices/init-simulation.ts"],"sourcesContent":["import {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { getDrawTime, resetDrawTime } from \"@/lib\";\nimport type { LinkInterface, NodeInterface } from \"@/types\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function initSimulation<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) {\n this.simulation = forceSimulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter,\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.state);\n\n if (this.graphSettings.showDrawTime) {\n getDrawTime();\n // eslint-disable-next-line no-console\n console.log(`nodes: ${this.nodes.length} | links: ${this.links.length}`);\n resetDrawTime();\n }\n });\n\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n }\n}\n\nexport function initSimulationForces<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n if ((!this.forceSettings.forces || !this.forceSettings.xForce) && this.simulation.force(\"x\")) {\n this.simulation.force(\"x\", null);\n }\n if ((!this.forceSettings.forces || !this.forceSettings.yForce) && this.simulation.force(\"y\")) {\n this.simulation.force(\"y\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.chargeForce) &&\n this.simulation.force(\"charge\")\n ) {\n this.simulation.force(\"charge\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.centerForce) &&\n this.simulation.force(\"center\")\n ) {\n this.simulation.force(\"center\", null);\n }\n if (!this.forceSettings.forces || !this.forceSettings.linkForce) {\n linkForce.distance(0).strength(0).iterations(0);\n }\n\n if (this.forceSettings.forces && this.forceSettings.linkForce) {\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n }\n if (this.forceSettings.forces && this.forceSettings.xForce) {\n this.simulation.force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xPosition).strength(\n this.forceSettings.xStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.yForce) {\n this.simulation.force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yPosition).strength(\n this.forceSettings.yStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.chargeForce) {\n this.simulation.force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.centerForce) {\n this.simulation.force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n}\n\nexport function initCollideForce<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, forceUpdate: boolean) {\n if (!this.simulation) return;\n\n if (\n (!this.forceSettings.collideForce || !this.forceSettings.forces) &&\n this.simulation.force(\"collide\")\n ) {\n this.simulation.force(\"collide\", null);\n }\n\n if (this.forceSettings.forces && this.forceSettings.collideForce) {\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusCoefficient: this.nodeSettings.nodeRadiusCoefficient,\n radiusFactor: this.nodeSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n case \"square\": {\n const { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeCoefficient: this.nodeSettings.nodeSizeCoefficient,\n sizeFactor: this.nodeSettings.nodeSizeFactor,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n });\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n case \"text\": {\n let { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeCoefficient: this.nodeSettings.nodeSizeCoefficient,\n sizeFactor: this.nodeSettings.nodeSizeFactor,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n });\n\n if (this.context && nodeOptions.text) {\n const lines =\n this.cachedNodeText[node.id] ??\n getTextLines({\n context: this.context,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n maxWidth: width,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n\n height =\n lines.length * nodeOptions.textSize +\n (lines.length - 1) * nodeOptions.textGap +\n nodeOptions.textNodeYPadding;\n width += nodeOptions.textNodeXPadding;\n }\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n default: {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusCoefficient: this.nodeSettings.nodeRadiusCoefficient,\n radiusFactor: this.nodeSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n }\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-simulation.js","sources":["../../../../../src/module/GraphCanvas/slices/init-simulation.ts"],"sourcesContent":["import {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { getDrawTime, resetDrawTime } from \"@/lib\";\nimport type { LinkInterface, NodeInterface } from \"@/types\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function initSimulation<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) {\n this.simulation = forceSimulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter,\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.state);\n\n if (this.graphSettings.showDrawTime) {\n getDrawTime();\n // eslint-disable-next-line no-console\n console.log(`nodes: ${this.nodes.length} | links: ${this.links.length}`);\n resetDrawTime();\n }\n });\n\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n }\n}\n\nexport function initSimulationForces<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n if ((!this.forceSettings.forces || !this.forceSettings.xForce) && this.simulation.force(\"x\")) {\n this.simulation.force(\"x\", null);\n }\n if ((!this.forceSettings.forces || !this.forceSettings.yForce) && this.simulation.force(\"y\")) {\n this.simulation.force(\"y\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.chargeForce) &&\n this.simulation.force(\"charge\")\n ) {\n this.simulation.force(\"charge\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.centerForce) &&\n this.simulation.force(\"center\")\n ) {\n this.simulation.force(\"center\", null);\n }\n if (!this.forceSettings.forces || !this.forceSettings.linkForce) {\n linkForce.distance(0).strength(0).iterations(0);\n }\n\n if (this.forceSettings.forces && this.forceSettings.linkForce) {\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n }\n if (this.forceSettings.forces && this.forceSettings.xForce) {\n this.simulation.force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xPosition).strength(\n this.forceSettings.xStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.yForce) {\n this.simulation.force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yPosition).strength(\n this.forceSettings.yStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.chargeForce) {\n this.simulation.force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.centerForce) {\n this.simulation.force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n}\n\nexport function initCollideForce<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, forceUpdate: boolean) {\n if (!this.simulation) return;\n\n if (\n (!this.forceSettings.collideForce || !this.forceSettings.forces) &&\n this.simulation.force(\"collide\")\n ) {\n this.simulation.force(\"collide\", null);\n }\n\n if (this.forceSettings.forces && this.forceSettings.collideForce) {\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusCoefficient: this.nodeSettings.nodeRadiusCoefficient,\n radiusFactor: this.nodeSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n case \"square\": {\n const { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeCoefficient: this.nodeSettings.nodeSizeCoefficient,\n sizeFactor: this.nodeSettings.nodeSizeFactor,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n });\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n case \"text\": {\n let { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeCoefficient: this.nodeSettings.nodeSizeCoefficient,\n sizeFactor: this.nodeSettings.nodeSizeFactor,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n });\n\n if (this.context && nodeOptions.text) {\n const lines =\n this.cachedNodeText[node.id] ??\n getTextLines({\n context: this.context,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n maxWidth: width,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n }).lines;\n\n height =\n lines.length * nodeOptions.textSize +\n (lines.length - 1) * nodeOptions.textGap +\n nodeOptions.textNodeYPadding;\n width += nodeOptions.textNodeXPadding;\n }\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n default: {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusCoefficient: this.nodeSettings.nodeRadiusCoefficient,\n radiusFactor: this.nodeSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n }\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -19,11 +19,50 @@ interface NodeInterface<NodeData extends Record<string, unknown>> extends Simula
19
19
  }
20
20
  type NodeShape = "circle" | "square" | "text" | "icon";
21
21
  type CachedNodeTextInterface = Record<string | number, string[] | undefined>;
22
+ type CachedTextNodeParametersMap = Record<string | number, [number, number] | undefined>;
23
+ /**
24
+ * 1. Initial max size of text
25
+ * 2. Initial size of text
26
+ */
27
+ type CachedTextNodeParametersInterface = [number, number];
22
28
 
23
29
  interface LinkInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> extends SimulationLinkDatum<NodeInterface<NodeData>> {
24
30
  data?: LinkData;
25
31
  }
26
32
 
33
+ type GraphSettingsInputRange<I extends string> = {
34
+ type: "range";
35
+ min: number;
36
+ max: number;
37
+ step: number;
38
+ initialValue: number;
39
+ id: I;
40
+ label: string;
41
+ };
42
+ type GraphSettingsInputCheckBox<I extends string> = {
43
+ type: "checkbox";
44
+ id: I;
45
+ initialValue: boolean;
46
+ label: string;
47
+ };
48
+ type GraphSettingsInputColorBox<I extends string> = {
49
+ type: "color";
50
+ id: I;
51
+ initialValue: string;
52
+ label: string;
53
+ };
54
+ type GraphSettingsInputSelect<I extends string> = {
55
+ type: "select";
56
+ id: I;
57
+ initialValue: string;
58
+ label: string;
59
+ options: {
60
+ label: string;
61
+ value: string;
62
+ }[];
63
+ };
64
+ type GraphSettingsInputInterface<I extends string> = GraphSettingsInputRange<I> | GraphSettingsInputCheckBox<I> | GraphSettingsInputColorBox<I> | GraphSettingsInputSelect<I>;
65
+
27
66
  type ZoomEventInterface = D3ZoomEvent<HTMLCanvasElement, unknown>;
28
67
  type DragEventInterface<NodeData extends Record<string, unknown>> = D3DragEvent<HTMLElement, unknown, NodeInterface<NodeData>>;
29
68
  type ListenersInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
@@ -281,6 +320,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
281
320
  protected draw: (this: GraphCanvas<NodeData, LinkData>) => void;
282
321
  protected eventAbortController: AbortController;
283
322
  protected cachedNodeText: CachedNodeTextInterface;
323
+ protected cachedTextNodeParameters: CachedTextNodeParametersMap;
284
324
  protected linkOptionsCache: Record<string, Required<LinkOptionsInterface<NodeData, LinkData>>>;
285
325
  protected nodeOptionsCache: Record<string, Required<NodeOptionsInterface<NodeData, LinkData>>>;
286
326
  protected isDragging: boolean;
@@ -308,7 +348,6 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
308
348
  protected clearHTMLElements(): void;
309
349
  protected updateSimulation(): void;
310
350
  protected clearState(): void;
311
- protected clearDataDependencies(): void;
312
351
  protected updateData(alpha?: number): void;
313
352
  protected updateSize(): void;
314
353
  protected init(): void;
@@ -405,39 +444,6 @@ declare function fadeRgb(color: RGB, fade: number): RGB;
405
444
 
406
445
  declare function rgbAnimationByProgress(start: RGB, end: RGB, progress: number): RGB;
407
446
 
408
- type GraphSettingsInputRange<I extends string> = {
409
- type: "range";
410
- min: number;
411
- max: number;
412
- step: number;
413
- initialValue: number;
414
- id: I;
415
- label: string;
416
- };
417
- type GraphSettingsInputCheckBox<I extends string> = {
418
- type: "checkbox";
419
- id: I;
420
- initialValue: boolean;
421
- label: string;
422
- };
423
- type GraphSettingsInputColorBox<I extends string> = {
424
- type: "color";
425
- id: I;
426
- initialValue: string;
427
- label: string;
428
- };
429
- type GraphSettingsInputSelect<I extends string> = {
430
- type: "select";
431
- id: I;
432
- initialValue: string;
433
- label: string;
434
- options: {
435
- label: string;
436
- value: string;
437
- }[];
438
- };
439
- type GraphSettingsInputInterface<I extends string> = GraphSettingsInputRange<I> | GraphSettingsInputCheckBox<I> | GraphSettingsInputColorBox<I> | GraphSettingsInputSelect<I>;
440
-
441
447
  declare function getForceControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: (keyof ForceSettingsInterface<NodeData, LinkData>)[]): GraphSettingsInputInterface<keyof ForceSettingsInterface<NodeData, LinkData>>[];
442
448
  declare function getGraphControls<NodeData extends Record<string, unknown>>(keys?: (keyof GraphSettingsInterface<NodeData>)[]): GraphSettingsInputInterface<keyof GraphSettingsInterface<NodeData>>[];
443
449
  declare function getNodeSettingControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: keyof Omit<Required<NodeSettingsInterface<NodeData, LinkData>>, "options" | "idGetter">): GraphSettingsInputInterface<"cache" | "highlightByNodeOnlyRoot" | "highlightByNodeNodeFadingMin" | "highlightByNodeNodeColorFadingMin" | "highlightByNodeNodeSizingAdditional" | "highlightByNodeNodeSizingAdditionalCoefficient" | "highlightByNodeTextFadingMin" | "highlightByNodeTextSizingAdditional" | "highlightByNodeTextShiftXAdditional" | "highlightByNodeTextShiftYAdditional" | "highlightByNodeTextWeightAdditional" | "highlightByNodeTextWidthAdditional" | "highlightByLinkNodeFadingMin" | "highlightByLinkNodeColorFadingMin" | "highlightByLinkTextFadingMin" | "highlightByLinkNodeSizingAdditional" | "highlightByLinkNodeSizingAdditionalCoefficient" | "highlightByLinkTextSizingAdditional" | "highlightByLinkTextShiftXAdditional" | "highlightByLinkTextShiftYAdditional" | "highlightByLinkTextWeightAdditional" | "highlightByLinkTextWidthAdditional" | "highlightByHoverNode" | "highlightByNodeNodeFading" | "highlightByNodeNodeSizing" | "highlightByNodeTextFading" | "highlightByNodeTextSizing" | "highlightByNodeNodeColor" | "highlightByLinkNodeFading" | "highlightByLinkNodeSizing" | "highlightByLinkTextFading" | "highlightByLinkTextSizing" | "highlightByLinkNodeColor" | "nodeRadiusCoefficient" | "nodeRadiusFactor" | "nodeRadiusFlexible" | "nodeSizeFlexible" | "nodeSizeCoefficient" | "nodeSizeFactor" | "textNodeDebug">[];
@@ -445,4 +451,4 @@ declare function getNodeOptionsControls<NodeData extends Record<string, unknown>
445
451
  declare function getLinkSettingsControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: keyof Omit<Required<LinkSettingsInterface<NodeData, LinkData>>, "options">): GraphSettingsInputInterface<"cache" | "particles" | "pretty" | "arrow" | "arrowByHighlight" | "particleFlexSpeed" | "particleFlexSpeedCoefficient" | "highlightByNodeLinkFadingMin" | "highlightByNodeArrowFadingMin" | "highlightByLinkArrowFadingMin" | "highlightByLinkLinkFadingMin" | "highlightByHoverLink" | "highlightByNodeLinkFading" | "highlightByNodeArrowFading" | "highlightByLinkLinkFading" | "highlightByLinkArrowFading" | "hoverLinkThreshold">[];
446
452
  declare function getLinkOptionsControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: (keyof LinkOptionsInterface<NodeData, LinkData>)[]): GraphSettingsInputInterface<keyof LinkOptionsInterface<NodeData, LinkData>>[];
447
453
 
448
- export { type CachedNodeTextInterface, type DragEventInterface, type ForceSettingsInterface, GraphCanvas, type GraphCanvasInterface, type GraphCanvasSimulation, type GraphParticle, type GraphSettingsInterface, type GraphState, type LinkInterface, type LinkIterationPropsInterface, type LinkOptionsInterface, type LinkSettingsInterface, type ListenersInterface, type NodeInterface, type NodeIterationPropsInterface, type NodeOptionsInterface, type NodeSettingsInterface, type NodeShape, type RGB, type TextStyleEnum, type ZoomEventInterface, animationByProgress, calculateLinkPositionByNode, colorToRgb, drawText, extractRgb, fadeRgb, getDrawLink, getDrawNode, getForceControls, getGraphControls, getLinkOptionsControls, getLinkSettingsControls, getNodeOptionsControls, getNodeSettingControls, getParticlePosition, linkByPointerGetter, linkIterationExtractor, linkOptionsGetter, nodeByPointerGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, rgbAnimationByProgress };
454
+ export { type CachedNodeTextInterface, type CachedTextNodeParametersInterface, type CachedTextNodeParametersMap, type DragEventInterface, type ForceSettingsInterface, GraphCanvas, type GraphCanvasInterface, type GraphCanvasSimulation, type GraphParticle, type GraphSettingsInputInterface, type GraphSettingsInterface, type GraphState, type LinkInterface, type LinkIterationPropsInterface, type LinkOptionsInterface, type LinkSettingsInterface, type ListenersInterface, type NodeInterface, type NodeIterationPropsInterface, type NodeOptionsInterface, type NodeSettingsInterface, type NodeShape, type RGB, type TextStyleEnum, type ZoomEventInterface, animationByProgress, calculateLinkPositionByNode, colorToRgb, drawText, extractRgb, fadeRgb, getDrawLink, getDrawNode, getForceControls, getGraphControls, getLinkOptionsControls, getLinkSettingsControls, getNodeOptionsControls, getNodeSettingControls, getParticlePosition, linkByPointerGetter, linkIterationExtractor, linkOptionsGetter, nodeByPointerGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, rgbAnimationByProgress };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krainovsd/graph",
3
- "version": "0.10.0-rc1",
3
+ "version": "0.10.0-rc2",
4
4
  "description": "Krainov graph",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",