@visactor/vseed 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/index.cjs +1 -1
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/builder/builder/buildSpec.js +1 -0
  4. package/dist/esm/builder/builder/buildSpec.js.map +1 -1
  5. package/dist/esm/pipeline/advanced/chart/pipes/encoding/hierarchy.js +2 -0
  6. package/dist/esm/pipeline/advanced/chart/pipes/encoding/hierarchy.js.map +1 -1
  7. package/dist/esm/pipeline/spec/chart/pipeline/circlePacking.js +5 -3
  8. package/dist/esm/pipeline/spec/chart/pipeline/circlePacking.js.map +1 -1
  9. package/dist/esm/pipeline/spec/chart/pipeline/sunburst.js +5 -3
  10. package/dist/esm/pipeline/spec/chart/pipeline/sunburst.js.map +1 -1
  11. package/dist/esm/pipeline/spec/chart/pipeline/treeMap.js +5 -3
  12. package/dist/esm/pipeline/spec/chart/pipeline/treeMap.js.map +1 -1
  13. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.d.ts +9 -1
  14. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js +51 -46
  15. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js.map +1 -1
  16. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.d.ts +2 -0
  17. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js +72 -0
  18. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js.map +1 -0
  19. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -0
  20. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.js +2 -1
  21. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.d.ts +2 -0
  22. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js +7 -0
  23. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js.map +1 -0
  24. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.d.ts +1 -0
  25. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.js +2 -0
  26. package/dist/esm/pipeline/spec/chart/pipes/index.d.ts +1 -0
  27. package/dist/esm/pipeline/spec/chart/pipes/index.js +1 -0
  28. package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js +0 -1
  29. package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js.map +1 -1
  30. package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js +0 -1
  31. package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js.map +1 -1
  32. package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js +0 -1
  33. package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js.map +1 -1
  34. package/dist/esm/pipeline/utils/constant.d.ts +3 -0
  35. package/dist/esm/pipeline/utils/constant.js +3 -0
  36. package/dist/esm/pipeline/utils/constant.js.map +1 -1
  37. package/dist/esm/pipeline/utils/measures/typeGuard.d.ts +2 -2
  38. package/dist/esm/pipeline/utils/measures/typeGuard.js +1 -1
  39. package/dist/esm/pipeline/utils/measures/typeGuard.js.map +1 -1
  40. package/dist/umd/index.js +138 -55
  41. package/dist/umd/index.js.map +1 -1
  42. package/package.json +4 -4
@@ -16,6 +16,7 @@ const buildSpec = (builder, advancedVSeed)=>{
16
16
  builder.spec = spec;
17
17
  return spec;
18
18
  } catch (e) {
19
+ console.error(e);
19
20
  throw new Error(`buildSpec error: ${e.message}`);
20
21
  } finally{
21
22
  const end = 'undefined' != typeof performance ? performance.now() : Date.now();
@@ -1 +1 @@
1
- {"version":3,"file":"builder/builder/buildSpec.js","sources":["webpack://@visactor/vseed/./src/builder/builder/buildSpec.ts"],"sourcesContent":["import type { Spec, VChartSpecPipeline } from 'src/types'\nimport { Builder } from './builder'\nimport type { AdvancedVSeed, SpecPipelineContext } from 'src/types'\nimport { execPipeline } from '../../pipeline'\nimport { intl } from 'src/i18n'\nimport type { ISpec } from '@visactor/vchart'\n\nexport const buildSpec = (builder: Builder, advancedVSeed: AdvancedVSeed): Spec => {\n const start = typeof performance !== 'undefined' ? performance.now() : Date.now()\n\n const { chartType } = builder.vseed\n\n const pipeline = Builder.getSpecPipeline(chartType)\n if (!pipeline) {\n throw new Error(\n `please invoke registerAll or register ${chartType} before build, no spec pipeline for chartType ${chartType}`,\n )\n }\n\n const context: SpecPipelineContext = {\n vseed: builder.vseed,\n advancedVSeed,\n }\n if (builder.locale) {\n intl.setLocale(builder.locale)\n }\n\n try {\n const spec = execPipeline<ISpec, SpecPipelineContext>(pipeline as VChartSpecPipeline, context)\n builder.spec = spec\n return spec\n } catch (e) {\n throw new Error(`buildSpec error: ${(e as Error).message}`)\n } finally {\n const end = typeof performance !== 'undefined' ? performance.now() : Date.now()\n builder.performance['buildSpec'] = `${(end - start).toFixed(4)}ms`\n }\n}\n"],"names":["buildSpec","builder","advancedVSeed","start","performance","Date","chartType","pipeline","Builder","Error","context","intl","spec","execPipeline","e","end"],"mappings":";;;AAOO,MAAMA,YAAY,CAACC,SAAkBC;IAC1C,MAAMC,QAAQ,AAAuB,eAAvB,OAAOC,cAA8BA,YAAY,GAAG,KAAKC,KAAK,GAAG;IAE/E,MAAM,EAAEC,SAAS,EAAE,GAAGL,QAAQ,KAAK;IAEnC,MAAMM,WAAWC,QAAQ,eAAe,CAACF;IACzC,IAAI,CAACC,UACH,MAAM,IAAIE,MACR,CAAC,sCAAsC,EAAEH,UAAU,8CAA8C,EAAEA,WAAW;IAIlH,MAAMI,UAA+B;QACnC,OAAOT,QAAQ,KAAK;QACpBC;IACF;IACA,IAAID,QAAQ,MAAM,EAChBU,KAAK,SAAS,CAACV,QAAQ,MAAM;IAG/B,IAAI;QACF,MAAMW,OAAOC,aAAyCN,UAAgCG;QACtFT,QAAQ,IAAI,GAAGW;QACf,OAAOA;IACT,EAAE,OAAOE,GAAG;QACV,MAAM,IAAIL,MAAM,CAAC,iBAAiB,EAAGK,EAAY,OAAO,EAAE;IAC5D,SAAU;QACR,MAAMC,MAAM,AAAuB,eAAvB,OAAOX,cAA8BA,YAAY,GAAG,KAAKC,KAAK,GAAG;QAC7EJ,QAAQ,WAAW,CAAC,YAAY,GAAG,GAAIc,AAAAA,CAAAA,MAAMZ,KAAI,EAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpE;AACF"}
1
+ {"version":3,"file":"builder/builder/buildSpec.js","sources":["webpack://@visactor/vseed/./src/builder/builder/buildSpec.ts"],"sourcesContent":["import type { Spec, VChartSpecPipeline } from 'src/types'\nimport { Builder } from './builder'\nimport type { AdvancedVSeed, SpecPipelineContext } from 'src/types'\nimport { execPipeline } from '../../pipeline'\nimport { intl } from 'src/i18n'\nimport type { ISpec } from '@visactor/vchart'\n\nexport const buildSpec = (builder: Builder, advancedVSeed: AdvancedVSeed): Spec => {\n const start = typeof performance !== 'undefined' ? performance.now() : Date.now()\n\n const { chartType } = builder.vseed\n\n const pipeline = Builder.getSpecPipeline(chartType)\n if (!pipeline) {\n throw new Error(\n `please invoke registerAll or register ${chartType} before build, no spec pipeline for chartType ${chartType}`,\n )\n }\n\n const context: SpecPipelineContext = {\n vseed: builder.vseed,\n advancedVSeed,\n }\n if (builder.locale) {\n intl.setLocale(builder.locale)\n }\n\n try {\n const spec = execPipeline<ISpec, SpecPipelineContext>(pipeline as VChartSpecPipeline, context)\n builder.spec = spec\n return spec\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n throw new Error(`buildSpec error: ${(e as Error).message}`)\n } finally {\n const end = typeof performance !== 'undefined' ? performance.now() : Date.now()\n builder.performance['buildSpec'] = `${(end - start).toFixed(4)}ms`\n }\n}\n"],"names":["buildSpec","builder","advancedVSeed","start","performance","Date","chartType","pipeline","Builder","Error","context","intl","spec","execPipeline","e","console","end"],"mappings":";;;AAOO,MAAMA,YAAY,CAACC,SAAkBC;IAC1C,MAAMC,QAAQ,AAAuB,eAAvB,OAAOC,cAA8BA,YAAY,GAAG,KAAKC,KAAK,GAAG;IAE/E,MAAM,EAAEC,SAAS,EAAE,GAAGL,QAAQ,KAAK;IAEnC,MAAMM,WAAWC,QAAQ,eAAe,CAACF;IACzC,IAAI,CAACC,UACH,MAAM,IAAIE,MACR,CAAC,sCAAsC,EAAEH,UAAU,8CAA8C,EAAEA,WAAW;IAIlH,MAAMI,UAA+B;QACnC,OAAOT,QAAQ,KAAK;QACpBC;IACF;IACA,IAAID,QAAQ,MAAM,EAChBU,KAAK,SAAS,CAACV,QAAQ,MAAM;IAG/B,IAAI;QACF,MAAMW,OAAOC,aAAyCN,UAAgCG;QACtFT,QAAQ,IAAI,GAAGW;QACf,OAAOA;IACT,EAAE,OAAOE,GAAG;QAEVC,QAAQ,KAAK,CAACD;QACd,MAAM,IAAIL,MAAM,CAAC,iBAAiB,EAAGK,EAAY,OAAO,EAAE;IAC5D,SAAU;QACR,MAAME,MAAM,AAAuB,eAAvB,OAAOZ,cAA8BA,YAAY,GAAG,KAAKC,KAAK,GAAG;QAC7EJ,QAAQ,WAAW,CAAC,YAAY,GAAG,GAAIe,AAAAA,CAAAA,MAAMb,KAAI,EAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpE;AACF"}
@@ -45,6 +45,8 @@ const generateDimensionEncoding = (dimensions, encoding, isMultiMeasure)=>{
45
45
  encoding.tooltip = unique(dimensions.map((item)=>item.id));
46
46
  encoding.tooltip = encoding.tooltip.filter((d)=>d !== MeasureId);
47
47
  encoding.label = unique(dimensions.filter((item)=>'label' === item.encoding).map((item)=>item.id));
48
+ encoding.row = unique(dimensions.filter((item)=>'row' === item.encoding).map((item)=>item.id));
49
+ encoding.column = unique(dimensions.filter((item)=>'column' === item.encoding).map((item)=>item.id));
48
50
  };
49
51
  const generateDefaultMeasureEncoding = (measures, encoding)=>{
50
52
  encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/advanced/chart/pipes/encoding/hierarchy.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/chart/pipes/encoding/hierarchy.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { MeasureId } from 'src/dataReshape'\nimport { hasMultipleMeasureInSingleView } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const defaultEncodingForHierarchy: AdvancedPipe = (advancedVSeed) => {\n const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed\n const encoding: Encoding = {}\n generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures))\n generateDefaultMeasureEncoding(measures, encoding)\n return { ...advancedVSeed, encoding }\n}\n\nexport const encodingForHierarchy: AdvancedPipe = (advancedVSeed) => {\n const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed\n\n const hasDimensionEncoding = dimensions.some((item: Dimension) => item.encoding)\n const hasMeasureEncoding = measures.some((item: Measure) => item.encoding)\n const encoding: Encoding = {}\n const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures)\n\n if (hasDimensionEncoding) {\n generateDimensionEncoding(dimensions, encoding, hasMulti)\n } else {\n generateDefaultDimensionEncoding(dimensions, encoding, hasMulti)\n }\n\n if (hasMeasureEncoding) {\n generateMeasureEncoding(measures, encoding)\n } else {\n generateDefaultMeasureEncoding(measures, encoding)\n }\n\n return { ...advancedVSeed, encoding }\n}\n\n/**\n * --------------------维度--------------------\n */\nconst generateDefaultDimensionEncoding = (dimensions: Dimensions, encoding: Encoding, isMultiMeasure: boolean) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n if (!isMultiMeasure) {\n encoding.hierarchy = uniqueDimIds.filter((d) => d !== MeasureId)\n } else {\n encoding.hierarchy = uniqueDimIds\n }\n\n encoding.detail = encoding.hierarchy\n\n encoding.tooltip = uniqueDimIds.filter((d) => d !== MeasureId)\n encoding.label = []\n encoding.row = []\n encoding.column = []\n}\n\nconst generateDimensionEncoding = (dimensions: Dimensions, encoding: Encoding, isMultiMeasure: boolean) => {\n // hierarchy\n encoding.hierarchy = unique(dimensions.filter((item) => item.encoding === 'hierarchy').map((item) => item.id))\n if (isMultiMeasure && !encoding.hierarchy.includes(MeasureId)) {\n encoding.hierarchy.push(MeasureId)\n }\n\n // color\n encoding.color = encoding.hierarchy.slice(0, 1)\n\n // detail\n encoding.detail = unique(dimensions.filter((item) => item.encoding === 'detail').map((item) => item.id))\n if (encoding.detail.length === 0) {\n encoding.detail = encoding.hierarchy\n }\n\n // tooltip\n encoding.tooltip = unique(dimensions.map((item) => item.id))\n encoding.tooltip = encoding.tooltip.filter((d) => d !== MeasureId)\n\n // label\n encoding.label = unique(dimensions.filter((item) => item.encoding === 'label').map((item) => item.id))\n}\n\n/**\n * --------------------指标--------------------\n */\nconst generateDefaultMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.size = unique(measures.filter((item) => item.encoding === 'size' || !item.encoding).map((item) => item.id))\n // 但我们可以把它们放到 tooltip 中\n encoding.tooltip = unique([...(encoding.tooltip || []), ...measures.map((m) => m.id)])\n}\n\nconst generateMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n // size\n encoding.size = unique(measures.filter((item) => item.encoding === 'size' || !item.encoding).map((item) => item.id))\n\n // color\n const color = unique(measures.filter((item) => item.encoding === 'color').map((item) => item.id))\n if (color.length > 0) {\n encoding.color = color\n }\n\n // label\n const label = unique(measures.filter((item) => item.encoding === 'label').map((item) => item.id))\n encoding.label = unique([...(encoding.label || []), ...label])\n\n // tooltip\n const tooltip = unique(measures.filter((item) => item.encoding === 'tooltip').map((item) => item.id))\n encoding.tooltip = unique([...(encoding.tooltip || []), ...label, ...tooltip, ...color])\n}\n"],"names":["defaultEncodingForHierarchy","advancedVSeed","measures","reshapeMeasures","dimensions","encoding","generateDefaultDimensionEncoding","hasMultipleMeasureInSingleView","generateDefaultMeasureEncoding","encodingForHierarchy","hasDimensionEncoding","item","hasMeasureEncoding","hasMulti","generateDimensionEncoding","generateMeasureEncoding","isMultiMeasure","uniqueDimIds","unique","d","MeasureId","m","color","label","tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/advanced/chart/pipes/encoding/hierarchy.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/chart/pipes/encoding/hierarchy.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { MeasureId } from 'src/dataReshape'\nimport { hasMultipleMeasureInSingleView } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const defaultEncodingForHierarchy: AdvancedPipe = (advancedVSeed) => {\n const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed\n const encoding: Encoding = {}\n generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures))\n generateDefaultMeasureEncoding(measures, encoding)\n return { ...advancedVSeed, encoding }\n}\n\nexport const encodingForHierarchy: AdvancedPipe = (advancedVSeed) => {\n const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed\n\n const hasDimensionEncoding = dimensions.some((item: Dimension) => item.encoding)\n const hasMeasureEncoding = measures.some((item: Measure) => item.encoding)\n const encoding: Encoding = {}\n const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures)\n\n if (hasDimensionEncoding) {\n generateDimensionEncoding(dimensions, encoding, hasMulti)\n } else {\n generateDefaultDimensionEncoding(dimensions, encoding, hasMulti)\n }\n\n if (hasMeasureEncoding) {\n generateMeasureEncoding(measures, encoding)\n } else {\n generateDefaultMeasureEncoding(measures, encoding)\n }\n\n return { ...advancedVSeed, encoding }\n}\n\n/**\n * --------------------维度--------------------\n */\nconst generateDefaultDimensionEncoding = (dimensions: Dimensions, encoding: Encoding, isMultiMeasure: boolean) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n if (!isMultiMeasure) {\n encoding.hierarchy = uniqueDimIds.filter((d) => d !== MeasureId)\n } else {\n encoding.hierarchy = uniqueDimIds\n }\n\n encoding.detail = encoding.hierarchy\n\n encoding.tooltip = uniqueDimIds.filter((d) => d !== MeasureId)\n encoding.label = []\n encoding.row = []\n encoding.column = []\n}\n\nconst generateDimensionEncoding = (dimensions: Dimensions, encoding: Encoding, isMultiMeasure: boolean) => {\n // hierarchy\n encoding.hierarchy = unique(dimensions.filter((item) => item.encoding === 'hierarchy').map((item) => item.id))\n if (isMultiMeasure && !encoding.hierarchy.includes(MeasureId)) {\n encoding.hierarchy.push(MeasureId)\n }\n\n // color\n encoding.color = encoding.hierarchy.slice(0, 1)\n\n // detail\n encoding.detail = unique(dimensions.filter((item) => item.encoding === 'detail').map((item) => item.id))\n if (encoding.detail.length === 0) {\n encoding.detail = encoding.hierarchy\n }\n\n // tooltip\n encoding.tooltip = unique(dimensions.map((item) => item.id))\n encoding.tooltip = encoding.tooltip.filter((d) => d !== MeasureId)\n\n // label\n encoding.label = unique(dimensions.filter((item) => item.encoding === 'label').map((item) => item.id))\n\n encoding.row = unique(dimensions.filter((item) => item.encoding === 'row').map((item) => item.id))\n encoding.column = unique(dimensions.filter((item) => item.encoding === 'column').map((item) => item.id))\n}\n\n/**\n * --------------------指标--------------------\n */\nconst generateDefaultMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.size = unique(measures.filter((item) => item.encoding === 'size' || !item.encoding).map((item) => item.id))\n // 但我们可以把它们放到 tooltip 中\n encoding.tooltip = unique([...(encoding.tooltip || []), ...measures.map((m) => m.id)])\n}\n\nconst generateMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n // size\n encoding.size = unique(measures.filter((item) => item.encoding === 'size' || !item.encoding).map((item) => item.id))\n\n // color\n const color = unique(measures.filter((item) => item.encoding === 'color').map((item) => item.id))\n if (color.length > 0) {\n encoding.color = color\n }\n\n // label\n const label = unique(measures.filter((item) => item.encoding === 'label').map((item) => item.id))\n encoding.label = unique([...(encoding.label || []), ...label])\n\n // tooltip\n const tooltip = unique(measures.filter((item) => item.encoding === 'tooltip').map((item) => item.id))\n encoding.tooltip = unique([...(encoding.tooltip || []), ...label, ...tooltip, ...color])\n}\n"],"names":["defaultEncodingForHierarchy","advancedVSeed","measures","reshapeMeasures","dimensions","encoding","generateDefaultDimensionEncoding","hasMultipleMeasureInSingleView","generateDefaultMeasureEncoding","encodingForHierarchy","hasDimensionEncoding","item","hasMeasureEncoding","hasMulti","generateDimensionEncoding","generateMeasureEncoding","isMultiMeasure","uniqueDimIds","unique","d","MeasureId","m","color","label","tooltip"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivot, discreteLegend, initCirclePacking, initPivot, labelCirclePacking, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotIndicators, pivotIndicatorsAsRow, pivotRowDimensions, pivotTitle, tooltipHierarchy } from "../pipes/index.js";
1
+ import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivotHierarchy, discreteLegend, drill, initCirclePacking, initPivot, labelCirclePacking, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotHideIndicatorName, pivotIndicators, pivotIndicatorsAsCol, pivotRowDimensions, pivotTitle, tooltipHierarchy } from "../pipes/index.js";
2
2
  const circlePacking = [
3
3
  initCirclePacking,
4
+ drill,
4
5
  datasetHierarchy,
5
6
  colorAdapter(color, linearColor),
6
7
  backgroundColor,
@@ -11,8 +12,9 @@ const circlePacking = [
11
12
  const pivotCirclePacking = [
12
13
  initPivot,
13
14
  pivotGridStyle,
14
- pivotIndicatorsAsRow,
15
- datasetPivot,
15
+ pivotIndicatorsAsCol,
16
+ pivotHideIndicatorName,
17
+ datasetPivotHierarchy,
16
18
  pivotIndicators([
17
19
  initCirclePacking,
18
20
  datasetHierarchy,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipeline/circlePacking.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/circlePacking.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initCirclePacking,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n tooltipHierarchy,\n labelCirclePacking,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n} from '../pipes'\n\nconst circlePacking: VChartSpecPipeline = [\n initCirclePacking,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipHierarchy,\n labelCirclePacking,\n]\n\nconst pivotCirclePacking: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators([\n initCirclePacking,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipHierarchy,\n labelCirclePacking,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const circlePackingSpecPipeline = [pivotAdapter(circlePacking, pivotCirclePacking)]\n"],"names":["circlePacking","initCirclePacking","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipHierarchy","labelCirclePacking","pivotCirclePacking","initPivot","pivotGridStyle","pivotIndicatorsAsRow","datasetPivot","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","circlePackingSpecPipeline","pivotAdapter"],"mappings":";AAyBA,MAAMA,gBAAoC;IACxCC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;CACD;AAED,MAAMC,qBAA6C;IACjDC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdf;QACAC;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;KACD;IACDO;IACAC;IACAC;IACAhB,aAAaiB,qBAAqBC;CACnC;AAEM,MAAMC,4BAA4B;IAACC,aAAavB,eAAeW;CAAoB"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipeline/circlePacking.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/circlePacking.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initCirclePacking,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n tooltipHierarchy,\n labelCirclePacking,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchy,\n drill,\n} from '../pipes'\n\nconst circlePacking: VChartSpecPipeline = [\n initCirclePacking,\n drill,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipHierarchy,\n labelCirclePacking,\n]\n\nconst pivotCirclePacking: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchy,\n pivotIndicators([\n initCirclePacking,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipHierarchy,\n labelCirclePacking,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const circlePackingSpecPipeline = [pivotAdapter(circlePacking, pivotCirclePacking)]\n"],"names":["circlePacking","initCirclePacking","drill","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipHierarchy","labelCirclePacking","pivotCirclePacking","initPivot","pivotGridStyle","pivotIndicatorsAsCol","pivotHideIndicatorName","datasetPivotHierarchy","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","circlePackingSpecPipeline","pivotAdapter"],"mappings":";AA2BA,MAAMA,gBAAoC;IACxCC;IACAC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;CACD;AAED,MAAMC,qBAA6C;IACjDC;IACAC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdjB;QACAE;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;KACD;IACDQ;IACAC;IACAC;IACAjB,aAAakB,qBAAqBC;CACnC;AAEM,MAAMC,4BAA4B;IAACC,aAAazB,eAAeY;CAAoB"}
@@ -1,6 +1,7 @@
1
- import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivot, discreteLegend, initPivot, initSunburst, labelSunburst, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotIndicators, pivotIndicatorsAsRow, pivotRowDimensions, pivotTitle, tooltipHierarchy } from "../pipes/index.js";
1
+ import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivotHierarchy, discreteLegend, drill, initPivot, initSunburst, labelSunburst, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotHideIndicatorName, pivotIndicators, pivotIndicatorsAsCol, pivotRowDimensions, pivotTitle, tooltipHierarchy } from "../pipes/index.js";
2
2
  const sunburst = [
3
3
  initSunburst,
4
+ drill,
4
5
  datasetHierarchy,
5
6
  colorAdapter(color, linearColor),
6
7
  backgroundColor,
@@ -11,8 +12,9 @@ const sunburst = [
11
12
  const pivotSunburst = [
12
13
  initPivot,
13
14
  pivotGridStyle,
14
- pivotIndicatorsAsRow,
15
- datasetPivot,
15
+ pivotIndicatorsAsCol,
16
+ pivotHideIndicatorName,
17
+ datasetPivotHierarchy,
16
18
  pivotIndicators([
17
19
  initSunburst,
18
20
  datasetHierarchy,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipeline/sunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/sunburst.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initSunburst,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n tooltipHierarchy,\n labelSunburst,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n} from '../pipes'\n\nconst sunburst: VChartSpecPipeline = [\n initSunburst,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipHierarchy,\n labelSunburst,\n]\n\nconst pivotSunburst: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators([\n initSunburst,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipHierarchy,\n labelSunburst,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const sunburstSpecPipeline = [pivotAdapter(sunburst, pivotSunburst)]\n"],"names":["sunburst","initSunburst","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipHierarchy","labelSunburst","pivotSunburst","initPivot","pivotGridStyle","pivotIndicatorsAsRow","datasetPivot","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","sunburstSpecPipeline","pivotAdapter"],"mappings":";AAyBA,MAAMA,WAA+B;IACnCC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;CACD;AAED,MAAMC,gBAAwC;IAC5CC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdf;QACAC;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;KACD;IACDO;IACAC;IACAC;IACAhB,aAAaiB,qBAAqBC;CACnC;AAEM,MAAMC,uBAAuB;IAACC,aAAavB,UAAUW;CAAe"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipeline/sunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/sunburst.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initSunburst,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n tooltipHierarchy,\n labelSunburst,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchy,\n drill,\n} from '../pipes'\n\nconst sunburst: VChartSpecPipeline = [\n initSunburst,\n drill,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipHierarchy,\n labelSunburst,\n]\n\nconst pivotSunburst: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchy,\n pivotIndicators([\n initSunburst,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipHierarchy,\n labelSunburst,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const sunburstSpecPipeline = [pivotAdapter(sunburst, pivotSunburst)]\n"],"names":["sunburst","initSunburst","drill","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipHierarchy","labelSunburst","pivotSunburst","initPivot","pivotGridStyle","pivotIndicatorsAsCol","pivotHideIndicatorName","datasetPivotHierarchy","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","sunburstSpecPipeline","pivotAdapter"],"mappings":";AA2BA,MAAMA,WAA+B;IACnCC;IACAC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;CACD;AAED,MAAMC,gBAAwC;IAC5CC;IACAC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdjB;QACAE;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;KACD;IACDQ;IACAC;IACAC;IACAjB,aAAakB,qBAAqBC;CACnC;AAEM,MAAMC,uBAAuB;IAACC,aAAazB,UAAUY;CAAe"}
@@ -1,7 +1,8 @@
1
- import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivot, discreteLegend, initPivot, initTreeMap, labelTreeMapGroup, labelTreeMapLeaf, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotIndicators, pivotIndicatorsAsRow, pivotRowDimensions, pivotTitle } from "../pipes/index.js";
1
+ import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy, datasetPivotHierarchy, discreteLegend, drill, initPivot, initTreeMap, labelTreeMapGroup, labelTreeMapLeaf, linearColor, pivotAdapter, pivotColorLegend, pivotColumnDimensions, pivotDiscreteLegend, pivotGridStyle, pivotHideIndicatorName, pivotIndicators, pivotIndicatorsAsCol, pivotRowDimensions, pivotTitle } from "../pipes/index.js";
2
2
  import { tooltipTreeMap } from "../pipes/tooltip/tooltipTreeMap.js";
3
3
  const treeMap = [
4
4
  initTreeMap,
5
+ drill,
5
6
  datasetHierarchy,
6
7
  colorAdapter(color, linearColor),
7
8
  backgroundColor,
@@ -13,8 +14,9 @@ const treeMap = [
13
14
  const pivotTreeMap = [
14
15
  initPivot,
15
16
  pivotGridStyle,
16
- pivotIndicatorsAsRow,
17
- datasetPivot,
17
+ pivotIndicatorsAsCol,
18
+ pivotHideIndicatorName,
19
+ datasetPivotHierarchy,
18
20
  pivotIndicators([
19
21
  initTreeMap,
20
22
  datasetHierarchy,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipeline/treeMap.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/treeMap.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initTreeMap,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n} from '../pipes'\nimport { tooltipTreeMap } from '../pipes/tooltip/tooltipTreeMap'\n\nconst treeMap: VChartSpecPipeline = [\n initTreeMap,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipTreeMap,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n]\n\nconst pivotTreeMap: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsRow,\n datasetPivot,\n pivotIndicators([\n initTreeMap,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipTreeMap,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const treeMapSpecPipeline = [pivotAdapter(treeMap, pivotTreeMap)]\n"],"names":["treeMap","initTreeMap","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipTreeMap","labelTreeMapLeaf","labelTreeMapGroup","pivotTreeMap","initPivot","pivotGridStyle","pivotIndicatorsAsRow","datasetPivot","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","treeMapSpecPipeline","pivotAdapter"],"mappings":";;AA0BA,MAAMA,UAA8B;IAClCC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;IACAC;CACD;AAED,MAAMC,eAAuC;IAC3CC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdhB;QACAC;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;QACAC;KACD;IACDO;IACAC;IACAC;IACAjB,aAAakB,qBAAqBC;CACnC;AAEM,MAAMC,sBAAsB;IAACC,aAAaxB,SAASY;CAAc"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipeline/treeMap.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipeline/treeMap.ts"],"sourcesContent":["import type { PivotChartSpecPipeline, VChartSpecPipeline } from 'src/types'\nimport {\n initTreeMap,\n datasetHierarchy,\n color,\n linearColor,\n colorAdapter,\n backgroundColor,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n discreteLegend,\n colorLegend,\n pivotAdapter,\n initPivot,\n pivotGridStyle,\n datasetPivotHierarchy,\n pivotIndicators,\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n pivotDiscreteLegend,\n pivotColorLegend,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n drill,\n} from '../pipes'\nimport { tooltipTreeMap } from '../pipes/tooltip/tooltipTreeMap'\n\nconst treeMap: VChartSpecPipeline = [\n initTreeMap,\n drill,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n colorAdapter(discreteLegend, colorLegend),\n tooltipTreeMap,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n]\n\nconst pivotTreeMap: PivotChartSpecPipeline = [\n initPivot,\n pivotGridStyle,\n pivotIndicatorsAsCol,\n pivotHideIndicatorName,\n datasetPivotHierarchy,\n pivotIndicators([\n initTreeMap,\n datasetHierarchy,\n colorAdapter(color, linearColor),\n backgroundColor,\n tooltipTreeMap,\n labelTreeMapLeaf,\n labelTreeMapGroup,\n ]),\n pivotRowDimensions,\n pivotColumnDimensions,\n pivotTitle,\n colorAdapter(pivotDiscreteLegend, pivotColorLegend),\n]\n\nexport const treeMapSpecPipeline = [pivotAdapter(treeMap, pivotTreeMap)]\n"],"names":["treeMap","initTreeMap","drill","datasetHierarchy","colorAdapter","color","linearColor","backgroundColor","discreteLegend","colorLegend","tooltipTreeMap","labelTreeMapLeaf","labelTreeMapGroup","pivotTreeMap","initPivot","pivotGridStyle","pivotIndicatorsAsCol","pivotHideIndicatorName","datasetPivotHierarchy","pivotIndicators","pivotRowDimensions","pivotColumnDimensions","pivotTitle","pivotDiscreteLegend","pivotColorLegend","treeMapSpecPipeline","pivotAdapter"],"mappings":";;AA4BA,MAAMA,UAA8B;IAClCC;IACAC;IACAC;IACAC,aAAaC,OAAOC;IACpBC;IACAH,aAAaI,gBAAgBC;IAC7BC;IACAC;IACAC;CACD;AAED,MAAMC,eAAuC;IAC3CC;IACAC;IACAC;IACAC;IACAC;IACAC,gBAAgB;QACdlB;QACAE;QACAC,aAAaC,OAAOC;QACpBC;QACAG;QACAC;QACAC;KACD;IACDQ;IACAC;IACAC;IACAlB,aAAamB,qBAAqBC;CACnC;AAEM,MAAMC,sBAAsB;IAACC,aAAa1B,SAASa;CAAc"}
@@ -1,2 +1,10 @@
1
- import type { VChartSpecPipe } from '../../../../../types';
1
+ import type { VChartSpecPipe, Datum, FoldInfo, UnfoldInfo } from '../../../../../types';
2
2
  export declare const datasetHierarchy: VChartSpecPipe;
3
+ /**
4
+ * @description 将平铺的数据集构建为树形结构
5
+ * @param dataset 平铺的数据集
6
+ * @param hierarchyFields 层级字段列表
7
+ * @param measureValueField 指标值字段名
8
+ * @param measureIdField 指标ID字段名
9
+ */
10
+ export declare const buildTree: (dataset: Datum[], hierarchyFields: string[], foldInfo: FoldInfo, unfoldInfo: UnfoldInfo, measureKeys?: string[]) => any;
@@ -1,12 +1,13 @@
1
+ import { findAllMeasures } from "../../../../utils/index.js";
1
2
  const datasetHierarchy = (spec, context)=>{
2
3
  const result = {
3
4
  ...spec
4
5
  };
5
6
  const { advancedVSeed } = context;
6
- const { datasetReshapeInfo, dataset } = advancedVSeed;
7
- const { foldInfo } = datasetReshapeInfo[0];
7
+ const { datasetReshapeInfo, dataset, measures } = advancedVSeed;
8
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
8
9
  const hierarchyFields = advancedVSeed.encoding?.hierarchy || [];
9
- const measureKeys = advancedVSeed.measures?.map((m)=>m.id) || [];
10
+ const measureKeys = findAllMeasures(measures).map((m)=>m.id);
10
11
  if (!hierarchyFields.length) {
11
12
  result.data = [
12
13
  {
@@ -16,7 +17,7 @@ const datasetHierarchy = (spec, context)=>{
16
17
  ];
17
18
  return result;
18
19
  }
19
- const tree = buildTree(dataset, hierarchyFields, foldInfo, measureKeys);
20
+ const tree = buildTree(dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys);
20
21
  result.data = [
21
22
  {
22
23
  id: 'data',
@@ -25,8 +26,15 @@ const datasetHierarchy = (spec, context)=>{
25
26
  ];
26
27
  return result;
27
28
  };
28
- const buildTree = (dataset, hierarchyFields, foldInfo, measureKeys = [])=>{
29
+ const buildTree = (dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys = [])=>{
29
30
  const { measureValue, measureId, measureName } = foldInfo;
31
+ const { encodingColor, encodingColorId } = unfoldInfo;
32
+ const collectFields = [
33
+ measureId,
34
+ measureName,
35
+ encodingColor,
36
+ encodingColorId
37
+ ].filter(Boolean);
30
38
  const root = {
31
39
  name: 'root',
32
40
  children: []
@@ -42,10 +50,7 @@ const buildTree = (dataset, hierarchyFields, foldInfo, measureKeys = [])=>{
42
50
  name: value,
43
51
  children: []
44
52
  };
45
- for(let j = 0; j <= i; j++){
46
- const key = hierarchyFields[j];
47
- child[key] = datum[key];
48
- }
53
+ for(let j = 0; j <= i; j++)child[hierarchyFields[j]] = datum[hierarchyFields[j]];
49
54
  currentNode.children.push(child);
50
55
  }
51
56
  currentNode = child;
@@ -57,58 +62,58 @@ const buildTree = (dataset, hierarchyFields, foldInfo, measureKeys = [])=>{
57
62
  measureKeys.forEach((key)=>{
58
63
  currentNode[key] = 0;
59
64
  });
60
- currentNode._measureIds = new Set();
61
- currentNode._measureNames = new Set();
65
+ collectFields.forEach((field)=>{
66
+ currentNode[`_set_${field}`] = new Set();
67
+ });
62
68
  }
63
69
  if (measureValue && void 0 !== datum[measureValue]) currentNode[measureValue] += Number(datum[measureValue]);
64
70
  measureKeys.forEach((key)=>{
65
71
  if (void 0 !== datum[key]) currentNode[key] = (currentNode[key] || 0) + Number(datum[key]);
66
72
  });
67
- if (datum[measureId]) currentNode._measureIds.add(datum[measureId]);
68
- if (datum[measureName]) currentNode._measureNames.add(datum[measureName]);
73
+ collectFields.forEach((field)=>{
74
+ if (datum[field]) currentNode[`_set_${field}`].add(datum[field]);
75
+ });
69
76
  if (measureValue) currentNode.value = currentNode[measureValue];
70
77
  });
78
+ const flattenSets = (node)=>{
79
+ collectFields.forEach((field)=>{
80
+ const setKey = `_set_${field}`;
81
+ if (node[setKey]) {
82
+ node[field] = Array.from(node[setKey]).join('+');
83
+ delete node[setKey];
84
+ }
85
+ });
86
+ };
87
+ const mergeCollectFieldsFromChildren = (node)=>{
88
+ collectFields.forEach((field)=>{
89
+ const merged = new Set();
90
+ node.children.forEach((child)=>{
91
+ if (child[field]) child[field].split('+').forEach((v)=>merged.add(v));
92
+ });
93
+ if (merged.size > 0) node[field] = Array.from(merged).join('+');
94
+ });
95
+ };
71
96
  const aggregate = (node)=>{
72
97
  if (node.isLeaf) {
73
- if (measureId && node._measureIds) {
74
- node[measureId] = Array.from(node._measureIds).join('+');
75
- delete node._measureIds;
76
- }
77
- if (measureName && node._measureNames) {
78
- node[measureName] = Array.from(node._measureNames).join('+');
79
- delete node._measureNames;
80
- }
98
+ flattenSets(node);
81
99
  return node.value || 0;
82
100
  }
83
- if (node.children && node.children.length > 0) {
84
- let sum = 0;
85
- node.children.forEach((child)=>{
86
- sum += aggregate(child);
87
- measureKeys.forEach((key)=>{
88
- node[key] = (node[key] || 0) + (child[key] || 0);
89
- });
101
+ if (!node.children?.length) return node.value || 0;
102
+ let sum = 0;
103
+ node.children.forEach((child)=>{
104
+ sum += aggregate(child);
105
+ measureKeys.forEach((key)=>{
106
+ node[key] = (node[key] || 0) + (child[key] || 0);
90
107
  });
91
- node.value = sum;
92
- if (measureValue) node[measureValue] = sum;
93
- if (measureId && node.children[0]) {
94
- const childIds = new Set();
95
- node.children.forEach((child)=>{
96
- if (child[measureId]) child[measureId].split('+').forEach((id)=>childIds.add(id));
97
- });
98
- node[measureId] = Array.from(childIds).join('+');
99
- const childNames = new Set();
100
- node.children.forEach((child)=>{
101
- if (child[measureName]) child[measureName].split('+').forEach((name)=>childNames.add(name));
102
- });
103
- node[measureName] = Array.from(childNames).join('+');
104
- }
105
- return sum;
106
- }
107
- return node.value || 0;
108
+ });
109
+ node.value = sum;
110
+ if (measureValue) node[measureValue] = sum;
111
+ mergeCollectFieldsFromChildren(node);
112
+ return sum;
108
113
  };
109
114
  root.children.forEach(aggregate);
110
115
  return root.children;
111
116
  };
112
- export { datasetHierarchy };
117
+ export { buildTree, datasetHierarchy };
113
118
 
114
119
  //# sourceMappingURL=datasetHierarchy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetHierarchy.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/dataset/datasetHierarchy.ts"],"sourcesContent":["import type { VChartSpecPipe, Datum, FoldInfo } from 'src/types'\n\nexport const datasetHierarchy: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { datasetReshapeInfo, dataset } = advancedVSeed\n const { foldInfo } = 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 = advancedVSeed.measures?.map((m: any) => 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, 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 */\nconst buildTree = (dataset: Datum[], hierarchyFields: string[], foldInfo: FoldInfo, measureKeys: string[] = []) => {\n const { measureValue, measureId, measureName } = foldInfo\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.name === value)\n\n if (!child) {\n child = { name: value, children: [] }\n // 确保父节点尽可能保留信息:保留当前层级及之前层级的所有维度字段\n for (let j = 0; j <= i; j++) {\n const key = hierarchyFields[j]\n child[key] = datum[key]\n }\n currentNode.children.push(child)\n }\n\n currentNode = child\n }\n\n // 叶子节点:聚合逻辑\n if (!currentNode.isLeaf) {\n // 第一次访问叶子节点:保留维度信息\n Object.assign(currentNode, datum)\n currentNode.isLeaf = true\n\n // 初始化累加器(防止后续叠加时使用了 datum 中的原始值作为初始值)\n if (measureValue) currentNode[measureValue] = 0\n measureKeys.forEach((key) => {\n currentNode[key] = 0\n })\n\n // 初始化 ID 集合用于后续 join\n currentNode._measureIds = new Set()\n currentNode._measureNames = new Set()\n }\n\n // 1. 聚合 measureValue (drawing measure)\n if (measureValue && datum[measureValue] !== undefined) {\n currentNode[measureValue] += Number(datum[measureValue])\n }\n\n // 2. 聚合各个 measure\n // 原来的逻辑:只聚合当前 measureId 对应的 measure,导致其他 measure(如 profit)在 folded 后的行中被忽略\n // const currentMeasureId = datum[measureId]\n // const currentMeasureValue = Number(datum[measureValue])\n // if (currentMeasureId && measureKeys.includes(currentMeasureId)) {\n // currentNode[currentMeasureId] = (currentNode[currentMeasureId] || 0) + currentMeasureValue\n // }\n\n // 新的逻辑:遍历所有 measureKey,如果 datum 中存在该字段,则进行聚合\n measureKeys.forEach((key) => {\n if (datum[key] !== undefined) {\n currentNode[key] = (currentNode[key] || 0) + Number(datum[key])\n }\n })\n\n // 3. 收集 ID 和 Name 信息\n if (datum[measureId]) currentNode._measureIds.add(datum[measureId])\n if (datum[measureName]) currentNode._measureNames.add(datum[measureName])\n\n // 4. 更新 value 字段 (用于图表映射)\n if (measureValue) {\n currentNode.value = currentNode[measureValue]\n }\n })\n\n // 后序遍历:自底向上聚合 value\n const aggregate = (node: Datum) => {\n // 处理叶子节点的 ID 集合\n if (node.isLeaf) {\n if (measureId && node._measureIds) {\n node[measureId] = Array.from(node._measureIds).join('+')\n delete node._measureIds\n }\n if (measureName && node._measureNames) {\n node[measureName] = Array.from(node._measureNames).join('+')\n delete node._measureNames\n }\n return node.value || 0\n }\n\n if (node.children && node.children.length > 0) {\n // node.isLeaf = false // 已经是 false 或 undefined,不需要显式设为 false,除非...\n let sum = 0\n node.children.forEach((child: Datum) => {\n sum += aggregate(child)\n\n // 聚合子节点的各个 measure 值到父节点\n measureKeys.forEach((key) => {\n node[key] = (node[key] || 0) + (child[key] || 0)\n })\n })\n\n node.value = sum\n\n // 为中间节点补充 measureValue 字段,保证 Tooltip 能取到值\n if (measureValue) {\n node[measureValue] = sum\n }\n\n // 为中间节点补充 measureIdField 字段\n if (measureId && node.children[0]) {\n // 收集所有子节点的 measureId\n const childIds = new Set()\n node.children.forEach((child: Datum) => {\n if (child[measureId]) {\n child[measureId].split('+').forEach((id: string) => childIds.add(id))\n }\n })\n node[measureId] = Array.from(childIds).join('+')\n\n // 收集所有子节点的 measureName\n const childNames = new Set()\n node.children.forEach((child: Datum) => {\n if (child[measureName]) {\n child[measureName].split('+').forEach((name: string) => childNames.add(name))\n }\n })\n node[measureName] = Array.from(childNames).join('+')\n }\n\n return sum\n }\n // 应该是不会走到这里的,因为叶子节点在上面已经处理了\n return node.value || 0\n }\n\n root.children.forEach(aggregate)\n\n return root.children\n}\n"],"names":["datasetHierarchy","spec","context","result","advancedVSeed","datasetReshapeInfo","dataset","foldInfo","hierarchyFields","measureKeys","m","tree","buildTree","measureValue","measureId","measureName","root","datum","currentNode","i","field","value","String","child","c","j","key","Object","Set","undefined","Number","aggregate","node","Array","sum","childIds","id","childNames","name"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetHierarchy.js","sources":["webpack://@visactor/vseed/./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.name === value)\n\n if (!child) {\n child = { name: value, 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","child","c","j","Object","key","Set","undefined","Number","flattenSets","node","setKey","Array","mergeCollectFieldsFromChildren","merged","v","aggregate","sum"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { PivotChartSpecPipe } from '../../../../../types';
2
+ export declare const datasetPivotHierarchy: PivotChartSpecPipe;
@@ -0,0 +1,72 @@
1
+ import { findAllMeasures } from "../../../../utils/index.js";
2
+ import { buildTree } from "./datasetHierarchy.js";
3
+ import { omit } from "remeda";
4
+ const datasetPivotHierarchy = (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.flatMap((data)=>{
24
+ const root = {
25
+ ...data,
26
+ children: buildTree(data.children, hierarchyFields, foldInfo, unfoldInfo, measureKeys)
27
+ };
28
+ const rootProps = omit(root, [
29
+ 'children'
30
+ ]);
31
+ const rootTree = root.children.map((child)=>({
32
+ ...child,
33
+ ...rootProps
34
+ }));
35
+ return rootTree;
36
+ });
37
+ } else {
38
+ const tree = buildTree(cur, hierarchyFields, foldInfo, unfoldInfo, measureKeys);
39
+ pre[id] = tree;
40
+ }
41
+ return pre;
42
+ }, {});
43
+ return {
44
+ ...result,
45
+ records: records
46
+ };
47
+ };
48
+ function groupByDimensions(data, dimKeys) {
49
+ if (0 === dimKeys.length) return data;
50
+ const buckets = new Map();
51
+ for (const item of data){
52
+ const compositeKey = dimKeys.map((k)=>String(item[k])).join('\x00');
53
+ if (!buckets.has(compositeKey)) {
54
+ const dimValues = {};
55
+ for (const k of dimKeys)dimValues[k] = item[k];
56
+ buckets.set(compositeKey, {
57
+ dimValues,
58
+ items: []
59
+ });
60
+ }
61
+ buckets.get(compositeKey).items.push(item);
62
+ }
63
+ const result = [];
64
+ for (const [, { dimValues, items }] of buckets)result.push({
65
+ ...dimValues,
66
+ children: items
67
+ });
68
+ return result;
69
+ }
70
+ export { datasetPivotHierarchy };
71
+
72
+ //# sourceMappingURL=datasetPivotHierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js","sources":["webpack://@visactor/vseed/./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\nfunction 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 // @ts-expect-error 忽略类型检查\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;AAEA,SAASQ,kBAAiDC,IAAS,EAAEQ,OAAiB;IACpF,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;IAExB,KAAK,MAAM,GAAG,EAAEoC,SAAS,EAAEC,KAAK,EAAE,CAAC,IAAIP,QACrC9B,OAAO,IAAI,CAAC;QACV,GAAGoC,SAAS;QACZ,UAAUC;IACZ;IAGF,OAAOrC;AACT"}
@@ -7,3 +7,4 @@ export { datasetScatter } from './datasetScatter';
7
7
  export { datasetHistogram } from './datasetHistogram';
8
8
  export { datasetBoxplot } from './datasetBoxplot';
9
9
  export { datasetHierarchy } from './datasetHierarchy';
10
+ export { datasetPivotHierarchy } from './datasetPivotHierarchy';
@@ -7,4 +7,5 @@ import { datasetScatter } from "./datasetScatter.js";
7
7
  import { datasetHistogram } from "./datasetHistogram.js";
8
8
  import { datasetBoxplot } from "./datasetBoxplot.js";
9
9
  import { datasetHierarchy } from "./datasetHierarchy.js";
10
- export { datasetBoxplot, datasetDualAxis, datasetHierarchy, datasetHistogram, datasetPivot, datasetScatter, datasetXY, datasetYX, progressive };
10
+ import { datasetPivotHierarchy } from "./datasetPivotHierarchy.js";
11
+ export { datasetBoxplot, datasetDualAxis, datasetHierarchy, datasetHistogram, datasetPivot, datasetPivotHierarchy, datasetScatter, datasetXY, datasetYX, progressive };
@@ -0,0 +1,2 @@
1
+ import type { VChartSpecPipe } from '../../../../../types';
2
+ export declare const drill: VChartSpecPipe;
@@ -0,0 +1,7 @@
1
+ const drill = (spec)=>({
2
+ ...spec,
3
+ drill: true
4
+ });
5
+ export { drill };
6
+
7
+ //# sourceMappingURL=drill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/hierarchy/drill.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/hierarchy/drill.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\n\nexport const drill: VChartSpecPipe = (spec) => {\n return {\n ...spec,\n drill: true,\n }\n}\n"],"names":["drill","spec"],"mappings":"AAEO,MAAMA,QAAwB,CAACC,OAC7B;QACL,GAAGA,IAAI;QACP,OAAO;IACT"}
@@ -0,0 +1 @@
1
+ export { drill } from './drill';
@@ -0,0 +1,2 @@
1
+ import { drill } from "./drill.js";
2
+ export { drill };
@@ -22,3 +22,4 @@ export * from './regressionLine';
22
22
  export * from './region';
23
23
  export * from './pipeFilter';
24
24
  export * from './player';
25
+ export * from './hierarchy';
@@ -22,3 +22,4 @@ export * from "./regressionLine/index.js";
22
22
  export * from "./region/index.js";
23
23
  export * from "./pipeFilter/index.js";
24
24
  export * from "./player/index.js";
25
+ export * from "./hierarchy/index.js";
@@ -8,7 +8,6 @@ const initCirclePacking = (spec, context)=>{
8
8
  result.type = 'circlePacking';
9
9
  result.categoryField = 'name';
10
10
  result.valueField = foldInfo.measureValue;
11
- result.drill = true;
12
11
  result.circlePacking = {
13
12
  style: {
14
13
  fillOpacity: (d)=>d.isLeaf ? 0.75 : 0.25
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/init/circlePacking.js","sources":["webpack://@visactor/vseed/./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 = 'name'\n result.valueField = foldInfo.measureValue\n // Style configuration\n result.drill = true\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,KAAK,GAAG;IACfA,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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/init/circlePacking.js","sources":["webpack://@visactor/vseed/./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 = 'name'\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"}
@@ -13,7 +13,6 @@ const initSunburst = (spec, context)=>{
13
13
  result.gap = 0;
14
14
  result.offsetX = 0;
15
15
  result.offsetY = 0;
16
- result.drill = true;
17
16
  result.padding = 0;
18
17
  result.labelAutoVisible = {
19
18
  enable: true,