@krainovsd/graph 0.2.0 → 0.3.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/lib/esm/index.js +36 -24
- package/lib/esm/index.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/package.json +23 -17
package/lib/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { greatest } from 'd3-array';
|
|
2
2
|
import { drag } from 'd3-drag';
|
|
3
3
|
import { forceLink, forceSimulation, forceX, forceY, forceManyBody, forceCenter, forceCollide } from 'd3-force';
|
|
4
4
|
import { create, select } from 'd3-selection';
|
|
@@ -200,8 +200,7 @@ function dragPlaceCoefficientGetter(node, pointerX, pointerY, radius) {
|
|
|
200
200
|
if (!node.x || !node.y)
|
|
201
201
|
return undefined;
|
|
202
202
|
if (isOverlapsNode(node, radius, pointerX, pointerY))
|
|
203
|
-
return
|
|
204
|
-
return undefined;
|
|
203
|
+
return node.index;
|
|
205
204
|
}
|
|
206
205
|
|
|
207
206
|
function linkIterationExtractor(link, i, links, transform, option, optionConstantGetter) {
|
|
@@ -234,7 +233,7 @@ function nodeByPointerGetter({ areaRect, areaTransform, mouseEvent, nodes, graph
|
|
|
234
233
|
if (!areaRect)
|
|
235
234
|
return undefined;
|
|
236
235
|
const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);
|
|
237
|
-
return nodes
|
|
236
|
+
return greatest(nodes, (node) => {
|
|
238
237
|
const radius = nodeRadiusGetter({
|
|
239
238
|
radiusFlexible: graphSettings.nodeRadiusFlexible,
|
|
240
239
|
radiusInitial: graphSettings.nodeRadiusInitial,
|
|
@@ -242,7 +241,8 @@ function nodeByPointerGetter({ areaRect, areaTransform, mouseEvent, nodes, graph
|
|
|
242
241
|
radiusFactor: graphSettings.nodeRadiusFactor,
|
|
243
242
|
linkCount: node.linkCount,
|
|
244
243
|
});
|
|
245
|
-
|
|
244
|
+
if (isOverlapsNode(node, radius, pointerX, pointerY))
|
|
245
|
+
return node.index;
|
|
246
246
|
});
|
|
247
247
|
}
|
|
248
248
|
|
|
@@ -391,6 +391,10 @@ class GraphCanvas {
|
|
|
391
391
|
this.nodeSettings = nodeSettingsGetter(options.nodeSettings);
|
|
392
392
|
this.updateSettings();
|
|
393
393
|
}
|
|
394
|
+
tick() {
|
|
395
|
+
if (!this.simulationWorking)
|
|
396
|
+
this.draw();
|
|
397
|
+
}
|
|
394
398
|
start() {
|
|
395
399
|
if (this.simulation)
|
|
396
400
|
this.simulation.alpha(1).restart();
|
|
@@ -614,7 +618,9 @@ class GraphCanvas {
|
|
|
614
618
|
this.links.forEach(drawLink.bind(this));
|
|
615
619
|
this.context.stroke();
|
|
616
620
|
/** nodes */
|
|
617
|
-
|
|
621
|
+
const textRenders = [];
|
|
622
|
+
this.nodes.forEach(drawNode(textRenders).bind(this));
|
|
623
|
+
textRenders.forEach((r) => r());
|
|
618
624
|
this.context.restore();
|
|
619
625
|
this.listeners.onDrawFinished?.(this.context, this.areaTransform);
|
|
620
626
|
calculateHighlightFading.bind(this)();
|
|
@@ -645,7 +651,7 @@ class GraphCanvas {
|
|
|
645
651
|
if (this.highlightedNeighbors && this.highlightedNode)
|
|
646
652
|
this.context.stroke();
|
|
647
653
|
}
|
|
648
|
-
function drawNode(node, index) {
|
|
654
|
+
const drawNode = (textRenders) => function drawNode(node, index) {
|
|
649
655
|
if (!this.context || !node.x || !node.y)
|
|
650
656
|
return;
|
|
651
657
|
const nodeOptions = nodeIterationExtractor(node, index, this.nodes, this.areaTransform, this.nodeSettings.options || {}, nodeOptionsGetter);
|
|
@@ -666,21 +672,27 @@ class GraphCanvas {
|
|
|
666
672
|
this.context.globalAlpha = alpha;
|
|
667
673
|
/** text */
|
|
668
674
|
if (nodeOptions.textVisible && nodeOptions.text) {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
675
|
+
textRenders.push(() => {
|
|
676
|
+
if (!this.context || !node.x || !node.y || !nodeOptions.text)
|
|
677
|
+
return;
|
|
678
|
+
this.context.beginPath();
|
|
679
|
+
this.context.globalAlpha = alpha;
|
|
680
|
+
drawText({
|
|
681
|
+
id: node.id,
|
|
682
|
+
cachedNodeText: this.cachedNodeText,
|
|
683
|
+
context: this.context,
|
|
684
|
+
text: nodeOptions.text,
|
|
685
|
+
textAlign: nodeOptions.textAlign,
|
|
686
|
+
textColor: nodeOptions.textColor,
|
|
687
|
+
textFont: nodeOptions.textFont,
|
|
688
|
+
textSize: nodeOptions.textSize,
|
|
689
|
+
x: node.x + nodeOptions.textShiftX,
|
|
690
|
+
y: node.y + radius + nodeOptions.textShiftY,
|
|
691
|
+
maxWidth: nodeOptions.textWidth,
|
|
692
|
+
textStyle: nodeOptions.textStyle,
|
|
693
|
+
textWeight: nodeOptions.textWeight,
|
|
694
|
+
textGap: nodeOptions.textGap,
|
|
695
|
+
});
|
|
684
696
|
});
|
|
685
697
|
}
|
|
686
698
|
/** circle */
|
|
@@ -690,7 +702,7 @@ class GraphCanvas {
|
|
|
690
702
|
this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);
|
|
691
703
|
this.context.fill();
|
|
692
704
|
this.context.stroke();
|
|
693
|
-
}
|
|
705
|
+
};
|
|
694
706
|
return draw;
|
|
695
707
|
}
|
|
696
708
|
initResize() {
|
|
@@ -819,7 +831,7 @@ class GraphCanvas {
|
|
|
819
831
|
const mouseEvent = event.sourceEvent;
|
|
820
832
|
const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);
|
|
821
833
|
let index = 0;
|
|
822
|
-
return
|
|
834
|
+
return greatest(this.nodes, (node) => {
|
|
823
835
|
if (!node.x || !node.y)
|
|
824
836
|
return undefined;
|
|
825
837
|
const nodeOptions = nodeIterationExtractor(node, index, this.nodes, this.areaTransform, this.nodeSettings.options || {}, nodeOptionsGetter);
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/lib/check-type.ts","../../src/lib/color-getter.ts","../../src/module/GraphCanvas/constants/settings.ts","../../src/module/GraphCanvas/lib/settings/force-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/graph-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/link-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/listeners-getter.ts","../../src/module/GraphCanvas/lib/settings/node-settings-getter.ts","../../src/module/GraphCanvas/lib/utils/pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts","../../src/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.ts","../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/node-by-pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/draw-text.ts","../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["export function checkType<T>(value: unknown, condition: boolean): value is T {\n return condition;\n}\n","export function colorGetter() {\n const chosenColors: Record<string, string> = {};\n const colors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n let cursor = 0;\n\n return function color(key: string) {\n if (chosenColors[key]) return chosenColors[key];\n\n chosenColors[key] = colors[cursor];\n cursor++;\n\n if (cursor >= colors.length) cursor = 0;\n\n return chosenColors[key];\n };\n}\n","import { dragPlaceCoefficientGetter } from \"../lib\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n NodeOptionsInterface,\n} from \"../types\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n collideOn: true,\n chargeStrength: -40,\n chargeDistanceMax: Infinity,\n chargeDistanceMin: 1,\n xForce: 0,\n xStrength: 0.1,\n yForce: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomExtent: [0.1, 20] as [number, number],\n stickAfterDrag: false,\n highlightByHover: false,\n highlightFadingMin: 0.21,\n highlightDownStep: 0.09,\n highlightUpStep: 0.09,\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n nodeRadiusInitial: 4,\n nodeRadiusCoefficient: 5,\n nodeRadiusFactor: 1,\n nodeRadiusFlexible: true,\n};\n\nexport const NODE_SETTINGS: Omit<\n Required<NodeOptionsInterface>,\n \"color\" | \"text\" | \"textVisible\" | \"textSize\" | \"textShiftY\"\n> = {\n alpha: 1,\n borderColor: \"#000000FF\",\n borderWidth: 0.1,\n textWidth: 20,\n textShiftX: 0,\n textFont: \"Arial\",\n textAlign: \"center\" as CanvasTextAlign,\n textColor: \"#333\",\n width: 1,\n radius: 4,\n textStyle: \"normal\",\n textWeight: \"500\",\n textGap: 1,\n};\n\nexport const LINK_SETTINGS: Omit<Required<LinkOptionsInterface>, \"color\" | \"width\"> = {\n alpha: 1,\n};\n\nexport const COMMON_SETTINGS = {\n linkColorZoomFar: \"#999\",\n linkColorZoomNear: \"#000000FF\",\n linkWidthZoomFar: 1,\n linkWidthZoomNear: 0.1,\n linkWidthZoomBorder: 1,\n linkColorZoomBorder: 1,\n nodeTextScaleMin: 1.5,\n nodeTextScaleMax: 20,\n nodeTextSizeMin: 1.5,\n nodeTextSizeMax: 3.5,\n nodeTextShiftYMin: 2.5,\n nodeTextShiftYMax: 4,\n nodeTextChangeStepCount: 200,\n};\n","import { FORCE_SETTINGS } from \"../../constants\";\nimport type { ForceSettingsInterface } from \"../../types\";\n\nexport function forceSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ForceSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<ForceSettingsInterface<NodeData, LinkData>>,\n): Required<ForceSettingsInterface<NodeData, LinkData>> {\n return {\n ...(prevSettings ?? FORCE_SETTINGS),\n ...settings,\n };\n}\n","import { GRAPH_SETTINGS } from \"../../constants\";\nimport type { GraphSettingsInterface } from \"../../types\";\n\nexport function graphSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: GraphSettingsInterface<NodeData> | undefined,\n prevSettings?: Required<GraphSettingsInterface<NodeData>>,\n): Required<GraphSettingsInterface<NodeData>> {\n return {\n ...(prevSettings ?? GRAPH_SETTINGS),\n ...settings,\n };\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport type { LinkInterface } from \"@/types\";\nimport { COMMON_SETTINGS, LINK_SETTINGS } from \"../../constants\";\nimport type { LinkOptionsInterface, LinkSettingsInterface } from \"../../types\";\n\nexport function linkSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: LinkSettingsInterface<NodeData, LinkData> | undefined,\n): Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\"> {\n return { options: settings?.options };\n}\n\nexport function linkOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n _: LinkInterface<NodeData, LinkData>,\n __: number,\n ___: LinkInterface<NodeData, LinkData>[],\n transform?: ZoomTransform | null,\n): Required<LinkOptionsInterface> {\n return {\n ...LINK_SETTINGS,\n color:\n transform && transform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n width:\n transform && transform.k > COMMON_SETTINGS.linkWidthZoomBorder\n ? COMMON_SETTINGS.linkWidthZoomNear\n : COMMON_SETTINGS.linkWidthZoomFar,\n };\n}\n","import type { ListenersInterface } from \"../../types\";\n\nexport function listenersGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ListenersInterface<NodeData, LinkData> | undefined,\n): ListenersInterface<NodeData, LinkData> {\n return settings || {};\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { colorGetter } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport { COMMON_SETTINGS, NODE_SETTINGS } from \"../../constants\";\nimport type { NodeOptionsInterface, NodeSettingsInterface } from \"../../types\";\n\nexport function nodeSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: NodeSettingsInterface<NodeData> | undefined,\n): Required<Omit<NodeSettingsInterface<NodeData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData>, \"options\"> {\n return {\n idGetter: settings?.idGetter ?? nodeIdGetter,\n options: settings?.options,\n };\n}\n\nconst color = colorGetter();\n\nexport function nodeOptionsGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n _: number,\n __: NodeInterface<NodeData>[],\n transform?: ZoomTransform,\n): Required<NodeOptionsInterface> {\n const { textShiftY, textSize } = nodeTextSizeGetter(transform);\n\n return {\n ...NODE_SETTINGS,\n color: color(String(node.group || \"_DEFAULT\")),\n textVisible: Boolean(transform && transform.k > COMMON_SETTINGS.nodeTextScaleMin),\n text: node.id != undefined ? String(node.id) : null,\n textShiftY,\n textSize,\n };\n}\n\nexport function nodeTextSizeGetter(transform: ZoomTransform | undefined) {\n let textSize: number = COMMON_SETTINGS.nodeTextSizeMax;\n let textShiftY: number = COMMON_SETTINGS.nodeTextShiftYMax;\n\n if (transform) {\n const scaleStepCoefficient =\n (COMMON_SETTINGS.nodeTextScaleMax - COMMON_SETTINGS.nodeTextScaleMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const textStepCoefficient =\n (COMMON_SETTINGS.nodeTextSizeMax - COMMON_SETTINGS.nodeTextSizeMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const shiftStepCoefficient =\n (COMMON_SETTINGS.nodeTextShiftYMax - COMMON_SETTINGS.nodeTextShiftYMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n\n if (transform.k >= COMMON_SETTINGS.nodeTextScaleMax) {\n textSize = COMMON_SETTINGS.nodeTextSizeMin;\n textShiftY = COMMON_SETTINGS.nodeTextShiftYMin;\n } else if (transform.k > COMMON_SETTINGS.nodeTextScaleMin) {\n const transformSteps =\n (transform.k - COMMON_SETTINGS.nodeTextScaleMin) / scaleStepCoefficient;\n\n textSize -= transformSteps * textStepCoefficient;\n textShiftY -= transformSteps * shiftStepCoefficient;\n }\n }\n\n return { textSize, textShiftY };\n}\n\nexport type NodeRadiusGetterOptions = {\n linkCount: number | undefined;\n radiusFlexible: boolean;\n radiusCoefficient: number;\n radiusFactor: number;\n radiusInitial: number;\n};\n\nexport function nodeRadiusGetter({\n radiusFlexible,\n radiusInitial,\n linkCount,\n radiusCoefficient,\n radiusFactor,\n}: NodeRadiusGetterOptions) {\n return (\n (radiusFlexible && linkCount ? linkCount / radiusCoefficient : 0) * radiusFactor + radiusInitial\n );\n}\n\nexport function nodeIdGetter<NodeData extends Record<string, unknown>>(d: NodeInterface<NodeData>) {\n return d.id;\n}\n","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","import type { NodeInterface } from \"@/types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n radius: number,\n pointerX: number,\n pointerY: number,\n) {\n if (node.x == undefined || node.y == undefined) return false;\n\n const isOverX = node.x - radius <= pointerX && pointerX <= node.x + radius;\n const isOverY = node.y - radius <= pointerY && pointerY <= node.y + radius;\n\n return isOverX && isOverY;\n}\n","import type { NodeInterface } from \"@/types\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\n\nexport function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number,\n): number | undefined {\n if (!node.x || !node.y) return undefined;\n\n if (isOverlapsNode(node, radius, pointerX, pointerY))\n return (node.x - pointerX) ** 2 + (node.y - pointerY) ** 2;\n\n return undefined;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { LinkIterationPropsInterface } from \"../../types\";\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>,\n): Required<Result>;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>\n | undefined,\n): Result {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(link, i, links, transform);\n else customOptions = option;\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, transform);\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(constantOptions)),\n )\n ) {\n return {\n ...constantOptions,\n ...((customOptions as Record<string, unknown> | undefined) || {}),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphSettingsInterface } from \"../../types\";\nimport { nodeRadiusGetter } from \"../settings\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type NodeByPointerGetterOptions<NodeData extends Record<string, unknown>> = {\n mouseEvent: MouseEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n nodes: NodeInterface<NodeData>[];\n\n graphSettings: Required<GraphSettingsInterface<NodeData>>;\n};\n\nexport function nodeByPointerGetter<NodeData extends Record<string, unknown>>({\n areaRect,\n areaTransform,\n mouseEvent,\n nodes,\n graphSettings,\n}: NodeByPointerGetterOptions<NodeData>): NodeInterface<NodeData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return nodes.find((node) => {\n const radius = nodeRadiusGetter({\n radiusFlexible: graphSettings.nodeRadiusFlexible,\n radiusInitial: graphSettings.nodeRadiusInitial,\n radiusCoefficient: graphSettings.nodeRadiusCoefficient,\n radiusFactor: graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return isOverlapsNode(node, radius, pointerX, pointerY);\n });\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, Result> | Result | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, transform);\n else customOptions = option;\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, transform);\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(constantOptions)),\n )\n ) {\n return {\n ...constantOptions,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...((customOptions as Record<string, unknown> | undefined) || {}),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import type { CachedNodeTextInterface } from \"@/types\";\nimport type { TextStyleEnum, TextWeightEnum } from \"../../types\";\n\nexport type DrawTextOptions = {\n id: string | number;\n x: number;\n y: number;\n text: string;\n textSize: number;\n textStyle: TextStyleEnum;\n textWeight: TextWeightEnum;\n textFont: string;\n textColor: string;\n textGap: number;\n textAlign: CanvasTextAlign;\n context: CanvasRenderingContext2D;\n cachedNodeText: CachedNodeTextInterface;\n maxWidth?: number;\n};\n\nconst SPACE = \" \";\n\nexport function drawText({\n context,\n id,\n textAlign,\n textColor,\n textFont,\n textStyle,\n textGap,\n textWeight,\n textSize,\n text,\n x,\n y,\n cachedNodeText,\n maxWidth,\n}: DrawTextOptions) {\n context.font = `${textStyle} normal ${textWeight} ${textSize}px ${textFont}`;\n context.fillStyle = textColor;\n context.textAlign = textAlign;\n\n if (cachedNodeText[id] != undefined) {\n cachedNodeText[id].forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n\n return;\n }\n\n if (maxWidth == undefined || context.measureText(text).width <= maxWidth) {\n cachedNodeText[id] = [text];\n context.fillText(text, x, y);\n\n return;\n }\n\n const spaceWidth = context.measureText(\" \").width;\n const lines: string[] = [];\n let lineWidth = 0;\n let line = \"\";\n\n for (const word of text.split(\" \")) {\n const size = context.measureText(word).width;\n lineWidth += size;\n\n if (line === \"\") {\n line = word;\n\n continue;\n }\n if (lineWidth > maxWidth) {\n lineWidth = 0;\n lines.push(line);\n line = word;\n } else {\n lineWidth += spaceWidth;\n line += `${SPACE}${word}`;\n }\n }\n\n if (line !== \"\") lines.push(line);\n\n cachedNodeText[id] = lines;\n lines.forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n}\n","import { least } from \"d3-array\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { create as d3Create, select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom, zoomIdentity } from \"d3-zoom\";\nimport { debounce } from \"@/lib\";\nimport type { LinkInterface } from \"@/types/links\";\nimport type { CachedNodeTextInterface, NodeInterface } from \"@/types/nodes\";\nimport {\n drawText,\n forceSettingsGetter,\n graphSettingsGetter,\n linkIterationExtractor,\n linkOptionsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeByPointerGetter,\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSettingsGetter,\n pointerGetter,\n} from \"./lib\";\nimport type {\n DragEventInterface,\n ForceSettingsInterface,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphSettingsInterface,\n LinkSettingsInterface,\n ListenersInterface,\n NodeSettingsInterface,\n ZoomEventInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n private nodes: NodeInterface<NodeData>[];\n\n private links: LinkInterface<NodeData, LinkData>[];\n\n private width: number;\n\n private height: number;\n\n private root: HTMLElement;\n\n private container: HTMLDivElement | undefined | null;\n\n private area: HTMLCanvasElement | null | undefined;\n\n private dpi = devicePixelRatio;\n\n /** settings */\n\n private graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n private forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n private nodeSettings: Required<Omit<NodeSettingsInterface<NodeData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData>, \"options\">;\n\n private linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n private context: CanvasRenderingContext2D | null | undefined;\n\n private simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n private areaTransform: ZoomTransform = zoomIdentity;\n\n private areaRect: DOMRect | undefined;\n\n private draw: (this: GraphCanvas<NodeData, LinkData>) => void;\n\n private eventAbortController: AbortController;\n\n private cachedNodeText: CachedNodeTextInterface = {};\n\n private simulationWorking: boolean = false;\n\n private isDragging: boolean = false;\n\n private highlightedNode: NodeInterface<NodeData> | null = null;\n\n private highlightedNeighbors: Set<string | number> | null = null;\n\n private highlighFading: number = 1;\n\n private highlightFadingWorking: boolean = false;\n\n private highlightDrawing: boolean = false;\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n this.draw = this.initDraw();\n\n this.init();\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n changeData(options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined) this.updateData();\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n ) {\n if (options.graphSettings)\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n if (options.forceSettings)\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n if (options.linkSettings) this.linkSettings = linkSettingsGetter(options.linkSettings);\n if (options.nodeSettings) this.nodeSettings = nodeSettingsGetter(options.nodeSettings);\n\n this.updateSettings();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n\n this.clearState();\n this.clearDataDependencies();\n }\n\n private updateSettings() {\n if (this.simulation) {\n this.initSimulationForces();\n this.simulation.alpha(1);\n this.simulation.restart();\n }\n }\n\n private clearState() {\n this.isDragging = false;\n this.simulationWorking = false;\n this.highlightedNode = null;\n this.highlightedNeighbors = null;\n this.highlighFading = 1;\n this.highlightFadingWorking = false;\n this.highlightDrawing = false;\n }\n\n private clearDataDependencies() {\n this.cachedNodeText = {};\n }\n\n private updateData() {\n this.clearDataDependencies();\n\n if (this.simulation) {\n this.initCollideForce();\n\n this.simulation\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter)\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations),\n )\n .alpha(0.5)\n .restart();\n }\n }\n\n private updateSize() {\n if (!this.area || !this.simulation || !this.container) return;\n\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n this.area.width = this.dpi * width;\n this.area.height = this.dpi * height;\n this.areaRect = this.area.getBoundingClientRect();\n\n this.simulation.alpha(0.1).restart();\n\n if (!this.simulationWorking) this.draw();\n }\n\n private init() {\n this.initArea();\n this.initSimulation();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n }\n\n private initSimulation() {\n if (!this.simulation) {\n this.simulation = forceSimulation<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >()\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.simulationWorking = true;\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.simulation);\n this.simulationWorking = false;\n });\n this.initSimulationForces();\n }\n }\n\n private initSimulationForces() {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as ForceLink<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >;\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n\n this.simulation\n .force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xForce).strength(\n this.forceSettings.xStrength,\n ),\n )\n .force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yForce).strength(\n this.forceSettings.yStrength,\n ),\n )\n .force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n )\n .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 this.initCollideForce();\n }\n\n private initCollideForce() {\n if (!this.simulation) return;\n\n if (!this.forceSettings.collideOn) {\n if (this.simulation.force(\"collide\")) this.simulation.force(\"collide\", null);\n\n return;\n }\n\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) this.simulation.force(\"collide\", null);\n else if (!this.simulation.force(\"collide\"))\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.forceSettings.collideIterations,\n undefined,\n );\n }\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n\n return radius + this.forceSettings.collideAdditionalRadius;\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n\n private initArea() {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n }\n }\n\n private initDraw() {\n function calculateHighlightFading(this: GraphCanvas<NodeData, LinkData>) {\n this.highlightDrawing = true;\n\n if (!this.highlightFadingWorking) {\n switch (true) {\n case this.highlighFading < 1: {\n this.highlighFading += this.graphSettings.highlightUpStep;\n break;\n }\n default: {\n if (this.highlightedNeighbors) this.highlightedNeighbors = null;\n if (this.highlightedNode) this.highlightedNode = null;\n break;\n }\n }\n\n if (this.highlighFading < 1 && !this.simulationWorking)\n return void requestAnimationFrame(() => this.draw());\n }\n if (this.highlightFadingWorking) {\n switch (true) {\n case this.highlighFading > this.graphSettings.highlightFadingMin: {\n this.highlighFading -= this.graphSettings.highlightDownStep;\n break;\n }\n default: {\n break;\n }\n }\n\n if (this.highlighFading > this.graphSettings.highlightFadingMin && !this.simulationWorking)\n return void requestAnimationFrame(() => this.draw());\n }\n\n this.highlightDrawing = false;\n }\n\n function draw(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.context) return;\n\n if (this.listeners.onDraw) {\n return void this.listeners.onDraw(this.context, this.areaTransform);\n }\n\n this.context.save();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.translate(this.areaTransform.x, this.areaTransform.y);\n this.context.scale(this.areaTransform.k, this.areaTransform.k);\n\n /** links */\n this.context.beginPath();\n this.links.forEach(drawLink.bind(this));\n this.context.stroke();\n\n /** nodes */\n this.nodes.forEach(drawNode.bind(this));\n\n this.context.restore();\n\n this.listeners.onDrawFinished?.(this.context, this.areaTransform);\n\n calculateHighlightFading.bind(this)();\n }\n\n function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n const linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n this.areaTransform,\n this.linkSettings.options || {},\n linkOptionsGetter,\n );\n\n let alpha = linkOptions.alpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n if (\n this.highlightedNode.id != link.source.id &&\n this.highlightedNode.id != link.target.id\n ) {\n alpha = this.highlighFading;\n }\n\n this.context.beginPath();\n }\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = linkOptions.color;\n this.context.lineWidth = linkOptions.width;\n this.context.moveTo(link.source.x, link.source.y);\n this.context.lineTo(link.target.x, link.target.y);\n\n if (this.highlightedNeighbors && this.highlightedNode) this.context.stroke();\n }\n\n function drawNode(\n this: GraphCanvas<NodeData, LinkData>,\n node: NodeInterface<NodeData>,\n index: number,\n ) {\n if (!this.context || !node.x || !node.y) return;\n\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n\n let alpha = nodeOptions.alpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n alpha = this.highlighFading;\n }\n }\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n\n /** text */\n if (nodeOptions.textVisible && nodeOptions.text) {\n drawText({\n id: node.id,\n cachedNodeText: this.cachedNodeText,\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 x: node.x + nodeOptions.textShiftX,\n y: node.y + radius + nodeOptions.textShiftY,\n maxWidth: nodeOptions.textWidth,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n textGap: nodeOptions.textGap,\n });\n }\n /** circle */\n this.context.lineWidth = nodeOptions.borderWidth;\n this.context.strokeStyle = nodeOptions.borderColor;\n this.context.fillStyle = nodeOptions.color;\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n\n this.context.fill();\n this.context.stroke();\n }\n\n return draw;\n }\n\n private initResize() {\n if (!this.area) throw new Error(\"bad init data\");\n\n const resize = debounce(() => {\n this.updateSize();\n }, 10);\n\n window.addEventListener(\n \"resize\",\n () => {\n requestAnimationFrame(() => {\n resize();\n });\n },\n { signal: this.eventAbortController.signal },\n );\n }\n\n private initPointer() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n this.area.addEventListener(\n \"pointermove\",\n (event) => {\n let currentNode: NodeInterface<NodeData> | undefined;\n\n if (this.graphSettings.highlightByHover && !this.isDragging) {\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n if (currentNode && currentNode.neighbors && this.highlightedNode !== currentNode) {\n this.highlightedNode = currentNode;\n this.highlightedNeighbors = new Set(this.highlightedNode.neighbors);\n this.highlightFadingWorking = true;\n\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n } else if (!currentNode && this.highlightedNode) {\n this.highlightFadingWorking = false;\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n }\n }\n\n if (!this.listeners.onMove) return;\n\n if (!currentNode)\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onMove(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n this.area.addEventListener(\"dblclick\", (event) => {\n if (!this.listeners.onDoubleClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onDoubleClick(event, currentNode);\n });\n\n this.area.addEventListener(\n \"pointerup\",\n (event) => {\n if (this.isDragging) return;\n if (event.button === 0) {\n if (!this.listeners.onClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onClick(event, currentNode);\n }\n if (event.button === 1) {\n if (!this.listeners.onWheelClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onWheelClick(event, currentNode);\n }\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n this.area.addEventListener(\n \"contextmenu\",\n (event) => {\n if (!this.listeners.onContextMenu) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onContextMenu(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n }\n\n private initDnd() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n d3Select(this.area).call(\n d3Drag<HTMLCanvasElement, unknown>()\n .subject((event: DragEventInterface<NodeData>) => {\n if (this.listeners.onDragSubject) {\n return this.listeners.onDragSubject(event, this.areaTransform, this.nodes);\n }\n\n if (!this.areaRect) return;\n\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n\n let index = 0;\n\n return least(this.nodes, (node) => {\n if (!node.x || !node.y) return undefined;\n\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n index++;\n\n return this.graphSettings.dragPlaceCoefficient(node, pointerX, pointerY, radius);\n });\n })\n .on(\"start\", (event: DragEventInterface<NodeData>) => {\n this.listeners.onStartDragFinished?.(event, this.simulation, this.areaTransform);\n })\n .on(\"drag\", (event: DragEventInterface<NodeData>) => {\n if (!this.isDragging) {\n this.isDragging = true;\n if (this.simulation) this.simulation.alphaTarget(0.3).restart();\n }\n\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n\n this.listeners.onMoveDragFinished?.(event, this.simulation, this.areaTransform);\n })\n .on(\"end\", (event: DragEventInterface<NodeData>) => {\n this.isDragging = false;\n\n if (!event.active && this.simulation) this.simulation.alphaTarget(0);\n\n if (this.graphSettings.stickAfterDrag && this.areaRect) {\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(\n mouseEvent,\n this.areaRect,\n this.areaTransform,\n );\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n } else {\n event.subject.fx = null;\n event.subject.fy = null;\n }\n\n this.listeners.onEndDragFinished?.(event, this.simulation, this.areaTransform);\n }),\n );\n }\n\n private initZoom() {\n if (!this.area) throw new Error(\"bad init data\");\n\n d3Select(this.area)\n .call(\n zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(this.graphSettings.zoomExtent)\n .on(\"zoom\", (event: ZoomEventInterface) => {\n this.listeners.onZoom?.(event);\n this.areaTransform = event.transform;\n\n if (!this.simulationWorking) requestAnimationFrame(() => this.draw());\n }),\n )\n .on(\"dblclick.zoom\", null);\n\n this.areaTransform = new ZoomTransform(1, this.width / 2, this.height / 2);\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n }\n}\n"],"names":["d3Create","d3Select","d3Drag"],"mappings":";;;;;;;AAAgB,SAAA,SAAS,CAAI,KAAc,EAAE,SAAkB,EAAA;AAC7D,IAAA,OAAO,SAAS,CAAC;AACnB;;SCFgB,WAAW,GAAA;IACzB,MAAM,YAAY,GAA2B,EAAE,CAAC;AAChD,IAAA,MAAM,MAAM,GAAG;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV,CAAC;IACF,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,SAAS,KAAK,CAAC,GAAW,EAAA;QAC/B,IAAI,YAAY,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAEhD,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,MAAM,EAAE,CAAC;AAET,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,CAAC;AAExC,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAC,CAAC;AACJ;;AClBO,MAAM,cAAc,GAEvB;AACF,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACrC,IAAA,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,CAAC,EAAE;AACnB,IAAA,iBAAiB,EAAE,QAAQ;AAC3B,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,IAAI;CACpB,CAAC;AAEK,MAAM,cAAc,GAA8D;AACvF,IAAA,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAqB;AACzC,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,oBAAoB,EAAE,0BAA0B;AAChD,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,qBAAqB,EAAE,CAAC;AACxB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEK,MAAM,aAAa,GAGtB;AACF,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,SAAS,EAAE,QAA2B;AACtC,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,OAAO,EAAE,CAAC;CACX,CAAC;AAEK,MAAM,aAAa,GAA4D;AACpF,IAAA,KAAK,EAAE,CAAC;CACT,CAAC;AAEK,MAAM,eAAe,GAAG;AAC7B,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,iBAAiB,EAAE,WAAW;AAC9B,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,uBAAuB,EAAE,GAAG;CAC7B;;AC/Ee,SAAA,mBAAmB,CAIjC,QAAgE,EAChE,YAAmE,EAAA;IAEnE,OAAO;AACL,QAAA,IAAI,YAAY,IAAI,cAAc,CAAC;AACnC,QAAA,GAAG,QAAQ;KACZ,CAAC;AACJ;;ACXgB,SAAA,mBAAmB,CACjC,QAAsD,EACtD,YAAyD,EAAA;IAEzD,OAAO;AACL,QAAA,IAAI,YAAY,IAAI,cAAc,CAAC;AACnC,QAAA,GAAG,QAAQ;KACZ,CAAC;AACJ;;ACNM,SAAU,kBAAkB,CAIhC,QAA+D,EAAA;AAG/D,IAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC;AAEK,SAAU,iBAAiB,CAI/B,CAAoC,EACpC,EAAU,EACV,GAAwC,EACxC,SAAgC,EAAA;IAEhC,OAAO;AACL,QAAA,GAAG,aAAa;QAChB,KAAK,EACH,SAAS,IAAI,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,mBAAmB;cAC1D,eAAe,CAAC,iBAAiB;cACjC,eAAe,CAAC,gBAAgB;QACtC,KAAK,EACH,SAAS,IAAI,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,mBAAmB;cAC1D,eAAe,CAAC,iBAAiB;cACjC,eAAe,CAAC,gBAAgB;KACvC,CAAC;AACJ;;ACjCM,SAAU,eAAe,CAI7B,QAA4D,EAAA;IAE5D,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB;;ACHM,SAAU,kBAAkB,CAChC,QAAqD,EAAA;IAGrD,OAAO;AACL,QAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,YAAY;QAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;AAEtB,SAAU,iBAAiB,CAC/B,IAA6B,EAC7B,CAAS,EACT,EAA6B,EAC7B,SAAyB,EAAA;IAEzB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE/D,OAAO;AACL,QAAA,GAAG,aAAa;QAChB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;AAC9C,QAAA,WAAW,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,CAAC;AACjF,QAAA,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI;QACnD,UAAU;QACV,QAAQ;KACT,CAAC;AACJ,CAAC;AAEK,SAAU,kBAAkB,CAAC,SAAoC,EAAA;AACrE,IAAA,IAAI,QAAQ,GAAW,eAAe,CAAC,eAAe,CAAC;AACvD,IAAA,IAAI,UAAU,GAAW,eAAe,CAAC,iBAAiB,CAAC;IAE3D,IAAI,SAAS,EAAE;QACb,MAAM,oBAAoB,GACxB,CAAC,eAAe,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB;YACpE,eAAe,CAAC,uBAAuB,CAAC;QAC1C,MAAM,mBAAmB,GACvB,CAAC,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe;YAClE,eAAe,CAAC,uBAAuB,CAAC;QAC1C,MAAM,oBAAoB,GACxB,CAAC,eAAe,CAAC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB;YACtE,eAAe,CAAC,uBAAuB,CAAC;QAE1C,IAAI,SAAS,CAAC,CAAC,IAAI,eAAe,CAAC,gBAAgB,EAAE;AACnD,YAAA,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC;AAC3C,YAAA,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC;SAChD;aAAM,IAAI,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,EAAE;AACzD,YAAA,MAAM,cAAc,GAClB,CAAC,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,IAAI,oBAAoB,CAAC;AAE1E,YAAA,QAAQ,IAAI,cAAc,GAAG,mBAAmB,CAAC;AACjD,YAAA,UAAU,IAAI,cAAc,GAAG,oBAAoB,CAAC;SACrD;KACF;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAUe,SAAA,gBAAgB,CAAC,EAC/B,cAAc,EACd,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,YAAY,GACY,EAAA;IACxB,QACE,CAAC,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,iBAAiB,GAAG,CAAC,IAAI,YAAY,GAAG,aAAa,EAChG;AACJ,CAAC;AAEK,SAAU,YAAY,CAA2C,CAA0B,EAAA;IAC/F,OAAO,CAAC,CAAC,EAAE,CAAC;AACd;;SCtFgB,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,CAAC;AACpF,IAAA,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;AAEnF,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClB;;ACTM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,MAAc,EACd,QAAgB,EAChB,QAAgB,EAAA;IAEhB,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS;AAAE,QAAA,OAAO,KAAK,CAAC;AAE7D,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AAC3E,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAE3E,OAAO,OAAO,IAAI,OAAO,CAAC;AAC5B;;ACXM,SAAU,0BAA0B,CACxC,IAA6B,EAC7B,QAAgB,EAChB,QAAgB,EAChB,MAAc,EAAA;IAEd,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS,CAAC;IAEzC,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAClD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC;AAE7D,IAAA,OAAO,SAAS,CAAC;AACnB;;ACkBgB,SAAA,sBAAsB,CAKpC,IAAuC,EACvC,CAAS,EACT,KAA0C,EAC1C,SAAwB,EACxB,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC,CAAC;AACtC,IAAA,IAAI,eAAmC,CAAC;IAExC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;QAC/E,aAAa,GAAG,MAAM,CAAC;IAE5B,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;YAC/D,eAAe,GAAG,oBAAoB,CAAC;AAE5C,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,eAAe,CAAC,CAAC,CACzE,EACD;YACA,OAAO;AACL,gBAAA,GAAG,eAAe;AAClB,gBAAA,IAAK,aAAqD,IAAI,EAAE,CAAC;aACxD,CAAC;SACb;KACF;AAED,IAAA,OAAO,aAAa,CAAC;AACvB;;AC7DgB,SAAA,mBAAmB,CAA2C,EAC5E,QAAQ,EACR,aAAa,EACb,UAAU,EACV,KAAK,EACL,aAAa,GACwB,EAAA;AACrC,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS,CAAC;AAEhC,IAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAEhF,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;QACzB,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,cAAc,EAAE,aAAa,CAAC,kBAAkB;YAChD,aAAa,EAAE,aAAa,CAAC,iBAAiB;YAC9C,iBAAiB,EAAE,aAAa,CAAC,qBAAqB;YACtD,YAAY,EAAE,aAAa,CAAC,gBAAgB;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1D,KAAC,CAAC,CAAC;AACL;;ACXgB,SAAA,sBAAsB,CAIpC,IAA6B,EAC7B,CAAS,EACT,KAAgC,EAChC,SAAwB,EACxB,MAA8D,EAC9D,oBAAwF,EAAA;AAExF,IAAA,IAAI,aAAiC,CAAC;AACtC,IAAA,IAAI,eAAmC,CAAC;IAExC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;QAC/E,aAAa,GAAG,MAAM,CAAC;IAE5B,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;YAC/D,eAAe,GAAG,oBAAoB,CAAC;AAE5C,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,eAAe,CAAC,CAAC,CACzE,EACD;YACA,OAAO;AACL,gBAAA,GAAG,eAAe;;AAElB,gBAAA,IAAK,aAAqD,IAAI,EAAE,CAAC;aACxD,CAAC;SACb;KACF;AAED,IAAA,OAAO,aAAa,CAAC;AACvB;;AChDA,MAAM,KAAK,GAAG,GAAG,CAAC;AAEF,SAAA,QAAQ,CAAC,EACvB,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,CAAC,EACD,CAAC,EACD,cAAc,EACd,QAAQ,GACQ,EAAA;AAChB,IAAA,OAAO,CAAC,IAAI,GAAG,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,CAAC;AAC7E,IAAA,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,IAAA,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAE9B,IAAA,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE;QACnC,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACzC,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;QAEH,OAAO;KACR;AAED,IAAA,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,EAAE;AACxE,QAAA,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,OAAO;KACR;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QAC7C,SAAS,IAAI,IAAI,CAAC;AAElB,QAAA,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,IAAI,GAAG,IAAI,CAAC;YAEZ,SAAS;SACV;AACD,QAAA,IAAI,SAAS,GAAG,QAAQ,EAAE;YACxB,SAAS,GAAG,CAAC,CAAC;AACd,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC;SACb;aAAM;YACL,SAAS,IAAI,UAAU,CAAC;AACxB,YAAA,IAAI,IAAI,CAAG,EAAA,KAAK,CAAG,EAAA,IAAI,EAAE,CAAC;SAC3B;KACF;IAED,IAAI,IAAI,KAAK,EAAE;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAElC,IAAA,cAAc,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC5B,QAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;AACpE,KAAC,CAAC,CAAC;AACL;;MC3Ca,WAAW,CAAA;;AAMd,IAAA,KAAK,CAA4B;AAEjC,IAAA,KAAK,CAAsC;AAE3C,IAAA,KAAK,CAAS;AAEd,IAAA,MAAM,CAAS;AAEf,IAAA,IAAI,CAAc;AAElB,IAAA,SAAS,CAAoC;AAE7C,IAAA,IAAI,CAAuC;IAE3C,GAAG,GAAG,gBAAgB,CAAC;;AAIvB,IAAA,aAAa,CAA6C;AAE1D,IAAA,aAAa,CAAuD;AAEpE,IAAA,YAAY,CAC+B;AAE3C,IAAA,YAAY,CACyC;AAErD,IAAA,SAAS,CAAyC;;AAIlD,IAAA,OAAO,CAA8C;AAErD,IAAA,UAAU,CAAwD;IAElE,aAAa,GAAkB,YAAY,CAAC;AAE5C,IAAA,QAAQ,CAAsB;AAE9B,IAAA,IAAI,CAAkD;AAEtD,IAAA,oBAAoB,CAAkB;IAEtC,cAAc,GAA4B,EAAE,CAAC;IAE7C,iBAAiB,GAAY,KAAK,CAAC;IAEnC,UAAU,GAAY,KAAK,CAAC;IAE5B,eAAe,GAAmC,IAAI,CAAC;IAEvD,oBAAoB,GAAgC,IAAI,CAAC;IAEzD,cAAc,GAAW,CAAC,CAAC;IAE3B,sBAAsB,GAAY,KAAK,CAAC;IAExC,gBAAgB,GAAY,KAAK,CAAC;AAE1C,IAAA,WAAA,CAAY,EACV,KAAK,EACL,KAAK,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,GAC4B,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAE/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE5B,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAED,OAAO,GAAA;QACL,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;KACH;AAED,IAAA,UAAU,CAAC,OAAmF,EAAA;AAC5F,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3D,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3D,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;KACjF;AAED,IAAA,cAAc,CACZ,OAGC,EAAA;QAED,IAAI,OAAO,CAAC,aAAa;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,aAAa;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEvF,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;KAC5D;IAED,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;KAC3D;IAED,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAED,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,EAAE,CAAC;QAElD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAEO,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC3B;KACF;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KAC/B;IAEO,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC1B;IAEO,UAAU,GAAA;QAChB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAExB,YAAA,IAAI,CAAC,UAAU;AACZ,iBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;iBACjB,KAAK,CACJ,MAAM,EACN,SAAS,CAA6D,IAAI,CAAC,KAAK,CAAC;AAC9E,iBAAA,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC9B,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AACzC,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AACzC,iBAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CACjD;iBACA,KAAK,CAAC,GAAG,CAAC;AACV,iBAAA,OAAO,EAAE,CAAC;SACd;KACF;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;AAE9D,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAElD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1C;IAEO,IAAI,GAAA;QACV,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,eAAe,EAG9B;AACA,iBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,iBAAA,KAAK,CACJ,MAAM,EACN,SAAS,CAA6D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAClF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3B,CACF;AACA,iBAAA,EAAE,CAAC,MAAM,EAAE,MAAK;AACf,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,aAAC,CAAC;AACD,iBAAA,EAAE,CAAC,KAAK,EAAE,MAAK;gBACd,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACjC,aAAC,CAAC,CAAC;YACL,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;KACF;IAEO,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAG7C,CAAC;QACF,SAAS;AACN,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AACzC,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AACzC,aAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,UAAU;aACZ,KAAK,CACJ,GAAG,EACH,MAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CACjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B,CACF;aACA,KAAK,CACJ,GAAG,EACH,MAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CACjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B,CACF;AACA,aAAA,KAAK,CACJ,QAAQ,EACR,aAAa,EAA2B;AACrC,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAC3C,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACjD,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CACrD;AACA,aAAA,KAAK,CACJ,QAAQ,EACR,WAAW,CACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EACxC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CACzC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAC9C,CAAC;QAEJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAEO,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAE7E,OAAO;SACR;QAED,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC;AAC7F,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACzE,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACzE,IAAI,iBAAiB,IAAI,iBAAiB;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;aAC9E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,SAAS,EACT,YAAY,EAA2B;AACpC,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACtB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;oBACpC,OAAO,sBAAsB,CAC3B,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,CAAC,iBAAiB,EACpC,SAAS,CACV,CAAC;iBACH;gBACD,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB,CAAC;gBACF,MAAM,MAAM,GACV,gBAAgB,CAAC;AACf,oBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;AACrD,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACnD,oBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;oBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;AAE3B,gBAAA,OAAO,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;AAC7D,aAAC,CAAC;AACD,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;iBAC5C,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CACpD,CAAC;KACL;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC;AAC7B,iBAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD,CAAC;AAClE,iBAAA,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEtC,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAErB,YAAA,IAAI,CAAC,IAAI,GAAGA,MAAQ,CAAC,QAAQ,CAAC;iBAC3B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;iBACpC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtC,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAA,mDAAA,CAAqD,CAAC;AACpE,iBAAA,IAAI,EAAE,CAAC;YAEV,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAElD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SACxC;KACF;IAEO,QAAQ,GAAA;AACd,QAAA,SAAS,wBAAwB,GAAA;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAE7B,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAChC,QAAQ,IAAI;AACV,oBAAA,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;wBAC5B,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;wBAC1D,MAAM;qBACP;oBACD,SAAS;wBACP,IAAI,IAAI,CAAC,oBAAoB;AAAE,4BAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;wBAChE,IAAI,IAAI,CAAC,eAAe;AAAE,4BAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;wBACtD,MAAM;qBACP;iBACF;gBAED,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;oBACpD,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACxD;AACD,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,QAAQ,IAAI;oBACV,KAAK,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;wBAChE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;wBAC5D,MAAM;qBACP;iBAIF;AAED,gBAAA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,iBAAiB;oBACxF,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACxD;AAED,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;SAC/B;AAED,QAAA,SAAS,IAAI,GAAA;YACX,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;AAE1B,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,gBAAA,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;aACrE;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;;AAG/D,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;;AAGtB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAExC,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAEvB,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAElE,YAAA,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACvC;AAED,QAAA,SAAS,QAAQ,CAEf,IAAuC,EACvC,KAAa,EAAA;YAEb,IACE,CAAC,IAAI,CAAC,OAAO;AACb,gBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,gBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,gBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,gBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,gBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,gBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEd,OAAO;YAET,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB,CAAC;AAEF,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAC9B,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACrD,IACE,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;oBACzC,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EACzC;AACA,oBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;iBAC7B;AAED,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;aAC1B;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAElD,YAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAC9E;AAED,QAAA,SAAS,QAAQ,CAEf,IAA6B,EAC7B,KAAa,EAAA;AAEb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YAEhD,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB,CAAC;YACF,MAAM,MAAM,GACV,gBAAgB,CAAC;AACf,gBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;AACrD,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACnD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,gBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;gBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,aAAA,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;AAE3B,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAC9B,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACrD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;AACjF,oBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;iBAC7B;aACF;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;;YAGjC,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE;AAC/C,gBAAA,QAAQ,CAAC;oBACP,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC9B,oBAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU;oBAClC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,UAAU;oBAC3C,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,OAAO,EAAE,WAAW,CAAC,OAAO;AAC7B,iBAAA,CAAC,CAAC;aACJ;;YAED,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAEzD,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SACvB;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AAEjD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAK;YAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB,EAAE,EAAE,CAAC,CAAC;AAEP,QAAA,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EACR,MAAK;YACH,qBAAqB,CAAC,MAAK;AACzB,gBAAA,MAAM,EAAE,CAAC;AACX,aAAC,CAAC,CAAC;SACJ,EACD,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAC7C,CAAC;KACH;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEpF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,aAAa,EACb,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,WAAgD,CAAC;YAErD,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC3D,WAAW,GAAG,mBAAmB,CAAC;oBAChC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC,CAAC;AAEH,gBAAA,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,KAAK,WAAW,EAAE;AAChF,oBAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;AACnC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACpE,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;oBAEnC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBACnD,qBAAqB,CAAC,MAAK;4BACzB,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,yBAAC,CAAC,CAAC;iBACN;AAAM,qBAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE;AAC/C,oBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;oBACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBACnD,qBAAqB,CAAC,MAAK;4BACzB,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,yBAAC,CAAC,CAAC;iBACN;aACF;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,OAAO;AAEnC,YAAA,IAAI,CAAC,WAAW;gBACd,WAAW,GAAG,mBAAmB,CAAC;oBAChC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC,CAAC;YAEL,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACxD,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;gBAAE,OAAO;YAE1C,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC,CAAC;YAEH,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC/D,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,WAAW,EACX,CAAC,KAAK,KAAI;YACR,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO;AAC5B,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;oBAAE,OAAO;gBAEpC,MAAM,WAAW,GAAG,mBAAmB,CAAC;oBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC,CAAC;gBAEH,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;aACxD;AACD,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY;oBAAE,OAAO;gBAEzC,MAAM,WAAW,GAAG,mBAAmB,CAAC;oBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC,CAAC;gBAEH,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;aAC7D;AACH,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,aAAa,EACb,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;gBAAE,OAAO;YAE1C,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC,CAAC;YAEH,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC/D,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF,CAAC;KACH;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEpFC,MAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACtBC,IAAM,EAA8B;AACjC,aAAA,OAAO,CAAC,CAAC,KAAmC,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5E;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;AAE3B,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB,CAAC;AACnD,YAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAE1F,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;gBAChC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAE,oBAAA,OAAO,SAAS,CAAC;gBAEzC,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB,CAAC;gBACF,MAAM,MAAM,GACV,gBAAgB,CAAC;AACf,oBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;AACrD,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACnD,oBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;oBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;AAC3B,gBAAA,KAAK,EAAE,CAAC;AAER,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACnF,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAmC,KAAI;AACnD,YAAA,IAAI,CAAC,SAAS,CAAC,mBAAmB,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACnF,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,KAAmC,KAAI;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aACjE;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;AAC3B,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB,CAAC;AACnD,YAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1F,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;AAC5B,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;AAE5B,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClF,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAmC,KAAI;AACjD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAExB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAErE,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACtD,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,OAAO;AAC3B,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB,CAAC;AACnD,gBAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CACxC,UAAU,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,aAAa,CACnB,CAAC;AACF,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;AAC5B,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;aAC7B;iBAAM;AACL,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;AACxB,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;aACzB;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SAChF,CAAC,CACL,CAAC;KACH;IAEO,QAAQ,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AAEjD,QAAAD,MAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;aAChB,IAAI,CACH,IAAI,EAA8B;AAC/B,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC1C,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,KAAyB,KAAI;YACxC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,iBAAiB;gBAAE,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACxE,SAAC,CAAC,CACL;AACA,aAAA,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,EAA8B,CAAC,SAAS,CAACA,MAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;KACvF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/lib/check-type.ts","../../src/lib/color-getter.ts","../../src/module/GraphCanvas/constants/settings.ts","../../src/module/GraphCanvas/lib/settings/force-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/graph-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/link-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/listeners-getter.ts","../../src/module/GraphCanvas/lib/settings/node-settings-getter.ts","../../src/module/GraphCanvas/lib/utils/pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts","../../src/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.ts","../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/node-by-pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/draw-text.ts","../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["export function checkType<T>(value: unknown, condition: boolean): value is T {\n return condition;\n}\n","export function colorGetter() {\n const chosenColors: Record<string, string> = {};\n const colors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n let cursor = 0;\n\n return function color(key: string) {\n if (chosenColors[key]) return chosenColors[key];\n\n chosenColors[key] = colors[cursor];\n cursor++;\n\n if (cursor >= colors.length) cursor = 0;\n\n return chosenColors[key];\n };\n}\n","import { dragPlaceCoefficientGetter } from \"../lib\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n NodeOptionsInterface,\n} from \"../types\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n collideOn: true,\n chargeStrength: -40,\n chargeDistanceMax: Infinity,\n chargeDistanceMin: 1,\n xForce: 0,\n xStrength: 0.1,\n yForce: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomExtent: [0.1, 20] as [number, number],\n stickAfterDrag: false,\n highlightByHover: false,\n highlightFadingMin: 0.21,\n highlightDownStep: 0.09,\n highlightUpStep: 0.09,\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n nodeRadiusInitial: 4,\n nodeRadiusCoefficient: 5,\n nodeRadiusFactor: 1,\n nodeRadiusFlexible: true,\n};\n\nexport const NODE_SETTINGS: Omit<\n Required<NodeOptionsInterface>,\n \"color\" | \"text\" | \"textVisible\" | \"textSize\" | \"textShiftY\"\n> = {\n alpha: 1,\n borderColor: \"#000000FF\",\n borderWidth: 0.1,\n textWidth: 20,\n textShiftX: 0,\n textFont: \"Arial\",\n textAlign: \"center\" as CanvasTextAlign,\n textColor: \"#333\",\n width: 1,\n radius: 4,\n textStyle: \"normal\",\n textWeight: \"500\",\n textGap: 1,\n};\n\nexport const LINK_SETTINGS: Omit<Required<LinkOptionsInterface>, \"color\" | \"width\"> = {\n alpha: 1,\n};\n\nexport const COMMON_SETTINGS = {\n linkColorZoomFar: \"#999\",\n linkColorZoomNear: \"#000000FF\",\n linkWidthZoomFar: 1,\n linkWidthZoomNear: 0.1,\n linkWidthZoomBorder: 1,\n linkColorZoomBorder: 1,\n nodeTextScaleMin: 1.5,\n nodeTextScaleMax: 20,\n nodeTextSizeMin: 1.5,\n nodeTextSizeMax: 3.5,\n nodeTextShiftYMin: 2.5,\n nodeTextShiftYMax: 4,\n nodeTextChangeStepCount: 200,\n};\n","import { FORCE_SETTINGS } from \"../../constants\";\nimport type { ForceSettingsInterface } from \"../../types\";\n\nexport function forceSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ForceSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<ForceSettingsInterface<NodeData, LinkData>>,\n): Required<ForceSettingsInterface<NodeData, LinkData>> {\n return {\n ...(prevSettings ?? FORCE_SETTINGS),\n ...settings,\n };\n}\n","import { GRAPH_SETTINGS } from \"../../constants\";\nimport type { GraphSettingsInterface } from \"../../types\";\n\nexport function graphSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: GraphSettingsInterface<NodeData> | undefined,\n prevSettings?: Required<GraphSettingsInterface<NodeData>>,\n): Required<GraphSettingsInterface<NodeData>> {\n return {\n ...(prevSettings ?? GRAPH_SETTINGS),\n ...settings,\n };\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport type { LinkInterface } from \"@/types\";\nimport { COMMON_SETTINGS, LINK_SETTINGS } from \"../../constants\";\nimport type { LinkOptionsInterface, LinkSettingsInterface } from \"../../types\";\n\nexport function linkSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: LinkSettingsInterface<NodeData, LinkData> | undefined,\n): Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\"> {\n return { options: settings?.options };\n}\n\nexport function linkOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n _: LinkInterface<NodeData, LinkData>,\n __: number,\n ___: LinkInterface<NodeData, LinkData>[],\n transform?: ZoomTransform | null,\n): Required<LinkOptionsInterface> {\n return {\n ...LINK_SETTINGS,\n color:\n transform && transform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n width:\n transform && transform.k > COMMON_SETTINGS.linkWidthZoomBorder\n ? COMMON_SETTINGS.linkWidthZoomNear\n : COMMON_SETTINGS.linkWidthZoomFar,\n };\n}\n","import type { ListenersInterface } from \"../../types\";\n\nexport function listenersGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ListenersInterface<NodeData, LinkData> | undefined,\n): ListenersInterface<NodeData, LinkData> {\n return settings || {};\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { colorGetter } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport { COMMON_SETTINGS, NODE_SETTINGS } from \"../../constants\";\nimport type { NodeOptionsInterface, NodeSettingsInterface } from \"../../types\";\n\nexport function nodeSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: NodeSettingsInterface<NodeData> | undefined,\n): Required<Omit<NodeSettingsInterface<NodeData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData>, \"options\"> {\n return {\n idGetter: settings?.idGetter ?? nodeIdGetter,\n options: settings?.options,\n };\n}\n\nconst color = colorGetter();\n\nexport function nodeOptionsGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n _: number,\n __: NodeInterface<NodeData>[],\n transform?: ZoomTransform,\n): Required<NodeOptionsInterface> {\n const { textShiftY, textSize } = nodeTextSizeGetter(transform);\n\n return {\n ...NODE_SETTINGS,\n color: color(String(node.group || \"_DEFAULT\")),\n textVisible: Boolean(transform && transform.k > COMMON_SETTINGS.nodeTextScaleMin),\n text: node.id != undefined ? String(node.id) : null,\n textShiftY,\n textSize,\n };\n}\n\nexport function nodeTextSizeGetter(transform: ZoomTransform | undefined) {\n let textSize: number = COMMON_SETTINGS.nodeTextSizeMax;\n let textShiftY: number = COMMON_SETTINGS.nodeTextShiftYMax;\n\n if (transform) {\n const scaleStepCoefficient =\n (COMMON_SETTINGS.nodeTextScaleMax - COMMON_SETTINGS.nodeTextScaleMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const textStepCoefficient =\n (COMMON_SETTINGS.nodeTextSizeMax - COMMON_SETTINGS.nodeTextSizeMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const shiftStepCoefficient =\n (COMMON_SETTINGS.nodeTextShiftYMax - COMMON_SETTINGS.nodeTextShiftYMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n\n if (transform.k >= COMMON_SETTINGS.nodeTextScaleMax) {\n textSize = COMMON_SETTINGS.nodeTextSizeMin;\n textShiftY = COMMON_SETTINGS.nodeTextShiftYMin;\n } else if (transform.k > COMMON_SETTINGS.nodeTextScaleMin) {\n const transformSteps =\n (transform.k - COMMON_SETTINGS.nodeTextScaleMin) / scaleStepCoefficient;\n\n textSize -= transformSteps * textStepCoefficient;\n textShiftY -= transformSteps * shiftStepCoefficient;\n }\n }\n\n return { textSize, textShiftY };\n}\n\nexport type NodeRadiusGetterOptions = {\n linkCount: number | undefined;\n radiusFlexible: boolean;\n radiusCoefficient: number;\n radiusFactor: number;\n radiusInitial: number;\n};\n\nexport function nodeRadiusGetter({\n radiusFlexible,\n radiusInitial,\n linkCount,\n radiusCoefficient,\n radiusFactor,\n}: NodeRadiusGetterOptions) {\n return (\n (radiusFlexible && linkCount ? linkCount / radiusCoefficient : 0) * radiusFactor + radiusInitial\n );\n}\n\nexport function nodeIdGetter<NodeData extends Record<string, unknown>>(d: NodeInterface<NodeData>) {\n return d.id;\n}\n","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","import type { NodeInterface } from \"@/types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n radius: number,\n pointerX: number,\n pointerY: number,\n) {\n if (node.x == undefined || node.y == undefined) return false;\n\n const isOverX = node.x - radius <= pointerX && pointerX <= node.x + radius;\n const isOverY = node.y - radius <= pointerY && pointerY <= node.y + radius;\n\n return isOverX && isOverY;\n}\n","import type { NodeInterface } from \"@/types\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\n\nexport function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number,\n): number | undefined {\n if (!node.x || !node.y) return undefined;\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { LinkIterationPropsInterface } from \"../../types\";\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>,\n): Required<Result>;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n transform: ZoomTransform,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>\n | undefined,\n): Result {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(link, i, links, transform);\n else customOptions = option;\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, transform);\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(constantOptions)),\n )\n ) {\n return {\n ...constantOptions,\n ...((customOptions as Record<string, unknown> | undefined) || {}),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import { greatest } from \"d3-array\";\nimport type { ZoomTransform } from \"d3-zoom\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphSettingsInterface } from \"../../types\";\nimport { nodeRadiusGetter } from \"../settings\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type NodeByPointerGetterOptions<NodeData extends Record<string, unknown>> = {\n mouseEvent: MouseEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n nodes: NodeInterface<NodeData>[];\n\n graphSettings: Required<GraphSettingsInterface<NodeData>>;\n};\n\nexport function nodeByPointerGetter<NodeData extends Record<string, unknown>>({\n areaRect,\n areaTransform,\n mouseEvent,\n nodes,\n graphSettings,\n}: NodeByPointerGetterOptions<NodeData>): NodeInterface<NodeData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return greatest(nodes, (node) => {\n const radius = nodeRadiusGetter({\n radiusFlexible: graphSettings.nodeRadiusFlexible,\n radiusInitial: graphSettings.nodeRadiusInitial,\n radiusCoefficient: graphSettings.nodeRadiusCoefficient,\n radiusFactor: graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n });\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData 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 transform: ZoomTransform,\n option: NodeIterationPropsInterface<NodeData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, Result> | Result | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, transform);\n else customOptions = option;\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, transform);\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(constantOptions)),\n )\n ) {\n return {\n ...constantOptions,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...((customOptions as Record<string, unknown> | undefined) || {}),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import type { CachedNodeTextInterface } from \"@/types\";\nimport type { TextStyleEnum, TextWeightEnum } from \"../../types\";\n\nexport type DrawTextOptions = {\n id: string | number;\n x: number;\n y: number;\n text: string;\n textSize: number;\n textStyle: TextStyleEnum;\n textWeight: TextWeightEnum;\n textFont: string;\n textColor: string;\n textGap: number;\n textAlign: CanvasTextAlign;\n context: CanvasRenderingContext2D;\n cachedNodeText: CachedNodeTextInterface;\n maxWidth?: number;\n};\n\nconst SPACE = \" \";\n\nexport function drawText({\n context,\n id,\n textAlign,\n textColor,\n textFont,\n textStyle,\n textGap,\n textWeight,\n textSize,\n text,\n x,\n y,\n cachedNodeText,\n maxWidth,\n}: DrawTextOptions) {\n context.font = `${textStyle} normal ${textWeight} ${textSize}px ${textFont}`;\n context.fillStyle = textColor;\n context.textAlign = textAlign;\n\n if (cachedNodeText[id] != undefined) {\n cachedNodeText[id].forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n\n return;\n }\n\n if (maxWidth == undefined || context.measureText(text).width <= maxWidth) {\n cachedNodeText[id] = [text];\n context.fillText(text, x, y);\n\n return;\n }\n\n const spaceWidth = context.measureText(\" \").width;\n const lines: string[] = [];\n let lineWidth = 0;\n let line = \"\";\n\n for (const word of text.split(\" \")) {\n const size = context.measureText(word).width;\n lineWidth += size;\n\n if (line === \"\") {\n line = word;\n\n continue;\n }\n if (lineWidth > maxWidth) {\n lineWidth = 0;\n lines.push(line);\n line = word;\n } else {\n lineWidth += spaceWidth;\n line += `${SPACE}${word}`;\n }\n }\n\n if (line !== \"\") lines.push(line);\n\n cachedNodeText[id] = lines;\n lines.forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n}\n","import { greatest } from \"d3-array\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { create as d3Create, select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom, zoomIdentity } from \"d3-zoom\";\nimport { debounce } from \"@/lib\";\nimport type { LinkInterface } from \"@/types/links\";\nimport type { CachedNodeTextInterface, NodeInterface } from \"@/types/nodes\";\nimport {\n drawText,\n forceSettingsGetter,\n graphSettingsGetter,\n linkIterationExtractor,\n linkOptionsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeByPointerGetter,\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSettingsGetter,\n pointerGetter,\n} from \"./lib\";\nimport type {\n DragEventInterface,\n ForceSettingsInterface,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphSettingsInterface,\n LinkSettingsInterface,\n ListenersInterface,\n NodeSettingsInterface,\n ZoomEventInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n private nodes: NodeInterface<NodeData>[];\n\n private links: LinkInterface<NodeData, LinkData>[];\n\n private width: number;\n\n private height: number;\n\n private root: HTMLElement;\n\n private container: HTMLDivElement | undefined | null;\n\n private area: HTMLCanvasElement | null | undefined;\n\n private dpi = devicePixelRatio;\n\n /** settings */\n\n private graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n private forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n private nodeSettings: Required<Omit<NodeSettingsInterface<NodeData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData>, \"options\">;\n\n private linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n private context: CanvasRenderingContext2D | null | undefined;\n\n private simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n private areaTransform: ZoomTransform = zoomIdentity;\n\n private areaRect: DOMRect | undefined;\n\n private draw: (this: GraphCanvas<NodeData, LinkData>) => void;\n\n private eventAbortController: AbortController;\n\n private cachedNodeText: CachedNodeTextInterface = {};\n\n private simulationWorking: boolean = false;\n\n private isDragging: boolean = false;\n\n private highlightedNode: NodeInterface<NodeData> | null = null;\n\n private highlightedNeighbors: Set<string | number> | null = null;\n\n private highlighFading: number = 1;\n\n private highlightFadingWorking: boolean = false;\n\n private highlightDrawing: boolean = false;\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n this.draw = this.initDraw();\n\n this.init();\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n changeData(options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined) this.updateData();\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n ) {\n if (options.graphSettings)\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n if (options.forceSettings)\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n if (options.linkSettings) this.linkSettings = linkSettingsGetter(options.linkSettings);\n if (options.nodeSettings) this.nodeSettings = nodeSettingsGetter(options.nodeSettings);\n\n this.updateSettings();\n }\n\n tick() {\n if (!this.simulationWorking) this.draw();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n\n this.clearState();\n this.clearDataDependencies();\n }\n\n private updateSettings() {\n if (this.simulation) {\n this.initSimulationForces();\n this.simulation.alpha(1);\n this.simulation.restart();\n }\n }\n\n private clearState() {\n this.isDragging = false;\n this.simulationWorking = false;\n this.highlightedNode = null;\n this.highlightedNeighbors = null;\n this.highlighFading = 1;\n this.highlightFadingWorking = false;\n this.highlightDrawing = false;\n }\n\n private clearDataDependencies() {\n this.cachedNodeText = {};\n }\n\n private updateData() {\n this.clearDataDependencies();\n\n if (this.simulation) {\n this.initCollideForce();\n\n this.simulation\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter)\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations),\n )\n .alpha(0.5)\n .restart();\n }\n }\n\n private updateSize() {\n if (!this.area || !this.simulation || !this.container) return;\n\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n this.area.width = this.dpi * width;\n this.area.height = this.dpi * height;\n this.areaRect = this.area.getBoundingClientRect();\n\n this.simulation.alpha(0.1).restart();\n\n if (!this.simulationWorking) this.draw();\n }\n\n private init() {\n this.initArea();\n this.initSimulation();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n }\n\n private initSimulation() {\n if (!this.simulation) {\n this.simulation = forceSimulation<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >()\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.simulationWorking = true;\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.simulation);\n this.simulationWorking = false;\n });\n this.initSimulationForces();\n }\n }\n\n private initSimulationForces() {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as ForceLink<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >;\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n\n this.simulation\n .force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xForce).strength(\n this.forceSettings.xStrength,\n ),\n )\n .force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yForce).strength(\n this.forceSettings.yStrength,\n ),\n )\n .force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n )\n .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 this.initCollideForce();\n }\n\n private initCollideForce() {\n if (!this.simulation) return;\n\n if (!this.forceSettings.collideOn) {\n if (this.simulation.force(\"collide\")) this.simulation.force(\"collide\", null);\n\n return;\n }\n\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) this.simulation.force(\"collide\", null);\n else if (!this.simulation.force(\"collide\"))\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.forceSettings.collideIterations,\n undefined,\n );\n }\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n\n return radius + this.forceSettings.collideAdditionalRadius;\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n\n private initArea() {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n }\n }\n\n private initDraw() {\n function calculateHighlightFading(this: GraphCanvas<NodeData, LinkData>) {\n this.highlightDrawing = true;\n\n if (!this.highlightFadingWorking) {\n switch (true) {\n case this.highlighFading < 1: {\n this.highlighFading += this.graphSettings.highlightUpStep;\n break;\n }\n default: {\n if (this.highlightedNeighbors) this.highlightedNeighbors = null;\n if (this.highlightedNode) this.highlightedNode = null;\n break;\n }\n }\n\n if (this.highlighFading < 1 && !this.simulationWorking)\n return void requestAnimationFrame(() => this.draw());\n }\n if (this.highlightFadingWorking) {\n switch (true) {\n case this.highlighFading > this.graphSettings.highlightFadingMin: {\n this.highlighFading -= this.graphSettings.highlightDownStep;\n break;\n }\n default: {\n break;\n }\n }\n\n if (this.highlighFading > this.graphSettings.highlightFadingMin && !this.simulationWorking)\n return void requestAnimationFrame(() => this.draw());\n }\n\n this.highlightDrawing = false;\n }\n\n function draw(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.context) return;\n\n if (this.listeners.onDraw) {\n return void this.listeners.onDraw(this.context, this.areaTransform);\n }\n\n this.context.save();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.translate(this.areaTransform.x, this.areaTransform.y);\n this.context.scale(this.areaTransform.k, this.areaTransform.k);\n\n /** links */\n this.context.beginPath();\n this.links.forEach(drawLink.bind(this));\n this.context.stroke();\n\n /** nodes */\n const textRenders: (() => void)[] = [];\n this.nodes.forEach(drawNode(textRenders).bind(this));\n textRenders.forEach((r) => r());\n\n this.context.restore();\n\n this.listeners.onDrawFinished?.(this.context, this.areaTransform);\n\n calculateHighlightFading.bind(this)();\n }\n\n function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n const linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n this.areaTransform,\n this.linkSettings.options || {},\n linkOptionsGetter,\n );\n\n let alpha = linkOptions.alpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n if (\n this.highlightedNode.id != link.source.id &&\n this.highlightedNode.id != link.target.id\n ) {\n alpha = this.highlighFading;\n }\n\n this.context.beginPath();\n }\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = linkOptions.color;\n this.context.lineWidth = linkOptions.width;\n this.context.moveTo(link.source.x, link.source.y);\n this.context.lineTo(link.target.x, link.target.y);\n\n if (this.highlightedNeighbors && this.highlightedNode) this.context.stroke();\n }\n\n const drawNode = (textRenders: (() => void)[]) =>\n function drawNode(\n this: GraphCanvas<NodeData, LinkData>,\n node: NodeInterface<NodeData>,\n index: number,\n ) {\n if (!this.context || !node.x || !node.y) return;\n\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n\n let alpha = nodeOptions.alpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n alpha = this.highlighFading;\n }\n }\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n\n /** text */\n if (nodeOptions.textVisible && nodeOptions.text) {\n textRenders.push(() => {\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n\n drawText({\n id: node.id,\n cachedNodeText: this.cachedNodeText,\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 x: node.x + nodeOptions.textShiftX,\n y: node.y + radius + nodeOptions.textShiftY,\n maxWidth: nodeOptions.textWidth,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n textGap: nodeOptions.textGap,\n });\n });\n }\n\n /** circle */\n this.context.lineWidth = nodeOptions.borderWidth;\n this.context.strokeStyle = nodeOptions.borderColor;\n this.context.fillStyle = nodeOptions.color;\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n\n this.context.fill();\n this.context.stroke();\n };\n\n return draw;\n }\n\n private initResize() {\n if (!this.area) throw new Error(\"bad init data\");\n\n const resize = debounce(() => {\n this.updateSize();\n }, 10);\n\n window.addEventListener(\n \"resize\",\n () => {\n requestAnimationFrame(() => {\n resize();\n });\n },\n { signal: this.eventAbortController.signal },\n );\n }\n\n private initPointer() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n this.area.addEventListener(\n \"pointermove\",\n (event) => {\n let currentNode: NodeInterface<NodeData> | undefined;\n\n if (this.graphSettings.highlightByHover && !this.isDragging) {\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n if (currentNode && currentNode.neighbors && this.highlightedNode !== currentNode) {\n this.highlightedNode = currentNode;\n this.highlightedNeighbors = new Set(this.highlightedNode.neighbors);\n this.highlightFadingWorking = true;\n\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n } else if (!currentNode && this.highlightedNode) {\n this.highlightFadingWorking = false;\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n }\n }\n\n if (!this.listeners.onMove) return;\n\n if (!currentNode)\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onMove(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n this.area.addEventListener(\"dblclick\", (event) => {\n if (!this.listeners.onDoubleClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onDoubleClick(event, currentNode);\n });\n\n this.area.addEventListener(\n \"pointerup\",\n (event) => {\n if (this.isDragging) return;\n if (event.button === 0) {\n if (!this.listeners.onClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onClick(event, currentNode);\n }\n if (event.button === 1) {\n if (!this.listeners.onWheelClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onWheelClick(event, currentNode);\n }\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n this.area.addEventListener(\n \"contextmenu\",\n (event) => {\n if (!this.listeners.onContextMenu) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onContextMenu(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n }\n\n private initDnd() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n d3Select(this.area).call(\n d3Drag<HTMLCanvasElement, unknown>()\n .subject((event: DragEventInterface<NodeData>) => {\n if (this.listeners.onDragSubject) {\n return this.listeners.onDragSubject(event, this.areaTransform, this.nodes);\n }\n\n if (!this.areaRect) return;\n\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n\n let index = 0;\n\n return greatest(this.nodes, (node) => {\n if (!node.x || !node.y) return undefined;\n\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.areaTransform,\n this.nodeSettings.options || {},\n nodeOptionsGetter,\n );\n const radius =\n nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n }) ?? nodeOptions.radius;\n index++;\n\n return this.graphSettings.dragPlaceCoefficient(node, pointerX, pointerY, radius);\n });\n })\n .on(\"start\", (event: DragEventInterface<NodeData>) => {\n this.listeners.onStartDragFinished?.(event, this.simulation, this.areaTransform);\n })\n .on(\"drag\", (event: DragEventInterface<NodeData>) => {\n if (!this.isDragging) {\n this.isDragging = true;\n if (this.simulation) this.simulation.alphaTarget(0.3).restart();\n }\n\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n\n this.listeners.onMoveDragFinished?.(event, this.simulation, this.areaTransform);\n })\n .on(\"end\", (event: DragEventInterface<NodeData>) => {\n this.isDragging = false;\n\n if (!event.active && this.simulation) this.simulation.alphaTarget(0);\n\n if (this.graphSettings.stickAfterDrag && this.areaRect) {\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(\n mouseEvent,\n this.areaRect,\n this.areaTransform,\n );\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n } else {\n event.subject.fx = null;\n event.subject.fy = null;\n }\n\n this.listeners.onEndDragFinished?.(event, this.simulation, this.areaTransform);\n }),\n );\n }\n\n private initZoom() {\n if (!this.area) throw new Error(\"bad init data\");\n\n d3Select(this.area)\n .call(\n zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(this.graphSettings.zoomExtent)\n .on(\"zoom\", (event: ZoomEventInterface) => {\n this.listeners.onZoom?.(event);\n this.areaTransform = event.transform;\n\n if (!this.simulationWorking) requestAnimationFrame(() => this.draw());\n }),\n )\n .on(\"dblclick.zoom\", null);\n\n this.areaTransform = new ZoomTransform(1, this.width / 2, this.height / 2);\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n }\n}\n"],"names":["d3Create","d3Select","d3Drag"],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -156,6 +156,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
156
156
|
getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
|
|
157
157
|
changeData(options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">): void;
|
|
158
158
|
changeSettings(options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">): void;
|
|
159
|
+
tick(): void;
|
|
159
160
|
start(): void;
|
|
160
161
|
stop(): void;
|
|
161
162
|
create(): void;
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@krainovsd/graph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Krainov graph",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "KrainovSD <denislosev48@gmail.com>",
|
|
7
7
|
"license": "ISC",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/KrainovSD/
|
|
10
|
+
"url": "git+https://github.com/KrainovSD/js-tools.git",
|
|
11
|
+
"directory": "packages/graph"
|
|
11
12
|
},
|
|
12
13
|
"sideEffects": false,
|
|
13
14
|
"exports": {
|
|
@@ -26,39 +27,44 @@
|
|
|
26
27
|
"lib"
|
|
27
28
|
],
|
|
28
29
|
"scripts": {
|
|
30
|
+
"publish-package": "npm run lint && npm run build && npm publish",
|
|
29
31
|
"dev": "vite",
|
|
30
32
|
"build:dev": "vite build",
|
|
31
|
-
"build": "npm run build:types && npm run build:js",
|
|
33
|
+
"build": "npm run clear && npm run build:types && npm run build:js",
|
|
32
34
|
"build:js": "rm -rf lib && rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:production,NODE_ENV:production",
|
|
33
35
|
"build:js-dev": "rm -rf lib && rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript --no-stdin --environment BUILD:development,NODE_ENV:development",
|
|
34
36
|
"build:types": "tspc -p tsconfig.build.json",
|
|
35
37
|
"lint": "eslint src/** -c ./eslint.config.js --color --max-warnings 0",
|
|
36
38
|
"lint:debug": "eslint --debug eslint.config.js",
|
|
39
|
+
"clear": "rm -rf ./lib",
|
|
37
40
|
"format": "prettier --write 'src/**/*.{js,ts,tsx,scss,css,json}'"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
40
|
-
"pixi-viewport": "6.0.3",
|
|
41
|
-
"pixi.js": "8.6.6",
|
|
42
43
|
"@krainovsd/eslint-presets": "0.2.1",
|
|
43
|
-
"@rollup/plugin-
|
|
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",
|
|
44
54
|
"@trivago/prettier-plugin-sort-imports": "4.3.0",
|
|
45
|
-
"@types/d3-selection": "3.0.11",
|
|
46
|
-
"@types/d3-drag": "3.0.7",
|
|
47
|
-
"@types/d3-array": "3.2.1",
|
|
48
55
|
"@types/node": "22.8.6",
|
|
49
|
-
"@types/rollup-plugin-peer-deps-external": "2.2.5",
|
|
50
56
|
"eslint": "9.17.0",
|
|
51
57
|
"prettier": "3.3.3",
|
|
52
|
-
"rollup": "4.21.2",
|
|
53
|
-
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
54
|
-
"@rollup/plugin-node-resolve": "16.0.0",
|
|
55
|
-
"@rollup/plugin-commonjs": "28.0.2",
|
|
56
58
|
"ts-patch": "3.3.0",
|
|
57
59
|
"typescript": "5.6.3",
|
|
58
60
|
"typescript-transform-paths": "3.5.2",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
61
|
+
"pixi-viewport": "6.0.3",
|
|
62
|
+
"pixi.js": "8.6.6",
|
|
63
|
+
"@types/d3-selection": "3.0.11",
|
|
64
|
+
"@types/d3-drag": "3.0.7",
|
|
65
|
+
"@types/d3-array": "3.2.1",
|
|
66
|
+
"vite": "6.0.11",
|
|
67
|
+
"@types/lodash": "4.17.14"
|
|
62
68
|
},
|
|
63
69
|
"dependencies": {
|
|
64
70
|
"@types/d3-zoom": "3.0.8",
|