@visactor/vseed 0.5.4 → 0.5.6
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/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/builder/register/all.js +3 -1
- package/dist/esm/builder/register/all.js.map +1 -1
- package/dist/esm/builder/register/chartType/hierarchySankey.d.ts +4 -0
- package/dist/esm/builder/register/chartType/hierarchySankey.js +9 -0
- package/dist/esm/builder/register/chartType/hierarchySankey.js.map +1 -0
- package/dist/esm/builder/register/chartType/index.d.ts +2 -0
- package/dist/esm/builder/register/chartType/index.js +2 -0
- package/dist/esm/builder/register/chartType/sankey.d.ts +1 -0
- package/dist/esm/builder/register/chartType/sankey.js +9 -0
- package/dist/esm/builder/register/chartType/sankey.js.map +1 -0
- package/dist/esm/dataReshape/constant.d.ts +2 -0
- package/dist/esm/dataReshape/constant.js +3 -1
- package/dist/esm/dataReshape/constant.js.map +1 -1
- package/dist/esm/dataReshape/unfoldDimensions.js +8 -2
- package/dist/esm/dataReshape/unfoldDimensions.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/pipeline/advanced/chart/pipeline/hierarchySankey.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/hierarchySankey.js +33 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/hierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/index.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/index.js +2 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/sankey.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/sankey.js +33 -0
- package/dist/esm/pipeline/advanced/chart/pipeline/sankey.js.map +1 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/hierarchySankey.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/hierarchySankey.js +27 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/hierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/index.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/index.js +2 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/index.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipes/config/sankey.d.ts +2 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/sankey.js +27 -0
- package/dist/esm/pipeline/advanced/chart/pipes/config/sankey.js.map +1 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/index.d.ts +1 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/index.js +1 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/sankey.d.ts +3 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/sankey.js +83 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/sankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipeline/hierarchySankey.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipeline/hierarchySankey.js +39 -0
- package/dist/esm/pipeline/spec/chart/pipeline/hierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipeline/index.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipeline/index.js +2 -0
- package/dist/esm/pipeline/spec/chart/pipeline/sankey.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipeline/sankey.js +39 -0
- package/dist/esm/pipeline/spec/chart/pipeline/sankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js +11 -2
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js +5 -2
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchySankey.d.ts +4 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchySankey.js +136 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchySankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchySankey.js +44 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotSankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotSankey.js +50 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotSankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetSankey.d.ts +16 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetSankey.js +97 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetSankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/index.d.ts +4 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/index.js +4 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/hierarchySankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/hierarchySankey.js +32 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/hierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/index.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/index.js +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/sankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/sankey.js +33 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/sankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/label/index.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/index.js +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/label.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/label/labelHierarchySankey.d.ts +17 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelHierarchySankey.js +92 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelHierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelSankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelSankey.js +78 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelSankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js +4 -4
- package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/legend/pivotColorLegend.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/legend/pivotColorLegend.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/legend/pivotDiscreteLegend.js +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/legend/pivotDiscreteLegend.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/markStyle/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/markStyle/index.js +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/markStyle/sankeyInteractive.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/markStyle/sankeyInteractive.js +33 -0
- package/dist/esm/pipeline/spec/chart/pipes/markStyle/sankeyInteractive.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/index.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/index.js +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHierarchySankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHierarchySankey.js +150 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHierarchySankey.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipSankey.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipSankey.js +75 -0
- package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipSankey.js.map +1 -0
- package/dist/esm/pipeline/utils/chatType.d.ts +2 -0
- package/dist/esm/pipeline/utils/chatType.js +3 -1
- package/dist/esm/pipeline/utils/chatType.js.map +1 -1
- package/dist/esm/pipeline/utils/constant.d.ts +2 -0
- package/dist/esm/pipeline/utils/constant.js +2 -0
- package/dist/esm/pipeline/utils/constant.js.map +1 -1
- package/dist/esm/pipeline/utils/measures/typeGuard.js +1 -1
- package/dist/esm/pipeline/utils/measures/typeGuard.js.map +1 -1
- package/dist/esm/theme/dark/dark.js +3 -1
- package/dist/esm/theme/dark/dark.js.map +1 -1
- package/dist/esm/theme/dark/hierarchy.d.ts +132 -0
- package/dist/esm/theme/dark/hierarchy.js +3 -1
- package/dist/esm/theme/dark/hierarchy.js.map +1 -1
- package/dist/esm/theme/light/hierarchy.d.ts +132 -0
- package/dist/esm/theme/light/hierarchy.js +3 -1
- package/dist/esm/theme/light/hierarchy.js.map +1 -1
- package/dist/esm/theme/light/light.js +3 -1
- package/dist/esm/theme/light/light.js.map +1 -1
- package/dist/esm/types/chartType/area/zArea.d.ts +4 -0
- package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +4 -0
- package/dist/esm/types/chartType/bar/zBar.d.ts +4 -0
- package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +4 -0
- package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +4 -0
- package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +4 -0
- package/dist/esm/types/chartType/circlePacking/zCirclePacking.d.ts +2 -0
- package/dist/esm/types/chartType/column/zColumn.d.ts +4 -0
- package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +4 -0
- package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +4 -0
- package/dist/esm/types/chartType/donut/zDonut.d.ts +4 -0
- package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +2 -0
- package/dist/esm/types/chartType/funnel/zFunnel.d.ts +4 -0
- package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +2 -0
- package/dist/esm/types/chartType/hierarchySankey/hierarchySankey.d.ts +92 -0
- package/dist/esm/types/chartType/hierarchySankey/hierarchySankey.js +0 -0
- package/dist/esm/types/chartType/hierarchySankey/index.d.ts +2 -0
- package/dist/esm/types/chartType/hierarchySankey/index.js +1 -0
- package/dist/esm/types/chartType/hierarchySankey/zHierarchySankey.d.ts +422 -0
- package/dist/esm/types/chartType/hierarchySankey/zHierarchySankey.js +20 -0
- package/dist/esm/types/chartType/hierarchySankey/zHierarchySankey.js.map +1 -0
- package/dist/esm/types/chartType/histogram/zHistogram.d.ts +4 -0
- package/dist/esm/types/chartType/index.d.ts +2 -0
- package/dist/esm/types/chartType/index.js +2 -0
- package/dist/esm/types/chartType/line/zLine.d.ts +4 -0
- package/dist/esm/types/chartType/pie/zPie.d.ts +4 -0
- package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +2 -0
- package/dist/esm/types/chartType/raceBar/zRaceBar.d.ts +4 -0
- package/dist/esm/types/chartType/raceColumn/zRaceColumn.d.ts +4 -0
- package/dist/esm/types/chartType/raceDonut/zRaceDonut.d.ts +4 -0
- package/dist/esm/types/chartType/raceLine/zRaceLine.d.ts +4 -0
- package/dist/esm/types/chartType/racePie/zRacePie.d.ts +4 -0
- package/dist/esm/types/chartType/raceScatter/zRaceScatter.d.ts +4 -0
- package/dist/esm/types/chartType/radar/zRadar.d.ts +4 -0
- package/dist/esm/types/chartType/rose/zRose.d.ts +4 -0
- package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +4 -0
- package/dist/esm/types/chartType/sankey/index.d.ts +2 -0
- package/dist/esm/types/chartType/sankey/index.js +1 -0
- package/dist/esm/types/chartType/sankey/sankey.d.ts +91 -0
- package/dist/esm/types/chartType/sankey/sankey.js +0 -0
- package/dist/esm/types/chartType/sankey/zSankey.d.ts +422 -0
- package/dist/esm/types/chartType/sankey/zSankey.js +20 -0
- package/dist/esm/types/chartType/sankey/zSankey.js.map +1 -0
- package/dist/esm/types/chartType/scatter/zScatter.d.ts +4 -0
- package/dist/esm/types/chartType/sunburst/zSunburst.d.ts +2 -0
- package/dist/esm/types/chartType/table/zTable.d.ts +2 -0
- package/dist/esm/types/chartType/treeMap/zTreeMap.d.ts +2 -0
- package/dist/esm/types/properties/chartType/chartType.d.ts +3 -1
- package/dist/esm/types/properties/chartType/chartType.js +2 -0
- package/dist/esm/types/properties/chartType/chartType.js.map +1 -1
- package/dist/esm/types/properties/config/config.d.ts +602 -0
- package/dist/esm/types/properties/config/config.js +4 -0
- package/dist/esm/types/properties/config/config.js.map +1 -1
- package/dist/esm/types/properties/config/hierarchySankey.d.ts +303 -0
- package/dist/esm/types/properties/config/hierarchySankey.js +18 -0
- package/dist/esm/types/properties/config/hierarchySankey.js.map +1 -0
- package/dist/esm/types/properties/config/index.d.ts +2 -0
- package/dist/esm/types/properties/config/index.js +2 -0
- package/dist/esm/types/properties/config/sankey.d.ts +303 -0
- package/dist/esm/types/properties/config/sankey.js +18 -0
- package/dist/esm/types/properties/config/sankey.js.map +1 -0
- package/dist/esm/types/properties/datasetReshapeInfo/datasetReshapeInfo.d.ts +2 -0
- package/dist/esm/types/properties/datasetReshapeInfo/zDatasetReshapeInfo.d.ts +4 -0
- package/dist/esm/types/properties/datasetReshapeInfo/zDatasetReshapeInfo.js +2 -0
- package/dist/esm/types/properties/datasetReshapeInfo/zDatasetReshapeInfo.js.map +1 -1
- package/dist/esm/types/properties/dimensions/index.d.ts +1 -0
- package/dist/esm/types/properties/dimensions/sankeyDimension.d.ts +15 -0
- package/dist/esm/types/properties/dimensions/sankeyDimension.js +0 -0
- package/dist/esm/types/properties/dimensions/zDimensions.d.ts +6 -0
- package/dist/esm/types/properties/encoding/dimensionEncoding.d.ts +3 -1
- package/dist/esm/types/properties/encoding/encoding.d.ts +8 -0
- package/dist/esm/types/properties/encoding/zDimensionEncoding.d.ts +4 -0
- package/dist/esm/types/properties/encoding/zDimensionEncoding.js +6 -2
- package/dist/esm/types/properties/encoding/zDimensionEncoding.js.map +1 -1
- package/dist/esm/types/properties/encoding/zEncoding.d.ts +4 -0
- package/dist/esm/types/properties/encoding/zEncoding.js +5 -1
- package/dist/esm/types/properties/encoding/zEncoding.js.map +1 -1
- package/dist/esm/types/properties/measures/index.d.ts +1 -0
- package/dist/esm/types/properties/measures/sankeyMeasure.d.ts +11 -0
- package/dist/esm/types/properties/measures/sankeyMeasure.js +0 -0
- package/dist/esm/types/properties/theme/customTheme.d.ts +3752 -2548
- package/dist/esm/types/vseed.d.ts +2 -2
- package/dist/esm/types/zVseed.js +3 -1
- package/dist/esm/types/zVseed.js.map +1 -1
- package/dist/umd/index.js +1309 -182
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchySankey, datasetPivotHierarchySankey, discreteLegend, fontFamilyTheme, initHierarchySankey, initPivot, labelHierarchySankey, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotHideIndicatorName, pivotIndicators, pivotIndicatorsAsCol, pivotRowDimensions, pivotTitle, sankeyInteractive, tooltipHierarchySankey } from "../pipes/index.js";
|
|
2
|
+
const hierarchySankey = [
|
|
3
|
+
fontFamilyTheme,
|
|
4
|
+
initHierarchySankey,
|
|
5
|
+
datasetHierarchySankey,
|
|
6
|
+
colorAdapter(color, linearColor),
|
|
7
|
+
backgroundColor,
|
|
8
|
+
colorAdapter(discreteLegend, colorLegend),
|
|
9
|
+
tooltipHierarchySankey,
|
|
10
|
+
labelHierarchySankey,
|
|
11
|
+
sankeyInteractive
|
|
12
|
+
];
|
|
13
|
+
const pivotHierarchySankey = [
|
|
14
|
+
initPivot,
|
|
15
|
+
pivotGridStyle,
|
|
16
|
+
pivotIndicatorsAsCol,
|
|
17
|
+
pivotHideIndicatorName,
|
|
18
|
+
datasetPivotHierarchySankey,
|
|
19
|
+
pivotIndicators([
|
|
20
|
+
fontFamilyTheme,
|
|
21
|
+
initHierarchySankey,
|
|
22
|
+
datasetHierarchySankey,
|
|
23
|
+
colorAdapter(color, linearColor),
|
|
24
|
+
backgroundColor,
|
|
25
|
+
tooltipHierarchySankey,
|
|
26
|
+
labelHierarchySankey,
|
|
27
|
+
sankeyInteractive
|
|
28
|
+
]),
|
|
29
|
+
pivotRowDimensions,
|
|
30
|
+
pivotColumnDimensions,
|
|
31
|
+
pivotTitle,
|
|
32
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
|
33
|
+
];
|
|
34
|
+
const hierarchySankeySpecPipeline = [
|
|
35
|
+
pivotAdapter(hierarchySankey, pivotHierarchySankey)
|
|
36
|
+
];
|
|
37
|
+
export { hierarchySankeySpecPipeline };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=hierarchySankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipeline/hierarchySankey.js","sources":["../../../../../../src/pipeline/spec/chart/pipeline/hierarchySankey.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n backgroundColor,\n color,\n colorAdapter,\n colorLegend,\n datasetHierarchySankey,\n datasetPivotHierarchySankey,\n discreteLegend,\n fontFamilyTheme,\n initHierarchySankey,\n initPivot,\n labelHierarchySankey,\n linearColor,\n pivotAdapter,\n pivotColorLegend,\n pivotColumnDimensions,\n pivotDiscreteLegend,\n pivotGridStyle,\n pivotHideIndicatorName,\n pivotIndicators,\n pivotIndicatorsAsCol,\n pivotRowDimensions,\n pivotTitle,\n sankeyInteractive,\n tooltipHierarchySankey,\n} from '../pipes'\n\nconst hierarchySankey: VChartSpecPipeline = [\n fontFamilyTheme,\n initHierarchySankey,\n datasetHierarchySankey,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipHierarchySankey,\n labelHierarchySankey,\n sankeyInteractive,\n]\n\nconst pivotHierarchySankey: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchySankey,\n pivotIndicators([\n fontFamilyTheme,\n initHierarchySankey,\n datasetHierarchySankey,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipHierarchySankey,\n labelHierarchySankey,\n sankeyInteractive,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const hierarchySankeySpecPipeline = [pivotAdapter(hierarchySankey, pivotHierarchySankey)]\n"],"names":["hierarchySankey","fontFamilyTheme","initHierarchySankey","datasetHierarchySankey","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipHierarchySankey","labelHierarchySankey","sankeyInteractive","pivotHierarchySankey","initPivot","pivotGridStyle","pivotIndicatorsAsCol","pivotHideIndicatorName","datasetPivotHierarchySankey","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","hierarchySankeySpecPipeline","pivotAdapter"],"mappings":";AA4BA,MAAMA,kBAAsC;IAC1CC;IACAC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;IACAC;CACD;AAED,MAAMC,uBAA+C;IACnDC;IACAC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdlB;QACAC;QACAC;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;QACAC;KACD;IACDQ;IACAC;IACAC;IACAlB,aAAamB,qBAAqBC;CACnC;AAEM,MAAMC,8BAA8B;IAACC,aAAa1B,iBAAiBa;CAAsB"}
|
|
@@ -27,3 +27,5 @@ export { histogramSpecPipeline } from './histogram';
|
|
|
27
27
|
export { treeMapSpecPipeline } from './treeMap';
|
|
28
28
|
export { sunburstSpecPipeline } from './sunburst';
|
|
29
29
|
export { circlePackingSpecPipeline } from './circlePacking';
|
|
30
|
+
export { hierarchySankeySpecPipeline } from './hierarchySankey';
|
|
31
|
+
export { sankeySpecPipeline } from './sankey';
|
|
@@ -27,3 +27,5 @@ export { histogramSpecPipeline } from "./histogram.js";
|
|
|
27
27
|
export { treeMapSpecPipeline } from "./treeMap.js";
|
|
28
28
|
export { sunburstSpecPipeline } from "./sunburst.js";
|
|
29
29
|
export { circlePackingSpecPipeline } from "./circlePacking.js";
|
|
30
|
+
export { hierarchySankeySpecPipeline } from "./hierarchySankey.js";
|
|
31
|
+
export { sankeySpecPipeline } from "./sankey.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sankeySpecPipeline: import("../../../../types").SpecPipe[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { backgroundColor, color, colorAdapter, colorLegend, datasetPivotSankey, datasetSankey, discreteLegend, fontFamilyTheme, initPivot, initSankey, labelSankey, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotHideIndicatorName, pivotIndicators, pivotIndicatorsAsCol, pivotRowDimensions, pivotTitle, sankeyInteractive, tooltipSankey } from "../pipes/index.js";
|
|
2
|
+
const sankey = [
|
|
3
|
+
fontFamilyTheme,
|
|
4
|
+
initSankey,
|
|
5
|
+
datasetSankey,
|
|
6
|
+
colorAdapter(color, linearColor),
|
|
7
|
+
backgroundColor,
|
|
8
|
+
colorAdapter(discreteLegend, colorLegend),
|
|
9
|
+
tooltipSankey,
|
|
10
|
+
labelSankey,
|
|
11
|
+
sankeyInteractive
|
|
12
|
+
];
|
|
13
|
+
const pivotSankey = [
|
|
14
|
+
initPivot,
|
|
15
|
+
pivotGridStyle,
|
|
16
|
+
pivotIndicatorsAsCol,
|
|
17
|
+
pivotHideIndicatorName,
|
|
18
|
+
datasetPivotSankey,
|
|
19
|
+
pivotIndicators([
|
|
20
|
+
fontFamilyTheme,
|
|
21
|
+
initSankey,
|
|
22
|
+
datasetSankey,
|
|
23
|
+
colorAdapter(color, linearColor),
|
|
24
|
+
backgroundColor,
|
|
25
|
+
tooltipSankey,
|
|
26
|
+
labelSankey,
|
|
27
|
+
sankeyInteractive
|
|
28
|
+
]),
|
|
29
|
+
pivotRowDimensions,
|
|
30
|
+
pivotColumnDimensions,
|
|
31
|
+
pivotTitle,
|
|
32
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
|
33
|
+
];
|
|
34
|
+
const sankeySpecPipeline = [
|
|
35
|
+
pivotAdapter(sankey, pivotSankey)
|
|
36
|
+
];
|
|
37
|
+
export { sankeySpecPipeline };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=sankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipeline/sankey.js","sources":["../../../../../../src/pipeline/spec/chart/pipeline/sankey.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n backgroundColor,\n color,\n colorAdapter,\n colorLegend,\n datasetSankey,\n datasetPivotSankey,\n discreteLegend,\n fontFamilyTheme,\n initSankey,\n initPivot,\n labelSankey,\n linearColor,\n pivotAdapter,\n pivotColorLegend,\n pivotColumnDimensions,\n pivotDiscreteLegend,\n pivotGridStyle,\n pivotHideIndicatorName,\n pivotIndicators,\n pivotIndicatorsAsCol,\n pivotRowDimensions,\n pivotTitle,\n sankeyInteractive,\n tooltipSankey,\n} from '../pipes'\n\nconst sankey: VChartSpecPipeline = [\n fontFamilyTheme,\n initSankey,\n datasetSankey,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipSankey,\n labelSankey,\n sankeyInteractive,\n]\n\nconst pivotSankey: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotSankey,\n pivotIndicators([\n fontFamilyTheme,\n initSankey,\n datasetSankey,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipSankey,\n labelSankey,\n sankeyInteractive,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const sankeySpecPipeline = [pivotAdapter(sankey, pivotSankey)]\n"],"names":["sankey","fontFamilyTheme","initSankey","datasetSankey","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipSankey","labelSankey","sankeyInteractive","pivotSankey","initPivot","pivotGridStyle","pivotIndicatorsAsCol","pivotHideIndicatorName","datasetPivotSankey","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","sankeySpecPipeline","pivotAdapter"],"mappings":";AA4BA,MAAMA,SAA6B;IACjCC;IACAC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;IACAC;CACD;AAED,MAAMC,cAAsC;IAC1CC;IACAC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdlB;QACAC;QACAC;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;QACAC;KACD;IACDQ;IACAC;IACAC;IACAlB,aAAamB,qBAAqBC;CACnC;AAEM,MAAMC,qBAAqB;IAACC,aAAa1B,QAAQa;CAAa"}
|
|
@@ -4,6 +4,10 @@ import { isSubset } from "./utils.js";
|
|
|
4
4
|
import { flatReshapeMeasures } from "../../../../utils/index.js";
|
|
5
5
|
import { pickWithout } from "@visactor/vutils";
|
|
6
6
|
import { generateAnnotationPointPipe } from "./annotationPointCommon.js";
|
|
7
|
+
const getSeriesMeasureIds = (context, seriesIndex)=>{
|
|
8
|
+
const foldInfo = context.advancedVSeed.datasetReshapeInfo?.[0]?.foldInfoList?.[seriesIndex];
|
|
9
|
+
return Object.keys(foldInfo?.foldMap ?? {});
|
|
10
|
+
};
|
|
7
11
|
const annotationPointOfDualAxis = generateAnnotationPointPipe({
|
|
8
12
|
findSelectedDatas: (options)=>{
|
|
9
13
|
const { dataset, selector: s, measureId, dynamicFilter, context } = options;
|
|
@@ -19,10 +23,15 @@ const annotationPointOfDualAxis = generateAnnotationPointPipe({
|
|
|
19
23
|
generateMarkPoint: (datum, spec, context)=>{
|
|
20
24
|
const { advancedVSeed } = context;
|
|
21
25
|
const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m)=>m.id);
|
|
22
|
-
|
|
26
|
+
const selectedMeasureId = datum[MeasureId];
|
|
27
|
+
return spec.series?.flatMap((_series, index)=>{
|
|
28
|
+
const seriesMeasureIds = getSeriesMeasureIds(context, index);
|
|
29
|
+
if (selectedMeasureId && seriesMeasureIds.length && !seriesMeasureIds.includes(String(selectedMeasureId))) return [];
|
|
30
|
+
return {
|
|
23
31
|
relativeSeriesIndex: index,
|
|
24
32
|
coordinate: (data)=>data.find((item)=>isSubset(datum, item, allMeasureIds.filter((id)=>id !== item[MeasureId])))
|
|
25
|
-
}
|
|
33
|
+
};
|
|
34
|
+
});
|
|
26
35
|
}
|
|
27
36
|
});
|
|
28
37
|
export { annotationPointOfDualAxis };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.ts"],"sourcesContent":["import type { IMarkPointSpec, ISpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport type { Datum, SpecPipelineContext, VChartSpecPipe } from 'src/types'\nimport { isSubset } from './utils'\nimport { flatReshapeMeasures } from 'src/pipeline/utils'\nimport { pickWithout } from '@visactor/vutils'\nimport { generateAnnotationPointPipe } from './annotationPointCommon'\n\nexport const annotationPointOfDualAxis: VChartSpecPipe = generateAnnotationPointPipe({\n findSelectedDatas: (options) => {\n const { dataset, selector: s, measureId, dynamicFilter, context } = options\n return dataset.reduce((res: Datum[], d: Datum) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n const pickedDatum = pickWithout(\n d,\n allMeasureIds.filter((id) => id !== d[MeasureId]),\n )\n\n const shouldSelect = dynamicFilter\n ? selectorWithDynamicFilter(pickedDatum, dynamicFilter, s)\n : selector(pickedDatum, s)\n\n if (shouldSelect && (!measureId || pickedDatum[MeasureId] === measureId)) {\n res.push(pickedDatum)\n }\n\n return res\n }, [])\n },\n generateMarkPoint: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n return spec.series?.
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.ts"],"sourcesContent":["import type { IMarkPointSpec, ISpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport type { Datum, SpecPipelineContext, VChartSpecPipe } from 'src/types'\nimport { isSubset } from './utils'\nimport { flatReshapeMeasures } from 'src/pipeline/utils'\nimport { pickWithout } from '@visactor/vutils'\nimport { generateAnnotationPointPipe } from './annotationPointCommon'\n\nconst getSeriesMeasureIds = (context: SpecPipelineContext, seriesIndex: number) => {\n const foldInfo = context.advancedVSeed.datasetReshapeInfo?.[0]?.foldInfoList?.[seriesIndex]\n return Object.keys(foldInfo?.foldMap ?? {})\n}\n\nexport const annotationPointOfDualAxis: VChartSpecPipe = generateAnnotationPointPipe({\n findSelectedDatas: (options) => {\n const { dataset, selector: s, measureId, dynamicFilter, context } = options\n return dataset.reduce((res: Datum[], d: Datum) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n const pickedDatum = pickWithout(\n d,\n allMeasureIds.filter((id) => id !== d[MeasureId]),\n )\n\n const shouldSelect = dynamicFilter\n ? selectorWithDynamicFilter(pickedDatum, dynamicFilter, s)\n : selector(pickedDatum, s)\n\n if (shouldSelect && (!measureId || pickedDatum[MeasureId] === measureId)) {\n res.push(pickedDatum)\n }\n\n return res\n }, [])\n },\n generateMarkPoint: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n const selectedMeasureId = datum[MeasureId]\n return spec.series?.flatMap((_series: any, index: number) => {\n const seriesMeasureIds = getSeriesMeasureIds(context, index)\n if (selectedMeasureId && seriesMeasureIds.length && !seriesMeasureIds.includes(String(selectedMeasureId))) {\n return []\n }\n\n return {\n relativeSeriesIndex: index,\n coordinate: (data: Datum[]) => {\n return data.find((item) => {\n return isSubset(\n datum,\n item,\n allMeasureIds.filter((id) => id !== item[MeasureId]),\n )\n })\n },\n } as IMarkPointSpec\n })\n },\n})\n"],"names":["getSeriesMeasureIds","context","seriesIndex","foldInfo","Object","annotationPointOfDualAxis","generateAnnotationPointPipe","options","dataset","s","measureId","dynamicFilter","res","d","advancedVSeed","allMeasureIds","flatReshapeMeasures","m","pickedDatum","pickWithout","id","MeasureId","shouldSelect","selectorWithDynamicFilter","selector","datum","spec","selectedMeasureId","_series","index","seriesMeasureIds","String","data","item","isSubset"],"mappings":";;;;;;AASA,MAAMA,sBAAsB,CAACC,SAA8BC;IACzD,MAAMC,WAAWF,QAAQ,aAAa,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,cAAc,CAACC,YAAY;IAC3F,OAAOE,OAAO,IAAI,CAACD,UAAU,WAAW,CAAC;AAC3C;AAEO,MAAME,4BAA4CC,4BAA4B;IACnF,mBAAmB,CAACC;QAClB,MAAM,EAAEC,OAAO,EAAE,UAAUC,CAAC,EAAEC,SAAS,EAAEC,aAAa,EAAEV,OAAO,EAAE,GAAGM;QACpE,OAAOC,QAAQ,MAAM,CAAC,CAACI,KAAcC;YACnC,MAAM,EAAEC,aAAa,EAAE,GAAGb;YAC1B,MAAMc,gBAAgBC,oBAAoBF,cAAc,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;YAC9F,MAAMC,cAAcC,YAClBN,GACAE,cAAc,MAAM,CAAC,CAACK,KAAOA,OAAOP,CAAC,CAACQ,UAAU;YAGlD,MAAMC,eAAeX,gBACjBY,0BAA0BL,aAAaP,eAAeF,KACtDe,SAASN,aAAaT;YAE1B,IAAIa,gBAAiB,EAACZ,aAAaQ,WAAW,CAACG,UAAU,KAAKX,SAAQ,GACpEE,IAAI,IAAI,CAACM;YAGX,OAAON;QACT,GAAG,EAAE;IACP;IACA,mBAAmB,CAACa,OAAcC,MAAazB;QAC7C,MAAM,EAAEa,aAAa,EAAE,GAAGb;QAC1B,MAAMc,gBAAgBC,oBAAoBF,cAAc,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;QAC9F,MAAMU,oBAAoBF,KAAK,CAACJ,UAAU;QAC1C,OAAOK,KAAK,MAAM,EAAE,QAAQ,CAACE,SAAcC;YACzC,MAAMC,mBAAmB9B,oBAAoBC,SAAS4B;YACtD,IAAIF,qBAAqBG,iBAAiB,MAAM,IAAI,CAACA,iBAAiB,QAAQ,CAACC,OAAOJ,qBACpF,OAAO,EAAE;YAGX,OAAO;gBACL,qBAAqBE;gBACrB,YAAY,CAACG,OACJA,KAAK,IAAI,CAAC,CAACC,OACTC,SACLT,OACAQ,MACAlB,cAAc,MAAM,CAAC,CAACK,KAAOA,OAAOa,IAAI,CAACZ,UAAU;YAI3D;QACF;IACF;AACF"}
|
|
@@ -44,10 +44,13 @@ const buildTree = (dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys =
|
|
|
44
44
|
for(let i = 0; i < hierarchyFields.length; i++){
|
|
45
45
|
const field = hierarchyFields[i];
|
|
46
46
|
const value = String(datum[field]);
|
|
47
|
-
|
|
47
|
+
const nodeName = field === measureId && measureName && void 0 !== datum[measureName] ? String(datum[measureName]) : value;
|
|
48
|
+
let child = currentNode.children.find((c)=>String(c[field]) === value);
|
|
48
49
|
if (!child) {
|
|
49
50
|
child = {
|
|
50
|
-
name:
|
|
51
|
+
name: nodeName,
|
|
52
|
+
key: value,
|
|
53
|
+
field,
|
|
51
54
|
children: []
|
|
52
55
|
};
|
|
53
56
|
for(let j = 0; j <= i; j++)child[hierarchyFields[j]] = datum[hierarchyFields[j]];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetHierarchy.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetHierarchy.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { VChartSpecPipe, Datum, FoldInfo, UnfoldInfo } from 'src/types'\n\nexport const datasetHierarchy: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { datasetReshapeInfo, dataset, measures } = advancedVSeed\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0]\n\n // 1. 获取 hierarchy encoding 对应的字段\n // 在 advanced pipeline 中,encodingForHierarchy 已经确保了 dimensions 被正确映射到 'hierarchy' 通道\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n\n // 2. 如果没有 hierarchy 字段,直接返回原始数据(虽然这可能导致图表无法正确渲染,但比报错好)\n if (!hierarchyFields.length) {\n result.data = [{ id: 'data', values: dataset }]\n return result\n }\n\n // 3. 构建树形结构\n const tree = buildTree(dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys)\n\n result.data = [\n {\n id: 'data',\n values: tree,\n },\n ]\n\n return result\n}\n\n/**\n * @description 将平铺的数据集构建为树形结构\n * @param dataset 平铺的数据集\n * @param hierarchyFields 层级字段列表\n * @param measureValueField 指标值字段名\n * @param measureIdField 指标ID字段名\n */\nexport const buildTree = (\n dataset: Datum[],\n hierarchyFields: string[],\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n measureKeys: string[] = [],\n) => {\n const { measureValue, measureId, measureName } = foldInfo\n const { encodingColor, encodingColorId } = unfoldInfo\n\n // 统一管理需要 Set 收集 → join('+') 的字段\n const collectFields = [measureId, measureName, encodingColor, encodingColorId].filter(Boolean) as string[]\n\n const root: Datum = { name: 'root', children: [] }\n\n dataset.forEach((datum) => {\n let currentNode = root\n\n // 遍历层级字段,构建路径\n for (let i = 0; i < hierarchyFields.length; i++) {\n const field = hierarchyFields[i]\n const value = String(datum[field])\n\n let child = currentNode.children.find((c: Datum) => c
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetHierarchy.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetHierarchy.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { VChartSpecPipe, Datum, FoldInfo, UnfoldInfo } from 'src/types'\n\nexport const datasetHierarchy: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { datasetReshapeInfo, dataset, measures } = advancedVSeed\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0]\n\n // 1. 获取 hierarchy encoding 对应的字段\n // 在 advanced pipeline 中,encodingForHierarchy 已经确保了 dimensions 被正确映射到 'hierarchy' 通道\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n\n // 2. 如果没有 hierarchy 字段,直接返回原始数据(虽然这可能导致图表无法正确渲染,但比报错好)\n if (!hierarchyFields.length) {\n result.data = [{ id: 'data', values: dataset }]\n return result\n }\n\n // 3. 构建树形结构\n const tree = buildTree(dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys)\n\n result.data = [\n {\n id: 'data',\n values: tree,\n },\n ]\n\n return result\n}\n\n/**\n * @description 将平铺的数据集构建为树形结构\n * @param dataset 平铺的数据集\n * @param hierarchyFields 层级字段列表\n * @param measureValueField 指标值字段名\n * @param measureIdField 指标ID字段名\n */\nexport const buildTree = (\n dataset: Datum[],\n hierarchyFields: string[],\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n measureKeys: string[] = [],\n) => {\n const { measureValue, measureId, measureName } = foldInfo\n const { encodingColor, encodingColorId } = unfoldInfo\n\n // 统一管理需要 Set 收集 → join('+') 的字段\n const collectFields = [measureId, measureName, encodingColor, encodingColorId].filter(Boolean) as string[]\n\n const root: Datum = { name: 'root', children: [] }\n\n dataset.forEach((datum) => {\n let currentNode = root\n\n // 遍历层级字段,构建路径\n for (let i = 0; i < hierarchyFields.length; i++) {\n const field = hierarchyFields[i]\n const value = String(datum[field])\n const nodeName =\n field === measureId && measureName && datum[measureName] !== undefined ? String(datum[measureName]) : value\n\n let child = currentNode.children.find((c: Datum) => String(c[field]) === value)\n\n if (!child) {\n child = { name: nodeName, key: value, field, children: [] }\n for (let j = 0; j <= i; j++) {\n child[hierarchyFields[j]] = datum[hierarchyFields[j]]\n }\n currentNode.children.push(child)\n }\n\n currentNode = child\n }\n\n // 叶子节点:首次访问时初始化\n if (!currentNode.isLeaf) {\n Object.assign(currentNode, datum)\n currentNode.isLeaf = true\n\n // 初始化数值累加器\n if (measureValue) currentNode[measureValue] = 0\n measureKeys.forEach((key) => {\n currentNode[key] = 0\n })\n\n // 初始化 Set 收集器\n collectFields.forEach((field) => {\n currentNode[`_set_${field}`] = new Set()\n })\n }\n\n // 聚合 measureValue\n if (measureValue && datum[measureValue] !== undefined) {\n currentNode[measureValue] += Number(datum[measureValue])\n }\n\n // 聚合各个 measure\n measureKeys.forEach((key) => {\n if (datum[key] !== undefined) {\n currentNode[key] = (currentNode[key] || 0) + Number(datum[key])\n }\n })\n\n // 收集需要 join 的字段值\n collectFields.forEach((field) => {\n if (datum[field]) currentNode[`_set_${field}`].add(datum[field])\n })\n\n // 更新 value 字段\n if (measureValue) {\n currentNode.value = currentNode[measureValue]\n }\n })\n\n // 将 Set 转为 '+' 拼接的字符串\n const flattenSets = (node: Datum) => {\n collectFields.forEach((field) => {\n const setKey = `_set_${field}`\n if (node[setKey]) {\n node[field] = Array.from(node[setKey]).join('+')\n delete node[setKey]\n }\n })\n }\n\n // 从子节点的 '+' 字符串中收集所有唯一值,合并到父节点\n const mergeCollectFieldsFromChildren = (node: Datum) => {\n collectFields.forEach((field) => {\n const merged = new Set<string>()\n node.children.forEach((child: Datum) => {\n if (child[field]) {\n child[field].split('+').forEach((v: string) => merged.add(v))\n }\n })\n if (merged.size > 0) {\n node[field] = Array.from(merged).join('+')\n }\n })\n }\n\n // 后序遍历:自底向上聚合\n const aggregate = (node: Datum): number => {\n if (node.isLeaf) {\n flattenSets(node)\n return node.value || 0\n }\n\n if (!node.children?.length) {\n return node.value || 0\n }\n\n let sum = 0\n node.children.forEach((child: Datum) => {\n sum += aggregate(child)\n measureKeys.forEach((key) => {\n node[key] = (node[key] || 0) + (child[key] || 0)\n })\n })\n\n node.value = sum\n if (measureValue) node[measureValue] = sum\n\n mergeCollectFieldsFromChildren(node)\n\n return sum\n }\n\n root.children.forEach(aggregate)\n\n return root.children\n}\n"],"names":["datasetHierarchy","spec","context","result","advancedVSeed","datasetReshapeInfo","dataset","measures","foldInfo","unfoldInfo","hierarchyFields","measureKeys","findAllMeasures","m","tree","buildTree","measureValue","measureId","measureName","encodingColor","encodingColorId","collectFields","Boolean","root","datum","currentNode","i","field","value","String","nodeName","undefined","child","c","j","Object","key","Set","Number","flattenSets","node","setKey","Array","mergeCollectFieldsFromChildren","merged","v","aggregate","sum"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Datum, FoldInfo, UnfoldInfo, VChartSpecPipe } from '../../../../../types';
|
|
2
|
+
export declare const datasetHierarchySankey: VChartSpecPipe;
|
|
3
|
+
export declare const buildHierarchySankeyNodes: (dataset: Datum[], hierarchyFields: string[], foldInfo: FoldInfo, unfoldInfo: UnfoldInfo, measureKeys: string[]) => any;
|
|
4
|
+
export declare const getHierarchySankeyNodesFromSpec: (spec: Record<string, any>, fallback?: Datum[]) => Record<string | number, any>[];
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { findAllMeasures } from "../../../../utils/index.js";
|
|
2
|
+
import { Separator } from "../../../../../dataReshape/constant.js";
|
|
3
|
+
const datasetHierarchySankey = (spec, context)=>{
|
|
4
|
+
const result = {
|
|
5
|
+
...spec
|
|
6
|
+
};
|
|
7
|
+
const { advancedVSeed } = context;
|
|
8
|
+
const { dataset, datasetReshapeInfo, measures } = advancedVSeed;
|
|
9
|
+
const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
|
|
10
|
+
const hierarchyFields = advancedVSeed.encoding?.hierarchy || [];
|
|
11
|
+
const measureKeys = findAllMeasures(measures).map((m)=>m.id);
|
|
12
|
+
const nodes = buildHierarchySankeyNodes(dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys);
|
|
13
|
+
result.data = [
|
|
14
|
+
{
|
|
15
|
+
id: 'data',
|
|
16
|
+
values: [
|
|
17
|
+
{
|
|
18
|
+
nodes
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
const buildHierarchySankeyNodes = (dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys)=>{
|
|
26
|
+
if (!hierarchyFields.length) return dataset;
|
|
27
|
+
const { measureValue, measureId, measureName } = foldInfo;
|
|
28
|
+
const { encodingColor, encodingColorId } = unfoldInfo;
|
|
29
|
+
const collectFields = [
|
|
30
|
+
measureId,
|
|
31
|
+
measureName,
|
|
32
|
+
encodingColor,
|
|
33
|
+
encodingColorId
|
|
34
|
+
].filter(Boolean);
|
|
35
|
+
const root = {
|
|
36
|
+
name: 'root',
|
|
37
|
+
children: []
|
|
38
|
+
};
|
|
39
|
+
dataset.forEach((datum)=>{
|
|
40
|
+
let currentNode = root;
|
|
41
|
+
for(let i = 0; i < hierarchyFields.length; i++){
|
|
42
|
+
const field = hierarchyFields[i];
|
|
43
|
+
const value = String(datum[field]);
|
|
44
|
+
const nodeName = field === measureId && measureName && void 0 !== datum[measureName] ? String(datum[measureName]) : value;
|
|
45
|
+
let child = currentNode.children.find((c)=>c.name === nodeName);
|
|
46
|
+
if (!child) {
|
|
47
|
+
const pathValues = hierarchyFields.slice(0, i + 1).map((key)=>String(datum[key]));
|
|
48
|
+
child = {
|
|
49
|
+
field: field,
|
|
50
|
+
key: nodeName,
|
|
51
|
+
name: nodeName,
|
|
52
|
+
color: nodeName,
|
|
53
|
+
path: pathValues.join(Separator),
|
|
54
|
+
children: []
|
|
55
|
+
};
|
|
56
|
+
for(let j = 0; j <= i; j++)child[hierarchyFields[j]] = datum[hierarchyFields[j]];
|
|
57
|
+
currentNode.children.push(child);
|
|
58
|
+
}
|
|
59
|
+
currentNode = child;
|
|
60
|
+
}
|
|
61
|
+
if (!currentNode.isLeaf) {
|
|
62
|
+
Object.assign(currentNode, datum);
|
|
63
|
+
currentNode.isLeaf = true;
|
|
64
|
+
if (measureValue) currentNode[measureValue] = 0;
|
|
65
|
+
measureKeys.forEach((key)=>{
|
|
66
|
+
currentNode[key] = 0;
|
|
67
|
+
});
|
|
68
|
+
collectFields.forEach((field)=>{
|
|
69
|
+
currentNode[`_set_${field}`] = new Set();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (measureValue && void 0 !== datum[measureValue]) currentNode[measureValue] += Number(datum[measureValue]);
|
|
73
|
+
measureKeys.forEach((key)=>{
|
|
74
|
+
if (void 0 !== datum[key]) currentNode[key] = (currentNode[key] || 0) + Number(datum[key]);
|
|
75
|
+
});
|
|
76
|
+
collectFields.forEach((field)=>{
|
|
77
|
+
if (datum[field]) currentNode[`_set_${field}`].add(datum[field]);
|
|
78
|
+
});
|
|
79
|
+
if (measureValue) currentNode.value = currentNode[measureValue];
|
|
80
|
+
});
|
|
81
|
+
const flattenSets = (node)=>{
|
|
82
|
+
collectFields.forEach((field)=>{
|
|
83
|
+
const setKey = `_set_${field}`;
|
|
84
|
+
if (node[setKey]) {
|
|
85
|
+
node[field] = Array.from(node[setKey]).join('+');
|
|
86
|
+
delete node[setKey];
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
const mergeCollectFieldsFromChildren = (node)=>{
|
|
91
|
+
collectFields.forEach((field)=>{
|
|
92
|
+
const merged = new Set();
|
|
93
|
+
node.children.forEach((child)=>{
|
|
94
|
+
if (child[field]) child[field].split('+').forEach((v)=>merged.add(v));
|
|
95
|
+
});
|
|
96
|
+
if (merged.size > 0) node[field] = Array.from(merged).join('+');
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
const aggregate = (node)=>{
|
|
100
|
+
if (node.isLeaf) {
|
|
101
|
+
flattenSets(node);
|
|
102
|
+
node.outDegree = 0;
|
|
103
|
+
return node.value || 0;
|
|
104
|
+
}
|
|
105
|
+
if (!node.children?.length) {
|
|
106
|
+
node.outDegree = 0;
|
|
107
|
+
return node.value || 0;
|
|
108
|
+
}
|
|
109
|
+
let sum = 0;
|
|
110
|
+
node.children.forEach((child)=>{
|
|
111
|
+
sum += aggregate(child);
|
|
112
|
+
measureKeys.forEach((key)=>{
|
|
113
|
+
node[key] = (node[key] || 0) + (child[key] || 0);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
node.value = sum;
|
|
117
|
+
if (measureValue) node[measureValue] = sum;
|
|
118
|
+
node.outDegree = node.children.length;
|
|
119
|
+
mergeCollectFieldsFromChildren(node);
|
|
120
|
+
return sum;
|
|
121
|
+
};
|
|
122
|
+
const fillInDegree = (node, parent)=>{
|
|
123
|
+
node.inDegree = parent ? 1 : 0;
|
|
124
|
+
node.children?.forEach((child)=>fillInDegree(child, node));
|
|
125
|
+
};
|
|
126
|
+
root.children.forEach(aggregate);
|
|
127
|
+
root.children.forEach((child)=>fillInDegree(child));
|
|
128
|
+
return root.children;
|
|
129
|
+
};
|
|
130
|
+
const getHierarchySankeyNodesFromSpec = (spec, fallback = [])=>{
|
|
131
|
+
const nodes = spec.data?.[0]?.values?.[0]?.nodes;
|
|
132
|
+
return Array.isArray(nodes) ? nodes : fallback;
|
|
133
|
+
};
|
|
134
|
+
export { buildHierarchySankeyNodes, datasetHierarchySankey, getHierarchySankeyNodesFromSpec };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=datasetHierarchySankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetHierarchySankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetHierarchySankey.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport { Separator } from 'src/dataReshape/constant'\nimport type { Datum, FoldInfo, UnfoldInfo, VChartSpecPipe } from 'src/types'\n\nexport const datasetHierarchySankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as Record<string, any>\n const { advancedVSeed } = context\n const { dataset, datasetReshapeInfo, measures } = advancedVSeed\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0]\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n const nodes = buildHierarchySankeyNodes(dataset as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys)\n\n result.data = [\n {\n id: 'data',\n values: [\n {\n nodes,\n },\n ],\n },\n ]\n\n return result as any\n}\n\nexport const buildHierarchySankeyNodes = (\n dataset: Datum[],\n hierarchyFields: string[],\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n measureKeys: string[],\n) => {\n if (!hierarchyFields.length) {\n return dataset\n }\n\n const { measureValue, measureId, measureName } = foldInfo\n const { encodingColor, encodingColorId } = unfoldInfo\n const collectFields = [measureId, measureName, encodingColor, encodingColorId].filter(Boolean) as string[]\n\n const root: Datum = { name: 'root', children: [] }\n\n dataset.forEach((datum) => {\n let currentNode = root\n\n for (let i = 0; i < hierarchyFields.length; i++) {\n const field = hierarchyFields[i]\n const value = String(datum[field])\n const nodeName =\n field === measureId && measureName && datum[measureName] !== undefined ? String(datum[measureName]) : value\n let child = currentNode.children.find((c: Datum) => c.name === nodeName)\n\n if (!child) {\n const pathValues = hierarchyFields.slice(0, i + 1).map((key) => String(datum[key]))\n child = {\n field: field,\n key: nodeName,\n name: nodeName,\n color: nodeName,\n path: pathValues.join(Separator),\n children: [],\n }\n for (let j = 0; j <= i; j++) {\n child[hierarchyFields[j]] = datum[hierarchyFields[j]]\n }\n currentNode.children.push(child)\n }\n\n currentNode = child\n }\n\n if (!currentNode.isLeaf) {\n Object.assign(currentNode, datum)\n currentNode.isLeaf = true\n\n if (measureValue) currentNode[measureValue] = 0\n measureKeys.forEach((key) => {\n currentNode[key] = 0\n })\n\n collectFields.forEach((field) => {\n currentNode[`_set_${field}`] = new Set()\n })\n }\n\n if (measureValue && datum[measureValue] !== undefined) {\n currentNode[measureValue] += Number(datum[measureValue])\n }\n\n measureKeys.forEach((key) => {\n if (datum[key] !== undefined) {\n currentNode[key] = (currentNode[key] || 0) + Number(datum[key])\n }\n })\n\n collectFields.forEach((field) => {\n if (datum[field]) currentNode[`_set_${field}`].add(datum[field])\n })\n\n if (measureValue) {\n currentNode.value = currentNode[measureValue]\n }\n })\n\n const flattenSets = (node: Datum) => {\n collectFields.forEach((field) => {\n const setKey = `_set_${field}`\n if (node[setKey]) {\n node[field] = Array.from(node[setKey]).join('+')\n delete node[setKey]\n }\n })\n }\n\n const mergeCollectFieldsFromChildren = (node: Datum) => {\n collectFields.forEach((field) => {\n const merged = new Set<string>()\n node.children.forEach((child: Datum) => {\n if (child[field]) {\n child[field].split('+').forEach((v: string) => merged.add(v))\n }\n })\n if (merged.size > 0) {\n node[field] = Array.from(merged).join('+')\n }\n })\n }\n\n const aggregate = (node: Datum): number => {\n if (node.isLeaf) {\n flattenSets(node)\n node.outDegree = 0\n return node.value || 0\n }\n\n if (!node.children?.length) {\n node.outDegree = 0\n return node.value || 0\n }\n\n let sum = 0\n node.children.forEach((child: Datum) => {\n sum += aggregate(child)\n measureKeys.forEach((key) => {\n node[key] = (node[key] || 0) + (child[key] || 0)\n })\n })\n\n node.value = sum\n if (measureValue) node[measureValue] = sum\n node.outDegree = node.children.length\n mergeCollectFieldsFromChildren(node)\n\n return sum\n }\n\n const fillInDegree = (node: Datum, parent?: Datum) => {\n node.inDegree = parent ? 1 : 0\n node.children?.forEach((child: Datum) => fillInDegree(child, node))\n }\n\n root.children.forEach(aggregate)\n root.children.forEach((child: Datum) => fillInDegree(child))\n\n return root.children\n}\n\nexport const getHierarchySankeyNodesFromSpec = (spec: Record<string, any>, fallback: Datum[] = []) => {\n const nodes = spec.data?.[0]?.values?.[0]?.nodes\n return Array.isArray(nodes) ? (nodes as Datum[]) : fallback\n}\n"],"names":["datasetHierarchySankey","spec","context","result","advancedVSeed","dataset","datasetReshapeInfo","measures","foldInfo","unfoldInfo","hierarchyFields","measureKeys","findAllMeasures","m","nodes","buildHierarchySankeyNodes","measureValue","measureId","measureName","encodingColor","encodingColorId","collectFields","Boolean","root","datum","currentNode","i","field","value","String","nodeName","undefined","child","c","pathValues","key","Separator","j","Object","Set","Number","flattenSets","node","setKey","Array","mergeCollectFieldsFromChildren","merged","v","aggregate","sum","fillInDegree","parent","getHierarchySankeyNodesFromSpec","fallback"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { PivotChartSpecPipe, Datum } from 'src/types'\nimport { buildTree } from './datasetHierarchy'\nimport { omit } from 'remeda'\n\nexport const datasetPivotHierarchy: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { dataset, datasetReshapeInfo, measures } = advancedVSeed\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n const rows = (advancedVSeed.encoding as Datum)?.row || []\n const columns = (advancedVSeed.encoding as Datum)?.column || []\n const pivotDims = [...rows, ...columns]\n const records = dataset.reduce(\n (pre, cur, index) => {\n const id = datasetReshapeInfo[index].id\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[index]\n\n if (pivotDims.length > 0) {\n const groupedDataset = groupByDimensions(cur as Datum[], pivotDims) as Datum[]\n pre[id] = groupedDataset.flatMap((data) => {\n const root = {\n ...data,\n children: buildTree(data.children as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys),\n }\n const rootProps = omit(root, ['children'])\n const rootTree = root.children.map((child: Datum) => ({\n ...child,\n ...rootProps,\n }))\n return rootTree\n })\n } else {\n const tree = buildTree(cur as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys)\n pre[id] = tree\n }\n\n return pre\n },\n {} as Record<string, any>,\n )\n\n return {\n ...result,\n records: records,\n }\n}\n\
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { PivotChartSpecPipe, Datum } from 'src/types'\nimport { buildTree } from './datasetHierarchy'\nimport { omit } from 'remeda'\n\nexport const datasetPivotHierarchy: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { dataset, datasetReshapeInfo, measures } = advancedVSeed\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n const rows = (advancedVSeed.encoding as Datum)?.row || []\n const columns = (advancedVSeed.encoding as Datum)?.column || []\n const pivotDims = [...rows, ...columns]\n const records = dataset.reduce(\n (pre, cur, index) => {\n const id = datasetReshapeInfo[index].id\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[index]\n\n if (pivotDims.length > 0) {\n const groupedDataset = groupByDimensions(cur as Datum[], pivotDims) as Datum[]\n pre[id] = groupedDataset.flatMap((data) => {\n const root = {\n ...data,\n children: buildTree(data.children as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys),\n }\n const rootProps = omit(root, ['children'])\n const rootTree = root.children.map((child: Datum) => ({\n ...child,\n ...rootProps,\n }))\n return rootTree\n })\n } else {\n const tree = buildTree(cur as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys)\n pre[id] = tree\n }\n\n return pre\n },\n {} as Record<string, any>,\n )\n\n return {\n ...result,\n records: records,\n }\n}\n\nexport function groupByDimensions<T extends Record<string, any>>(data: T[], dimKeys: string[]): any[] {\n if (dimKeys.length === 0) {\n return data\n }\n\n // 用所有 dimKeys 的值拼接成复合 key\n const buckets = new Map<string, { dimValues: Record<string, any>; items: T[] }>()\n\n for (const item of data) {\n const compositeKey = dimKeys.map((k) => String(item[k])).join('\\x00')\n\n if (!buckets.has(compositeKey)) {\n const dimValues: Record<string, any> = {}\n for (const k of dimKeys) {\n dimValues[k] = item[k]\n }\n buckets.set(compositeKey, { dimValues, items: [] })\n }\n buckets.get(compositeKey)!.items.push(item)\n }\n\n const result: any[] = []\n for (const [, { dimValues, items }] of buckets) {\n result.push({\n ...dimValues, // 平铺所有维度 key:value\n children: items,\n })\n }\n\n return result\n}\n"],"names":["datasetPivotHierarchy","spec","context","result","advancedVSeed","dataset","datasetReshapeInfo","measures","measureKeys","findAllMeasures","m","hierarchyFields","rows","columns","pivotDims","records","pre","cur","index","id","foldInfo","unfoldInfo","groupedDataset","groupByDimensions","data","root","buildTree","rootProps","omit","rootTree","child","tree","dimKeys","buckets","Map","item","compositeKey","k","String","dimValues","items"],"mappings":";;;AAKO,MAAMA,wBAA4C,CAACC,MAAMC;IAC9D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,OAAO,EAAEC,kBAAkB,EAAEC,QAAQ,EAAE,GAAGH;IAClD,MAAMI,cAAcC,gBAAgBF,UAAU,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IAE7D,MAAMC,kBAAmBP,cAAc,QAAQ,EAAY,aAAa,EAAE;IAC1E,MAAMQ,OAAQR,cAAc,QAAQ,EAAY,OAAO,EAAE;IACzD,MAAMS,UAAWT,cAAc,QAAQ,EAAY,UAAU,EAAE;IAC/D,MAAMU,YAAY;WAAIF;WAASC;KAAQ;IACvC,MAAME,UAAUV,QAAQ,MAAM,CAC5B,CAACW,KAAKC,KAAKC;QACT,MAAMC,KAAKb,kBAAkB,CAACY,MAAM,CAAC,EAAE;QACvC,MAAM,EAAEE,QAAQ,EAAEC,UAAU,EAAE,GAAGf,kBAAkB,CAACY,MAAM;QAE1D,IAAIJ,UAAU,MAAM,GAAG,GAAG;YACxB,MAAMQ,iBAAiBC,kBAAkBN,KAAgBH;YACzDE,GAAG,CAACG,GAAG,GAAGG,eAAe,OAAO,CAAC,CAACE;gBAChC,MAAMC,OAAO;oBACX,GAAGD,IAAI;oBACP,UAAUE,UAAUF,KAAK,QAAQ,EAAab,iBAAiBS,UAAUC,YAAYb;gBACvF;gBACA,MAAMmB,YAAYC,KAAKH,MAAM;oBAAC;iBAAW;gBACzC,MAAMI,WAAWJ,KAAK,QAAQ,CAAC,GAAG,CAAC,CAACK,QAAkB;wBACpD,GAAGA,KAAK;wBACR,GAAGH,SAAS;oBACd;gBACA,OAAOE;YACT;QACF,OAAO;YACL,MAAME,OAAOL,UAAUT,KAAgBN,iBAAiBS,UAAUC,YAAYb;YAC9EQ,GAAG,CAACG,GAAG,GAAGY;QACZ;QAEA,OAAOf;IACT,GACA,CAAC;IAGH,OAAO;QACL,GAAGb,MAAM;QACT,SAASY;IACX;AACF;AAEO,SAASQ,kBAAiDC,IAAS,EAAEQ,OAAiB;IAC3F,IAAIA,AAAmB,MAAnBA,QAAQ,MAAM,EAChB,OAAOR;IAIT,MAAMS,UAAU,IAAIC;IAEpB,KAAK,MAAMC,QAAQX,KAAM;QACvB,MAAMY,eAAeJ,QAAQ,GAAG,CAAC,CAACK,IAAMC,OAAOH,IAAI,CAACE,EAAE,GAAG,IAAI,CAAC;QAE9D,IAAI,CAACJ,QAAQ,GAAG,CAACG,eAAe;YAC9B,MAAMG,YAAiC,CAAC;YACxC,KAAK,MAAMF,KAAKL,QACdO,SAAS,CAACF,EAAE,GAAGF,IAAI,CAACE,EAAE;YAExBJ,QAAQ,GAAG,CAACG,cAAc;gBAAEG;gBAAW,OAAO,EAAE;YAAC;QACnD;QACAN,QAAQ,GAAG,CAACG,cAAe,KAAK,CAAC,IAAI,CAACD;IACxC;IAEA,MAAMhC,SAAgB,EAAE;IACxB,KAAK,MAAM,GAAG,EAAEoC,SAAS,EAAEC,KAAK,EAAE,CAAC,IAAIP,QACrC9B,OAAO,IAAI,CAAC;QACV,GAAGoC,SAAS;QACZ,UAAUC;IACZ;IAGF,OAAOrC;AACT"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { findAllMeasures } from "../../../../utils/index.js";
|
|
2
|
+
import { buildHierarchySankeyNodes } from "./datasetHierarchySankey.js";
|
|
3
|
+
import { groupByDimensions } from "./datasetPivotHierarchy.js";
|
|
4
|
+
const datasetPivotHierarchySankey = (spec, context)=>{
|
|
5
|
+
const result = {
|
|
6
|
+
...spec
|
|
7
|
+
};
|
|
8
|
+
const { advancedVSeed } = context;
|
|
9
|
+
const { dataset, datasetReshapeInfo, measures } = advancedVSeed;
|
|
10
|
+
const measureKeys = findAllMeasures(measures).map((m)=>m.id);
|
|
11
|
+
const hierarchyFields = advancedVSeed.encoding?.hierarchy || [];
|
|
12
|
+
const rows = advancedVSeed.encoding?.row || [];
|
|
13
|
+
const columns = advancedVSeed.encoding?.column || [];
|
|
14
|
+
const pivotDims = [
|
|
15
|
+
...rows,
|
|
16
|
+
...columns
|
|
17
|
+
];
|
|
18
|
+
const records = dataset.reduce((pre, cur, index)=>{
|
|
19
|
+
const id = datasetReshapeInfo[index].id;
|
|
20
|
+
const { foldInfo, unfoldInfo } = datasetReshapeInfo[index];
|
|
21
|
+
if (pivotDims.length > 0) {
|
|
22
|
+
const groupedDataset = groupByDimensions(cur, pivotDims);
|
|
23
|
+
pre[id] = groupedDataset.map((data)=>({
|
|
24
|
+
...Object.fromEntries(pivotDims.map((dim)=>[
|
|
25
|
+
dim,
|
|
26
|
+
data[dim]
|
|
27
|
+
])),
|
|
28
|
+
nodes: buildHierarchySankeyNodes(data.children, hierarchyFields, foldInfo, unfoldInfo, measureKeys)
|
|
29
|
+
}));
|
|
30
|
+
} else pre[id] = [
|
|
31
|
+
{
|
|
32
|
+
nodes: buildHierarchySankeyNodes(cur, hierarchyFields, foldInfo, unfoldInfo, measureKeys)
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
return pre;
|
|
36
|
+
}, {});
|
|
37
|
+
return {
|
|
38
|
+
...result,
|
|
39
|
+
records
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export { datasetPivotHierarchySankey };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=datasetPivotHierarchySankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetPivotHierarchySankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchySankey.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { Datum, PivotChartSpecPipe } from 'src/types'\nimport { buildHierarchySankeyNodes } from './datasetHierarchySankey'\nimport { groupByDimensions } from './datasetPivotHierarchy'\n\nexport const datasetPivotHierarchySankey: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { dataset, datasetReshapeInfo, measures } = advancedVSeed\n const measureKeys = findAllMeasures(measures).map((m) => m.id)\n\n const hierarchyFields = (advancedVSeed.encoding as Datum)?.hierarchy || []\n const rows = (advancedVSeed.encoding as Datum)?.row || []\n const columns = (advancedVSeed.encoding as Datum)?.column || []\n const pivotDims = [...rows, ...columns]\n const records = dataset.reduce(\n (pre, cur, index) => {\n const id = datasetReshapeInfo[index].id\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[index]\n\n if (pivotDims.length > 0) {\n const groupedDataset = groupByDimensions(cur as Datum[], pivotDims) as Datum[]\n pre[id] = groupedDataset.map((data) => ({\n ...Object.fromEntries(pivotDims.map((dim) => [dim, data[dim]])),\n nodes: buildHierarchySankeyNodes(\n data.children as Datum[],\n hierarchyFields,\n foldInfo,\n unfoldInfo,\n measureKeys,\n ),\n }))\n } else {\n pre[id] = [\n {\n nodes: buildHierarchySankeyNodes(cur as Datum[], hierarchyFields, foldInfo, unfoldInfo, measureKeys),\n },\n ]\n }\n\n return pre\n },\n {} as Record<string, any>,\n )\n\n return {\n ...result,\n records,\n }\n}\n"],"names":["datasetPivotHierarchySankey","spec","context","result","advancedVSeed","dataset","datasetReshapeInfo","measures","measureKeys","findAllMeasures","m","hierarchyFields","rows","columns","pivotDims","records","pre","cur","index","id","foldInfo","unfoldInfo","groupedDataset","groupByDimensions","data","Object","dim","buildHierarchySankeyNodes"],"mappings":";;;AAKO,MAAMA,8BAAkD,CAACC,MAAMC;IACpE,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,OAAO,EAAEC,kBAAkB,EAAEC,QAAQ,EAAE,GAAGH;IAClD,MAAMI,cAAcC,gBAAgBF,UAAU,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IAE7D,MAAMC,kBAAmBP,cAAc,QAAQ,EAAY,aAAa,EAAE;IAC1E,MAAMQ,OAAQR,cAAc,QAAQ,EAAY,OAAO,EAAE;IACzD,MAAMS,UAAWT,cAAc,QAAQ,EAAY,UAAU,EAAE;IAC/D,MAAMU,YAAY;WAAIF;WAASC;KAAQ;IACvC,MAAME,UAAUV,QAAQ,MAAM,CAC5B,CAACW,KAAKC,KAAKC;QACT,MAAMC,KAAKb,kBAAkB,CAACY,MAAM,CAAC,EAAE;QACvC,MAAM,EAAEE,QAAQ,EAAEC,UAAU,EAAE,GAAGf,kBAAkB,CAACY,MAAM;QAE1D,IAAIJ,UAAU,MAAM,GAAG,GAAG;YACxB,MAAMQ,iBAAiBC,kBAAkBN,KAAgBH;YACzDE,GAAG,CAACG,GAAG,GAAGG,eAAe,GAAG,CAAC,CAACE,OAAU;oBACtC,GAAGC,OAAO,WAAW,CAACX,UAAU,GAAG,CAAC,CAACY,MAAQ;4BAACA;4BAAKF,IAAI,CAACE,IAAI;yBAAC,EAAE;oBAC/D,OAAOC,0BACLH,KAAK,QAAQ,EACbb,iBACAS,UACAC,YACAb;gBAEJ;QACF,OACEQ,GAAG,CAACG,GAAG,GAAG;YACR;gBACE,OAAOQ,0BAA0BV,KAAgBN,iBAAiBS,UAAUC,YAAYb;YAC1F;SACD;QAGH,OAAOQ;IACT,GACA,CAAC;IAGH,OAAO;QACL,GAAGb,MAAM;QACTY;IACF;AACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { buildSankeyData } from "./datasetSankey.js";
|
|
2
|
+
import { groupByDimensions } from "./datasetPivotHierarchy.js";
|
|
3
|
+
const datasetPivotSankey = (spec, context)=>{
|
|
4
|
+
const result = {
|
|
5
|
+
...spec
|
|
6
|
+
};
|
|
7
|
+
const { advancedVSeed } = context;
|
|
8
|
+
const { dataset, datasetReshapeInfo } = advancedVSeed;
|
|
9
|
+
const rows = advancedVSeed.encoding?.row || [];
|
|
10
|
+
const columns = advancedVSeed.encoding?.column || [];
|
|
11
|
+
const sourceFields = advancedVSeed.encoding?.source || [];
|
|
12
|
+
const targetFields = advancedVSeed.encoding?.target || [];
|
|
13
|
+
const pivotDims = [
|
|
14
|
+
...rows,
|
|
15
|
+
...columns
|
|
16
|
+
];
|
|
17
|
+
const records = dataset.reduce((pre, cur, index)=>{
|
|
18
|
+
const reshapeInfo = datasetReshapeInfo[index];
|
|
19
|
+
const id = reshapeInfo.id;
|
|
20
|
+
const { foldInfo, unfoldInfo } = reshapeInfo;
|
|
21
|
+
if (pivotDims.length > 0) {
|
|
22
|
+
const groupedDataset = groupByDimensions(cur, pivotDims);
|
|
23
|
+
pre[id] = groupedDataset.map((data)=>({
|
|
24
|
+
...Object.fromEntries(pivotDims.map((dim)=>[
|
|
25
|
+
dim,
|
|
26
|
+
data[dim]
|
|
27
|
+
])),
|
|
28
|
+
...buildSankeyData(data.children || [], unfoldInfo.encodingSource || 'source', unfoldInfo.encodingTarget || 'target', foldInfo.measureValue, {
|
|
29
|
+
foldInfo,
|
|
30
|
+
sourceFields,
|
|
31
|
+
targetFields
|
|
32
|
+
})
|
|
33
|
+
}));
|
|
34
|
+
} else pre[id] = [
|
|
35
|
+
buildSankeyData(cur, unfoldInfo.encodingSource || 'source', unfoldInfo.encodingTarget || 'target', foldInfo.measureValue, {
|
|
36
|
+
foldInfo,
|
|
37
|
+
sourceFields,
|
|
38
|
+
targetFields
|
|
39
|
+
})
|
|
40
|
+
];
|
|
41
|
+
return pre;
|
|
42
|
+
}, {});
|
|
43
|
+
return {
|
|
44
|
+
...result,
|
|
45
|
+
records
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export { datasetPivotSankey };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=datasetPivotSankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetPivotSankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetPivotSankey.ts"],"sourcesContent":["import type { Datum, PivotChartSpecPipe } from 'src/types'\nimport { buildSankeyData } from './datasetSankey'\nimport { groupByDimensions } from './datasetPivotHierarchy'\n\nexport const datasetPivotSankey: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { dataset, datasetReshapeInfo } = advancedVSeed\n const rows = (advancedVSeed.encoding as Datum)?.row || []\n const columns = (advancedVSeed.encoding as Datum)?.column || []\n const sourceFields = (advancedVSeed.encoding as Datum)?.source || []\n const targetFields = (advancedVSeed.encoding as Datum)?.target || []\n const pivotDims = [...rows, ...columns]\n\n const records = dataset.reduce(\n (pre, cur, index) => {\n const reshapeInfo = datasetReshapeInfo[index]\n const id = reshapeInfo.id\n const { foldInfo, unfoldInfo } = reshapeInfo\n\n if (pivotDims.length > 0) {\n const groupedDataset = groupByDimensions(cur as Datum[], pivotDims) as Datum[]\n pre[id] = groupedDataset.map((data) => ({\n ...Object.fromEntries(pivotDims.map((dim) => [dim, data[dim]])),\n ...buildSankeyData(\n (data.children || []) as Datum[],\n unfoldInfo.encodingSource || 'source',\n unfoldInfo.encodingTarget || 'target',\n foldInfo.measureValue,\n {\n foldInfo,\n sourceFields,\n targetFields,\n },\n ),\n }))\n } else {\n pre[id] = [\n buildSankeyData(\n cur as Datum[],\n unfoldInfo.encodingSource || 'source',\n unfoldInfo.encodingTarget || 'target',\n foldInfo.measureValue,\n {\n foldInfo,\n sourceFields,\n targetFields,\n },\n ),\n ]\n }\n\n return pre\n },\n {} as Record<string, any>,\n )\n\n return {\n ...result,\n records,\n }\n}\n"],"names":["datasetPivotSankey","spec","context","result","advancedVSeed","dataset","datasetReshapeInfo","rows","columns","sourceFields","targetFields","pivotDims","records","pre","cur","index","reshapeInfo","id","foldInfo","unfoldInfo","groupedDataset","groupByDimensions","data","Object","dim","buildSankeyData"],"mappings":";;AAIO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,OAAO,EAAEC,kBAAkB,EAAE,GAAGF;IACxC,MAAMG,OAAQH,cAAc,QAAQ,EAAY,OAAO,EAAE;IACzD,MAAMI,UAAWJ,cAAc,QAAQ,EAAY,UAAU,EAAE;IAC/D,MAAMK,eAAgBL,cAAc,QAAQ,EAAY,UAAU,EAAE;IACpE,MAAMM,eAAgBN,cAAc,QAAQ,EAAY,UAAU,EAAE;IACpE,MAAMO,YAAY;WAAIJ;WAASC;KAAQ;IAEvC,MAAMI,UAAUP,QAAQ,MAAM,CAC5B,CAACQ,KAAKC,KAAKC;QACT,MAAMC,cAAcV,kBAAkB,CAACS,MAAM;QAC7C,MAAME,KAAKD,YAAY,EAAE;QACzB,MAAM,EAAEE,QAAQ,EAAEC,UAAU,EAAE,GAAGH;QAEjC,IAAIL,UAAU,MAAM,GAAG,GAAG;YACxB,MAAMS,iBAAiBC,kBAAkBP,KAAgBH;YACzDE,GAAG,CAACI,GAAG,GAAGG,eAAe,GAAG,CAAC,CAACE,OAAU;oBACtC,GAAGC,OAAO,WAAW,CAACZ,UAAU,GAAG,CAAC,CAACa,MAAQ;4BAACA;4BAAKF,IAAI,CAACE,IAAI;yBAAC,EAAE;oBAC/D,GAAGC,gBACAH,KAAK,QAAQ,IAAI,EAAE,EACpBH,WAAW,cAAc,IAAI,UAC7BA,WAAW,cAAc,IAAI,UAC7BD,SAAS,YAAY,EACrB;wBACEA;wBACAT;wBACAC;oBACF,EACD;gBACH;QACF,OACEG,GAAG,CAACI,GAAG,GAAG;YACRQ,gBACEX,KACAK,WAAW,cAAc,IAAI,UAC7BA,WAAW,cAAc,IAAI,UAC7BD,SAAS,YAAY,EACrB;gBACEA;gBACAT;gBACAC;YACF;SAEH;QAGH,OAAOG;IACT,GACA,CAAC;IAGH,OAAO;QACL,GAAGV,MAAM;QACTS;IACF;AACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Datum, FoldInfo, VChartSpecPipe } from '../../../../../types';
|
|
2
|
+
type SankeyDataOptions = {
|
|
3
|
+
foldInfo?: Pick<FoldInfo, 'measureId' | 'measureName'>;
|
|
4
|
+
sourceFields?: string[];
|
|
5
|
+
targetFields?: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare const buildSankeyData: (dataset: Datum[], sourceField: string, targetField: string, valueField: string, options?: SankeyDataOptions) => {
|
|
8
|
+
nodes: Record<string, string | number>[];
|
|
9
|
+
links: ({
|
|
10
|
+
source: number;
|
|
11
|
+
target: number;
|
|
12
|
+
value: number;
|
|
13
|
+
} & Record<string, string | number>)[];
|
|
14
|
+
};
|
|
15
|
+
export declare const datasetSankey: VChartSpecPipe;
|
|
16
|
+
export {};
|