@krainovsd/graph 0.7.0 → 0.8.1
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 +962 -178
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/lib/draw-time.js +25 -0
- package/lib/esm/lib/draw-time.js.map +1 -0
- package/lib/esm/lib/get-controls-info.js +541 -0
- package/lib/esm/lib/get-controls-info.js.map +1 -0
- package/lib/esm/module/GraphCanvas/GraphCanvas.js +235 -80
- package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
- package/lib/esm/module/GraphCanvas/constants/settings.js +26 -7
- package/lib/esm/module/GraphCanvas/constants/settings.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js +7 -4
- package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js +6 -5
- package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/animation-by-progress.js +12 -0
- package/lib/esm/module/GraphCanvas/lib/utils/animation-by-progress.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.js +2 -2
- package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js +24 -0
- package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js +14 -0
- package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js.map +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/link-iteration-extractor.js.map +1 -1
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js +1 -0
- package/lib/esm/module/GraphCanvas/lib/utils/node-iteration-extractor.js.map +1 -1
- package/lib/index.d.ts +72 -3
- package/package.json +4 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function getParticlePosition(opts) {
|
|
2
|
+
if (opts.particle.wait > 0) {
|
|
3
|
+
opts.particle.wait--;
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
const remainingSteps = opts.totalSteps - opts.particle.step;
|
|
7
|
+
const progress = opts.particle.step / opts.totalSteps;
|
|
8
|
+
if (remainingSteps === 0) {
|
|
9
|
+
opts.particle.x = opts.xEnd;
|
|
10
|
+
opts.particle.y = opts.yEnd;
|
|
11
|
+
opts.particle.step = 0;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const dx = opts.xEnd - opts.xStart;
|
|
15
|
+
const dy = opts.yEnd - opts.yStart;
|
|
16
|
+
const newX = opts.xStart + dx * progress;
|
|
17
|
+
const newY = opts.yStart + dy * progress;
|
|
18
|
+
opts.particle.x = newX;
|
|
19
|
+
opts.particle.y = newY;
|
|
20
|
+
opts.particle.step++;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { getParticlePosition };
|
|
24
|
+
//# sourceMappingURL=get-particle-position.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-particle-position.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/get-particle-position.ts"],"sourcesContent":["import type { GraphParticle } from \"../../types\";\n\ntype GetParticlePositionOptions = {\n particle: GraphParticle;\n xStart: number;\n yStart: number;\n xEnd: number;\n yEnd: number;\n totalSteps: number;\n};\n\nexport function getParticlePosition(opts: GetParticlePositionOptions) {\n if (opts.particle.wait > 0) {\n opts.particle.wait--;\n\n return;\n }\n\n const remainingSteps = opts.totalSteps - opts.particle.step;\n const progress = opts.particle.step / opts.totalSteps;\n\n if (remainingSteps === 0) {\n opts.particle.x = opts.xEnd;\n opts.particle.y = opts.yEnd;\n opts.particle.step = 0;\n\n return;\n }\n\n const dx = opts.xEnd - opts.xStart;\n const dy = opts.yEnd - opts.yStart;\n\n const newX = opts.xStart + dx * progress;\n const newY = opts.yStart + dy * progress;\n\n opts.particle.x = newX;\n opts.particle.y = newY;\n opts.particle.step++;\n}\n"],"names":[],"mappings":"AAWM,SAAU,mBAAmB,CAAC,IAAgC,EAAA;IAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAEpB;;IAGF,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;AAErD,IAAA,IAAI,cAAc,KAAK,CAAC,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;QAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAEtB;;IAGF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;IAElC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ;AAExC,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;AACtB,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;AACtB,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const ADDITIONAL_VIEWPORT = 10;
|
|
2
|
+
function isNodeVisible(opts) {
|
|
3
|
+
const left = -opts.transform.x / opts.transform.k;
|
|
4
|
+
const right = (opts.width - opts.transform.x) / opts.transform.k;
|
|
5
|
+
const top = -opts.transform.y / opts.transform.k;
|
|
6
|
+
const bottom = (opts.height - opts.transform.y) / opts.transform.k;
|
|
7
|
+
return (left < opts.x + opts.radius + ADDITIONAL_VIEWPORT &&
|
|
8
|
+
opts.x - opts.radius - ADDITIONAL_VIEWPORT < right &&
|
|
9
|
+
top < opts.y + opts.radius + ADDITIONAL_VIEWPORT &&
|
|
10
|
+
opts.y - opts.radius - ADDITIONAL_VIEWPORT < bottom);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { isNodeVisible };
|
|
14
|
+
//# sourceMappingURL=is-node-visible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-node-visible.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/is-node-visible.ts"],"sourcesContent":["import type { ZoomTransform } from \"d3-zoom\";\n\ntype IsNodeVisibleOptions = {\n x: number;\n y: number;\n radius: number;\n width: number;\n height: number;\n transform: ZoomTransform;\n};\n\nconst ADDITIONAL_VIEWPORT = 10;\n\nexport function isNodeVisible(opts: IsNodeVisibleOptions) {\n const left = -opts.transform.x / opts.transform.k;\n const right = (opts.width - opts.transform.x) / opts.transform.k;\n const top = -opts.transform.y / opts.transform.k;\n const bottom = (opts.height - opts.transform.y) / opts.transform.k;\n\n return (\n left < opts.x + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.x - opts.radius - ADDITIONAL_VIEWPORT < right &&\n top < opts.y + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.y - opts.radius - ADDITIONAL_VIEWPORT < bottom\n );\n}\n"],"names":[],"mappings":"AAWA,MAAM,mBAAmB,GAAG,EAAE;AAExB,SAAU,aAAa,CAAC,IAA0B,EAAA;AACtD,IAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACjD,IAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAChE,IAAA,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAElE,QACE,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB;QACjD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB,GAAG,KAAK;QAClD,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB;QAChD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB,GAAG,MAAM;AAEvD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { GraphState, 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 state: GraphState<NodeData, LinkData>,\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 state: GraphState<NodeData, LinkData>,\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 state: GraphState<NodeData, LinkData>,\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, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"link-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { GraphState, 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 state: GraphState<NodeData, LinkData>,\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 state: GraphState<NodeData, LinkData>,\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 state: GraphState<NodeData, LinkData>,\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, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":";;;;AAgCgB,SAAA,sBAAsB,CAKpC,IAAuC,EACvC,CAAS,EACT,KAA0C,EAC1C,KAAqC,EACrC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;QAC1E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;YAC1D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphState, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-iteration-extractor.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts"],"sourcesContent":["import { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphState, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n"],"names":[],"mappings":";;;;AA4BgB,SAAA,sBAAsB,CAKpC,IAA6B,EAC7B,CAAS,EACT,KAAgC,EAChC,KAAqC,EACrC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;QAC1E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;YAC1D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;;;"}
|
package/lib/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ interface NodeInterface<NodeData extends Record<string, unknown>> extends Simula
|
|
|
8
8
|
group?: number | string;
|
|
9
9
|
neighbors?: (string | number)[];
|
|
10
10
|
_radius?: number;
|
|
11
|
+
_visible?: boolean;
|
|
11
12
|
name?: string;
|
|
12
13
|
data?: NodeData;
|
|
13
14
|
drag?: boolean;
|
|
@@ -40,6 +41,7 @@ type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
|
|
|
40
41
|
highlightOnlyRoot?: boolean;
|
|
41
42
|
highlightFadingMin?: number;
|
|
42
43
|
highlightLinkFadingMin?: number;
|
|
44
|
+
highlightArrowFadingMin?: number;
|
|
43
45
|
highlightColorFadingMin?: number;
|
|
44
46
|
highlightTextFadingMin?: number;
|
|
45
47
|
highlightSizingAdditional?: number;
|
|
@@ -66,6 +68,8 @@ type GraphSettingsInterface<NodeData extends Record<string, unknown>> = {
|
|
|
66
68
|
nodeRadiusCoefficient?: number;
|
|
67
69
|
nodeRadiusFactor?: number;
|
|
68
70
|
nodeRadiusFlexible?: boolean;
|
|
71
|
+
showDrawTime?: boolean;
|
|
72
|
+
showDrawTimeEveryTick?: boolean;
|
|
69
73
|
};
|
|
70
74
|
type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
71
75
|
collideOn?: boolean;
|
|
@@ -94,6 +98,7 @@ type ForceSettingsInterface<NodeData extends Record<string, unknown>, LinkData e
|
|
|
94
98
|
yStrength?: NodeIterationPropsInterface<NodeData, LinkData> | number;
|
|
95
99
|
};
|
|
96
100
|
type NodeSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
101
|
+
cache?: boolean;
|
|
97
102
|
idGetter?: NodeIterationPropsInterface<NodeData, LinkData, string | number>;
|
|
98
103
|
options?: NodeIterationPropsInterface<NodeData, LinkData, NodeOptionsInterface<NodeData, LinkData>> | NodeOptionsInterface<NodeData, LinkData>;
|
|
99
104
|
};
|
|
@@ -110,7 +115,6 @@ type NodeOptionsInterface<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
110
115
|
borderColor?: string;
|
|
111
116
|
borderWidth?: number;
|
|
112
117
|
radius?: number;
|
|
113
|
-
width?: number;
|
|
114
118
|
alpha?: number;
|
|
115
119
|
color?: string;
|
|
116
120
|
textVisible?: boolean;
|
|
@@ -129,6 +133,8 @@ type NodeOptionsInterface<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
129
133
|
};
|
|
130
134
|
type NodeIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (node: NodeInterface<NodeData>, i: number, nodes: NodeInterface<NodeData>[], state?: GraphState<NodeData, LinkData>) => Return;
|
|
131
135
|
type LinkSettingsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
136
|
+
particles?: boolean;
|
|
137
|
+
cache?: boolean;
|
|
132
138
|
options?: LinkIterationPropsInterface<NodeData, LinkData, LinkOptionsInterface<NodeData, LinkData>> | LinkOptionsInterface<NodeData, LinkData>;
|
|
133
139
|
};
|
|
134
140
|
type LinkOptionsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> = {
|
|
@@ -139,6 +145,17 @@ type LinkOptionsInterface<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
139
145
|
width?: number;
|
|
140
146
|
highlightFading?: boolean;
|
|
141
147
|
pretty?: boolean;
|
|
148
|
+
arrow?: boolean;
|
|
149
|
+
arrowAlpha?: number;
|
|
150
|
+
arrowColor?: string;
|
|
151
|
+
arrowSize?: number;
|
|
152
|
+
arrowHighlightFading?: boolean;
|
|
153
|
+
arrowReverseAppear?: boolean;
|
|
154
|
+
particleAlpha?: number;
|
|
155
|
+
particleColor?: string;
|
|
156
|
+
particleRadius?: number;
|
|
157
|
+
particleCount?: number;
|
|
158
|
+
particleSteps?: number;
|
|
142
159
|
};
|
|
143
160
|
type LinkIterationPropsInterface<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>, Return = number> = (link: LinkInterface<NodeData, LinkData>, i: number, links: LinkInterface<NodeData, LinkData>[], state?: GraphState<NodeData, LinkData>) => Return;
|
|
144
161
|
type TextStyleEnum = "normal" | "italic" | "oblique";
|
|
@@ -181,11 +198,20 @@ type RGB = {
|
|
|
181
198
|
g: number;
|
|
182
199
|
b: number;
|
|
183
200
|
};
|
|
201
|
+
type GraphParticle = {
|
|
202
|
+
step: number;
|
|
203
|
+
wait: number;
|
|
204
|
+
x?: number;
|
|
205
|
+
y?: number;
|
|
206
|
+
sourceId: number;
|
|
207
|
+
targetId: number;
|
|
208
|
+
};
|
|
184
209
|
|
|
185
210
|
declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>> {
|
|
186
211
|
/** initial data */
|
|
187
212
|
private nodes;
|
|
188
213
|
private links;
|
|
214
|
+
private particles;
|
|
189
215
|
private width;
|
|
190
216
|
private height;
|
|
191
217
|
private root;
|
|
@@ -205,6 +231,8 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
205
231
|
private draw;
|
|
206
232
|
private eventAbortController;
|
|
207
233
|
private cachedNodeText;
|
|
234
|
+
private linkOptionsCache;
|
|
235
|
+
private nodeOptionsCache;
|
|
208
236
|
private isDragging;
|
|
209
237
|
private highlightedNode;
|
|
210
238
|
private highlightedNeighbors;
|
|
@@ -218,6 +246,7 @@ declare class GraphCanvas<NodeData extends Record<string, unknown>, LinkData ext
|
|
|
218
246
|
getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, "nodes" | "links">;
|
|
219
247
|
changeData(options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes">, alpha?: number): void;
|
|
220
248
|
changeSettings(options: Omit<Partial<GraphCanvasInterface<NodeData, LinkData>>, "links" | "nodes" | "listeners">): undefined;
|
|
249
|
+
clearCache(): void;
|
|
221
250
|
tick(): void;
|
|
222
251
|
restart(alpha?: number): void;
|
|
223
252
|
start(): void;
|
|
@@ -278,13 +307,25 @@ type DrawTextOptions = {
|
|
|
278
307
|
};
|
|
279
308
|
declare function drawText({ context, id, textAlign, textColor, textFont, textStyle, textGap, textWeight, textSize, text, x, y, cachedNodeText, maxWidth, }: DrawTextOptions): void;
|
|
280
309
|
|
|
281
|
-
declare function calculateLinkPositionByRadius<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(link: LinkInterface<NodeData, LinkData
|
|
310
|
+
declare function calculateLinkPositionByRadius<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(link: LinkInterface<NodeData, LinkData>, arrowSize?: number): {
|
|
282
311
|
x1: number;
|
|
283
312
|
y1: number;
|
|
284
313
|
x2: number;
|
|
285
314
|
y2: number;
|
|
286
315
|
} | null;
|
|
287
316
|
|
|
317
|
+
declare function animationByProgress(initial: number, additional: number, progress: number): number;
|
|
318
|
+
|
|
319
|
+
type GetParticlePositionOptions = {
|
|
320
|
+
particle: GraphParticle;
|
|
321
|
+
xStart: number;
|
|
322
|
+
yStart: number;
|
|
323
|
+
xEnd: number;
|
|
324
|
+
yEnd: number;
|
|
325
|
+
totalSteps: number;
|
|
326
|
+
};
|
|
327
|
+
declare function getParticlePosition(opts: GetParticlePositionOptions): void;
|
|
328
|
+
|
|
288
329
|
declare function colorToRgb(color: string): string | null;
|
|
289
330
|
|
|
290
331
|
declare function extractRgb(color: string | null): {
|
|
@@ -297,4 +338,32 @@ declare function fadeRgb(color: RGB, fade: number): RGB;
|
|
|
297
338
|
|
|
298
339
|
declare function rgbAnimationByProgress(start: RGB, end: RGB, progress: number): RGB;
|
|
299
340
|
|
|
300
|
-
|
|
341
|
+
type GraphSettingsInputRange<I extends string> = {
|
|
342
|
+
type: "range";
|
|
343
|
+
min: number;
|
|
344
|
+
max: number;
|
|
345
|
+
step: number;
|
|
346
|
+
initialValue: number;
|
|
347
|
+
id: I;
|
|
348
|
+
label: string;
|
|
349
|
+
};
|
|
350
|
+
type GraphSettingsInputCheckBox<I extends string> = {
|
|
351
|
+
type: "checkbox";
|
|
352
|
+
id: I;
|
|
353
|
+
initialValue: boolean;
|
|
354
|
+
label: string;
|
|
355
|
+
};
|
|
356
|
+
type GraphSettingsInputColorBox<I extends string> = {
|
|
357
|
+
type: "color";
|
|
358
|
+
id: I;
|
|
359
|
+
initialValue: string;
|
|
360
|
+
label: string;
|
|
361
|
+
};
|
|
362
|
+
type GraphSettingsInputInterface<I extends string> = GraphSettingsInputRange<I> | GraphSettingsInputCheckBox<I> | GraphSettingsInputColorBox<I>;
|
|
363
|
+
|
|
364
|
+
declare function getForceControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: (keyof ForceSettingsInterface<NodeData, LinkData>)[]): GraphSettingsInputInterface<keyof ForceSettingsInterface<NodeData, LinkData>>[];
|
|
365
|
+
declare function getGraphControls<NodeData extends Record<string, unknown>>(keys?: (keyof GraphSettingsInterface<NodeData>)[]): GraphSettingsInputInterface<keyof GraphSettingsInterface<NodeData>>[];
|
|
366
|
+
declare function getNodeControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: (keyof NodeOptionsInterface<NodeData, LinkData>)[]): GraphSettingsInputInterface<keyof NodeOptionsInterface<NodeData, LinkData>>[];
|
|
367
|
+
declare function getLinkControls<NodeData extends Record<string, unknown>, LinkData extends Record<string, unknown>>(keys?: (keyof LinkOptionsInterface<NodeData, LinkData>)[]): GraphSettingsInputInterface<keyof LinkOptionsInterface<NodeData, LinkData>>[];
|
|
368
|
+
|
|
369
|
+
export { type CachedNodeTextInterface, type DragEventInterface, type ForceSettingsInterface, GraphCanvas, type GraphCanvasInterface, type GraphCanvasSimulation, type GraphParticle, type GraphSettingsInterface, type GraphState, type LinkInterface, type LinkIterationPropsInterface, type LinkOptionsInterface, type LinkSettingsInterface, type ListenersInterface, type NodeInterface, type NodeIterationPropsInterface, type NodeOptionsInterface, type NodeSettingsInterface, type RGB, type TextStyleEnum, type ZoomEventInterface, animationByProgress, calculateLinkPositionByRadius, colorToRgb, drawText, extractRgb, fadeRgb, getForceControls, getGraphControls, getLinkControls, getNodeControls, getParticlePosition, linkIterationExtractor, linkOptionsGetter, nodeIterationExtractor, nodeOptionsGetter, nodeRadiusGetter, rgbAnimationByProgress };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@krainovsd/graph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Krainov graph",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "KrainovSD <denislosev48@gmail.com>",
|
|
@@ -55,7 +55,9 @@
|
|
|
55
55
|
"@types/d3-drag": "3.0.7",
|
|
56
56
|
"@types/d3-array": "3.2.1",
|
|
57
57
|
"vite": "6.0.11",
|
|
58
|
-
"@types/lodash": "4.17.14"
|
|
58
|
+
"@types/lodash": "4.17.14",
|
|
59
|
+
"@sveltejs/vite-plugin-svelte": "5.0.3",
|
|
60
|
+
"svelte": "5.23.2"
|
|
59
61
|
},
|
|
60
62
|
"dependencies": {
|
|
61
63
|
"@krainovsd/js-helpers": "0.12.0",
|