@krainovsd/graph 0.12.0-beta.4 → 0.12.0-beta.5
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/cjs/index.cjs +20 -71
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/is-overlaps-node.js +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/is-overlaps-node.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js +4 -1
- package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +5 -1
- package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js +7 -67
- package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js +3 -3
- package/lib/esm/module/GraphCanvas/slices/update-node-cache.js.map +1 -1
- package/package.json +1 -1
package/lib/esm/index.js
CHANGED
|
@@ -32,8 +32,8 @@ export { getDrawLink } from './module/GraphCanvas/slices/draw-links.js';
|
|
|
32
32
|
export { getDrawNode } from './module/GraphCanvas/slices/draw-nodes.js';
|
|
33
33
|
import 'lodash';
|
|
34
34
|
import 'd3-force';
|
|
35
|
-
export { drawText } from './module/GraphCanvas/slices/draw-text.js';
|
|
36
35
|
import 'd3-zoom';
|
|
36
|
+
export { drawText } from './module/GraphCanvas/slices/draw-text.js';
|
|
37
37
|
export { COMMON_SETTINGS } from './module/GraphCanvas/constants/common-settings.js';
|
|
38
38
|
export { FORCE_SETTINGS } from './module/GraphCanvas/constants/force-settings.js';
|
|
39
39
|
export { GRAPH_SETTINGS } from './module/GraphCanvas/constants/graph-settings.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-overlaps-node.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts"],"sourcesContent":["import type { NodeInterface } from \"../../types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number | undefined,\n) {\n if (node.x == undefined || node.y == undefined) return false;\n\n switch (node._shape) {\n case \"circle\": {\n const nodeRadius = node._radius ?? radius ?? 5;\n const isOverX = node.x - nodeRadius <= pointerX && pointerX <= node.x + nodeRadius;\n const isOverY = node.y - nodeRadius <= pointerY && pointerY <= node.y + nodeRadius;\n\n return isOverX && isOverY;\n }\n case \"square\":\n case \"text\": {\n const width = node._width ?? 5;\n const height = node._height ?? 5;\n const borderRadius = node._borderRadius ?? 0;\n const overlaps =\n Math.abs(pointerX - node.x) <= width / 2 && Math.abs(pointerY - node.y) <= height / 2;\n\n if (node._shape !== \"text\" && borderRadius != undefined && borderRadius > 0 && overlaps) {\n return isCursorOverRoundedRect(\n pointerX,\n pointerY,\n node.x,\n node.y,\n width / 2,\n height / 2,\n borderRadius,\n );\n }\n\n return overlaps;\n }\n default: {\n const nodeRadius = node._radius ?? radius ?? 5;\n const isOverX = node.x - nodeRadius <= pointerX && pointerX <= node.x + nodeRadius;\n const isOverY = node.y - nodeRadius <= pointerY && pointerY <= node.y + nodeRadius;\n\n return isOverX && isOverY;\n }\n }\n}\n\nfunction isCursorOverRoundedRect(\n pointerX: number,\n pointerY: number,\n x: number,\n y: number,\n halfWidth: number,\n halfHeight: number,\n borderRadius: number,\n) {\n const left = x - halfWidth;\n const right = x + halfWidth;\n const top = y - halfHeight;\n const bottom = y + halfHeight;\n\n if (pointerX < left + borderRadius && pointerY < top + borderRadius) {\n const dx = pointerX - (left + borderRadius);\n const dy = pointerY - (top + borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX > right - borderRadius && pointerY < top + borderRadius) {\n const dx = pointerX - (right - borderRadius);\n const dy = pointerY - (top + borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX < left + borderRadius && pointerY > bottom - borderRadius) {\n const dx = pointerX - (left + borderRadius);\n const dy = pointerY - (bottom - borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX > right - borderRadius && pointerY > bottom - borderRadius) {\n const dx = pointerX - (right - borderRadius);\n const dy = pointerY - (bottom - borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n }\n\n return true;\n}\n"],"names":[],"mappings":"AAEM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,QAAgB,EAChB,QAAgB,EAChB,MAA0B,EAAA;
|
|
1
|
+
{"version":3,"file":"is-overlaps-node.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts"],"sourcesContent":["import type { NodeInterface } from \"../../types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number | undefined,\n) {\n if (node.x == undefined || node.y == undefined || node.visible === false) return false;\n\n switch (node._shape) {\n case \"circle\": {\n const nodeRadius = node._radius ?? radius ?? 5;\n const isOverX = node.x - nodeRadius <= pointerX && pointerX <= node.x + nodeRadius;\n const isOverY = node.y - nodeRadius <= pointerY && pointerY <= node.y + nodeRadius;\n\n return isOverX && isOverY;\n }\n case \"square\":\n case \"text\": {\n const width = node._width ?? 5;\n const height = node._height ?? 5;\n const borderRadius = node._borderRadius ?? 0;\n const overlaps =\n Math.abs(pointerX - node.x) <= width / 2 && Math.abs(pointerY - node.y) <= height / 2;\n\n if (node._shape !== \"text\" && borderRadius != undefined && borderRadius > 0 && overlaps) {\n return isCursorOverRoundedRect(\n pointerX,\n pointerY,\n node.x,\n node.y,\n width / 2,\n height / 2,\n borderRadius,\n );\n }\n\n return overlaps;\n }\n default: {\n const nodeRadius = node._radius ?? radius ?? 5;\n const isOverX = node.x - nodeRadius <= pointerX && pointerX <= node.x + nodeRadius;\n const isOverY = node.y - nodeRadius <= pointerY && pointerY <= node.y + nodeRadius;\n\n return isOverX && isOverY;\n }\n }\n}\n\nfunction isCursorOverRoundedRect(\n pointerX: number,\n pointerY: number,\n x: number,\n y: number,\n halfWidth: number,\n halfHeight: number,\n borderRadius: number,\n) {\n const left = x - halfWidth;\n const right = x + halfWidth;\n const top = y - halfHeight;\n const bottom = y + halfHeight;\n\n if (pointerX < left + borderRadius && pointerY < top + borderRadius) {\n const dx = pointerX - (left + borderRadius);\n const dy = pointerY - (top + borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX > right - borderRadius && pointerY < top + borderRadius) {\n const dx = pointerX - (right - borderRadius);\n const dy = pointerY - (top + borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX < left + borderRadius && pointerY > bottom - borderRadius) {\n const dx = pointerX - (left + borderRadius);\n const dy = pointerY - (bottom - borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n } else if (pointerX > right - borderRadius && pointerY > bottom - borderRadius) {\n const dx = pointerX - (right - borderRadius);\n const dy = pointerY - (bottom - borderRadius);\n\n return dx * dx + dy * dy <= borderRadius * borderRadius;\n }\n\n return true;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,10 @@ function linkByPointerGetter({ areaRect, areaTransform, mouseEvent, links, linkH
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
function isNearLink(mouseX, mouseY, link, threshold = 2) {
|
|
15
|
-
if (!isObject(link.source) ||
|
|
15
|
+
if (!isObject(link.source) ||
|
|
16
|
+
!isObject(link.target) ||
|
|
17
|
+
link.source.visible === false ||
|
|
18
|
+
link.target.visible === false)
|
|
16
19
|
return false;
|
|
17
20
|
const x1 = link.source.x;
|
|
18
21
|
const y1 = link.source.y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-by-pointer-getter.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/link-by-pointer-getter.ts"],"sourcesContent":["import { isObject } from \"@krainovsd/js-helpers\";\nimport { greatest } from \"d3-array\";\nimport type { ZoomTransform } from \"d3-zoom\";\nimport type { LinkInterface } from \"../../types\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type LinkByPointerGetterOptions<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> = {\n mouseEvent: MouseEvent | TouchEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n links: LinkInterface<NodeData, LinkData>[];\n linkHoverExtraZone: number;\n};\n\nexport function linkByPointerGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>({\n areaRect,\n areaTransform,\n mouseEvent,\n links,\n linkHoverExtraZone,\n}: LinkByPointerGetterOptions<NodeData, LinkData>): LinkInterface<NodeData, LinkData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return greatest(links, (link) => {\n if (isNearLink(pointerX, pointerY, link, linkHoverExtraZone)) return link.index;\n });\n}\n\nfunction isNearLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(mouseX: number, mouseY: number, link: LinkInterface<NodeData, LinkData>, threshold = 2) {\n if (!isObject(link.source)
|
|
1
|
+
{"version":3,"file":"link-by-pointer-getter.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/link-by-pointer-getter.ts"],"sourcesContent":["import { isObject } from \"@krainovsd/js-helpers\";\nimport { greatest } from \"d3-array\";\nimport type { ZoomTransform } from \"d3-zoom\";\nimport type { LinkInterface } from \"../../types\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type LinkByPointerGetterOptions<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> = {\n mouseEvent: MouseEvent | TouchEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n links: LinkInterface<NodeData, LinkData>[];\n linkHoverExtraZone: number;\n};\n\nexport function linkByPointerGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>({\n areaRect,\n areaTransform,\n mouseEvent,\n links,\n linkHoverExtraZone,\n}: LinkByPointerGetterOptions<NodeData, LinkData>): LinkInterface<NodeData, LinkData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return greatest(links, (link) => {\n if (isNearLink(pointerX, pointerY, link, linkHoverExtraZone)) return link.index;\n });\n}\n\nfunction isNearLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(mouseX: number, mouseY: number, link: LinkInterface<NodeData, LinkData>, threshold = 2) {\n if (\n !isObject(link.source) ||\n !isObject(link.target) ||\n link.source.visible === false ||\n link.target.visible === false\n )\n return false;\n\n const x1 = link.source.x as number;\n const y1 = link.source.y as number;\n const x2 = link.target.x as number;\n const y2 = link.target.y as number;\n\n const distance = distanceToLine(mouseX, mouseY, x1, y1, x2, y2);\n\n return distance <= threshold;\n}\n\nfunction distanceToLine(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSq = C * C + D * D;\n let param = -1;\n\n if (lenSq !== 0) {\n param = dot / lenSq;\n }\n\n let xx, yy;\n\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n"],"names":[],"mappings":";;;;AAiBgB,SAAA,mBAAmB,CAGjC,EACA,QAAQ,EACR,aAAa,EACb,UAAU,EACV,KAAK,EACL,kBAAkB,GAC6B,EAAA;AAC/C,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;AAE/B,IAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC;AAE/E,IAAA,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;QAC9B,IAAI,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK;AACjF,KAAC,CAAC;AACJ;AAEA,SAAS,UAAU,CAGjB,MAAc,EAAE,MAAc,EAAE,IAAuC,EAAE,SAAS,GAAG,CAAC,EAAA;AACtF,IAAA,IACE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;AAE7B,QAAA,OAAO,KAAK;AAEd,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAW;AAClC,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAW;AAClC,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAW;AAClC,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAW;AAElC,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE/D,OAAO,QAAQ,IAAI,SAAS;AAC9B;AAEA,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AAC1F,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;AAChB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;AAChB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;AACjB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;IAEjB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,IAAA,IAAI,KAAK,GAAG,EAAE;AAEd,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,QAAA,KAAK,GAAG,GAAG,GAAG,KAAK;;IAGrB,IAAI,EAAE,EAAE,EAAE;AAEV,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,EAAE,GAAG,EAAE;QACP,EAAE,GAAG,EAAE;;AACF,SAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE;QACP,EAAE,GAAG,EAAE;;SACF;AACL,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;AACnB,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;;AAGrB,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE;AACjB,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE;AAEjB,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACrC;;;;"}
|
|
@@ -8,8 +8,12 @@ function getDrawNode(nodeRenders, textRenders) {
|
|
|
8
8
|
return function drawNode(node) {
|
|
9
9
|
if (!this.context || !node.x || !node.y)
|
|
10
10
|
return;
|
|
11
|
-
if (node.visible != undefined && !node.visible)
|
|
11
|
+
if (node.visible != undefined && !node.visible) {
|
|
12
|
+
node._radius = 0;
|
|
13
|
+
node._width = 0;
|
|
14
|
+
node._height = 0;
|
|
12
15
|
return;
|
|
16
|
+
}
|
|
13
17
|
const nodeOptions = this.nodeOptionsCache[node.id];
|
|
14
18
|
if (!nodeOptions)
|
|
15
19
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw-nodes.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-nodes.ts"],"sourcesContent":["import { isNumber } from \"@krainovsd/js-helpers\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { isNodeVisible, nodeFade, nodeHighlight } from \"../lib\";\nimport type { NodeInterface } from \"../types\";\nimport { drawText } from \"./draw-text\";\n\nexport function getDrawNode<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(nodeRenders: (() => void)[], textRenders: (() => void)[]) {\n return function drawNode(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>) {\n if (!this.context || !node.x || !node.y) return;\n if (node.visible != undefined && !node.visible) return;\n\n const nodeOptions = this.nodeOptionsCache[node.id];\n if (!nodeOptions) return;\n\n if (nodeOptions.nodeDraw && nodeOptions.textDraw) {\n nodeRenders.push(() => {\n if (nodeOptions.nodeDraw) {\n nodeOptions.nodeDraw.bind(this)(node, nodeOptions);\n }\n });\n\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, nodeOptions);\n }\n });\n\n return;\n }\n\n let radius = nodeOptions.radius;\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let borderColor = nodeOptions.borderColor;\n let borderWidth = nodeOptions.borderWidth;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let labelSize = nodeOptions.labelSize;\n let labelWeight = nodeOptions.labelWeight;\n let labelAlpha = nodeOptions.labelAlpha;\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByNodeForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByNodeForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByNodeForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByNodeForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else if (\n !this.highlightSettings.highlightByNodeOnlyRoot ||\n (this.highlightSettings.highlightByNodeOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** By Node Highlight */\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByNodeForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByNodeForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByNodeForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByNodeForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByNodeForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByNodeForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByNodeForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByNodeForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByNodeForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (\n !this.highlightedNeighbors.has(node.id) &&\n this.highlightedLink.source !== node &&\n this.highlightedLink.target !== node\n ) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByLinkForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByLinkForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByLinkForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByLinkForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else {\n /** By Link Highlight */\n\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByLinkForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByLinkForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByLinkForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByLinkForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByLinkForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByLinkForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByLinkForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByLinkForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByLinkForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n\n /** Node parameters */\n node._radius = radius;\n node._borderWidth = borderWidth;\n node._width = width;\n node._height = height;\n node._borderRadius =\n isNumber(nodeOptions.borderRadius) && nodeOptions.borderRadius > 0\n ? Math.min(nodeOptions.borderRadius, nodeOptions.width / 2, nodeOptions.height / 2)\n : 0;\n node._shape = nodeOptions.shape ?? \"circle\";\n\n /** Node Visibility */\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n transform: this.areaTransform,\n node,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n /** Node draw */\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n this.context.lineWidth = borderWidth;\n this.context.strokeStyle = borderColor;\n this.context.fillStyle = color;\n const labelLines = this.cachedNodeLabel[node.id];\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (!node.image) {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.closePath();\n this.context.save();\n this.context.clip();\n\n this.context.drawImage(\n node.image,\n node.x - radius,\n node.y - radius,\n radius * 2,\n radius * 2,\n );\n\n this.context.restore();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n\n break;\n }\n case \"square\": {\n if (!node.image) {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.closePath();\n this.context.save();\n this.context.clip();\n this.context.drawImage(\n node.image,\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n );\n this.context.restore();\n\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n break;\n }\n case \"text\": {\n if (this.nodeSettings.textNodeDebug) {\n this.context.strokeRect(node.x - width / 2, node.y - height / 2, width, height);\n }\n\n if (nodeOptions.label && labelLines)\n drawText({\n lines: labelLines,\n context: this.context,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n x: node.x,\n y: node.y + textSize / 4 - (labelLines.length - 1) * (textSize / 2),\n textStyle: nodeOptions.labelStyle,\n textWeight,\n textGap: nodeOptions.labelGap,\n });\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n default: {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n }\n });\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.bind?.(this)?.(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n });\n }\n\n /** Text draw */\n const textLines = this.cachedNodeText[node.id];\n if (nodeOptions.textVisible && nodeOptions.text && textLines) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n let y = node.y + textShiftY;\n if (nodeOptions.shape === \"circle\") {\n y += radius;\n }\n if (nodeOptions.shape === \"square\" || nodeOptions.shape === \"text\") {\n y += height / 2;\n }\n\n drawText({\n lines: textLines,\n context: this.context,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n }\n });\n }\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"draw-nodes.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-nodes.ts"],"sourcesContent":["import { isNumber } from \"@krainovsd/js-helpers\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { isNodeVisible, nodeFade, nodeHighlight } from \"../lib\";\nimport type { NodeInterface } from \"../types\";\nimport { drawText } from \"./draw-text\";\n\nexport function getDrawNode<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(nodeRenders: (() => void)[], textRenders: (() => void)[]) {\n return function drawNode(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>) {\n if (!this.context || !node.x || !node.y) return;\n if (node.visible != undefined && !node.visible) {\n node._radius = 0;\n node._width = 0;\n node._height = 0;\n\n return;\n }\n\n const nodeOptions = this.nodeOptionsCache[node.id];\n if (!nodeOptions) return;\n\n if (nodeOptions.nodeDraw && nodeOptions.textDraw) {\n nodeRenders.push(() => {\n if (nodeOptions.nodeDraw) {\n nodeOptions.nodeDraw.bind(this)(node, nodeOptions);\n }\n });\n\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, nodeOptions);\n }\n });\n\n return;\n }\n\n let radius = nodeOptions.radius;\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let borderColor = nodeOptions.borderColor;\n let borderWidth = nodeOptions.borderWidth;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let labelSize = nodeOptions.labelSize;\n let labelWeight = nodeOptions.labelWeight;\n let labelAlpha = nodeOptions.labelAlpha;\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByNodeForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByNodeForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByNodeForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByNodeForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else if (\n !this.highlightSettings.highlightByNodeOnlyRoot ||\n (this.highlightSettings.highlightByNodeOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** By Node Highlight */\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByNodeForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByNodeForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByNodeForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByNodeForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByNodeForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByNodeForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByNodeForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByNodeForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByNodeForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (\n !this.highlightedNeighbors.has(node.id) &&\n this.highlightedLink.source !== node &&\n this.highlightedLink.target !== node\n ) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByLinkForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByLinkForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByLinkForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByLinkForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else {\n /** By Link Highlight */\n\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByLinkForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByLinkForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByLinkForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByLinkForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByLinkForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByLinkForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByLinkForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByLinkForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByLinkForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n\n /** Node parameters */\n node._radius = radius;\n node._borderWidth = borderWidth;\n node._width = width;\n node._height = height;\n node._borderRadius =\n isNumber(nodeOptions.borderRadius) && nodeOptions.borderRadius > 0\n ? Math.min(nodeOptions.borderRadius, nodeOptions.width / 2, nodeOptions.height / 2)\n : 0;\n node._shape = nodeOptions.shape ?? \"circle\";\n\n /** Node Visibility */\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n transform: this.areaTransform,\n node,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n /** Node draw */\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n this.context.lineWidth = borderWidth;\n this.context.strokeStyle = borderColor;\n this.context.fillStyle = color;\n const labelLines = this.cachedNodeLabel[node.id];\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (!node.image) {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.closePath();\n this.context.save();\n this.context.clip();\n\n this.context.drawImage(\n node.image,\n node.x - radius,\n node.y - radius,\n radius * 2,\n radius * 2,\n );\n\n this.context.restore();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n\n break;\n }\n case \"square\": {\n if (!node.image) {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.closePath();\n this.context.save();\n this.context.clip();\n this.context.drawImage(\n node.image,\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n );\n this.context.restore();\n\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n break;\n }\n case \"text\": {\n if (this.nodeSettings.textNodeDebug) {\n this.context.strokeRect(node.x - width / 2, node.y - height / 2, width, height);\n }\n\n if (nodeOptions.label && labelLines)\n drawText({\n lines: labelLines,\n context: this.context,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n x: node.x,\n y: node.y + textSize / 4 - (labelLines.length - 1) * (textSize / 2),\n textStyle: nodeOptions.labelStyle,\n textWeight,\n textGap: nodeOptions.labelGap,\n });\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n default: {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n }\n });\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.bind?.(this)?.(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n });\n }\n\n /** Text draw */\n const textLines = this.cachedNodeText[node.id];\n if (nodeOptions.textVisible && nodeOptions.text && textLines) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n let y = node.y + textShiftY;\n if (nodeOptions.shape === \"circle\") {\n y += radius;\n }\n if (nodeOptions.shape === \"square\" || nodeOptions.shape === \"text\") {\n y += height / 2;\n }\n\n drawText({\n lines: textLines,\n context: this.context,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n }\n });\n }\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { forceCollide, forceX, forceY, forceManyBody, forceCenter, forceSimulation, forceLink } from 'd3-force';
|
|
2
2
|
import '@krainovsd/js-helpers';
|
|
3
3
|
import { getDrawTime, resetDrawTime } from '../../../lib/draw-time.js';
|
|
4
|
-
import { nodeOptionsGetter, nodeRadiusGetter, nodeSizeGetter } from '../lib/settings/node-settings-getter.js';
|
|
5
4
|
import 'd3-array';
|
|
6
5
|
import { nodeIterationExtractor } from '../lib/utils/node-iteration-extractor.js';
|
|
7
|
-
import { getTextLines } from './draw-text.js';
|
|
8
6
|
|
|
9
7
|
function initSimulation() {
|
|
10
8
|
if (!this.simulation) {
|
|
@@ -89,87 +87,29 @@ function initCollideForce(forceUpdate) {
|
|
|
89
87
|
else if (!this.simulation.force("collide") || forceUpdate) {
|
|
90
88
|
this.simulation.force("collide", forceCollide()
|
|
91
89
|
.radius((node, index) => {
|
|
92
|
-
const nodeOptions =
|
|
90
|
+
const nodeOptions = this.nodeOptionsCache[node.id];
|
|
91
|
+
if (!nodeOptions)
|
|
92
|
+
return 0;
|
|
93
93
|
switch (nodeOptions.shape) {
|
|
94
94
|
case "circle": {
|
|
95
95
|
if (this.forceSettings.collideRadius) {
|
|
96
96
|
return nodeIterationExtractor(node, index, this.nodes, this, this.forceSettings.collideRadius, undefined);
|
|
97
97
|
}
|
|
98
|
-
|
|
99
|
-
radiusFlexible: this.nodeSettings.nodeRadiusFlexible,
|
|
100
|
-
radiusInitial: nodeOptions.radius,
|
|
101
|
-
linkCount: node.linkCount,
|
|
102
|
-
radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,
|
|
103
|
-
radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,
|
|
104
|
-
radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,
|
|
105
|
-
radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,
|
|
106
|
-
radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,
|
|
107
|
-
});
|
|
108
|
-
return radius + this.forceSettings.collideAdditionalRadius;
|
|
98
|
+
return nodeOptions.radius + this.forceSettings.collideAdditionalRadius;
|
|
109
99
|
}
|
|
110
100
|
case "square": {
|
|
111
|
-
|
|
112
|
-
heightInitial: nodeOptions.width,
|
|
113
|
-
widthInitial: nodeOptions.height,
|
|
114
|
-
linkCount: node.linkCount,
|
|
115
|
-
sizeFlexible: this.nodeSettings.nodeSizeFlexible,
|
|
116
|
-
sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,
|
|
117
|
-
sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,
|
|
118
|
-
sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,
|
|
119
|
-
sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,
|
|
120
|
-
sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,
|
|
121
|
-
});
|
|
122
|
-
return (Math.sqrt(width ** 2 + height ** 2) / 2 +
|
|
101
|
+
return (Math.sqrt(nodeOptions.width ** 2 + nodeOptions.height ** 2) / 2 +
|
|
123
102
|
this.forceSettings.collideAdditionalRadius);
|
|
124
103
|
}
|
|
125
104
|
case "text": {
|
|
126
|
-
|
|
127
|
-
heightInitial: nodeOptions.width,
|
|
128
|
-
widthInitial: nodeOptions.height,
|
|
129
|
-
linkCount: node.linkCount,
|
|
130
|
-
sizeFlexible: this.nodeSettings.nodeSizeFlexible,
|
|
131
|
-
sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,
|
|
132
|
-
sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,
|
|
133
|
-
sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,
|
|
134
|
-
sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,
|
|
135
|
-
sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,
|
|
136
|
-
});
|
|
137
|
-
if (this.context && nodeOptions.text) {
|
|
138
|
-
const textInfo = getTextLines({
|
|
139
|
-
context: this.context,
|
|
140
|
-
text: nodeOptions.text,
|
|
141
|
-
textAlign: nodeOptions.textAlign,
|
|
142
|
-
textColor: nodeOptions.textColor,
|
|
143
|
-
textFont: nodeOptions.textFont,
|
|
144
|
-
textSize: nodeOptions.textSize,
|
|
145
|
-
maxWidth: width,
|
|
146
|
-
textStyle: nodeOptions.textStyle,
|
|
147
|
-
textWeight: nodeOptions.textWeight,
|
|
148
|
-
});
|
|
149
|
-
height =
|
|
150
|
-
textInfo.lines.length * nodeOptions.textSize +
|
|
151
|
-
(textInfo.lines.length - 1) * nodeOptions.textGap +
|
|
152
|
-
nodeOptions.labelYPadding;
|
|
153
|
-
width = textInfo.currentMaxSize + nodeOptions.labelXPadding;
|
|
154
|
-
}
|
|
155
|
-
return (Math.sqrt(width ** 2 + height ** 2) / 2 +
|
|
105
|
+
return (Math.sqrt(nodeOptions.width ** 2 + nodeOptions.height ** 2) / 2 +
|
|
156
106
|
this.forceSettings.collideAdditionalRadius);
|
|
157
107
|
}
|
|
158
108
|
default: {
|
|
159
109
|
if (this.forceSettings.collideRadius) {
|
|
160
110
|
return nodeIterationExtractor(node, index, this.nodes, this, this.forceSettings.collideRadius, undefined);
|
|
161
111
|
}
|
|
162
|
-
|
|
163
|
-
radiusFlexible: this.nodeSettings.nodeRadiusFlexible,
|
|
164
|
-
radiusInitial: nodeOptions.radius,
|
|
165
|
-
radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,
|
|
166
|
-
radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,
|
|
167
|
-
radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,
|
|
168
|
-
radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,
|
|
169
|
-
radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,
|
|
170
|
-
linkCount: node.linkCount,
|
|
171
|
-
});
|
|
172
|
-
return radius + this.forceSettings.collideAdditionalRadius;
|
|
112
|
+
return nodeOptions.radius + this.forceSettings.collideAdditionalRadius;
|
|
173
113
|
}
|
|
174
114
|
}
|
|
175
115
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-simulation.js","sources":["../../../../../src/module/GraphCanvas/slices/init-simulation.ts"],"sourcesContent":["import {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { getDrawTime, resetDrawTime } from \"@/lib\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport type { LinkInterface, NodeInterface } from \"../types\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function initSimulation<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) {\n this.simulation = forceSimulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter.bind(this),\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.call?.(this);\n\n if (this.graphSettings.showDrawTime) {\n getDrawTime();\n // eslint-disable-next-line no-console\n console.log(`nodes: ${this.nodes.length} | links: ${this.links.length}`);\n resetDrawTime();\n }\n });\n\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n }\n}\n\nexport function initSimulationForces<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n if ((!this.forceSettings.forces || !this.forceSettings.xForce) && this.simulation.force(\"x\")) {\n this.simulation.force(\"x\", null);\n }\n if ((!this.forceSettings.forces || !this.forceSettings.yForce) && this.simulation.force(\"y\")) {\n this.simulation.force(\"y\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.chargeForce) &&\n this.simulation.force(\"charge\")\n ) {\n this.simulation.force(\"charge\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.centerForce) &&\n this.simulation.force(\"center\")\n ) {\n this.simulation.force(\"center\", null);\n }\n if (!this.forceSettings.forces || !this.forceSettings.linkForce) {\n linkForce.distance(0).strength(0).iterations(0);\n }\n\n if (this.forceSettings.forces && this.forceSettings.linkForce) {\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n }\n if (this.forceSettings.forces && this.forceSettings.xForce) {\n this.simulation.force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xPosition).strength(\n this.forceSettings.xStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.yForce) {\n this.simulation.force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yPosition).strength(\n this.forceSettings.yStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.chargeForce) {\n this.simulation.force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(Infinity)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.centerForce) {\n this.simulation.force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n}\n\nexport function initCollideForce<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, forceUpdate: boolean) {\n if (!this.simulation) return;\n\n if (\n (!this.forceSettings.collideForce || !this.forceSettings.forces) &&\n this.simulation.force(\"collide\")\n ) {\n this.simulation.force(\"collide\", null);\n }\n\n if (this.forceSettings.forces && this.forceSettings.collideForce) {\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n linkCount: node.linkCount,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n case \"square\": {\n const { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n case \"text\": {\n let { height, width } = nodeSizeGetter({\n heightInitial: nodeOptions.width,\n widthInitial: nodeOptions.height,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n if (this.context && nodeOptions.text) {\n const textInfo = getTextLines({\n context: this.context,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n maxWidth: width,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n\n height =\n textInfo.lines.length * nodeOptions.textSize +\n (textInfo.lines.length - 1) * nodeOptions.textGap +\n nodeOptions.labelYPadding;\n width = textInfo.currentMaxSize + nodeOptions.labelXPadding;\n }\n\n return (\n Math.sqrt(width ** 2 + height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n default: {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const radius = nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n }\n }\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init-simulation.js","sources":["../../../../../src/module/GraphCanvas/slices/init-simulation.ts"],"sourcesContent":["import {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { getDrawTime, resetDrawTime } from \"@/lib\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { nodeIterationExtractor } from \"../lib\";\nimport type { LinkInterface, NodeInterface } from \"../types\";\n\nexport function initSimulation<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) {\n this.simulation = forceSimulation<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter.bind(this),\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.call?.(this);\n\n if (this.graphSettings.showDrawTime) {\n getDrawTime();\n // eslint-disable-next-line no-console\n console.log(`nodes: ${this.nodes.length} | links: ${this.links.length}`);\n resetDrawTime();\n }\n });\n\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n }\n}\n\nexport function initSimulationForces<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n if ((!this.forceSettings.forces || !this.forceSettings.xForce) && this.simulation.force(\"x\")) {\n this.simulation.force(\"x\", null);\n }\n if ((!this.forceSettings.forces || !this.forceSettings.yForce) && this.simulation.force(\"y\")) {\n this.simulation.force(\"y\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.chargeForce) &&\n this.simulation.force(\"charge\")\n ) {\n this.simulation.force(\"charge\", null);\n }\n if (\n (!this.forceSettings.forces || !this.forceSettings.centerForce) &&\n this.simulation.force(\"center\")\n ) {\n this.simulation.force(\"center\", null);\n }\n if (!this.forceSettings.forces || !this.forceSettings.linkForce) {\n linkForce.distance(0).strength(0).iterations(0);\n }\n\n if (this.forceSettings.forces && this.forceSettings.linkForce) {\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n }\n if (this.forceSettings.forces && this.forceSettings.xForce) {\n this.simulation.force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xPosition).strength(\n this.forceSettings.xStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.yForce) {\n this.simulation.force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yPosition).strength(\n this.forceSettings.yStrength,\n ),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.chargeForce) {\n this.simulation.force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(Infinity)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n );\n }\n if (this.forceSettings.forces && this.forceSettings.centerForce) {\n this.simulation.force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n}\n\nexport function initCollideForce<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>, forceUpdate: boolean) {\n if (!this.simulation) return;\n\n if (\n (!this.forceSettings.collideForce || !this.forceSettings.forces) &&\n this.simulation.force(\"collide\")\n ) {\n this.simulation.force(\"collide\", null);\n }\n\n if (this.forceSettings.forces && this.forceSettings.collideForce) {\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n const nodeOptions = this.nodeOptionsCache[node.id];\n if (!nodeOptions) return 0;\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n\n return nodeOptions.radius + this.forceSettings.collideAdditionalRadius;\n }\n case \"square\": {\n return (\n Math.sqrt(nodeOptions.width ** 2 + nodeOptions.height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n case \"text\": {\n return (\n Math.sqrt(nodeOptions.width ** 2 + nodeOptions.height ** 2) / 2 +\n this.forceSettings.collideAdditionalRadius\n );\n }\n default: {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n\n return nodeOptions.radius + this.forceSettings.collideAdditionalRadius;\n }\n }\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n}\n"],"names":[],"mappings":";;;;;;SAegB,cAAc,GAAA;AAI5B,IAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe;AAC9B,aAAA,KAAK,CAAC,IAAI,CAAC,KAAK;aAChB,KAAK,CACJ,MAAM,EACN,SAAS,CAA6D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAClF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC;AAEF,aAAA,EAAE,CAAC,MAAM,EAAE,MAAK;YACf,IAAI,CAAC,IAAI,EAAE;AACb,SAAC;AACA,aAAA,EAAE,CAAC,KAAK,EAAE,MAAK;YACd,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;AAE5C,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACnC,gBAAA,WAAW,EAAE;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAU,OAAA,EAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;AACxE,gBAAA,aAAa,EAAE;;AAEnB,SAAC,CAAC;AAEJ,QAAA,oBAAoB,CAAC,IAAI,CAIvB,IAAI,CAAC;;AAEX;SAEgB,oBAAoB,GAAA;IAIlC,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAEjC;AAEb,IAAA,IAAI,CAAC,SAAS;QAAE;IAEhB,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC5F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;;IAElC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC5F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;;AAElC,IAAA,IACE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;QAC9D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC/B;QACA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAEvC,IAAA,IACE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;QAC9D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC/B;QACA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAEvC,IAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAC/D,QAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;;AAGjD,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;QAC7D;AACG,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,aAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;;AAElD,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,GAAG,EACH,MAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,CACpE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B,CACF;;AAEH,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,GAAG,EACH,MAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,CACpE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B,CACF;;AAEH,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;QAC/D,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,QAAQ,EACR,aAAa;AACV,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc;aAC1C,WAAW,CAAC,QAAQ;aACpB,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CACrD;;AAEH,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAC/D,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,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;;AAGH,IAAA,gBAAgB,CAAC,IAAI,CAInB,IAAI,EAAE,IAAI,CAAC;AACf;AAEM,SAAU,gBAAgB,CAGS,WAAoB,EAAA;IAC3D,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE;AAEtB,IAAA,IACE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;QAC/D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAChC;QACA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;;AAGxC,IAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QAChE,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC5F,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACxE,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACxE,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;;AACjC,aAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,SAAS,EACT,YAAY;AACT,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,gBAAA,IAAI,CAAC,WAAW;AAAE,oBAAA,OAAO,CAAC;AAE1B,gBAAA,QAAQ,WAAW,CAAC,KAAK;oBACvB,KAAK,QAAQ,EAAE;AACb,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;4BACpC,OAAO,sBAAsB,CAC3B,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,aAAa,EAChC,SAAS,CACV;;wBAGH,OAAO,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB;;oBAExE,KAAK,QAAQ,EAAE;AACb,wBAAA,QACE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/D,4BAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB;;oBAG9C,KAAK,MAAM,EAAE;AACX,wBAAA,QACE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/D,4BAAA,IAAI,CAAC,aAAa,CAAC,uBAAuB;;oBAG9C,SAAS;AACP,wBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;4BACpC,OAAO,sBAAsB,CAC3B,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,aAAa,EAChC,SAAS,CACV;;wBAGH,OAAO,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB;;;AAG5E,aAAC;AACA,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe;iBAC3C,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CACpD;;;AAGP;;;;"}
|
|
@@ -102,9 +102,9 @@ function updateNodeCache() {
|
|
|
102
102
|
width = maxSize + nodeOptions.labelXPadding;
|
|
103
103
|
this.cachedNodeLabel[node.id] = lines;
|
|
104
104
|
}
|
|
105
|
-
nodeOptions.width = width;
|
|
106
|
-
nodeOptions.height = height;
|
|
107
|
-
nodeOptions.radius = radius;
|
|
105
|
+
nodeOptions.width = node.visible === false ? 0 : width;
|
|
106
|
+
nodeOptions.height = node.visible === false ? 0 : height;
|
|
107
|
+
nodeOptions.radius = node.visible === false ? 0 : radius;
|
|
108
108
|
nodeOptions.labelSize = labelSize;
|
|
109
109
|
/** text */
|
|
110
110
|
if (nodeOptions.text) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node-cache.js","sources":["../../../../../src/module/GraphCanvas/slices/update-node-cache.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function updateNodeCache<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n this.nodeOptionsCache = {};\n if (!this.context) return;\n\n for (let i = 0; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n const nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius =\n nodeOptions.shape === \"circle\"\n ? nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n linkCount: node.linkCount,\n })\n : nodeOptions.radius;\n\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let labelSize = nodeOptions.labelSize;\n if (nodeOptions.shape === \"square\") {\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: nodeOptions.width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n width = size.width;\n height = size.height;\n }\n if (nodeOptions.shape === \"text\") {\n width = nodeOptions.width;\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n labelSize *= size.additionalSizeCoefficient;\n }\n /** label in not text shape */\n if (nodeOptions.shape !== \"text\" && nodeOptions.label) {\n this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;\n this.context.fillStyle = nodeOptions.labelColor;\n this.context.textAlign = nodeOptions.labelAlign;\n\n if (\n nodeOptions.labelWidth == undefined ||\n this.context.measureText(nodeOptions.label).width <= nodeOptions.labelWidth\n ) {\n this.cachedNodeLabel[node.id] = [nodeOptions.label];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.labelWidth,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.labelWeight,\n });\n this.cachedNodeLabel[node.id] = lines;\n }\n /** label in text shape */\n if (nodeOptions.shape === \"text\" && nodeOptions.label) {\n const textInfo = getTextLines({\n context: this.context,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n maxWidth: nodeOptions.labelWidth,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.textWeight,\n });\n const textNodeParameters = [textInfo.currentMaxSize, labelSize];\n const lines = textInfo.lines;\n const textSizeCoefficient = labelSize / textNodeParameters[1];\n const maxSize = textNodeParameters[0] * textSizeCoefficient;\n\n height =\n lines.length * labelSize +\n (lines.length - 1) * nodeOptions.labelGap +\n nodeOptions.labelYPadding;\n\n width = maxSize + nodeOptions.labelXPadding;\n this.cachedNodeLabel[node.id] = lines;\n }\n\n nodeOptions.width = width;\n nodeOptions.height = height;\n nodeOptions.radius = radius;\n nodeOptions.labelSize = labelSize;\n\n /** text */\n if (nodeOptions.text) {\n this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;\n this.context.fillStyle = nodeOptions.textColor;\n this.context.textAlign = nodeOptions.textAlign;\n\n if (\n nodeOptions.textWidth == undefined ||\n this.context.measureText(nodeOptions.text).width <= nodeOptions.textWidth\n ) {\n this.cachedNodeText[node.id] = [nodeOptions.text];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.textWidth,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n this.cachedNodeText[node.id] = lines;\n }\n\n this.nodeOptionsCache[node.id] = nodeOptions;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update-node-cache.js","sources":["../../../../../src/module/GraphCanvas/slices/update-node-cache.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport {\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSizeGetter,\n} from \"../lib\";\nimport { getTextLines } from \"./draw-text\";\n\nexport function updateNodeCache<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n this.nodeOptionsCache = {};\n if (!this.context) return;\n\n for (let i = 0; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n const nodeOptions = nodeIterationExtractor(\n node,\n i,\n this.nodes,\n this,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius =\n nodeOptions.shape === \"circle\"\n ? nodeRadiusGetter({\n radiusFlexible: this.nodeSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius,\n radiusIncrementByStep: this.nodeSettings.nodeRadiusIncrementByStep,\n radiusLinkCountForStep: this.nodeSettings.nodeRadiusLinkCountForStep,\n radiusMaxLinearSteps: this.nodeSettings.nodeRadiusMaxLinearSteps,\n radiusLogFactor: this.nodeSettings.nodeRadiusLogFactor,\n radiusLinkCountDividerForLog: this.nodeSettings.nodeRadiusLinkCountDividerForLog,\n linkCount: node.linkCount,\n })\n : nodeOptions.radius;\n\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let labelSize = nodeOptions.labelSize;\n if (nodeOptions.shape === \"square\") {\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: nodeOptions.width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n width = size.width;\n height = size.height;\n }\n if (nodeOptions.shape === \"text\") {\n width = nodeOptions.width;\n const size = nodeSizeGetter({\n heightInitial: nodeOptions.height,\n widthInitial: width,\n linkCount: node.linkCount,\n sizeFlexible: this.nodeSettings.nodeSizeFlexible,\n sizeIncrementByStep: this.nodeSettings.nodeSizeIncrementByStep,\n sizeLinkCountForStep: this.nodeSettings.nodeSizeLinkCountForStep,\n sizeMaxLinearSteps: this.nodeSettings.nodeSizeMaxLinearSteps,\n sizeLogFactor: this.nodeSettings.nodeSizeLogFactor,\n sizeLinkCountDividerForLog: this.nodeSettings.nodeSizeLinkCountDividerForLog,\n });\n\n labelSize *= size.additionalSizeCoefficient;\n }\n /** label in not text shape */\n if (nodeOptions.shape !== \"text\" && nodeOptions.label) {\n this.context.font = `${nodeOptions.labelStyle} normal ${nodeOptions.labelWeight} ${nodeOptions.labelSize}px ${nodeOptions.labelFont}`;\n this.context.fillStyle = nodeOptions.labelColor;\n this.context.textAlign = nodeOptions.labelAlign;\n\n if (\n nodeOptions.labelWidth == undefined ||\n this.context.measureText(nodeOptions.label).width <= nodeOptions.labelWidth\n ) {\n this.cachedNodeLabel[node.id] = [nodeOptions.label];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.labelWidth,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: nodeOptions.labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.labelWeight,\n });\n this.cachedNodeLabel[node.id] = lines;\n }\n /** label in text shape */\n if (nodeOptions.shape === \"text\" && nodeOptions.label) {\n const textInfo = getTextLines({\n context: this.context,\n text: nodeOptions.label,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n maxWidth: nodeOptions.labelWidth,\n textStyle: nodeOptions.labelStyle,\n textWeight: nodeOptions.textWeight,\n });\n const textNodeParameters = [textInfo.currentMaxSize, labelSize];\n const lines = textInfo.lines;\n const textSizeCoefficient = labelSize / textNodeParameters[1];\n const maxSize = textNodeParameters[0] * textSizeCoefficient;\n\n height =\n lines.length * labelSize +\n (lines.length - 1) * nodeOptions.labelGap +\n nodeOptions.labelYPadding;\n\n width = maxSize + nodeOptions.labelXPadding;\n this.cachedNodeLabel[node.id] = lines;\n }\n\n nodeOptions.width = node.visible === false ? 0 : width;\n nodeOptions.height = node.visible === false ? 0 : height;\n nodeOptions.radius = node.visible === false ? 0 : radius;\n nodeOptions.labelSize = labelSize;\n\n /** text */\n if (nodeOptions.text) {\n this.context.font = `${nodeOptions.textStyle} normal ${nodeOptions.textWeight} ${nodeOptions.textSize}px ${nodeOptions.textFont}`;\n this.context.fillStyle = nodeOptions.textColor;\n this.context.textAlign = nodeOptions.textAlign;\n\n if (\n nodeOptions.textWidth == undefined ||\n this.context.measureText(nodeOptions.text).width <= nodeOptions.textWidth\n ) {\n this.cachedNodeText[node.id] = [nodeOptions.text];\n }\n\n const { lines } = getTextLines({\n context: this.context,\n maxWidth: nodeOptions.textWidth,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize: nodeOptions.textSize,\n textStyle: nodeOptions.textStyle,\n textWeight: nodeOptions.textWeight,\n });\n this.cachedNodeText[node.id] = lines;\n }\n\n this.nodeOptionsCache[node.id] = nodeOptions;\n }\n}\n"],"names":[],"mappings":"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"}
|