@visactor/vseed 0.5.5 → 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/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 +1303 -185
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetSankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/dataset/datasetSankey.ts"],"sourcesContent":["import { ColorEncoding, Separator } from 'src/dataReshape'\nimport type { Datum, FoldInfo, VChartSpecPipe } from 'src/types'\n\ntype SankeyDataOptions = {\n foldInfo?: Pick<FoldInfo, 'measureId' | 'measureName'>\n sourceFields?: string[]\n targetFields?: string[]\n}\n\ntype SankeyNodeInfo = {\n id: string\n nodeName: string\n}\n\nconst getNodeInfo = (\n datum: Datum,\n encodedField: string,\n sourceFields: string[],\n foldInfo?: Pick<FoldInfo, 'measureId' | 'measureName'>,\n) => {\n const id = String(datum[encodedField] ?? '')\n\n if (!sourceFields.length) {\n return {\n id,\n nodeName: id,\n }\n }\n\n const nodeName = sourceFields\n .map((field) => {\n const value = String(datum[field] ?? '')\n return field === foldInfo?.measureId && foldInfo.measureName && datum[foldInfo.measureName] !== undefined\n ? String(datum[foldInfo.measureName])\n : value\n })\n .join(Separator)\n\n return {\n id,\n nodeName: nodeName || id,\n }\n}\n\nexport const buildSankeyData = (\n dataset: Datum[],\n sourceField: string,\n targetField: string,\n valueField: string,\n options: SankeyDataOptions = {},\n) => {\n const nodeIndexMap = new Map<string, number>()\n const nodeNameMap = new Map<string, string>()\n const nodeColorMap = new Map<string, string>()\n const linksMap = new Map<\n string,\n { source: number; target: number; value: number } & Record<string, string | number>\n >()\n const { foldInfo, sourceFields = [], targetFields = [] } = options\n\n const ensureNode = (node: SankeyNodeInfo) => {\n const { id, nodeName } = node\n if (!nodeIndexMap.has(id)) {\n nodeIndexMap.set(id, nodeIndexMap.size)\n nodeNameMap.set(id, nodeName)\n }\n return nodeIndexMap.get(id)!\n }\n\n dataset.forEach((datum) => {\n const sourceNode = getNodeInfo(datum, sourceField, sourceFields, foldInfo)\n const targetNode = getNodeInfo(datum, targetField, targetFields, foldInfo)\n const rawValue = Number(datum[valueField] ?? 0)\n const colorCategory = datum[ColorEncoding]\n const colorCategoryValue =\n colorCategory === undefined || colorCategory === null || colorCategory === '' ? undefined : String(colorCategory)\n\n if (!sourceNode.id || !targetNode.id || Number.isNaN(rawValue)) {\n return\n }\n\n const source = ensureNode(sourceNode)\n const target = ensureNode(targetNode)\n\n if (!nodeColorMap.has(sourceNode.id) && colorCategoryValue) {\n nodeColorMap.set(sourceNode.id, colorCategoryValue)\n }\n if (!nodeColorMap.has(targetNode.id) && colorCategoryValue) {\n nodeColorMap.set(targetNode.id, colorCategoryValue)\n }\n\n const linkKey = `${source}__${target}`\n const prev = linksMap.get(linkKey)\n\n if (prev) {\n prev.value += rawValue\n } else {\n const linkDatum: { source: number; target: number; value: number } & Record<string, string | number> = {\n source,\n target,\n value: rawValue,\n sourceNodeName: sourceNode.nodeName,\n targetNodeName: targetNode.nodeName,\n }\n\n if (colorCategoryValue) {\n linkDatum[ColorEncoding] = colorCategoryValue\n }\n\n linksMap.set(linkKey, linkDatum)\n }\n })\n\n const nodes = Array.from(nodeIndexMap.entries())\n .sort((a, b) => a[1] - b[1])\n .map(([id]) => {\n const nodeDatum: Record<string, string | number> = {\n id,\n nodeName: nodeNameMap.get(id) || id,\n }\n const nodeColor = nodeColorMap.get(id)\n\n if (nodeColor) {\n nodeDatum[ColorEncoding] = nodeColor\n }\n\n return nodeDatum\n })\n\n return {\n nodes,\n links: Array.from(linksMap.values()),\n }\n}\n\nexport const datasetSankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as Record<string, any>\n const { advancedVSeed } = context\n const { dataset = [], datasetReshapeInfo } = advancedVSeed\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0]\n const sourceFields = (advancedVSeed.encoding as Datum)?.source || []\n const targetFields = (advancedVSeed.encoding as Datum)?.target || []\n const graphData = buildSankeyData(\n dataset as Datum[],\n unfoldInfo.encodingSource || 'source',\n unfoldInfo.encodingTarget || 'target',\n foldInfo.measureValue,\n {\n foldInfo,\n sourceFields,\n targetFields,\n },\n )\n\n result.data = [\n {\n id: 'data',\n values: [graphData] as any,\n },\n ]\n\n return result as any\n}\n"],"names":["getNodeInfo","datum","encodedField","sourceFields","foldInfo","id","String","nodeName","field","value","undefined","Separator","buildSankeyData","dataset","sourceField","targetField","valueField","options","nodeIndexMap","Map","nodeNameMap","nodeColorMap","linksMap","targetFields","ensureNode","node","sourceNode","targetNode","rawValue","Number","colorCategory","ColorEncoding","colorCategoryValue","source","target","linkKey","prev","linkDatum","nodes","Array","a","b","nodeDatum","nodeColor","datasetSankey","spec","context","result","advancedVSeed","datasetReshapeInfo","unfoldInfo","graphData"],"mappings":"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"}
|
|
@@ -7,4 +7,8 @@ export { datasetScatter } from './datasetScatter';
|
|
|
7
7
|
export { datasetHistogram } from './datasetHistogram';
|
|
8
8
|
export { datasetBoxplot } from './datasetBoxplot';
|
|
9
9
|
export { datasetHierarchy } from './datasetHierarchy';
|
|
10
|
+
export { datasetHierarchySankey } from './datasetHierarchySankey';
|
|
11
|
+
export { datasetSankey } from './datasetSankey';
|
|
10
12
|
export { datasetPivotHierarchy } from './datasetPivotHierarchy';
|
|
13
|
+
export { datasetPivotHierarchySankey } from './datasetPivotHierarchySankey';
|
|
14
|
+
export { datasetPivotSankey } from './datasetPivotSankey';
|
|
@@ -7,4 +7,8 @@ export { datasetScatter } from "./datasetScatter.js";
|
|
|
7
7
|
export { datasetHistogram } from "./datasetHistogram.js";
|
|
8
8
|
export { datasetBoxplot } from "./datasetBoxplot.js";
|
|
9
9
|
export { datasetHierarchy } from "./datasetHierarchy.js";
|
|
10
|
+
export { datasetHierarchySankey } from "./datasetHierarchySankey.js";
|
|
11
|
+
export { datasetSankey } from "./datasetSankey.js";
|
|
10
12
|
export { datasetPivotHierarchy } from "./datasetPivotHierarchy.js";
|
|
13
|
+
export { datasetPivotHierarchySankey } from "./datasetPivotHierarchySankey.js";
|
|
14
|
+
export { datasetPivotSankey } from "./datasetPivotSankey.js";
|
|
@@ -6,7 +6,7 @@ const initCirclePacking = (spec, context)=>{
|
|
|
6
6
|
const { datasetReshapeInfo } = advancedVSeed;
|
|
7
7
|
const { foldInfo } = datasetReshapeInfo[0];
|
|
8
8
|
result.type = 'circlePacking';
|
|
9
|
-
result.categoryField = '
|
|
9
|
+
result.categoryField = 'key';
|
|
10
10
|
result.valueField = foldInfo.measureValue;
|
|
11
11
|
result.circlePacking = {
|
|
12
12
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/init/circlePacking.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/circlePacking.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ICirclePackingChartSpec } from '@visactor/vchart'\n\nexport const initCirclePacking: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ICirclePackingChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'circlePacking'\n result.categoryField = '
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/init/circlePacking.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/circlePacking.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ICirclePackingChartSpec } from '@visactor/vchart'\n\nexport const initCirclePacking: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ICirclePackingChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'circlePacking'\n result.categoryField = 'key'\n result.valueField = foldInfo.measureValue\n // Style configuration\n result.circlePacking = {\n style: {\n fillOpacity: (d: any) => (d.isLeaf ? 0.75 : 0.25),\n },\n }\n result.layoutPadding = [0, 10, 10]\n result.padding = 0\n // Animation configuration\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initCirclePacking","spec","context","result","advancedVSeed","datasetReshapeInfo","foldInfo","d"],"mappings":"AAGO,MAAMA,oBAAoC,CAACC,MAAMC;IACtD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGD;IAC/B,MAAM,EAAEE,QAAQ,EAAE,GAAGD,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGG,SAAS,YAAY;IAEzCH,OAAO,aAAa,GAAG;QACrB,OAAO;YACL,aAAa,CAACI,IAAYA,EAAE,MAAM,GAAG,OAAO;QAC9C;IACF;IACAJ,OAAO,aAAa,GAAG;QAAC;QAAG;QAAI;KAAG;IAClCA,OAAO,OAAO,GAAG;IAEjBA,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const initHierarchySankey = (spec, context)=>{
|
|
2
|
+
const result = {
|
|
3
|
+
...spec
|
|
4
|
+
};
|
|
5
|
+
const { advancedVSeed } = context;
|
|
6
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
|
7
|
+
const { foldInfo } = datasetReshapeInfo[0];
|
|
8
|
+
result.type = 'sankey';
|
|
9
|
+
result.nodeKey = (datum)=>datum?.key;
|
|
10
|
+
result.categoryField = 'key';
|
|
11
|
+
result.valueField = foldInfo.measureValue;
|
|
12
|
+
result.nodeAlign = 'justify';
|
|
13
|
+
result.nodeGap = 8;
|
|
14
|
+
result.nodeWidth = 12;
|
|
15
|
+
result.minNodeHeight = 4;
|
|
16
|
+
result.iterations = 0;
|
|
17
|
+
result.padding = {
|
|
18
|
+
top: 0,
|
|
19
|
+
left: 2,
|
|
20
|
+
bottom: 0,
|
|
21
|
+
right: 2
|
|
22
|
+
};
|
|
23
|
+
result.link = {
|
|
24
|
+
style: {
|
|
25
|
+
pathType: 'smooth'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
export { initHierarchySankey };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=hierarchySankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/init/hierarchySankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/hierarchySankey.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\n\nexport const initHierarchySankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as Record<string, any>\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'sankey'\n result.nodeKey = (datum: any) => datum?.key\n result.categoryField = 'key'\n result.valueField = foldInfo.measureValue\n\n result.nodeAlign = 'justify'\n result.nodeGap = 8\n result.nodeWidth = 12\n result.minNodeHeight = 4\n result.iterations = 0\n result.padding = {\n top: 0,\n left: 2,\n bottom: 0,\n right: 2,\n }\n\n result.link = {\n style: {\n pathType: 'smooth',\n },\n }\n\n return result as any\n}\n"],"names":["initHierarchySankey","spec","context","result","advancedVSeed","datasetReshapeInfo","foldInfo","datum"],"mappings":"AAEO,MAAMA,sBAAsC,CAACC,MAAMC;IACxD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGD;IAC/B,MAAM,EAAEE,QAAQ,EAAE,GAAGD,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,OAAO,GAAG,CAACI,QAAeA,OAAO;IACxCJ,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGG,SAAS,YAAY;IAEzCH,OAAO,SAAS,GAAG;IACnBA,OAAO,OAAO,GAAG;IACjBA,OAAO,SAAS,GAAG;IACnBA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAG;IACpBA,OAAO,OAAO,GAAG;QACf,KAAK;QACL,MAAM;QACN,QAAQ;QACR,OAAO;IACT;IAEAA,OAAO,IAAI,GAAG;QACZ,OAAO;YACL,UAAU;QACZ;IACF;IAEA,OAAOA;AACT"}
|
|
@@ -17,4 +17,6 @@ export { initHistogram } from './histogram';
|
|
|
17
17
|
export { initTreeMap } from './treeMap';
|
|
18
18
|
export { initSunburst } from './sunburst';
|
|
19
19
|
export { initCirclePacking } from './circlePacking';
|
|
20
|
+
export { initHierarchySankey } from './hierarchySankey';
|
|
21
|
+
export { initSankey } from './sankey';
|
|
20
22
|
export { initBoxplot } from './boxplot';
|
|
@@ -17,4 +17,6 @@ export { initHistogram } from "./histogram.js";
|
|
|
17
17
|
export { initTreeMap } from "./treeMap.js";
|
|
18
18
|
export { initSunburst } from "./sunburst.js";
|
|
19
19
|
export { initCirclePacking } from "./circlePacking.js";
|
|
20
|
+
export { initHierarchySankey } from "./hierarchySankey.js";
|
|
21
|
+
export { initSankey } from "./sankey.js";
|
|
20
22
|
export { initBoxplot } from "./boxplot.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ColorEncoding } from "../../../../../dataReshape/index.js";
|
|
2
|
+
const initSankey = (spec, context)=>{
|
|
3
|
+
const result = {
|
|
4
|
+
...spec
|
|
5
|
+
};
|
|
6
|
+
const { advancedVSeed } = context;
|
|
7
|
+
const hasColorEncoding = (advancedVSeed.encoding?.color?.length || 0) > 0;
|
|
8
|
+
result.type = 'sankey';
|
|
9
|
+
result.categoryField = hasColorEncoding ? ColorEncoding : 'nodeName';
|
|
10
|
+
result.valueField = 'value';
|
|
11
|
+
result.sourceField = 'source';
|
|
12
|
+
result.targetField = 'target';
|
|
13
|
+
result.nodeAlign = 'justify';
|
|
14
|
+
result.nodeGap = 8;
|
|
15
|
+
result.nodeWidth = 12;
|
|
16
|
+
result.minNodeHeight = 4;
|
|
17
|
+
result.iterations = 0;
|
|
18
|
+
result.padding = {
|
|
19
|
+
top: 0,
|
|
20
|
+
left: 2,
|
|
21
|
+
bottom: 0,
|
|
22
|
+
right: 2
|
|
23
|
+
};
|
|
24
|
+
result.link = {
|
|
25
|
+
style: {
|
|
26
|
+
pathType: 'smooth'
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
export { initSankey };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=sankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/init/sankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/sankey.ts"],"sourcesContent":["import { ColorEncoding } from 'src/dataReshape'\nimport type { VChartSpecPipe } from 'src/types'\n\nexport const initSankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as Record<string, any>\n const { advancedVSeed } = context\n const hasColorEncoding = (advancedVSeed.encoding?.color?.length || 0) > 0\n\n result.type = 'sankey'\n result.categoryField = hasColorEncoding ? ColorEncoding : 'nodeName'\n result.valueField = 'value'\n result.sourceField = 'source'\n result.targetField = 'target'\n\n result.nodeAlign = 'justify'\n result.nodeGap = 8\n result.nodeWidth = 12\n result.minNodeHeight = 4\n result.iterations = 0\n result.padding = {\n top: 0,\n left: 2,\n bottom: 0,\n right: 2,\n }\n\n result.link = {\n style: {\n pathType: 'smooth',\n },\n }\n\n return result as any\n}\n"],"names":["initSankey","spec","context","result","advancedVSeed","hasColorEncoding","ColorEncoding"],"mappings":";AAGO,MAAMA,aAA6B,CAACC,MAAMC;IAC/C,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAMG,mBAAoBD,AAAAA,CAAAA,cAAc,QAAQ,EAAE,OAAO,UAAU,KAAK;IAExED,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAGE,mBAAmBC,gBAAgB;IAC1DH,OAAO,UAAU,GAAG;IACpBA,OAAO,WAAW,GAAG;IACrBA,OAAO,WAAW,GAAG;IAErBA,OAAO,SAAS,GAAG;IACnBA,OAAO,OAAO,GAAG;IACjBA,OAAO,SAAS,GAAG;IACnBA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAG;IACpBA,OAAO,OAAO,GAAG;QACf,KAAK;QACL,MAAM;QACN,QAAQ;QACR,OAAO;IACT;IAEAA,OAAO,IAAI,GAAG;QACZ,OAAO;YACL,UAAU;QACZ;IACF;IAEA,OAAOA;AACT"}
|
|
@@ -6,7 +6,7 @@ const initSunburst = (spec, context)=>{
|
|
|
6
6
|
const { datasetReshapeInfo, encoding } = advancedVSeed;
|
|
7
7
|
const { foldInfo } = datasetReshapeInfo[0];
|
|
8
8
|
result.type = 'sunburst';
|
|
9
|
-
result.categoryField = '
|
|
9
|
+
result.categoryField = 'key';
|
|
10
10
|
result.valueField = foldInfo.measureValue;
|
|
11
11
|
result.outerRadius = 1;
|
|
12
12
|
result.innerRadius = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/init/sunburst.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/sunburst.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ISunburstChartSpec } from '@visactor/vchart'\n\nexport const initSunburst: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ISunburstChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo, encoding } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'sunburst'\n result.categoryField = '
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/init/sunburst.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/sunburst.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ISunburstChartSpec } from '@visactor/vchart'\n\nexport const initSunburst: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ISunburstChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo, encoding } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'sunburst'\n result.categoryField = 'key'\n result.valueField = foldInfo.measureValue\n result.outerRadius = 1\n result.innerRadius = 0\n result.gap = 0\n result.offsetX = 0\n result.offsetY = 0\n result.padding = 0\n result.labelAutoVisible = {\n enable: true,\n circumference: 5,\n }\n result.sunburst = {\n visible: true,\n style: {\n fillOpacity: (datum: any) => {\n if (encoding.hierarchy?.length === 1) {\n return 1\n }\n return datum.isLeaf ? 0.4 : 0.8\n },\n },\n }\n\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initSunburst","spec","context","result","advancedVSeed","datasetReshapeInfo","encoding","foldInfo","datum"],"mappings":"AAGO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAEC,QAAQ,EAAE,GAAGF;IACzC,MAAM,EAAEG,QAAQ,EAAE,GAAGF,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGI,SAAS,YAAY;IACzCJ,OAAO,WAAW,GAAG;IACrBA,OAAO,WAAW,GAAG;IACrBA,OAAO,GAAG,GAAG;IACbA,OAAO,OAAO,GAAG;IACjBA,OAAO,OAAO,GAAG;IACjBA,OAAO,OAAO,GAAG;IACjBA,OAAO,gBAAgB,GAAG;QACxB,QAAQ;QACR,eAAe;IACjB;IACAA,OAAO,QAAQ,GAAG;QAChB,SAAS;QACT,OAAO;YACL,aAAa,CAACK;gBACZ,IAAIF,SAAS,SAAS,EAAE,WAAW,GACjC,OAAO;gBAET,OAAOE,MAAM,MAAM,GAAG,MAAM;YAC9B;QACF;IACF;IAEAL,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
|
|
@@ -6,7 +6,7 @@ const initTreeMap = (spec, context)=>{
|
|
|
6
6
|
const { datasetReshapeInfo } = advancedVSeed;
|
|
7
7
|
const { foldInfo } = datasetReshapeInfo[0];
|
|
8
8
|
result.type = 'treemap';
|
|
9
|
-
result.categoryField = '
|
|
9
|
+
result.categoryField = 'key';
|
|
10
10
|
result.valueField = foldInfo.measureValue;
|
|
11
11
|
result.padding = 0;
|
|
12
12
|
result.animationEnter = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/init/treeMap.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/treeMap.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ITreemapChartSpec } from '@visactor/vchart'\n\nexport const initTreeMap: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'treemap'\n result.categoryField = '
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/init/treeMap.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/init/treeMap.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ITreemapChartSpec } from '@visactor/vchart'\n\nexport const initTreeMap: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'treemap'\n result.categoryField = 'key'\n result.valueField = foldInfo.measureValue\n result.padding = 0\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initTreeMap","spec","context","result","advancedVSeed","datasetReshapeInfo","foldInfo"],"mappings":"AAGO,MAAMA,cAA8B,CAACC,MAAMC;IAChD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGD;IAC/B,MAAM,EAAEE,QAAQ,EAAE,GAAGD,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGG,SAAS,YAAY;IACzCH,OAAO,OAAO,GAAG;IACjBA,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
|
|
@@ -7,3 +7,5 @@ export { labelCirclePacking } from './labelCirclePacking';
|
|
|
7
7
|
export { labelSunburst } from './labelSunburst';
|
|
8
8
|
export { labelTreeMapLeaf } from './labelTreeMapLeaf';
|
|
9
9
|
export { labelTreeMapGroup } from './labelTreeMapGroup';
|
|
10
|
+
export { labelHierarchySankey } from './labelHierarchySankey';
|
|
11
|
+
export { labelSankey } from './labelSankey';
|
|
@@ -7,3 +7,5 @@ export { labelCirclePacking } from "./labelCirclePacking.js";
|
|
|
7
7
|
export { labelSunburst } from "./labelSunburst.js";
|
|
8
8
|
export { labelTreeMapLeaf } from "./labelTreeMapLeaf.js";
|
|
9
9
|
export { labelTreeMapGroup } from "./labelTreeMapGroup.js";
|
|
10
|
+
export { labelHierarchySankey } from "./labelHierarchySankey.js";
|
|
11
|
+
export { labelSankey } from "./labelSankey.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport {\n createFormatter,\n createFormatterByDimension,\n createFormatterByMeasure,\n DATUM_HIDE_KEY,\n findMeasureById,\n} from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Locale,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n locale: Locale = 'zh-CN',\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n const formatter = createFormatterByDimension(item, locale)\n return formatter(datum[id] as number | string)\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","locale","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","dimLabels","id","createFormatterByDimension","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport {\n createFormatter,\n createFormatterByDimension,\n createFormatterByMeasure,\n DATUM_HIDE_KEY,\n findMeasureById,\n} from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Locale,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n locale: Locale = 'zh-CN',\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n const formatter = createFormatterByDimension(item, locale)\n return formatter(datum[id] as number | string)\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","locale","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","dimLabels","id","createFormatterByDimension","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Datum, Dimensions, Encoding, FoldInfo, Label, Locale, Measures, VChartSpecPipe } from '../../../../../types';
|
|
2
|
+
export declare const labelHierarchySankey: VChartSpecPipe;
|
|
3
|
+
export declare const buildLabel: (label: Label, vseedMeasures: Measures | undefined, vseedDimensions: Dimensions | undefined, advancedVSeedDimensions: Dimensions, advancedVSeedMeasures: Measures, encoding: Encoding, foldInfoList: (Pick<FoldInfo, "measureId" | "measureValue"> & Partial<Pick<FoldInfo, "statistics">>)[], locale?: Locale) => {
|
|
4
|
+
visible: boolean;
|
|
5
|
+
dataFilter: (data: Datum[]) => Record<string | number, any>[];
|
|
6
|
+
formatMethod: (_: unknown, datum: Datum) => string | string[];
|
|
7
|
+
syncState: boolean;
|
|
8
|
+
position: "inside" | "outside" | undefined;
|
|
9
|
+
style: {
|
|
10
|
+
stroke: string | undefined;
|
|
11
|
+
fill: string | undefined;
|
|
12
|
+
fontSize: number | undefined;
|
|
13
|
+
fontWeight: string | number | undefined;
|
|
14
|
+
background: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
smartInvert: boolean | undefined;
|
|
17
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { DATUM_HIDE_KEY, createFormatter, createFormatterByDimension, findMeasureById } from "../../../../utils/index.js";
|
|
2
|
+
import { isNumber, merge, uniqueBy } from "remeda";
|
|
3
|
+
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
|
|
4
|
+
import { MeasureId } from "../../../../../dataReshape/constant.js";
|
|
5
|
+
import { generateMeasurePercent, generateMeasureValue } from "./label.js";
|
|
6
|
+
const labelHierarchySankey = (spec, context)=>{
|
|
7
|
+
const result = {
|
|
8
|
+
...spec
|
|
9
|
+
};
|
|
10
|
+
const { advancedVSeed, vseed } = context;
|
|
11
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
|
12
|
+
const { chartType, encoding } = advancedVSeed;
|
|
13
|
+
const baseConfig = advancedVSeed.config[chartType];
|
|
14
|
+
const foldInfo = datasetReshapeInfo[0].foldInfo;
|
|
15
|
+
const { label } = baseConfig;
|
|
16
|
+
result.label = buildLabel(label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
|
|
17
|
+
foldInfo
|
|
18
|
+
]);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
const buildLabel = (label, vseedMeasures = [], vseedDimensions = [], advancedVSeedDimensions, advancedVSeedMeasures, encoding, foldInfoList, locale = 'zh-CN')=>{
|
|
22
|
+
const { enable, wrap, showValue, showValuePercent, showDimension, labelOverlap, labelColorSmartInvert, labelStroke, labelColor, labelFontSize, labelFontWeight, labelBackgroundColor, labelPosition, autoFormat, numFormat = {} } = label;
|
|
23
|
+
const hasDimLabelEncoding = vseedDimensions.some((item)=>encoding.label?.includes(item.id));
|
|
24
|
+
const labelDims = uniqueBy(hasDimLabelEncoding ? vseedDimensions.filter((item)=>encoding.label?.includes(item.id)) : showDimension ? advancedVSeedDimensions.filter((d)=>d.id !== MeasureId && 'row' !== d.encoding && 'column' !== d.encoding) : [], (item)=>item.id);
|
|
25
|
+
const labelMeas = uniqueBy(vseedMeasures.filter((item)=>encoding.label?.includes(item.id)), (item)=>item.id);
|
|
26
|
+
const percentFormat = merge(numFormat, {
|
|
27
|
+
type: 'percent'
|
|
28
|
+
});
|
|
29
|
+
const percentFormatter = createFormatter(percentFormat);
|
|
30
|
+
const result = {
|
|
31
|
+
visible: enable,
|
|
32
|
+
dataFilter: (data)=>data.filter((entry)=>{
|
|
33
|
+
if (entry.data?.[DATUM_HIDE_KEY]) return false;
|
|
34
|
+
const shouldApply = label.dynamicFilter ? selectorWithDynamicFilter(entry.data, label.dynamicFilter, label.selector) : selector(entry.data, label.selector, 'Or');
|
|
35
|
+
return shouldApply;
|
|
36
|
+
}),
|
|
37
|
+
formatMethod: (_, datum)=>{
|
|
38
|
+
const result = [];
|
|
39
|
+
const dimLabels = labelDims.flatMap((item)=>{
|
|
40
|
+
const id = item.id;
|
|
41
|
+
const rawValue = datum[id];
|
|
42
|
+
if (null == rawValue || '' === rawValue) return [];
|
|
43
|
+
const formatter = createFormatterByDimension(item, locale);
|
|
44
|
+
return [
|
|
45
|
+
formatter(rawValue)
|
|
46
|
+
];
|
|
47
|
+
});
|
|
48
|
+
const meaLabels = labelMeas.flatMap((item)=>{
|
|
49
|
+
const rawValue = datum[item.id];
|
|
50
|
+
if (null == rawValue || '' === rawValue) return [];
|
|
51
|
+
return [
|
|
52
|
+
generateMeasureValue(rawValue, item, autoFormat, numFormat)
|
|
53
|
+
];
|
|
54
|
+
});
|
|
55
|
+
result.push(...dimLabels);
|
|
56
|
+
foldInfoList.forEach((foldInfo)=>{
|
|
57
|
+
const { measureId, measureValue, statistics } = foldInfo;
|
|
58
|
+
const measure = findMeasureById(advancedVSeedMeasures, datum[measureId]);
|
|
59
|
+
if (measure) {
|
|
60
|
+
const measureValueLabel = generateMeasureValue(datum[measureValue], measure, autoFormat, numFormat);
|
|
61
|
+
if (showValue) result.push(measureValueLabel);
|
|
62
|
+
if (showValuePercent) {
|
|
63
|
+
if (isNumber(datum['__VCHART_ARC_RATIO'])) result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter));
|
|
64
|
+
else if (statistics && isNumber(statistics.sum)) result.push(generateMeasurePercent(datum[measureValue], statistics.sum, percentFormatter));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
result.push(...meaLabels);
|
|
69
|
+
if (wrap) return result;
|
|
70
|
+
return result.join(' ');
|
|
71
|
+
},
|
|
72
|
+
syncState: true,
|
|
73
|
+
position: labelPosition,
|
|
74
|
+
style: {
|
|
75
|
+
stroke: labelStroke,
|
|
76
|
+
fill: labelColor,
|
|
77
|
+
fontSize: labelFontSize,
|
|
78
|
+
fontWeight: labelFontWeight,
|
|
79
|
+
background: labelBackgroundColor
|
|
80
|
+
},
|
|
81
|
+
smartInvert: labelColorSmartInvert
|
|
82
|
+
};
|
|
83
|
+
if (labelColorSmartInvert) result.style.lineWidth = 2;
|
|
84
|
+
if (labelOverlap) result.overlap = {
|
|
85
|
+
hideOnHit: true,
|
|
86
|
+
clampForce: true
|
|
87
|
+
};
|
|
88
|
+
return result;
|
|
89
|
+
};
|
|
90
|
+
export { buildLabel, labelHierarchySankey };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=labelHierarchySankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/label/labelHierarchySankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/labelHierarchySankey.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByDimension, DATUM_HIDE_KEY, findMeasureById } from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Label,\n Locale,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport { generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelHierarchySankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n locale: Locale = 'zh-CN',\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.flatMap((item: Dimension) => {\n const id = item.id\n const rawValue = datum[id]\n if (rawValue === undefined || rawValue === null || rawValue === '') {\n return []\n }\n const formatter = createFormatterByDimension(item, locale)\n return [formatter(rawValue as number | string)]\n })\n\n const meaLabels = labelMeas.flatMap((item: Measure) => {\n const rawValue = datum[item.id]\n if (rawValue === undefined || rawValue === null || rawValue === '') {\n return []\n }\n\n return [generateMeasureValue(rawValue as number | string, item, autoFormat, numFormat)]\n })\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["labelHierarchySankey","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","label","buildLabel","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","locale","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","numFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","merge","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","dimLabels","id","rawValue","formatter","createFormatterByDimension","meaLabels","generateMeasureValue","measureId","measureValue","statistics","measure","findMeasureById","measureValueLabel","isNumber","generateMeasurePercent"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { isNumber, merge } from "remeda";
|
|
2
|
+
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
|
|
3
|
+
import { DATUM_HIDE_KEY, createFormatter, findMeasureById } from "../../../../utils/index.js";
|
|
4
|
+
import { generateMeasurePercent, generateMeasureValue } from "./label.js";
|
|
5
|
+
const labelSankey = (spec, context)=>{
|
|
6
|
+
const result = {
|
|
7
|
+
...spec
|
|
8
|
+
};
|
|
9
|
+
const { advancedVSeed, vseed } = context;
|
|
10
|
+
const { datasetReshapeInfo, chartType, encoding } = advancedVSeed;
|
|
11
|
+
const baseConfig = advancedVSeed.config[chartType];
|
|
12
|
+
const foldInfo = datasetReshapeInfo[0].foldInfo;
|
|
13
|
+
const label = baseConfig?.label;
|
|
14
|
+
if (!label) return result;
|
|
15
|
+
result.label = buildLabel(label, vseed.measures || advancedVSeed.measures || [], advancedVSeed.measures || [], encoding.label || [], foldInfo);
|
|
16
|
+
return result;
|
|
17
|
+
};
|
|
18
|
+
const buildLabel = (label, vseedMeasures, advancedVSeedMeasures, labelEncodingIds, foldInfo)=>{
|
|
19
|
+
const { enable, wrap, showValue, showValuePercent, showDimension, labelOverlap, labelColorSmartInvert, labelStroke, labelColor, labelFontSize, labelFontWeight, labelBackgroundColor, labelPosition, autoFormat, numFormat = {} } = label;
|
|
20
|
+
const hasMeasureLabelEncoding = vseedMeasures.some((item)=>labelEncodingIds.includes(item.id));
|
|
21
|
+
const labelMeasures = hasMeasureLabelEncoding ? vseedMeasures.filter((item)=>labelEncodingIds.includes(item.id)) : [];
|
|
22
|
+
const percentFormat = merge(numFormat, {
|
|
23
|
+
type: 'percent'
|
|
24
|
+
});
|
|
25
|
+
const percentFormatter = createFormatter(percentFormat);
|
|
26
|
+
const result = {
|
|
27
|
+
visible: enable,
|
|
28
|
+
dataFilter: (data)=>data.filter((entry)=>{
|
|
29
|
+
if (entry.data?.[DATUM_HIDE_KEY]) return false;
|
|
30
|
+
const shouldApply = label.dynamicFilter ? selectorWithDynamicFilter(entry.data, label.dynamicFilter, label.selector) : selector(entry.data, label.selector, 'Or');
|
|
31
|
+
return shouldApply;
|
|
32
|
+
}),
|
|
33
|
+
formatMethod: (_, datum)=>{
|
|
34
|
+
const parts = [];
|
|
35
|
+
if (showDimension && datum?.nodeName) parts.push(String(datum.nodeName));
|
|
36
|
+
if (showValue) {
|
|
37
|
+
const { measureId, measureValue } = foldInfo;
|
|
38
|
+
const measure = findMeasureById(advancedVSeedMeasures, datum[measureId]);
|
|
39
|
+
if (measure && void 0 !== datum[measureValue] && null !== datum[measureValue]) parts.push(generateMeasureValue(datum[measureValue], measure, autoFormat, numFormat));
|
|
40
|
+
else if (void 0 !== datum.value && null !== datum.value) {
|
|
41
|
+
const fallbackMeasure = findMeasureById(advancedVSeedMeasures, foldInfo.measureId) || findMeasureById(vseedMeasures, foldInfo.measureId) || advancedVSeedMeasures[0];
|
|
42
|
+
if (fallbackMeasure) parts.push(generateMeasureValue(datum.value, fallbackMeasure, autoFormat, numFormat));
|
|
43
|
+
else parts.push(String(datum.value));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (showValuePercent) {
|
|
47
|
+
const ratioValue = datum['__VCHART_ARC_RATIO'];
|
|
48
|
+
if (isNumber(ratioValue)) parts.push(generateMeasurePercent(ratioValue, 1, percentFormatter));
|
|
49
|
+
else if (foldInfo.statistics && isNumber(foldInfo.statistics.sum) && void 0 !== datum[foldInfo.measureValue] && null !== datum[foldInfo.measureValue]) parts.push(generateMeasurePercent(datum[foldInfo.measureValue], foldInfo.statistics.sum, percentFormatter));
|
|
50
|
+
}
|
|
51
|
+
labelMeasures.forEach((measure)=>{
|
|
52
|
+
const rawValue = datum[measure.id];
|
|
53
|
+
if (null == rawValue || '' === rawValue) return;
|
|
54
|
+
parts.push(generateMeasureValue(rawValue, measure, autoFormat, numFormat));
|
|
55
|
+
});
|
|
56
|
+
return wrap ? parts : parts.join(' ');
|
|
57
|
+
},
|
|
58
|
+
syncState: true,
|
|
59
|
+
position: labelPosition,
|
|
60
|
+
style: {
|
|
61
|
+
stroke: labelStroke,
|
|
62
|
+
fill: labelColor,
|
|
63
|
+
fontSize: labelFontSize,
|
|
64
|
+
fontWeight: labelFontWeight,
|
|
65
|
+
background: labelBackgroundColor
|
|
66
|
+
},
|
|
67
|
+
smartInvert: labelColorSmartInvert
|
|
68
|
+
};
|
|
69
|
+
if (labelColorSmartInvert) result.style.lineWidth = 2;
|
|
70
|
+
if (labelOverlap) result.overlap = {
|
|
71
|
+
hideOnHit: true,
|
|
72
|
+
clampForce: true
|
|
73
|
+
};
|
|
74
|
+
return result;
|
|
75
|
+
};
|
|
76
|
+
export { labelSankey };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=labelSankey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/label/labelSankey.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/labelSankey.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { isNumber, merge } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { DATUM_HIDE_KEY, createFormatter, findMeasureById } from 'src/pipeline/utils'\nimport type { Datum, FoldInfo, SankeyMeasure, Label, NumFormat, VChartSpecPipe } from 'src/types'\nimport { generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelSankey: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo, chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label?: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n const label = baseConfig?.label\n\n if (!label) {\n return result as any\n }\n\n result.label = buildLabel(\n label,\n (vseed.measures || advancedVSeed.measures || []) as SankeyMeasure[],\n (advancedVSeed.measures || []) as SankeyMeasure[],\n (encoding.label || []) as string[],\n foldInfo,\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nconst buildLabel = (\n label: Label,\n vseedMeasures: SankeyMeasure[],\n advancedVSeedMeasures: SankeyMeasure[],\n labelEncodingIds: string[],\n foldInfo: Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>,\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasMeasureLabelEncoding = vseedMeasures.some((item) => labelEncodingIds.includes(item.id))\n const labelMeasures = hasMeasureLabelEncoding\n ? vseedMeasures.filter((item) => labelEncodingIds.includes(item.id))\n : []\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const parts: string[] = []\n\n if (showDimension && datum?.nodeName) {\n parts.push(String(datum.nodeName))\n }\n\n if (showValue) {\n const { measureId, measureValue } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure && datum[measureValue] !== undefined && datum[measureValue] !== null) {\n parts.push(generateMeasureValue(datum[measureValue] as number | string, measure, autoFormat, numFormat))\n } else if (datum.value !== undefined && datum.value !== null) {\n const fallbackMeasure =\n findMeasureById(advancedVSeedMeasures, foldInfo.measureId) ||\n findMeasureById(vseedMeasures, foldInfo.measureId) ||\n advancedVSeedMeasures[0]\n if (fallbackMeasure) {\n parts.push(generateMeasureValue(datum.value as number | string, fallbackMeasure, autoFormat, numFormat))\n } else {\n parts.push(String(datum.value))\n }\n }\n }\n\n if (showValuePercent) {\n const ratioValue = datum['__VCHART_ARC_RATIO']\n if (isNumber(ratioValue)) {\n parts.push(generateMeasurePercent(ratioValue, 1, percentFormatter))\n } else if (\n foldInfo.statistics &&\n isNumber(foldInfo.statistics.sum) &&\n datum[foldInfo.measureValue] !== undefined &&\n datum[foldInfo.measureValue] !== null\n ) {\n parts.push(\n generateMeasurePercent(\n datum[foldInfo.measureValue] as number | string,\n foldInfo.statistics.sum,\n percentFormatter,\n ),\n )\n }\n }\n\n labelMeasures.forEach((measure) => {\n const rawValue = datum[measure.id]\n if (rawValue === undefined || rawValue === null || rawValue === '') {\n return\n }\n parts.push(generateMeasureValue(rawValue as number | string, measure, autoFormat, numFormat))\n })\n\n return wrap ? parts : parts.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["labelSankey","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","label","buildLabel","vseedMeasures","advancedVSeedMeasures","labelEncodingIds","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","numFormat","hasMeasureLabelEncoding","item","labelMeasures","percentFormat","merge","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","parts","String","measureId","measureValue","measure","findMeasureById","undefined","generateMeasureValue","fallbackMeasure","ratioValue","isNumber","generateMeasurePercent","rawValue"],"mappings":"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"}
|
|
@@ -22,14 +22,14 @@ const labelTreeMapLeaf = (spec, context)=>{
|
|
|
22
22
|
});
|
|
23
23
|
const percentFormatter = createFormatter(percentFormat);
|
|
24
24
|
if (result.label) result.label.formatMethod = (_, datum)=>{
|
|
25
|
-
const nodeName = datum.
|
|
25
|
+
const nodeName = datum.value;
|
|
26
26
|
const dataArray = datum.datum;
|
|
27
27
|
if (!dataArray || !Array.isArray(dataArray)) return '';
|
|
28
|
-
const findDataNode = (nodes,
|
|
28
|
+
const findDataNode = (nodes, value)=>{
|
|
29
29
|
for (const node of nodes){
|
|
30
|
-
if (node.
|
|
30
|
+
if (node.value === value) return node;
|
|
31
31
|
if (node.children) {
|
|
32
|
-
const found = findDataNode(node.children,
|
|
32
|
+
const found = findDataNode(node.children, value);
|
|
33
33
|
if (found) return found;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByDimension, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimension, FoldInfo, Label, Measure, NumFormat, VChartSpecPipe } from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport { label as commonLabel, generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelTreeMapLeaf: VChartSpecPipe = (spec, context) => {\n const result = commonLabel(spec, context) as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfoList = [datasetReshapeInfo[0].foldInfo as FoldInfo]\n\n const { label } = baseConfig\n if (!label.enable) {\n return result\n }\n\n const { showValue, showValuePercent, showDimension, autoFormat, numFormat = {}, wrap } = label\n\n const hasDimLabelEncoding = vseed.dimensions?.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseed.dimensions?.filter((item) => encoding.label?.includes(item.id)) || []\n : showDimension\n ? advancedVSeed.dimensions!.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseed.measures?.filter((item) => encoding.label?.includes(item.id)) || [],\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n if (result.label) {\n ;(result.label as any).formatMethod = (_: unknown, datum: Datum) => {\n // TreeMap returns a nested structure where `datum` is an array of children.\n // We need to find the specific data item that matches the current node's name.\n // The current node's name is usually available in the top-level datum object (which is `datum` here).\n // However, VChart's TreeMap datum structure is a bit complex.\n // Based on the user provided example:\n // datum: { name: \"Stapler\", datum: [...], ... }\n
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByDimension, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimension, FoldInfo, Label, Measure, NumFormat, VChartSpecPipe } from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport { label as commonLabel, generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelTreeMapLeaf: VChartSpecPipe = (spec, context) => {\n const result = commonLabel(spec, context) as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfoList = [datasetReshapeInfo[0].foldInfo as FoldInfo]\n\n const { label } = baseConfig\n if (!label.enable) {\n return result\n }\n\n const { showValue, showValuePercent, showDimension, autoFormat, numFormat = {}, wrap } = label\n\n const hasDimLabelEncoding = vseed.dimensions?.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseed.dimensions?.filter((item) => encoding.label?.includes(item.id)) || []\n : showDimension\n ? advancedVSeed.dimensions!.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseed.measures?.filter((item) => encoding.label?.includes(item.id)) || [],\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n if (result.label) {\n ;(result.label as any).formatMethod = (_: unknown, datum: Datum) => {\n // TreeMap returns a nested structure where `datum` is an array of children.\n // We need to find the specific data item that matches the current node's name.\n // The current node's name is usually available in the top-level datum object (which is `datum` here).\n // However, VChart's TreeMap datum structure is a bit complex.\n // Based on the user provided example:\n // datum: { name: \"Stapler\", datum: [...], ... }\n const nodeName = datum.value\n const dataArray = datum.datum as any[]\n\n if (!dataArray || !Array.isArray(dataArray)) {\n return ''\n }\n\n // Helper to find the matching data node recursively\n const findDataNode = (nodes: any[], value: string): any => {\n for (const node of nodes) {\n if (node.value === value) {\n return node\n }\n if (node.children) {\n const found = findDataNode(node.children, value)\n if (found) return found\n }\n }\n return null\n }\n\n // The structure seems to be that `datum` (the array) contains the root(s) of the hierarchy relevant to this node?\n // Or simply the data array we passed in.\n // Let's try to find the node with the matching name.\n const realDatum = findDataNode(dataArray, nodeName as string)\n\n if (!realDatum) {\n return ''\n }\n\n const resultText: string[] = []\n\n // 1. Dimension Labels\n const dimLabels = labelDims\n .map((item: Dimension) => {\n const id = item.id\n const rawValue = (realDatum[id] ?? realDatum.__OriginalData__?.[id]) as number | string\n const formatter = createFormatterByDimension(item, advancedVSeed.locale)\n return formatter(rawValue)\n })\n .filter((v) => v !== undefined && v !== null && v !== '')\n\n resultText.push(...(dimLabels as string[]))\n\n // 2. Measure Labels (from label encoding)\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(\n (realDatum[item.id] ?? realDatum.__OriginalData__?.[item.id]) as number | string,\n item,\n autoFormat,\n numFormat,\n ),\n )\n resultText.push(...meaLabels)\n\n // 3. Value and Percent (default/implicit)\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n // The measure ID might be in __MeaId__ or we look it up from the datum\n const currentMeasureId = (realDatum[measureId] ?? realDatum.__MeaId__) as string\n const measure = findMeasureById(advancedVSeed.measures!, currentMeasureId)\n\n if (measure) {\n const val = (realDatum[measureValue] ?? realDatum.__MeaValue__ ?? realDatum.value) as number | string\n\n const measureValueLabel = generateMeasureValue(val, measure, autoFormat, numFormat)\n\n if (showValue) {\n resultText.push(measureValueLabel)\n }\n if (showValuePercent) {\n // For TreeMap, percentage usually implies % of parent or total.\n // If we have statistics.sum (total), we can calculate it.\n if (statistics && isNumber(statistics.sum)) {\n resultText.push(generateMeasurePercent(val, statistics.sum, percentFormatter))\n }\n }\n }\n })\n\n if (wrap) {\n return resultText\n }\n return resultText.join(' ')\n }\n }\n\n return result\n}\n"],"names":["labelTreeMapLeaf","spec","context","result","commonLabel","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfoList","label","showValue","showValuePercent","showDimension","autoFormat","numFormat","wrap","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","merge","percentFormatter","createFormatter","_","datum","nodeName","dataArray","Array","findDataNode","nodes","value","node","found","realDatum","resultText","dimLabels","id","rawValue","formatter","createFormatterByDimension","v","meaLabels","generateMeasureValue","foldInfo","measureId","measureValue","statistics","currentMeasureId","measure","findMeasureById","val","measureValueLabel","isNumber","generateMeasurePercent"],"mappings":"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"}
|