@visactor/vchart-extension 1.13.21-alpha.7 → 1.13.21-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/build/index.js +14 -7
  2. package/build/index.min.js +1 -1
  3. package/cjs/charts/compare-sankey/compare-sankey-sub-data.d.ts +1 -0
  4. package/cjs/charts/compare-sankey/compare-sankey-sub-data.js +5 -5
  5. package/cjs/charts/compare-sankey/compare-sankey-sub-data.js.map +1 -1
  6. package/cjs/charts/compare-sankey/compare-sankey-transformer.js +3 -3
  7. package/cjs/charts/compare-sankey/compare-sankey-transformer.js.map +1 -1
  8. package/cjs/charts/compare-sankey/compare-sankey.d.ts +1 -0
  9. package/cjs/charts/compare-sankey/compare-sankey.js +7 -3
  10. package/cjs/charts/compare-sankey/compare-sankey.js.map +1 -1
  11. package/cjs/charts/compare-sankey/interface.d.ts +1 -0
  12. package/cjs/charts/compare-sankey/interface.js.map +1 -1
  13. package/cjs/charts/conversion-funnel/conversion-funnel-transformer.js +0 -1
  14. package/cjs/charts/conversion-funnel/interface.js +2 -1
  15. package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js +2 -1
  16. package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +1 -2
  17. package/esm/charts/compare-sankey/compare-sankey-sub-data.d.ts +1 -0
  18. package/esm/charts/compare-sankey/compare-sankey-sub-data.js +5 -5
  19. package/esm/charts/compare-sankey/compare-sankey-sub-data.js.map +1 -1
  20. package/esm/charts/compare-sankey/compare-sankey-transformer.js +3 -3
  21. package/esm/charts/compare-sankey/compare-sankey-transformer.js.map +1 -1
  22. package/esm/charts/compare-sankey/compare-sankey.d.ts +1 -0
  23. package/esm/charts/compare-sankey/compare-sankey.js +7 -3
  24. package/esm/charts/compare-sankey/compare-sankey.js.map +1 -1
  25. package/esm/charts/compare-sankey/interface.d.ts +1 -0
  26. package/esm/charts/compare-sankey/interface.js.map +1 -1
  27. package/esm/charts/conversion-funnel/conversion-funnel-transformer.js +1 -2
  28. package/esm/charts/conversion-funnel/interface.js +2 -1
  29. package/esm/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js +2 -1
  30. package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +1 -2
  31. package/package.json +4 -4
@@ -4,6 +4,7 @@ export interface ICompareSankeyLayoutOpt {
4
4
  rawData: () => DataView;
5
5
  nodeKey: string;
6
6
  subNodeGap: number;
7
+ subNodeMinSize?: number;
7
8
  }
8
9
  export declare const calculateNodeValue: (subTree: HierarchyNodeDatum[]) => number;
9
10
  export declare function makeHierarchicNodes(originalNodes: HierarchyNodeDatum[], nodeKeyFunc: (node: HierarchyNodeDatum) => string, nodes?: SankeyNodeElement[], nodeMap?: Record<string | number, SankeyNodeElement>, originalLinks?: (SankeyLinkDatum & {
@@ -85,10 +85,10 @@ exports.calculateNodeValue = calculateNodeValue, exports.makeHierarchicNodes = m
85
85
  exports.computeHierarchicNodeLinks = computeHierarchicNodeLinks, exports.computeNodeValues = computeNodeValues;
86
86
 
87
87
  const compareSankeySubData = (data, opt) => {
88
- var _a;
88
+ var _a, _b;
89
89
  const viewData = data[0];
90
90
  if (!(null === (_a = viewData.latestData) || void 0 === _a ? void 0 : _a.length)) return {};
91
- const rawDataTree = opt.rawData().latestData[0], subNodeGap = opt.subNodeGap, keyFunc = (0,
91
+ const subNodeMinSize = null !== (_b = opt.subNodeMinSize) && void 0 !== _b ? _b : 0, rawDataTree = opt.rawData().latestData[0], subNodeGap = opt.subNodeGap, keyFunc = (0,
92
92
  vutils_1.isFunction)(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? (0, vutils_1.field)(opt.nodeKey) : null, subNodeMap = {};
93
93
  rawDataTree.subNode.forEach((sunGroup => {
94
94
  subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc),
@@ -106,9 +106,9 @@ const compareSankeySubData = (data, opt) => {
106
106
  rawDataTree.subNode.forEach((sunGroup => {
107
107
  const subNode = subNodeMap[sunGroup.type].nodes.find((subN => subN.key === n.key));
108
108
  if (!subNode) return;
109
- const percent = subNode.value / totalValue;
110
- subNode.x0 = n.x0, subNode.x1 = n.x1, subNode.y0 = currentY, subNode.y1 = currentY + totalSize * percent,
111
- subNode.type = sunGroup.type, subNode.sourceNode = n, currentY += totalSize * percent + subNodeGap,
109
+ const percent = 0 === totalValue ? 0 : subNode.value / totalValue, dis = Math.max(subNodeMinSize, totalSize * percent);
110
+ subNode.x0 = n.x0, subNode.x1 = n.x1, subNode.y0 = currentY, subNode.y1 = currentY + dis,
111
+ subNode.type = sunGroup.type, subNode.sourceNode = n, currentY += dis + subNodeGap,
112
112
  subNodes.push(subNode);
113
113
  }));
114
114
  })), subNodeMap;
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/compare-sankey-sub-data.ts"],"names":[],"mappings":"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","file":"compare-sankey-sub-data.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { field, isFunction, isNil, pickWithout, toValidNumber } from '@visactor/vutils';\nimport { HierarchyNodeDatum, SankeyLinkDatum, SankeyLinkElement, SankeyNodeElement } from '@visactor/vgrammar-sankey';\n\nexport interface ICompareSankeyLayoutOpt {\n rawData: () => DataView;\n nodeKey: string;\n subNodeGap: number;\n}\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach(node => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n\nexport function makeHierarchicNodes(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string,\n nodes: SankeyNodeElement[] = [],\n nodeMap: Record<string | number, SankeyNodeElement> = {},\n originalLinks?: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[]\n) {\n calculateNodeValue(originalNodes);\n\n const doSubTree = (subTree: HierarchyNodeDatum[], depth: number, parents?: SankeyNodeElement[]) => {\n subTree.forEach((node, index) => {\n const nodeKey = nodeKeyFunc\n ? nodeKeyFunc(node)\n : parents\n ? `${parents[parents.length - 1].key}-${index}`\n : `${depth}-${index}`;\n const nodeValue: number = (isNil(node.value) ? 0 : toValidNumber(node.value)) as number;\n\n if (nodeMap[nodeKey]) {\n nodeMap[nodeKey].value = undefined;\n } else {\n const nodeElement: SankeyNodeElement = {\n depth,\n datum: node,\n index: index,\n key: nodeKey,\n value: nodeValue,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeKey] = nodeElement;\n nodes.push(nodeElement);\n }\n if (parents && originalLinks) {\n originalLinks.push({\n source: parents[parents.length - 1].key,\n target: nodeKey,\n value: nodeValue,\n parents\n });\n }\n\n if (node.children && node.children.length) {\n doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);\n }\n });\n };\n\n doSubTree(originalNodes, 0, null);\n return nodes;\n}\n\nexport function computeHierarchicNodeLinks(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string\n) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record<string | number, SankeyNodeElement> = {};\n const linkMap: Record<string | number, SankeyLinkElement> = {};\n const originalLinks: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[] = [];\n\n makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes, nodeMap, originalLinks);\n\n originalLinks.forEach((link, index) => {\n const key = `${link.source}-${link.target}`;\n const linkDatum = pickWithout(link, ['parents']);\n\n (linkDatum as any).parents = link.parents.map(node => {\n return pickWithout(node, ['sourceLinks', 'targetLinks']);\n });\n\n if (linkMap[key]) {\n linkMap[key].value += toValidNumber(link.value);\n\n (linkMap[key].datum as SankeyLinkDatum[]).push(linkDatum as SankeyLinkDatum);\n\n return;\n }\n const linkElement = {\n index,\n key: `${link.source}-${link.target}`,\n source: link.source,\n target: link.target,\n datum: [linkDatum] as any,\n value: link.value,\n parents: link.parents.map(parent => parent.key)\n };\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n linkMap[key] = linkElement;\n });\n\n return { nodes, links, nodeMap };\n}\n\nexport function computeNodeValues(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n\n node.value = Math.max(\n isNil(node.value) ? 0 : toValidNumber(node.value),\n node.sourceLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0),\n node.targetLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0)\n );\n }\n}\n\nexport const compareSankeySubData = (data: Array<DataView>, opt: ICompareSankeyLayoutOpt) => {\n const viewData = data[0] as DataView;\n if (!viewData.latestData?.length) {\n return {};\n }\n // 读取参数\n const rawDataTree = opt.rawData().latestData[0];\n const subNodeGap = opt.subNodeGap;\n const keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey as string) : null;\n\n const subNodeMap: { [key: string]: any } = {};\n rawDataTree.subNode.forEach((sunGroup: any) => {\n subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc);\n computeNodeValues(subNodeMap[sunGroup.type].nodes);\n });\n const subCount = Object.keys(subNodeMap).length;\n\n const subNodes: any[] = [];\n viewData.latestData[0].nodes.forEach((n: SankeyNodeElement) => {\n let path: (string | number)[] = [];\n if (n.targetLinks.length) {\n const link = n.targetLinks[0];\n path = [...link.parents];\n }\n path.push(n.key);\n // 根据path获取sub的节点\n // 当前已使用比例\n let currentY = n.y0;\n const totalSize = n.y1 - n.y0 - (subCount - 1) * subNodeGap;\n const totalValue = n.value;\n rawDataTree.subNode.forEach((sunGroup: any) => {\n const subNode = (subNodeMap[sunGroup.type].nodes as SankeyNodeElement[]).find(subN => subN.key === n.key);\n if (!subNode) {\n return;\n }\n const percent = subNode.value / totalValue;\n subNode.x0 = n.x0;\n subNode.x1 = n.x1;\n subNode.y0 = currentY;\n subNode.y1 = currentY + totalSize * percent;\n // @ts-ignore\n subNode.type = sunGroup.type;\n // @ts-ignore\n subNode.sourceNode = n;\n currentY += totalSize * percent + subNodeGap;\n subNodes.push(subNode);\n });\n });\n return subNodeMap;\n};\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/compare-sankey-sub-data.ts"],"names":[],"mappings":"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","file":"compare-sankey-sub-data.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { field, isFunction, isNil, pickWithout, toValidNumber } from '@visactor/vutils';\nimport { HierarchyNodeDatum, SankeyLinkDatum, SankeyLinkElement, SankeyNodeElement } from '@visactor/vgrammar-sankey';\n\nexport interface ICompareSankeyLayoutOpt {\n rawData: () => DataView;\n nodeKey: string;\n subNodeGap: number;\n subNodeMinSize?: number;\n}\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach(node => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n\nexport function makeHierarchicNodes(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string,\n nodes: SankeyNodeElement[] = [],\n nodeMap: Record<string | number, SankeyNodeElement> = {},\n originalLinks?: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[]\n) {\n calculateNodeValue(originalNodes);\n\n const doSubTree = (subTree: HierarchyNodeDatum[], depth: number, parents?: SankeyNodeElement[]) => {\n subTree.forEach((node, index) => {\n const nodeKey = nodeKeyFunc\n ? nodeKeyFunc(node)\n : parents\n ? `${parents[parents.length - 1].key}-${index}`\n : `${depth}-${index}`;\n const nodeValue: number = (isNil(node.value) ? 0 : toValidNumber(node.value)) as number;\n\n if (nodeMap[nodeKey]) {\n nodeMap[nodeKey].value = undefined;\n } else {\n const nodeElement: SankeyNodeElement = {\n depth,\n datum: node,\n index: index,\n key: nodeKey,\n value: nodeValue,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeKey] = nodeElement;\n nodes.push(nodeElement);\n }\n if (parents && originalLinks) {\n originalLinks.push({\n source: parents[parents.length - 1].key,\n target: nodeKey,\n value: nodeValue,\n parents\n });\n }\n\n if (node.children && node.children.length) {\n doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);\n }\n });\n };\n\n doSubTree(originalNodes, 0, null);\n return nodes;\n}\n\nexport function computeHierarchicNodeLinks(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string\n) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record<string | number, SankeyNodeElement> = {};\n const linkMap: Record<string | number, SankeyLinkElement> = {};\n const originalLinks: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[] = [];\n\n makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes, nodeMap, originalLinks);\n\n originalLinks.forEach((link, index) => {\n const key = `${link.source}-${link.target}`;\n const linkDatum = pickWithout(link, ['parents']);\n\n (linkDatum as any).parents = link.parents.map(node => {\n return pickWithout(node, ['sourceLinks', 'targetLinks']);\n });\n\n if (linkMap[key]) {\n linkMap[key].value += toValidNumber(link.value);\n\n (linkMap[key].datum as SankeyLinkDatum[]).push(linkDatum as SankeyLinkDatum);\n\n return;\n }\n const linkElement = {\n index,\n key: `${link.source}-${link.target}`,\n source: link.source,\n target: link.target,\n datum: [linkDatum] as any,\n value: link.value,\n parents: link.parents.map(parent => parent.key)\n };\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n linkMap[key] = linkElement;\n });\n\n return { nodes, links, nodeMap };\n}\n\nexport function computeNodeValues(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n\n node.value = Math.max(\n isNil(node.value) ? 0 : toValidNumber(node.value),\n node.sourceLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0),\n node.targetLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0)\n );\n }\n}\n\nexport const compareSankeySubData = (data: Array<DataView>, opt: ICompareSankeyLayoutOpt) => {\n const viewData = data[0] as DataView;\n if (!viewData.latestData?.length) {\n return {};\n }\n const subNodeMinSize = opt.subNodeMinSize ?? 0;\n // 读取参数\n const rawDataTree = opt.rawData().latestData[0];\n const subNodeGap = opt.subNodeGap;\n const keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey as string) : null;\n\n const subNodeMap: { [key: string]: any } = {};\n rawDataTree.subNode.forEach((sunGroup: any) => {\n subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc);\n computeNodeValues(subNodeMap[sunGroup.type].nodes);\n });\n const subCount = Object.keys(subNodeMap).length;\n\n const subNodes: any[] = [];\n viewData.latestData[0].nodes.forEach((n: SankeyNodeElement) => {\n let path: (string | number)[] = [];\n if (n.targetLinks.length) {\n const link = n.targetLinks[0];\n path = [...link.parents];\n }\n path.push(n.key);\n // 根据path获取sub的节点\n // 当前已使用比例\n let currentY = n.y0;\n const totalSize = n.y1 - n.y0 - (subCount - 1) * subNodeGap;\n const totalValue = n.value;\n rawDataTree.subNode.forEach((sunGroup: any) => {\n const subNode = (subNodeMap[sunGroup.type].nodes as SankeyNodeElement[]).find(subN => subN.key === n.key);\n if (!subNode) {\n return;\n }\n const percent = totalValue === 0 ? 0 : subNode.value / totalValue;\n const dis = Math.max(subNodeMinSize, totalSize * percent);\n subNode.x0 = n.x0;\n subNode.x1 = n.x1;\n subNode.y0 = currentY;\n subNode.y1 = currentY + dis;\n // @ts-ignore\n subNode.type = sunGroup.type;\n // @ts-ignore\n subNode.sourceNode = n;\n currentY += dis + subNodeGap;\n subNodes.push(subNode);\n });\n });\n return subNodeMap;\n};\n"]}
@@ -15,9 +15,9 @@ class CompareSankeyChartSpecTransformer extends vchart_1.SankeyChartSpecTransfor
15
15
  }
16
16
  _getDefaultSeriesSpec(spec) {
17
17
  const seriesSpec = super._getDefaultSeriesSpec(spec);
18
- return seriesSpec.subNodeGap = spec.subNodeGap, seriesSpec.compareNodeColor = spec.compareNodeColor,
19
- seriesSpec.compareLinkColor = spec.compareLinkColor, seriesSpec.activeLink = spec.activeLink,
20
- seriesSpec;
18
+ return seriesSpec.subNodeGap = spec.subNodeGap, seriesSpec.subNodeMinSize = spec.subNodeMinSize,
19
+ seriesSpec.compareNodeColor = spec.compareNodeColor, seriesSpec.compareLinkColor = spec.compareLinkColor,
20
+ seriesSpec.activeLink = spec.activeLink, seriesSpec;
21
21
  }
22
22
  }
23
23
 
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/compare-sankey-transformer.ts"],"names":[],"mappings":";;;AACA,6CAA8D;AAE9D,MAAa,iCAAkC,SAAQ,mCAAuD;IAA9G;;QACE,eAAU,GAAG,eAAe,CAAC;IAa/B,CAAC;IAZC,aAAa,CAAC,IAAiC;QAC7C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAiC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACzE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAdD,8EAcC","file":"compare-sankey-transformer.js","sourcesContent":["import type { ICompareSankeyChartSpecBase } from './interface';\nimport { SankeyChartSpecTransformer } from '@visactor/vchart';\n\nexport class CompareSankeyChartSpecTransformer extends SankeyChartSpecTransformer<ICompareSankeyChartSpecBase> {\n seriesType = 'compareSankey';\n transformSpec(spec: ICompareSankeyChartSpecBase): void {\n super.transformSpec(spec);\n }\n\n _getDefaultSeriesSpec(spec: ICompareSankeyChartSpecBase) {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeGap = spec.subNodeGap;\n (seriesSpec as ICompareSankeyChartSpecBase).compareNodeColor = spec.compareNodeColor;\n (seriesSpec as ICompareSankeyChartSpecBase).compareLinkColor = spec.compareLinkColor;\n (seriesSpec as ICompareSankeyChartSpecBase).activeLink = spec.activeLink;\n return seriesSpec;\n }\n}\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/compare-sankey-transformer.ts"],"names":[],"mappings":";;;AACA,6CAA8D;AAE9D,MAAa,iCAAkC,SAAQ,mCAAuD;IAA9G;;QACE,eAAU,GAAG,eAAe,CAAC;IAc/B,CAAC;IAbC,aAAa,CAAC,IAAiC;QAC7C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAiC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,UAA0C,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAChF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACzE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAfD,8EAeC","file":"compare-sankey-transformer.js","sourcesContent":["import type { ICompareSankeyChartSpecBase } from './interface';\nimport { SankeyChartSpecTransformer } from '@visactor/vchart';\n\nexport class CompareSankeyChartSpecTransformer extends SankeyChartSpecTransformer<ICompareSankeyChartSpecBase> {\n seriesType = 'compareSankey';\n transformSpec(spec: ICompareSankeyChartSpecBase): void {\n super.transformSpec(spec);\n }\n\n _getDefaultSeriesSpec(spec: ICompareSankeyChartSpecBase) {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeGap = spec.subNodeGap;\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeMinSize = spec.subNodeMinSize;\n (seriesSpec as ICompareSankeyChartSpecBase).compareNodeColor = spec.compareNodeColor;\n (seriesSpec as ICompareSankeyChartSpecBase).compareLinkColor = spec.compareLinkColor;\n (seriesSpec as ICompareSankeyChartSpecBase).activeLink = spec.activeLink;\n return seriesSpec;\n }\n}\n"]}
@@ -32,6 +32,7 @@ export declare class CompareSankeySeries extends SankeySeries<ICompareSankeySeri
32
32
  private _activeTargetLink;
33
33
  private _activeSourceLink;
34
34
  protected _handleClearEmpty(highlightState: string, blurState: string): void;
35
+ getSubNodeDatum(filter: (n: Datum) => boolean): IElement[];
35
36
  }
36
37
  export declare const registerCompareSankeyChart: (option?: {
37
38
  VChart?: typeof VChart;
@@ -27,7 +27,7 @@ class CompareSankeySeries extends vchart_1.SankeySeries {
27
27
  };
28
28
  }
29
29
  initData() {
30
- var _a;
30
+ var _a, _b;
31
31
  super.initData();
32
32
  const {dataSet: dataSet} = this._option, compareSubData = new vdataset_1.DataView(dataSet, {
33
33
  name: `compare-sankey-sub-data-${this.id}-data`
@@ -47,7 +47,8 @@ class CompareSankeySeries extends vchart_1.SankeySeries {
47
47
  rawData: () => this.getRawData(),
48
48
  valueField: this._valueField,
49
49
  nodeKey: this._spec.nodeKey,
50
- subNodeGap: null !== (_a = this._spec.subNodeGap) && void 0 !== _a ? _a : 2
50
+ subNodeGap: null !== (_a = this._spec.subNodeGap) && void 0 !== _a ? _a : 2,
51
+ subNodeMinSize: null !== (_b = this._spec.subNodeMinSize) && void 0 !== _b ? _b : 0
51
52
  }
52
53
  }), (0, vchart_1.registerDataSetInstanceTransform)(this._dataSet, "compareSankeySubNodes", compare_sankey_sub_nodes_1.compareSankeySubNodes),
53
54
  compareNodeData.transform({
@@ -103,7 +104,7 @@ class CompareSankeySeries extends vchart_1.SankeySeries {
103
104
  allLinkElements.forEach((el => {
104
105
  el.removeState([ vchart_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS ]);
105
106
  })), this._highLightElements(allLinkElements, [], highlightState, blurState);
106
- const nodeDatums = allNodeElements.map((el => (0, mark_1.getDatumOfGraphic)(el))), pickNodeDatums = nodeDatums.filter((d => d.key === nodeDatum.key)), highlightLinksData = [], highlightNodeKeys = [];
107
+ const nodeDatums = allNodeElements.map((el => (0, mark_1.getDatumOfGraphic)(el))), pickNodeDatums = nodeDatums.filter((d => d.key === nodeDatum.key)), highlightLinksData = [], highlightNodeKeys = pickNodeDatums.map((d => d.key));
107
108
  this._activeTargetLink(nodeDatum, pickNodeDatums, allNodeElements, allLinkElements, highlightNodeKeys, highlightLinksData, highlightState, blurState),
108
109
  this._activeSourceLink(nodeDatum, pickNodeDatums, nodeDatums, allNodeElements, highlightNodeKeys, highlightLinksData, highlightState, blurState),
109
110
  this._highLightElements(allNodeElements, highlightNodeKeys, highlightState, blurState),
@@ -173,6 +174,9 @@ class CompareSankeySeries extends vchart_1.SankeySeries {
173
174
  el.removeState(vchart_1.STATE_VALUE_ENUM.STATE_HOVER);
174
175
  }));
175
176
  }
177
+ getSubNodeDatum(filter) {
178
+ return this._nodeMark.getProductElements().filter((n => filter(n.data[0])));
179
+ }
176
180
  }
177
181
 
178
182
  exports.CompareSankeySeries = CompareSankeySeries, CompareSankeySeries.type = "compareSankey";
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/compare-sankey.ts"],"names":[],"mappings":"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","file":"compare-sankey.js","sourcesContent":["import type { SankeyLinkElement } from '@visactor/vgrammar-sankey';\nimport type { ICompareSankeyChartSpecBase, ICompareSankeySeriesSpecBase } from './interface';\nimport type { ILinkPathMarkSpec, IRectMarkSpec } from '@visactor/vchart';\nimport {\n VChart,\n SankeyChart,\n SankeySeries,\n registerDataSetInstanceTransform,\n STATE_VALUE_ENUM,\n AttributeLevel,\n DEFAULT_DATA_INDEX,\n DEFAULT_DATA_KEY\n} from '@visactor/vchart';\nimport { DataView } from '@visactor/vdataset';\nimport { CompareSankeyChartSpecTransformer } from './compare-sankey-transformer';\nimport { compareSankeySubNodes } from './compare-sankey-sub-nodes';\nimport type { ILinkPathMark } from '@visactor/vchart/src/mark/interface';\nimport { compareSankeySubData } from './compare-sankey-sub-data';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport { getDatumOfGraphic } from '../../utils/mark';\n\ntype Datum = any;\n\nexport class CompareSankeyChart extends SankeyChart<ICompareSankeyChartSpecBase> {\n type = 'compareSankey';\n static type = 'compareSankey';\n readonly seriesType = CompareSankeySeries.type;\n\n declare _spec: ICompareSankeyChartSpecBase;\n\n static readonly transformerConstructor = CompareSankeyChartSpecTransformer;\n readonly transformerConstructor = CompareSankeyChartSpecTransformer;\n}\n\nexport class CompareSankeySeries extends SankeySeries<ICompareSankeySeriesSpecBase> {\n // @ts-ignore\n type = 'compareSankey';\n static type = 'compareSankey';\n\n protected _arrowData?: DataView;\n\n private _subData: DataView;\n\n private _activeLinkData: DataView;\n private _activeLinkMark: ILinkPathMark;\n\n initData() {\n super.initData();\n // 此时 viewData 已经初始化完成\n // 创建 第二层 viewDataActive\n //\n const { dataSet } = this._option;\n\n const compareSubData = new DataView(dataSet, { name: `compare-sankey-sub-data-${this.id}-data` });\n compareSubData.parse([this.getViewData()], {\n type: 'dataview'\n });\n this._subData = compareSubData;\n\n const compareNodeData = new DataView(dataSet, { name: `compare-sankey-node-${this.id}-data` });\n compareNodeData.parse([compareSubData], {\n type: 'dataview'\n });\n\n // 注册对比布局函数,计算拆解 nodes 的信息\n registerDataSetInstanceTransform(this._dataSet, 'compareSankeySubData', compareSankeySubData);\n compareSubData.transform({\n type: 'compareSankeySubData',\n options: {\n rawData: () => this.getRawData(),\n valueField: this._valueField,\n nodeKey: this._spec.nodeKey,\n subNodeGap: this._spec.subNodeGap ?? 2\n }\n });\n registerDataSetInstanceTransform(this._dataSet, 'compareSankeySubNodes', compareSankeySubNodes);\n compareNodeData.transform({\n type: 'compareSankeySubNodes'\n });\n this._nodesSeriesData.getDataView().parse([compareNodeData], {\n type: 'dataview'\n });\n\n // 激活时的linkData\n this._activeLinkData = new DataView(dataSet, { name: `compare-sankey-link-${this.id}-data` });\n }\n\n initEvent() {\n super.initEvent();\n this._activeLinkData?.target.addListener('change', this.activeLinkDataUpdate.bind(this));\n }\n\n initMark() {\n super.initMark();\n\n const linkMark = this._createMark(\n { ...SankeySeries.mark.link, name: 'activeLink' },\n {\n dataView: this._activeLinkData\n }\n ) as ILinkPathMark;\n if (linkMark) {\n this._activeLinkMark = linkMark;\n }\n }\n compileData() {\n super.compileData();\n this._activeLinkMark?.compileData();\n }\n\n _initLinkMarkStyle() {\n super._initLinkMarkStyle();\n // (this._activeLinkMark as any).setGlyphConfig({\n // direction: this.direction\n // });\n this._activeLinkMark.setAttribute('direction', this.direction);\n\n this.setMarkStyle<ILinkPathMarkSpec>(\n this._activeLinkMark,\n {\n x0: (datum: Datum) => datum.x0,\n x1: (datum: Datum) => datum.x1,\n y0: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n thickness: (datum: Datum) => datum.thickness\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n this._activeLinkMark,\n {\n fill: this._fillActiveLink\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n _initNodeMarkStyle() {\n super._initNodeMarkStyle();\n if (this._spec.compareNodeColor) {\n this.setMarkStyle<IRectMarkSpec>(\n this._nodeMark,\n {\n fill: this._fillCompareNode\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n private activeLinkDataUpdate() {\n this._activeLinkMark.getData().updateData();\n }\n\n protected _fillCompareNode = (datum: Datum) => {\n if (this._spec.compareNodeColor?.[datum.type]) {\n return this._spec.compareNodeColor[datum.type];\n }\n return this._spec.node.style?.fill ?? this._fillByNode(datum);\n };\n\n protected _fillActiveLink = (datum: Datum) => {\n if (this._spec.compareLinkColor?.[datum.type]) {\n return this._spec.compareLinkColor[datum.type];\n }\n return this._spec.link.style?.fill ?? this._fillByLink(datum);\n };\n\n protected _handleNodeRelatedClick(element: IElement, highlightState: string, blurState: string) {\n const nodeDatum = element.getDatum();\n // 节点\n const allNodeElements = this._nodeMark.getProductElements();\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n // 边\n const allLinkElements = this._linkMark.getProductElements();\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n // 原始 link 全部进入blur状态\n allLinkElements.forEach(el => {\n el.removeState([STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS]);\n });\n this._highLightElements(allLinkElements, [], highlightState, blurState);\n\n const nodeDatums = allNodeElements.map(el => getDatumOfGraphic(el) as Datum);\n const pickNodeDatums = nodeDatums.filter(d => d.key === nodeDatum.key);\n // 层级型数据\n const highlightLinksData: any[] = [];\n // 高亮节点key\n const highlightNodeKeys: (string | number)[] = [];\n\n // 上游路径始终只选取第一个\n this._activeTargetLink(\n nodeDatum,\n pickNodeDatums,\n allNodeElements,\n allLinkElements,\n highlightNodeKeys,\n highlightLinksData,\n highlightState,\n blurState\n );\n this._activeSourceLink(\n nodeDatum,\n pickNodeDatums,\n nodeDatums,\n allNodeElements,\n highlightNodeKeys,\n highlightLinksData,\n highlightState,\n blurState\n );\n this._highLightElements(allNodeElements, highlightNodeKeys as string[], highlightState, blurState);\n this._activeLinkData.parseNewData(highlightLinksData);\n\n this._needClear = true;\n }\n\n private _activeTargetLink(\n nodeDatum: Datum,\n pickNodeDatums: Datum[],\n allNodeElements: any[],\n allLinkElements: any[],\n highlightNodeKeys: (string | number)[],\n highlightLinksData: any[],\n highlightState: string,\n blurState: string\n ) {\n this._handleClearEmpty(highlightState, blurState);\n const sourceNode = nodeDatum.sourceNode;\n // 上游路径始终只选取第一个\n const firstTarget = sourceNode.targetLinks[0];\n if (!firstTarget) {\n return;\n }\n let percent = 0;\n pickNodeDatums.forEach(n => {\n const link = n.targetLinks.find((l: any) => l.key === firstTarget.key);\n if (link) {\n const p = link.value / firstTarget.value;\n const key = firstTarget.key + '_' + n.type;\n const activeLink = {\n ...firstTarget,\n // 起点重新分配\n y0: firstTarget.y0 - firstTarget.thickness / 2 + (percent + p / 2) * firstTarget.thickness,\n y1: n.y0 + (p * firstTarget.thickness) / 2,\n thickness: p * firstTarget.thickness,\n key,\n type: n.type,\n [DEFAULT_DATA_INDEX]: highlightLinksData.length,\n [DEFAULT_DATA_KEY]: key\n };\n highlightLinksData.push(activeLink);\n percent += p;\n }\n });\n\n // 第一个 path 中上流路径上的 node 全部高亮\n highlightNodeKeys.push(...firstTarget.parents, nodeDatum.key);\n const linkKeys: string[] = [];\n // 找到对应的原始 link 也都高亮\n for (let i = 0; i < firstTarget.parents.length - 1; i++) {\n linkKeys.push(firstTarget.parents[i] + '-' + firstTarget.parents[i + 1]);\n }\n this._highLightElements(allLinkElements, linkKeys, highlightState, blurState);\n }\n\n private _activeSourceLink(\n nodeDatum: Datum,\n pickNodeDatums: Datum[],\n allNodeDatums: Datum[],\n allNodeElements: any[],\n highlightNodeKeys: (string | number)[],\n highlightLinksData: any[],\n highlightState: string,\n blurState: string\n ) {\n this._handleClearEmpty(highlightState, blurState);\n const sourceNode = nodeDatum.sourceNode;\n // 下游路径始需要全部处理\n const sourceLinks = sourceNode.sourceLinks;\n if (!sourceLinks?.length) {\n return;\n }\n\n const sourceValueTemp: { [key: string]: number } = {};\n sourceLinks.forEach((sourceLink: SankeyLinkElement) => {\n highlightNodeKeys.push(sourceLink.target);\n pickNodeDatums.forEach((n, index) => {\n sourceValueTemp[n.type] = sourceValueTemp[n.type] ?? 0;\n const link = n.sourceLinks.find((l: SankeyLinkElement) => l.key === sourceLink.key);\n if (link) {\n const p = link.value / n.value;\n const totalSize = n.y1 - n.y0;\n const size = totalSize * p;\n const key = sourceLink.key + '_' + n.type;\n const activeLink = {\n ...sourceLink,\n // 起点重新分配\n y0: n.y0 + sourceValueTemp[n.type] * totalSize + size / 2,\n thickness: size,\n key,\n type: n.type,\n [DEFAULT_DATA_INDEX]: highlightLinksData.length,\n [DEFAULT_DATA_KEY]: key\n };\n // y1 分为第一个和在其他\n if (index === 0) {\n // 与原始link的起点\n activeLink.y1 = sourceLink.y1 - sourceLink.thickness / 2 + size / 2;\n } else {\n // 与目标子 node 的 y0 对齐\n const targetNode = allNodeDatums.find(_n => _n.key === link.target && _n.type === n.type);\n if (targetNode) {\n activeLink.y1 = targetNode.y0 + size / 2;\n } else {\n // 错误的情况\n return;\n }\n }\n highlightLinksData.push(activeLink);\n sourceValueTemp[n.type] += p;\n }\n });\n });\n }\n\n protected _handleClearEmpty(highlightState: string, blurState: string) {\n super._handleClearEmpty(highlightState, blurState);\n this._activeLinkData.parseNewData([]);\n\n // 同时需要清除 hover\n const allNodeElements = this._nodeMark.getProductElements();\n if (allNodeElements || !allNodeElements.length) {\n allNodeElements.forEach(el => {\n el.removeState(STATE_VALUE_ENUM.STATE_HOVER);\n });\n }\n\n // 同时需要清除 hover\n const allLinkElements = this._linkMark.getProductElements();\n if (allLinkElements || !allLinkElements.length) {\n allLinkElements.forEach(el => {\n el.removeState(STATE_VALUE_ENUM.STATE_HOVER);\n });\n }\n }\n}\n\nexport const registerCompareSankeyChart = (option?: { VChart?: typeof VChart }) => {\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([CompareSankeyChart]);\n vchartConstructor.useSeries([CompareSankeySeries]);\n }\n};\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/compare-sankey.ts"],"names":[],"mappings":"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","file":"compare-sankey.js","sourcesContent":["import type { SankeyLinkElement } from '@visactor/vgrammar-sankey';\nimport type { ICompareSankeyChartSpecBase, ICompareSankeySeriesSpecBase } from './interface';\nimport type { ILinkPathMarkSpec, IRectMarkSpec } from '@visactor/vchart';\nimport {\n VChart,\n SankeyChart,\n SankeySeries,\n registerDataSetInstanceTransform,\n STATE_VALUE_ENUM,\n AttributeLevel,\n DEFAULT_DATA_INDEX,\n DEFAULT_DATA_KEY\n} from '@visactor/vchart';\nimport { DataView } from '@visactor/vdataset';\nimport { CompareSankeyChartSpecTransformer } from './compare-sankey-transformer';\nimport { compareSankeySubNodes } from './compare-sankey-sub-nodes';\nimport type { ILinkPathMark } from '@visactor/vchart/src/mark/interface';\nimport { compareSankeySubData } from './compare-sankey-sub-data';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport { getDatumOfGraphic } from '../../utils/mark';\n\ntype Datum = any;\n\nexport class CompareSankeyChart extends SankeyChart<ICompareSankeyChartSpecBase> {\n type = 'compareSankey';\n static type = 'compareSankey';\n readonly seriesType = CompareSankeySeries.type;\n\n declare _spec: ICompareSankeyChartSpecBase;\n\n static readonly transformerConstructor = CompareSankeyChartSpecTransformer;\n readonly transformerConstructor = CompareSankeyChartSpecTransformer;\n}\n\nexport class CompareSankeySeries extends SankeySeries<ICompareSankeySeriesSpecBase> {\n // @ts-ignore\n type = 'compareSankey';\n static type = 'compareSankey';\n\n protected _arrowData?: DataView;\n\n private _subData: DataView;\n\n private _activeLinkData: DataView;\n private _activeLinkMark: ILinkPathMark;\n\n initData() {\n super.initData();\n // 此时 viewData 已经初始化完成\n // 创建 第二层 viewDataActive\n //\n const { dataSet } = this._option;\n\n const compareSubData = new DataView(dataSet, { name: `compare-sankey-sub-data-${this.id}-data` });\n compareSubData.parse([this.getViewData()], {\n type: 'dataview'\n });\n this._subData = compareSubData;\n\n const compareNodeData = new DataView(dataSet, { name: `compare-sankey-node-${this.id}-data` });\n compareNodeData.parse([compareSubData], {\n type: 'dataview'\n });\n\n // 注册对比布局函数,计算拆解 nodes 的信息\n registerDataSetInstanceTransform(this._dataSet, 'compareSankeySubData', compareSankeySubData);\n compareSubData.transform({\n type: 'compareSankeySubData',\n options: {\n rawData: () => this.getRawData(),\n valueField: this._valueField,\n nodeKey: this._spec.nodeKey,\n subNodeGap: this._spec.subNodeGap ?? 2,\n subNodeMinSize: this._spec.subNodeMinSize ?? 0\n }\n });\n registerDataSetInstanceTransform(this._dataSet, 'compareSankeySubNodes', compareSankeySubNodes);\n compareNodeData.transform({\n type: 'compareSankeySubNodes'\n });\n this._nodesSeriesData.getDataView().parse([compareNodeData], {\n type: 'dataview'\n });\n\n // 激活时的linkData\n this._activeLinkData = new DataView(dataSet, { name: `compare-sankey-link-${this.id}-data` });\n }\n\n initEvent() {\n super.initEvent();\n this._activeLinkData?.target.addListener('change', this.activeLinkDataUpdate.bind(this));\n }\n\n initMark() {\n super.initMark();\n\n const linkMark = this._createMark(\n { ...SankeySeries.mark.link, name: 'activeLink' },\n {\n dataView: this._activeLinkData\n }\n ) as ILinkPathMark;\n if (linkMark) {\n this._activeLinkMark = linkMark;\n }\n }\n compileData() {\n super.compileData();\n this._activeLinkMark?.compileData();\n }\n\n _initLinkMarkStyle() {\n super._initLinkMarkStyle();\n // (this._activeLinkMark as any).setGlyphConfig({\n // direction: this.direction\n // });\n this._activeLinkMark.setAttribute('direction', this.direction);\n\n this.setMarkStyle<ILinkPathMarkSpec>(\n this._activeLinkMark,\n {\n x0: (datum: Datum) => datum.x0,\n x1: (datum: Datum) => datum.x1,\n y0: (datum: Datum) => datum.y0,\n y1: (datum: Datum) => datum.y1,\n thickness: (datum: Datum) => datum.thickness\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n\n this.setMarkStyle(\n this._activeLinkMark,\n {\n fill: this._fillActiveLink\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.User_Mark\n );\n }\n\n _initNodeMarkStyle() {\n super._initNodeMarkStyle();\n if (this._spec.compareNodeColor) {\n this.setMarkStyle<IRectMarkSpec>(\n this._nodeMark,\n {\n fill: this._fillCompareNode\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n private activeLinkDataUpdate() {\n this._activeLinkMark.getData().updateData();\n }\n\n protected _fillCompareNode = (datum: Datum) => {\n if (this._spec.compareNodeColor?.[datum.type]) {\n return this._spec.compareNodeColor[datum.type];\n }\n return this._spec.node.style?.fill ?? this._fillByNode(datum);\n };\n\n protected _fillActiveLink = (datum: Datum) => {\n if (this._spec.compareLinkColor?.[datum.type]) {\n return this._spec.compareLinkColor[datum.type];\n }\n return this._spec.link.style?.fill ?? this._fillByLink(datum);\n };\n\n protected _handleNodeRelatedClick(element: IElement, highlightState: string, blurState: string) {\n const nodeDatum = element.getDatum();\n // 节点\n const allNodeElements = this._nodeMark.getProductElements();\n if (!allNodeElements || !allNodeElements.length) {\n return;\n }\n // 边\n const allLinkElements = this._linkMark.getProductElements();\n if (!allLinkElements || !allLinkElements.length) {\n return;\n }\n\n // 原始 link 全部进入blur状态\n allLinkElements.forEach(el => {\n el.removeState([STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS]);\n });\n this._highLightElements(allLinkElements, [], highlightState, blurState);\n\n const nodeDatums = allNodeElements.map(el => getDatumOfGraphic(el) as Datum);\n const pickNodeDatums = nodeDatums.filter(d => d.key === nodeDatum.key);\n // 层级型数据\n const highlightLinksData: any[] = [];\n // 高亮节点key\n const highlightNodeKeys: (string | number)[] = pickNodeDatums.map(d => d.key);\n\n // 上游路径始终只选取第一个\n this._activeTargetLink(\n nodeDatum,\n pickNodeDatums,\n allNodeElements,\n allLinkElements,\n highlightNodeKeys,\n highlightLinksData,\n highlightState,\n blurState\n );\n this._activeSourceLink(\n nodeDatum,\n pickNodeDatums,\n nodeDatums,\n allNodeElements,\n highlightNodeKeys,\n highlightLinksData,\n highlightState,\n blurState\n );\n this._highLightElements(allNodeElements, highlightNodeKeys as string[], highlightState, blurState);\n this._activeLinkData.parseNewData(highlightLinksData);\n\n this._needClear = true;\n }\n\n private _activeTargetLink(\n nodeDatum: Datum,\n pickNodeDatums: Datum[],\n allNodeElements: any[],\n allLinkElements: any[],\n highlightNodeKeys: (string | number)[],\n highlightLinksData: any[],\n highlightState: string,\n blurState: string\n ) {\n this._handleClearEmpty(highlightState, blurState);\n const sourceNode = nodeDatum.sourceNode;\n // 上游路径始终只选取第一个\n const firstTarget = sourceNode.targetLinks[0];\n if (!firstTarget) {\n return;\n }\n let percent = 0;\n pickNodeDatums.forEach(n => {\n const link = n.targetLinks.find((l: any) => l.key === firstTarget.key);\n if (link) {\n const p = link.value / firstTarget.value;\n const key = firstTarget.key + '_' + n.type;\n const activeLink = {\n ...firstTarget,\n // 起点重新分配\n y0: firstTarget.y0 - firstTarget.thickness / 2 + (percent + p / 2) * firstTarget.thickness,\n y1: n.y0 + (p * firstTarget.thickness) / 2,\n thickness: p * firstTarget.thickness,\n key,\n type: n.type,\n [DEFAULT_DATA_INDEX]: highlightLinksData.length,\n [DEFAULT_DATA_KEY]: key\n };\n highlightLinksData.push(activeLink);\n percent += p;\n }\n });\n\n // 第一个 path 中上流路径上的 node 全部高亮\n highlightNodeKeys.push(...firstTarget.parents, nodeDatum.key);\n const linkKeys: string[] = [];\n // 找到对应的原始 link 也都高亮\n for (let i = 0; i < firstTarget.parents.length - 1; i++) {\n linkKeys.push(firstTarget.parents[i] + '-' + firstTarget.parents[i + 1]);\n }\n this._highLightElements(allLinkElements, linkKeys, highlightState, blurState);\n }\n\n private _activeSourceLink(\n nodeDatum: Datum,\n pickNodeDatums: Datum[],\n allNodeDatums: Datum[],\n allNodeElements: any[],\n highlightNodeKeys: (string | number)[],\n highlightLinksData: any[],\n highlightState: string,\n blurState: string\n ) {\n this._handleClearEmpty(highlightState, blurState);\n const sourceNode = nodeDatum.sourceNode;\n // 下游路径始需要全部处理\n const sourceLinks = sourceNode.sourceLinks;\n if (!sourceLinks?.length) {\n return;\n }\n\n const sourceValueTemp: { [key: string]: number } = {};\n sourceLinks.forEach((sourceLink: SankeyLinkElement) => {\n highlightNodeKeys.push(sourceLink.target);\n pickNodeDatums.forEach((n, index) => {\n sourceValueTemp[n.type] = sourceValueTemp[n.type] ?? 0;\n const link = n.sourceLinks.find((l: SankeyLinkElement) => l.key === sourceLink.key);\n if (link) {\n const p = link.value / n.value;\n const totalSize = n.y1 - n.y0;\n const size = totalSize * p;\n const key = sourceLink.key + '_' + n.type;\n const activeLink = {\n ...sourceLink,\n // 起点重新分配\n y0: n.y0 + sourceValueTemp[n.type] * totalSize + size / 2,\n thickness: size,\n key,\n type: n.type,\n [DEFAULT_DATA_INDEX]: highlightLinksData.length,\n [DEFAULT_DATA_KEY]: key\n };\n // y1 分为第一个和在其他\n if (index === 0) {\n // 与原始link的起点\n activeLink.y1 = sourceLink.y1 - sourceLink.thickness / 2 + size / 2;\n } else {\n // 与目标子 node 的 y0 对齐\n const targetNode = allNodeDatums.find(_n => _n.key === link.target && _n.type === n.type);\n if (targetNode) {\n activeLink.y1 = targetNode.y0 + size / 2;\n } else {\n // 错误的情况\n return;\n }\n }\n highlightLinksData.push(activeLink);\n sourceValueTemp[n.type] += p;\n }\n });\n });\n }\n\n protected _handleClearEmpty(highlightState: string, blurState: string) {\n super._handleClearEmpty(highlightState, blurState);\n this._activeLinkData.parseNewData([]);\n\n // 同时需要清除 hover\n const allNodeElements = this._nodeMark.getProductElements();\n if (allNodeElements || !allNodeElements.length) {\n allNodeElements.forEach(el => {\n el.removeState(STATE_VALUE_ENUM.STATE_HOVER);\n });\n }\n\n // 同时需要清除 hover\n const allLinkElements = this._linkMark.getProductElements();\n if (allLinkElements || !allLinkElements.length) {\n allLinkElements.forEach(el => {\n el.removeState(STATE_VALUE_ENUM.STATE_HOVER);\n });\n }\n }\n\n public getSubNodeDatum(filter: (n: Datum) => boolean) {\n return this._nodeMark.getProductElements().filter((n: Datum) => filter(n.data[0]));\n }\n}\n\nexport const registerCompareSankeyChart = (option?: { VChart?: typeof VChart }) => {\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([CompareSankeyChart]);\n vchartConstructor.useSeries([CompareSankeySeries]);\n }\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { ISankeyChartSpec, ISankeySeriesSpec, ILinkPathMarkSpec } from '@visactor/vchart';
2
2
  export interface ICompareSankeySpec {
3
3
  subNodeGap?: number;
4
+ subNodeMinSize?: number;
4
5
  compareNodeColor?: {
5
6
  [key: string]: string;
6
7
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ISankeyChartSpec, ISankeySeriesSpec, ILinkPathMarkSpec } from '@visactor/vchart';\n\nexport interface ICompareSankeySpec {\n /**\n * 子节点间距\n */\n subNodeGap?: number;\n /**\n * 对比节点颜色\n */\n compareNodeColor?: { [key: string]: string };\n /**\n * 对比边点颜色\n */\n compareLinkColor?: { [key: string]: string };\n /**\n * 对比边样式\n */\n activeLink?: {\n style: ILinkPathMarkSpec;\n };\n}\n\nexport interface ICompareSankeySeriesSpecBase extends ISankeySeriesSpec, ICompareSankeySpec {}\n\nexport interface ICompareSankeyChartSpecBase extends ISankeyChartSpec, ICompareSankeySpec {}\n\nexport interface ICompareSankeySeriesSpec extends Omit<ICompareSankeySeriesSpecBase, 'type' | 'series'> {\n type: 'compareSankey';\n}\n\nexport interface ICompareSankeyChartSpec extends Omit<ICompareSankeyChartSpecBase, 'type' | 'series'> {\n type: 'compareSankey';\n}\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ISankeyChartSpec, ISankeySeriesSpec, ILinkPathMarkSpec } from '@visactor/vchart';\n\nexport interface ICompareSankeySpec {\n /**\n * 子节点间距\n */\n subNodeGap?: number;\n /**\n * 子节点最小高度\n */\n subNodeMinSize?: number;\n /**\n * 对比节点颜色\n */\n compareNodeColor?: { [key: string]: string };\n /**\n * 对比边点颜色\n */\n compareLinkColor?: { [key: string]: string };\n /**\n * 对比边样式\n */\n activeLink?: {\n style: ILinkPathMarkSpec;\n };\n}\n\nexport interface ICompareSankeySeriesSpecBase extends ISankeySeriesSpec, ICompareSankeySpec {}\n\nexport interface ICompareSankeyChartSpecBase extends ISankeyChartSpec, ICompareSankeySpec {}\n\nexport interface ICompareSankeySeriesSpec extends Omit<ICompareSankeySeriesSpecBase, 'type' | 'series'> {\n type: 'compareSankey';\n}\n\nexport interface ICompareSankeyChartSpec extends Omit<ICompareSankeyChartSpecBase, 'type' | 'series'> {\n type: 'compareSankey';\n}\n"]}
@@ -192,5 +192,4 @@ function addFunnelBackgroundMark(funnelBackground) {
192
192
  });
193
193
  }
194
194
 
195
- //# sourceMappingURL=conversion-funnel-transformer.js.map
196
195
  exports.ConversionFunnelChartSpecTransformer = ConversionFunnelChartSpecTransformer;
@@ -2,4 +2,5 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- });
5
+ });
6
+ //# sourceMappingURL=interface.js.map
@@ -138,4 +138,5 @@ function processSequenceData(spec) {
138
138
  }
139
139
 
140
140
  exports.SequenceScatterKDEChartSpecTransformer = SequenceScatterKDEChartSpecTransformer,
141
- exports.processSequenceData = processSequenceData;
141
+ exports.processSequenceData = processSequenceData;
142
+ //# sourceMappingURL=sequence-scatter-kde-transformer.js.map
@@ -324,5 +324,4 @@ function processSequenceData(spec) {
324
324
  }
325
325
 
326
326
  exports.SequenceScatterLinkChartSpecTransformer = SequenceScatterLinkChartSpecTransformer,
327
- exports.processSequenceData = processSequenceData;
328
- //# sourceMappingURL=sequence-scatter-link-transformer.js.map
327
+ exports.processSequenceData = processSequenceData;
@@ -4,6 +4,7 @@ export interface ICompareSankeyLayoutOpt {
4
4
  rawData: () => DataView;
5
5
  nodeKey: string;
6
6
  subNodeGap: number;
7
+ subNodeMinSize?: number;
7
8
  }
8
9
  export declare const calculateNodeValue: (subTree: HierarchyNodeDatum[]) => number;
9
10
  export declare function makeHierarchicNodes(originalNodes: HierarchyNodeDatum[], nodeKeyFunc: (node: HierarchyNodeDatum) => string, nodes?: SankeyNodeElement[], nodeMap?: Record<string | number, SankeyNodeElement>, originalLinks?: (SankeyLinkDatum & {
@@ -76,10 +76,10 @@ export function computeNodeValues(nodes) {
76
76
  }
77
77
 
78
78
  export const compareSankeySubData = (data, opt) => {
79
- var _a;
79
+ var _a, _b;
80
80
  const viewData = data[0];
81
81
  if (!(null === (_a = viewData.latestData) || void 0 === _a ? void 0 : _a.length)) return {};
82
- const rawDataTree = opt.rawData().latestData[0], subNodeGap = opt.subNodeGap, keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey) : null, subNodeMap = {};
82
+ const subNodeMinSize = null !== (_b = opt.subNodeMinSize) && void 0 !== _b ? _b : 0, rawDataTree = opt.rawData().latestData[0], subNodeGap = opt.subNodeGap, keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey) : null, subNodeMap = {};
83
83
  rawDataTree.subNode.forEach((sunGroup => {
84
84
  subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc),
85
85
  computeNodeValues(subNodeMap[sunGroup.type].nodes);
@@ -96,9 +96,9 @@ export const compareSankeySubData = (data, opt) => {
96
96
  rawDataTree.subNode.forEach((sunGroup => {
97
97
  const subNode = subNodeMap[sunGroup.type].nodes.find((subN => subN.key === n.key));
98
98
  if (!subNode) return;
99
- const percent = subNode.value / totalValue;
100
- subNode.x0 = n.x0, subNode.x1 = n.x1, subNode.y0 = currentY, subNode.y1 = currentY + totalSize * percent,
101
- subNode.type = sunGroup.type, subNode.sourceNode = n, currentY += totalSize * percent + subNodeGap,
99
+ const percent = 0 === totalValue ? 0 : subNode.value / totalValue, dis = Math.max(subNodeMinSize, totalSize * percent);
100
+ subNode.x0 = n.x0, subNode.x1 = n.x1, subNode.y0 = currentY, subNode.y1 = currentY + dis,
101
+ subNode.type = sunGroup.type, subNode.sourceNode = n, currentY += dis + subNodeGap,
102
102
  subNodes.push(subNode);
103
103
  }));
104
104
  })), subNodeMap;
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/compare-sankey-sub-data.ts"],"names":[],"mappings":"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","file":"compare-sankey-sub-data.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { field, isFunction, isNil, pickWithout, toValidNumber } from '@visactor/vutils';\nimport { HierarchyNodeDatum, SankeyLinkDatum, SankeyLinkElement, SankeyNodeElement } from '@visactor/vgrammar-sankey';\n\nexport interface ICompareSankeyLayoutOpt {\n rawData: () => DataView;\n nodeKey: string;\n subNodeGap: number;\n}\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach(node => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n\nexport function makeHierarchicNodes(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string,\n nodes: SankeyNodeElement[] = [],\n nodeMap: Record<string | number, SankeyNodeElement> = {},\n originalLinks?: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[]\n) {\n calculateNodeValue(originalNodes);\n\n const doSubTree = (subTree: HierarchyNodeDatum[], depth: number, parents?: SankeyNodeElement[]) => {\n subTree.forEach((node, index) => {\n const nodeKey = nodeKeyFunc\n ? nodeKeyFunc(node)\n : parents\n ? `${parents[parents.length - 1].key}-${index}`\n : `${depth}-${index}`;\n const nodeValue: number = (isNil(node.value) ? 0 : toValidNumber(node.value)) as number;\n\n if (nodeMap[nodeKey]) {\n nodeMap[nodeKey].value = undefined;\n } else {\n const nodeElement: SankeyNodeElement = {\n depth,\n datum: node,\n index: index,\n key: nodeKey,\n value: nodeValue,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeKey] = nodeElement;\n nodes.push(nodeElement);\n }\n if (parents && originalLinks) {\n originalLinks.push({\n source: parents[parents.length - 1].key,\n target: nodeKey,\n value: nodeValue,\n parents\n });\n }\n\n if (node.children && node.children.length) {\n doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);\n }\n });\n };\n\n doSubTree(originalNodes, 0, null);\n return nodes;\n}\n\nexport function computeHierarchicNodeLinks(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string\n) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record<string | number, SankeyNodeElement> = {};\n const linkMap: Record<string | number, SankeyLinkElement> = {};\n const originalLinks: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[] = [];\n\n makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes, nodeMap, originalLinks);\n\n originalLinks.forEach((link, index) => {\n const key = `${link.source}-${link.target}`;\n const linkDatum = pickWithout(link, ['parents']);\n\n (linkDatum as any).parents = link.parents.map(node => {\n return pickWithout(node, ['sourceLinks', 'targetLinks']);\n });\n\n if (linkMap[key]) {\n linkMap[key].value += toValidNumber(link.value);\n\n (linkMap[key].datum as SankeyLinkDatum[]).push(linkDatum as SankeyLinkDatum);\n\n return;\n }\n const linkElement = {\n index,\n key: `${link.source}-${link.target}`,\n source: link.source,\n target: link.target,\n datum: [linkDatum] as any,\n value: link.value,\n parents: link.parents.map(parent => parent.key)\n };\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n linkMap[key] = linkElement;\n });\n\n return { nodes, links, nodeMap };\n}\n\nexport function computeNodeValues(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n\n node.value = Math.max(\n isNil(node.value) ? 0 : toValidNumber(node.value),\n node.sourceLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0),\n node.targetLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0)\n );\n }\n}\n\nexport const compareSankeySubData = (data: Array<DataView>, opt: ICompareSankeyLayoutOpt) => {\n const viewData = data[0] as DataView;\n if (!viewData.latestData?.length) {\n return {};\n }\n // 读取参数\n const rawDataTree = opt.rawData().latestData[0];\n const subNodeGap = opt.subNodeGap;\n const keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey as string) : null;\n\n const subNodeMap: { [key: string]: any } = {};\n rawDataTree.subNode.forEach((sunGroup: any) => {\n subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc);\n computeNodeValues(subNodeMap[sunGroup.type].nodes);\n });\n const subCount = Object.keys(subNodeMap).length;\n\n const subNodes: any[] = [];\n viewData.latestData[0].nodes.forEach((n: SankeyNodeElement) => {\n let path: (string | number)[] = [];\n if (n.targetLinks.length) {\n const link = n.targetLinks[0];\n path = [...link.parents];\n }\n path.push(n.key);\n // 根据path获取sub的节点\n // 当前已使用比例\n let currentY = n.y0;\n const totalSize = n.y1 - n.y0 - (subCount - 1) * subNodeGap;\n const totalValue = n.value;\n rawDataTree.subNode.forEach((sunGroup: any) => {\n const subNode = (subNodeMap[sunGroup.type].nodes as SankeyNodeElement[]).find(subN => subN.key === n.key);\n if (!subNode) {\n return;\n }\n const percent = subNode.value / totalValue;\n subNode.x0 = n.x0;\n subNode.x1 = n.x1;\n subNode.y0 = currentY;\n subNode.y1 = currentY + totalSize * percent;\n // @ts-ignore\n subNode.type = sunGroup.type;\n // @ts-ignore\n subNode.sourceNode = n;\n currentY += totalSize * percent + subNodeGap;\n subNodes.push(subNode);\n });\n });\n return subNodeMap;\n};\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/compare-sankey-sub-data.ts"],"names":[],"mappings":"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","file":"compare-sankey-sub-data.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { field, isFunction, isNil, pickWithout, toValidNumber } from '@visactor/vutils';\nimport { HierarchyNodeDatum, SankeyLinkDatum, SankeyLinkElement, SankeyNodeElement } from '@visactor/vgrammar-sankey';\n\nexport interface ICompareSankeyLayoutOpt {\n rawData: () => DataView;\n nodeKey: string;\n subNodeGap: number;\n subNodeMinSize?: number;\n}\n\nexport const calculateNodeValue = (subTree: HierarchyNodeDatum[]) => {\n let sum = 0;\n subTree.forEach(node => {\n if (isNil(node.value)) {\n if (node.children?.length) {\n node.value = calculateNodeValue(node.children);\n } else {\n node.value = 0;\n }\n }\n\n sum += Math.abs(node.value);\n });\n\n return sum;\n};\n\nexport function makeHierarchicNodes(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string,\n nodes: SankeyNodeElement[] = [],\n nodeMap: Record<string | number, SankeyNodeElement> = {},\n originalLinks?: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[]\n) {\n calculateNodeValue(originalNodes);\n\n const doSubTree = (subTree: HierarchyNodeDatum[], depth: number, parents?: SankeyNodeElement[]) => {\n subTree.forEach((node, index) => {\n const nodeKey = nodeKeyFunc\n ? nodeKeyFunc(node)\n : parents\n ? `${parents[parents.length - 1].key}-${index}`\n : `${depth}-${index}`;\n const nodeValue: number = (isNil(node.value) ? 0 : toValidNumber(node.value)) as number;\n\n if (nodeMap[nodeKey]) {\n nodeMap[nodeKey].value = undefined;\n } else {\n const nodeElement: SankeyNodeElement = {\n depth,\n datum: node,\n index: index,\n key: nodeKey,\n value: nodeValue,\n sourceLinks: [] as SankeyLinkElement[],\n targetLinks: [] as SankeyLinkElement[]\n };\n\n nodeMap[nodeKey] = nodeElement;\n nodes.push(nodeElement);\n }\n if (parents && originalLinks) {\n originalLinks.push({\n source: parents[parents.length - 1].key,\n target: nodeKey,\n value: nodeValue,\n parents\n });\n }\n\n if (node.children && node.children.length) {\n doSubTree(node.children, depth + 1, parents ? parents.concat([nodeMap[nodeKey]]) : [nodeMap[nodeKey]]);\n }\n });\n };\n\n doSubTree(originalNodes, 0, null);\n return nodes;\n}\n\nexport function computeHierarchicNodeLinks(\n originalNodes: HierarchyNodeDatum[],\n nodeKeyFunc: (node: HierarchyNodeDatum) => string\n) {\n const nodes: SankeyNodeElement[] = [];\n const links: SankeyLinkElement[] = [];\n const nodeMap: Record<string | number, SankeyNodeElement> = {};\n const linkMap: Record<string | number, SankeyLinkElement> = {};\n const originalLinks: (SankeyLinkDatum & { parents?: SankeyNodeElement[] })[] = [];\n\n makeHierarchicNodes(originalNodes, nodeKeyFunc, nodes, nodeMap, originalLinks);\n\n originalLinks.forEach((link, index) => {\n const key = `${link.source}-${link.target}`;\n const linkDatum = pickWithout(link, ['parents']);\n\n (linkDatum as any).parents = link.parents.map(node => {\n return pickWithout(node, ['sourceLinks', 'targetLinks']);\n });\n\n if (linkMap[key]) {\n linkMap[key].value += toValidNumber(link.value);\n\n (linkMap[key].datum as SankeyLinkDatum[]).push(linkDatum as SankeyLinkDatum);\n\n return;\n }\n const linkElement = {\n index,\n key: `${link.source}-${link.target}`,\n source: link.source,\n target: link.target,\n datum: [linkDatum] as any,\n value: link.value,\n parents: link.parents.map(parent => parent.key)\n };\n\n links.push(linkElement);\n nodeMap[link.source].sourceLinks.push(linkElement);\n nodeMap[link.target].targetLinks.push(linkElement);\n linkMap[key] = linkElement;\n });\n\n return { nodes, links, nodeMap };\n}\n\nexport function computeNodeValues(nodes: SankeyNodeElement[]) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n\n node.value = Math.max(\n isNil(node.value) ? 0 : toValidNumber(node.value),\n node.sourceLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0),\n node.targetLinks.reduce((sum, link: SankeyLinkElement) => {\n return sum + (toValidNumber(link.value) ?? 0);\n }, 0)\n );\n }\n}\n\nexport const compareSankeySubData = (data: Array<DataView>, opt: ICompareSankeyLayoutOpt) => {\n const viewData = data[0] as DataView;\n if (!viewData.latestData?.length) {\n return {};\n }\n const subNodeMinSize = opt.subNodeMinSize ?? 0;\n // 读取参数\n const rawDataTree = opt.rawData().latestData[0];\n const subNodeGap = opt.subNodeGap;\n const keyFunc = isFunction(opt.nodeKey) ? opt.nodeKey : opt.nodeKey ? field(opt.nodeKey as string) : null;\n\n const subNodeMap: { [key: string]: any } = {};\n rawDataTree.subNode.forEach((sunGroup: any) => {\n subNodeMap[sunGroup.type] = computeHierarchicNodeLinks(sunGroup.nodes, keyFunc);\n computeNodeValues(subNodeMap[sunGroup.type].nodes);\n });\n const subCount = Object.keys(subNodeMap).length;\n\n const subNodes: any[] = [];\n viewData.latestData[0].nodes.forEach((n: SankeyNodeElement) => {\n let path: (string | number)[] = [];\n if (n.targetLinks.length) {\n const link = n.targetLinks[0];\n path = [...link.parents];\n }\n path.push(n.key);\n // 根据path获取sub的节点\n // 当前已使用比例\n let currentY = n.y0;\n const totalSize = n.y1 - n.y0 - (subCount - 1) * subNodeGap;\n const totalValue = n.value;\n rawDataTree.subNode.forEach((sunGroup: any) => {\n const subNode = (subNodeMap[sunGroup.type].nodes as SankeyNodeElement[]).find(subN => subN.key === n.key);\n if (!subNode) {\n return;\n }\n const percent = totalValue === 0 ? 0 : subNode.value / totalValue;\n const dis = Math.max(subNodeMinSize, totalSize * percent);\n subNode.x0 = n.x0;\n subNode.x1 = n.x1;\n subNode.y0 = currentY;\n subNode.y1 = currentY + dis;\n // @ts-ignore\n subNode.type = sunGroup.type;\n // @ts-ignore\n subNode.sourceNode = n;\n currentY += dis + subNodeGap;\n subNodes.push(subNode);\n });\n });\n return subNodeMap;\n};\n"]}
@@ -9,9 +9,9 @@ export class CompareSankeyChartSpecTransformer extends SankeyChartSpecTransforme
9
9
  }
10
10
  _getDefaultSeriesSpec(spec) {
11
11
  const seriesSpec = super._getDefaultSeriesSpec(spec);
12
- return seriesSpec.subNodeGap = spec.subNodeGap, seriesSpec.compareNodeColor = spec.compareNodeColor,
13
- seriesSpec.compareLinkColor = spec.compareLinkColor, seriesSpec.activeLink = spec.activeLink,
14
- seriesSpec;
12
+ return seriesSpec.subNodeGap = spec.subNodeGap, seriesSpec.subNodeMinSize = spec.subNodeMinSize,
13
+ seriesSpec.compareNodeColor = spec.compareNodeColor, seriesSpec.compareLinkColor = spec.compareLinkColor,
14
+ seriesSpec.activeLink = spec.activeLink, seriesSpec;
15
15
  }
16
16
  }
17
17
  //# sourceMappingURL=compare-sankey-transformer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["charts/compare-sankey/compare-sankey-transformer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,OAAO,iCAAkC,SAAQ,0BAAuD;IAA9G;;QACE,eAAU,GAAG,eAAe,CAAC;IAa/B,CAAC;IAZC,aAAa,CAAC,IAAiC;QAC7C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAiC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACzE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF","file":"compare-sankey-transformer.js","sourcesContent":["import type { ICompareSankeyChartSpecBase } from './interface';\nimport { SankeyChartSpecTransformer } from '@visactor/vchart';\n\nexport class CompareSankeyChartSpecTransformer extends SankeyChartSpecTransformer<ICompareSankeyChartSpecBase> {\n seriesType = 'compareSankey';\n transformSpec(spec: ICompareSankeyChartSpecBase): void {\n super.transformSpec(spec);\n }\n\n _getDefaultSeriesSpec(spec: ICompareSankeyChartSpecBase) {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeGap = spec.subNodeGap;\n (seriesSpec as ICompareSankeyChartSpecBase).compareNodeColor = spec.compareNodeColor;\n (seriesSpec as ICompareSankeyChartSpecBase).compareLinkColor = spec.compareLinkColor;\n (seriesSpec as ICompareSankeyChartSpecBase).activeLink = spec.activeLink;\n return seriesSpec;\n }\n}\n"]}
1
+ {"version":3,"sources":["charts/compare-sankey/compare-sankey-transformer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,OAAO,iCAAkC,SAAQ,0BAAuD;IAA9G;;QACE,eAAU,GAAG,eAAe,CAAC;IAc/B,CAAC;IAbC,aAAa,CAAC,IAAiC;QAC7C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAiC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACxE,UAA0C,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAChF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpF,UAA0C,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACzE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF","file":"compare-sankey-transformer.js","sourcesContent":["import type { ICompareSankeyChartSpecBase } from './interface';\nimport { SankeyChartSpecTransformer } from '@visactor/vchart';\n\nexport class CompareSankeyChartSpecTransformer extends SankeyChartSpecTransformer<ICompareSankeyChartSpecBase> {\n seriesType = 'compareSankey';\n transformSpec(spec: ICompareSankeyChartSpecBase): void {\n super.transformSpec(spec);\n }\n\n _getDefaultSeriesSpec(spec: ICompareSankeyChartSpecBase) {\n const seriesSpec = super._getDefaultSeriesSpec(spec);\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeGap = spec.subNodeGap;\n (seriesSpec as ICompareSankeyChartSpecBase).subNodeMinSize = spec.subNodeMinSize;\n (seriesSpec as ICompareSankeyChartSpecBase).compareNodeColor = spec.compareNodeColor;\n (seriesSpec as ICompareSankeyChartSpecBase).compareLinkColor = spec.compareLinkColor;\n (seriesSpec as ICompareSankeyChartSpecBase).activeLink = spec.activeLink;\n return seriesSpec;\n }\n}\n"]}
@@ -32,6 +32,7 @@ export declare class CompareSankeySeries extends SankeySeries<ICompareSankeySeri
32
32
  private _activeTargetLink;
33
33
  private _activeSourceLink;
34
34
  protected _handleClearEmpty(highlightState: string, blurState: string): void;
35
+ getSubNodeDatum(filter: (n: Datum) => boolean): IElement[];
35
36
  }
36
37
  export declare const registerCompareSankeyChart: (option?: {
37
38
  VChart?: typeof VChart;
@@ -30,7 +30,7 @@ export class CompareSankeySeries extends SankeySeries {
30
30
  };
31
31
  }
32
32
  initData() {
33
- var _a;
33
+ var _a, _b;
34
34
  super.initData();
35
35
  const {dataSet: dataSet} = this._option, compareSubData = new DataView(dataSet, {
36
36
  name: `compare-sankey-sub-data-${this.id}-data`
@@ -50,7 +50,8 @@ export class CompareSankeySeries extends SankeySeries {
50
50
  rawData: () => this.getRawData(),
51
51
  valueField: this._valueField,
52
52
  nodeKey: this._spec.nodeKey,
53
- subNodeGap: null !== (_a = this._spec.subNodeGap) && void 0 !== _a ? _a : 2
53
+ subNodeGap: null !== (_a = this._spec.subNodeGap) && void 0 !== _a ? _a : 2,
54
+ subNodeMinSize: null !== (_b = this._spec.subNodeMinSize) && void 0 !== _b ? _b : 0
54
55
  }
55
56
  }), registerDataSetInstanceTransform(this._dataSet, "compareSankeySubNodes", compareSankeySubNodes),
56
57
  compareNodeData.transform({
@@ -106,7 +107,7 @@ export class CompareSankeySeries extends SankeySeries {
106
107
  allLinkElements.forEach((el => {
107
108
  el.removeState([ STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS ]);
108
109
  })), this._highLightElements(allLinkElements, [], highlightState, blurState);
109
- const nodeDatums = allNodeElements.map((el => getDatumOfGraphic(el))), pickNodeDatums = nodeDatums.filter((d => d.key === nodeDatum.key)), highlightLinksData = [], highlightNodeKeys = [];
110
+ const nodeDatums = allNodeElements.map((el => getDatumOfGraphic(el))), pickNodeDatums = nodeDatums.filter((d => d.key === nodeDatum.key)), highlightLinksData = [], highlightNodeKeys = pickNodeDatums.map((d => d.key));
110
111
  this._activeTargetLink(nodeDatum, pickNodeDatums, allNodeElements, allLinkElements, highlightNodeKeys, highlightLinksData, highlightState, blurState),
111
112
  this._activeSourceLink(nodeDatum, pickNodeDatums, nodeDatums, allNodeElements, highlightNodeKeys, highlightLinksData, highlightState, blurState),
112
113
  this._highLightElements(allNodeElements, highlightNodeKeys, highlightState, blurState),
@@ -176,6 +177,9 @@ export class CompareSankeySeries extends SankeySeries {
176
177
  el.removeState(STATE_VALUE_ENUM.STATE_HOVER);
177
178
  }));
178
179
  }
180
+ getSubNodeDatum(filter) {
181
+ return this._nodeMark.getProductElements().filter((n => filter(n.data[0])));
182
+ }
179
183
  }
180
184
 
181
185
  CompareSankeySeries.type = "compareSankey";