@visactor/vseed 0.4.0 → 0.4.2
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 +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/builder/builder/buildSpec.js +1 -0
- package/dist/esm/builder/builder/buildSpec.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/hierarchy.js +2 -0
- package/dist/esm/pipeline/advanced/chart/pipes/encoding/hierarchy.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/circlePacking.js +5 -3
- package/dist/esm/pipeline/spec/chart/pipeline/circlePacking.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/sunburst.js +5 -3
- package/dist/esm/pipeline/spec/chart/pipeline/sunburst.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipeline/treeMap.js +5 -3
- package/dist/esm/pipeline/spec/chart/pipeline/treeMap.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js +14 -1
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.d.ts +9 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js +51 -46
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js +72 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/dataset/index.js +2 -1
- package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.d.ts +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js +7 -0
- package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js.map +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.js +2 -0
- package/dist/esm/pipeline/spec/chart/pipes/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/index.js +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js +0 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js +0 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js +0 -1
- package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js.map +1 -1
- package/dist/esm/pipeline/utils/constant.d.ts +3 -0
- package/dist/esm/pipeline/utils/constant.js +3 -0
- package/dist/esm/pipeline/utils/constant.js.map +1 -1
- package/dist/esm/pipeline/utils/measures/typeGuard.d.ts +2 -2
- package/dist/esm/pipeline/utils/measures/typeGuard.js +1 -1
- package/dist/esm/pipeline/utils/measures/typeGuard.js.map +1 -1
- package/dist/umd/index.js +152 -56
- package/dist/umd/index.js.map +1 -1
- 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;
|
|
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":";;;AAKO,MAAMA,8BAA4C,CAACC;IACxD,MAAM,EAAEC,WAAW,EAAE,EAAEC,kBAAkB,EAAE,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACjE,MAAMI,WAAqB,CAAC;IAC5BC,iCAAiCF,YAAYC,UAAUE,+BAA+BJ;IACtFK,+BAA+BN,UAAUG;IACzC,OAAO;QAAE,GAAGJ,aAAa;QAAEI;IAAS;AACtC;AAEO,MAAMI,uBAAqC,CAACR;IACjD,MAAM,EAAEC,WAAW,EAAE,EAAEC,kBAAkB,EAAE,EAAEC,aAAa,EAAE,EAAE,GAAGH;IAEjE,MAAMS,uBAAuBN,WAAW,IAAI,CAAC,CAACO,OAAoBA,KAAK,QAAQ;IAC/E,MAAMC,qBAAqBV,SAAS,IAAI,CAAC,CAACS,OAAkBA,KAAK,QAAQ;IACzE,MAAMN,WAAqB,CAAC;IAC5B,MAAMQ,WAAWN,+BAA+BJ;IAEhD,IAAIO,sBACFI,0BAA0BV,YAAYC,UAAUQ;SAEhDP,iCAAiCF,YAAYC,UAAUQ;IAGzD,IAAID,oBACFG,wBAAwBb,UAAUG;SAElCG,+BAA+BN,UAAUG;IAG3C,OAAO;QAAE,GAAGJ,aAAa;QAAEI;IAAS;AACtC;AAKA,MAAMC,mCAAmC,CAACF,YAAwBC,UAAoBW;IACpF,MAAMC,eAAeC,OAAOd,WAAW,GAAG,CAAC,CAACe,IAAMA,EAAE,EAAE;IACtD,IAAKH,gBAGHX,SAAS,SAAS,GAAGY;SAFrBZ,SAAS,SAAS,GAAGY,aAAa,MAAM,CAAC,CAACE,IAAMA,MAAMC;IAKxDf,SAAS,MAAM,GAAGA,SAAS,SAAS;IAEpCA,SAAS,OAAO,GAAGY,aAAa,MAAM,CAAC,CAACE,IAAMA,MAAMC;IACpDf,SAAS,KAAK,GAAG,EAAE;IACnBA,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;AACtB;AAEA,MAAMS,4BAA4B,CAACV,YAAwBC,UAAoBW;IAE7EX,SAAS,SAAS,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,gBAAlBA,KAAK,QAAQ,EAAkB,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAC5G,IAAIK,kBAAkB,CAACX,SAAS,SAAS,CAAC,QAAQ,CAACe,YACjDf,SAAS,SAAS,CAAC,IAAI,CAACe;IAI1Bf,SAAS,KAAK,GAAGA,SAAS,SAAS,CAAC,KAAK,CAAC,GAAG;IAG7CA,SAAS,MAAM,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,EAAe,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IACtG,IAAIN,AAA2B,MAA3BA,SAAS,MAAM,CAAC,MAAM,EACxBA,SAAS,MAAM,GAAGA,SAAS,SAAS;IAItCA,SAAS,OAAO,GAAGa,OAAOd,WAAW,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IAC1DN,SAAS,OAAO,GAAGA,SAAS,OAAO,CAAC,MAAM,CAAC,CAACc,IAAMA,MAAMC;IAGxDf,SAAS,KAAK,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,YAAlBA,KAAK,QAAQ,EAAc,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;
|
|
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":";;;AAKO,MAAMA,8BAA4C,CAACC;IACxD,MAAM,EAAEC,WAAW,EAAE,EAAEC,kBAAkB,EAAE,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACjE,MAAMI,WAAqB,CAAC;IAC5BC,iCAAiCF,YAAYC,UAAUE,+BAA+BJ;IACtFK,+BAA+BN,UAAUG;IACzC,OAAO;QAAE,GAAGJ,aAAa;QAAEI;IAAS;AACtC;AAEO,MAAMI,uBAAqC,CAACR;IACjD,MAAM,EAAEC,WAAW,EAAE,EAAEC,kBAAkB,EAAE,EAAEC,aAAa,EAAE,EAAE,GAAGH;IAEjE,MAAMS,uBAAuBN,WAAW,IAAI,CAAC,CAACO,OAAoBA,KAAK,QAAQ;IAC/E,MAAMC,qBAAqBV,SAAS,IAAI,CAAC,CAACS,OAAkBA,KAAK,QAAQ;IACzE,MAAMN,WAAqB,CAAC;IAC5B,MAAMQ,WAAWN,+BAA+BJ;IAEhD,IAAIO,sBACFI,0BAA0BV,YAAYC,UAAUQ;SAEhDP,iCAAiCF,YAAYC,UAAUQ;IAGzD,IAAID,oBACFG,wBAAwBb,UAAUG;SAElCG,+BAA+BN,UAAUG;IAG3C,OAAO;QAAE,GAAGJ,aAAa;QAAEI;IAAS;AACtC;AAKA,MAAMC,mCAAmC,CAACF,YAAwBC,UAAoBW;IACpF,MAAMC,eAAeC,OAAOd,WAAW,GAAG,CAAC,CAACe,IAAMA,EAAE,EAAE;IACtD,IAAKH,gBAGHX,SAAS,SAAS,GAAGY;SAFrBZ,SAAS,SAAS,GAAGY,aAAa,MAAM,CAAC,CAACE,IAAMA,MAAMC;IAKxDf,SAAS,MAAM,GAAGA,SAAS,SAAS;IAEpCA,SAAS,OAAO,GAAGY,aAAa,MAAM,CAAC,CAACE,IAAMA,MAAMC;IACpDf,SAAS,KAAK,GAAG,EAAE;IACnBA,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;AACtB;AAEA,MAAMS,4BAA4B,CAACV,YAAwBC,UAAoBW;IAE7EX,SAAS,SAAS,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,gBAAlBA,KAAK,QAAQ,EAAkB,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAC5G,IAAIK,kBAAkB,CAACX,SAAS,SAAS,CAAC,QAAQ,CAACe,YACjDf,SAAS,SAAS,CAAC,IAAI,CAACe;IAI1Bf,SAAS,KAAK,GAAGA,SAAS,SAAS,CAAC,KAAK,CAAC,GAAG;IAG7CA,SAAS,MAAM,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,EAAe,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IACtG,IAAIN,AAA2B,MAA3BA,SAAS,MAAM,CAAC,MAAM,EACxBA,SAAS,MAAM,GAAGA,SAAS,SAAS;IAItCA,SAAS,OAAO,GAAGa,OAAOd,WAAW,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IAC1DN,SAAS,OAAO,GAAGA,SAAS,OAAO,CAAC,MAAM,CAAC,CAACc,IAAMA,MAAMC;IAGxDf,SAAS,KAAK,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,YAAlBA,KAAK,QAAQ,EAAc,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAEpGN,SAAS,GAAG,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,UAAlBA,KAAK,QAAQ,EAAY,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAChGN,SAAS,MAAM,GAAGa,OAAOd,WAAW,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,EAAe,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AACxG;AAKA,MAAMH,iCAAiC,CAACN,UAAoBG;IAC1DA,SAAS,IAAI,GAAGa,OAAOhB,SAAS,MAAM,CAAC,CAACS,OAASA,AAAkB,WAAlBA,KAAK,QAAQ,IAAe,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAElHN,SAAS,OAAO,GAAGa,OAAO;WAAKb,SAAS,OAAO,IAAI,EAAE;WAAMH,SAAS,GAAG,CAAC,CAACmB,IAAMA,EAAE,EAAE;KAAE;AACvF;AAEA,MAAMN,0BAA0B,CAACb,UAAoBG;IAEnDA,SAAS,IAAI,GAAGa,OAAOhB,SAAS,MAAM,CAAC,CAACS,OAASA,AAAkB,WAAlBA,KAAK,QAAQ,IAAe,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAGlH,MAAMW,QAAQJ,OAAOhB,SAAS,MAAM,CAAC,CAACS,OAASA,AAAkB,YAAlBA,KAAK,QAAQ,EAAc,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAC/F,IAAIW,MAAM,MAAM,GAAG,GACjBjB,SAAS,KAAK,GAAGiB;IAInB,MAAMC,QAAQL,OAAOhB,SAAS,MAAM,CAAC,CAACS,OAASA,AAAkB,YAAlBA,KAAK,QAAQ,EAAc,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IAC/FN,SAAS,KAAK,GAAGa,OAAO;WAAKb,SAAS,KAAK,IAAI,EAAE;WAAMkB;KAAM;IAG7D,MAAMC,UAAUN,OAAOhB,SAAS,MAAM,CAAC,CAACS,OAASA,AAAkB,cAAlBA,KAAK,QAAQ,EAAgB,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;IACnGN,SAAS,OAAO,GAAGa,OAAO;WAAKb,SAAS,OAAO,IAAI,EAAE;WAAMkB;WAAUC;WAAYF;KAAM;AACzF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { backgroundColor, color, colorAdapter, colorLegend, datasetHierarchy,
|
|
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
|
-
|
|
15
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
15
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
17
|
-
|
|
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
|
|
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"}
|
|
@@ -6,7 +6,20 @@ const generateAnnotationPointPipe = (options)=>{
|
|
|
6
6
|
const findSelectedDatas = options.findSelectedDatas ?? ((dataset, s)=>dataset.filter((datum)=>selector(datum, s)));
|
|
7
7
|
const generateMarkPoint = options.generateMarkPoint ?? ((datum)=>[
|
|
8
8
|
{
|
|
9
|
-
coordinate: (data
|
|
9
|
+
coordinate: (data, context)=>{
|
|
10
|
+
const targetDatum = data.find((item)=>isSubset(datum, item));
|
|
11
|
+
if (true === context.getStack()) {
|
|
12
|
+
const stackedDatum = {
|
|
13
|
+
...datum,
|
|
14
|
+
...targetDatum
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
...stackedDatum,
|
|
18
|
+
[context.getStackValueField()]: stackedDatum['__VCHART_STACK_END']
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return targetDatum;
|
|
22
|
+
}
|
|
10
23
|
}
|
|
11
24
|
]);
|
|
12
25
|
return (spec, context)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointCommon.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/annotation/annotationPointCommon.ts"],"sourcesContent":["import type { ISpec, IMarkPointSpec } from '@visactor/vchart'\nimport { selector } from '../../../../../dataSelector'\nimport type { Datum, Selector, Selectors, SpecPipelineContext, VChartSpecPipe, VSeed } from 'src/types'\nimport { isSubset } from './utils'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { isBarLikeChart } from 'src/pipeline/utils/chatType'\
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointCommon.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/annotation/annotationPointCommon.ts"],"sourcesContent":["import type { ISpec, IMarkPointSpec } from '@visactor/vchart'\nimport { selector } from '../../../../../dataSelector'\nimport type { Datum, Selector, Selectors, SpecPipelineContext, VChartSpecPipe, VSeed } from 'src/types'\nimport { isSubset } from './utils'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { isBarLikeChart } from 'src/pipeline/utils/chatType'\nexport const generateAnnotationPointPipe = (options: {\n findSelectedDatas?: (\n dataset: Datum[],\n selector: Selector | Selectors | undefined | null,\n spec: ISpec,\n context: SpecPipelineContext,\n ) => Datum[]\n generateMarkPoint?: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => IMarkPointSpec[] | undefined\n}) => {\n const findSelectedDatas = options.findSelectedDatas ?? ((dataset, s) => dataset.filter((datum) => selector(datum, s)))\n const generateMarkPoint =\n options.generateMarkPoint ??\n ((datum: Datum) => {\n return [\n {\n coordinate: (data: Datum[], context) => {\n const targetDatum = data.find((item) => isSubset(datum, item))\n if (context.getStack() === true) {\n const stackedDatum = { ...datum, ...targetDatum }\n return {\n ...stackedDatum,\n [context.getStackValueField()]: stackedDatum['__VCHART_STACK_END'],\n }\n }\n\n return targetDatum\n },\n },\n ]\n })\n\n return ((spec: ISpec, context: SpecPipelineContext) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationPoint) {\n return spec\n }\n\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationPoint\n const { annotationPoint } = annotation\n const annotationPointList = Array.isArray(annotationPoint) ? annotationPoint : [annotationPoint]\n const isHorizontalBar = isBarLikeChart(advancedVSeed as VSeed)\n const defaultStyle = isHorizontalBar\n ? {\n textAlign: 'right',\n textBaseline: 'middle',\n }\n : {\n textAlign: 'center',\n textBaseline: 'top',\n }\n\n const markPoint = annotationPointList.flatMap((annotationPoint) => {\n const {\n selector: selectorPoint,\n text = '',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = defaultStyle.textAlign,\n textBaseline = defaultStyle.textBaseline,\n textBackgroundBorderColor = theme?.textBackgroundBorderColor,\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n offsetX = theme?.offsetX ?? 0,\n offsetY = theme?.offsetY ?? 0,\n } = annotationPoint\n\n const dataset = advancedVSeed.dataset.flat()\n const selectedData = selectorPoint ? findSelectedDatas(dataset, selectorPoint, spec, context) : []\n const dx = -10 - (isHorizontalBar ? (textFontSize as number) : 0) // 由于vchart tag实现问题,需要设置这个强制偏移量\n const dy = isHorizontalBar ? 0 : (textFontSize as number)\n const markPointStyle = {\n zIndex: ANNOTATION_Z_INDEX,\n regionRelative: true,\n itemLine: {\n visible: false,\n },\n itemContent: {\n offsetY,\n offsetX,\n confine: true,\n text: {\n text: text,\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: 0.95,\n cornerRadius: textBackgroundBorderRadius ?? 4,\n fill: textBackgroundColor,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n dx,\n dy,\n },\n },\n },\n style: {\n opacity: 0.95,\n visible: true,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n stroke: textBackgroundColor,\n lineWidth: 1,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n dx,\n dy,\n },\n },\n } as Partial<IMarkPointSpec>\n\n return selectedData.reduce((res: IMarkPointSpec[], datum) => {\n const marks = generateMarkPoint(datum, spec, context)\n\n if (marks && marks.length) {\n marks.forEach((mark) => {\n res.push({\n ...markPointStyle,\n ...mark,\n } as IMarkPointSpec)\n })\n }\n\n return res\n }, [])\n }) as unknown as IMarkPointSpec[]\n\n return {\n ...spec,\n markPoint,\n } as ISpec\n }) as VChartSpecPipe\n}\n"],"names":["generateAnnotationPointPipe","options","findSelectedDatas","dataset","s","datum","selector","generateMarkPoint","data","context","targetDatum","item","isSubset","stackedDatum","spec","advancedVSeed","vseed","annotation","config","theme","annotationPoint","annotationPointList","Array","isHorizontalBar","isBarLikeChart","defaultStyle","markPoint","selectorPoint","text","textColor","textFontSize","textFontWeight","textAlign","textBaseline","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundColor","textBackgroundPadding","textBackgroundVisible","offsetX","offsetY","selectedData","dx","dy","markPointStyle","ANNOTATION_Z_INDEX","res","marks","mark"],"mappings":"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"}
|
|
@@ -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 =
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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 =
|
|
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":";AAGO,MAAMA,mBAAmC,CAACC,MAAMC;IACrD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGH;IAClD,MAAM,EAAEI,QAAQ,EAAEC,UAAU,EAAE,GAAGJ,kBAAkB,CAAC,EAAE;IAItD,MAAMK,kBAAmBN,cAAc,QAAQ,EAAY,aAAa,EAAE;IAE1E,MAAMO,cAAcC,gBAAgBL,UAAU,GAAG,CAAC,CAACM,IAAMA,EAAE,EAAE;IAG7D,IAAI,CAACH,gBAAgB,MAAM,EAAE;QAC3BP,OAAO,IAAI,GAAG;YAAC;gBAAE,IAAI;gBAAQ,QAAQG;YAAQ;SAAE;QAC/C,OAAOH;IACT;IAGA,MAAMW,OAAOC,UAAUT,SAASI,iBAAiBF,UAAUC,YAAYE;IAEvER,OAAO,IAAI,GAAG;QACZ;YACE,IAAI;YACJ,QAAQW;QACV;KACD;IAED,OAAOX;AACT;AASO,MAAMY,YAAY,CACvBT,SACAI,iBACAF,UACAC,YACAE,cAAwB,EAAE;IAE1B,MAAM,EAAEK,YAAY,EAAEC,SAAS,EAAEC,WAAW,EAAE,GAAGV;IACjD,MAAM,EAAEW,aAAa,EAAEC,eAAe,EAAE,GAAGX;IAG3C,MAAMY,gBAAgB;QAACJ;QAAWC;QAAaC;QAAeC;KAAgB,CAAC,MAAM,CAACE;IAEtF,MAAMC,OAAc;QAAE,MAAM;QAAQ,UAAU,EAAE;IAAC;IAEjDjB,QAAQ,OAAO,CAAC,CAACkB;QACf,IAAIC,cAAcF;QAGlB,IAAK,IAAIG,IAAI,GAAGA,IAAIhB,gBAAgB,MAAM,EAAEgB,IAAK;YAC/C,MAAMC,QAAQjB,eAAe,CAACgB,EAAE;YAChC,MAAME,QAAQC,OAAOL,KAAK,CAACG,MAAM;YAEjC,IAAIG,QAAQL,YAAY,QAAQ,CAAC,IAAI,CAAC,CAACM,IAAaA,EAAE,IAAI,KAAKH;YAE/D,IAAI,CAACE,OAAO;gBACVA,QAAQ;oBAAE,MAAMF;oBAAO,UAAU,EAAE;gBAAC;gBACpC,IAAK,IAAII,IAAI,GAAGA,KAAKN,GAAGM,IACtBF,KAAK,CAACpB,eAAe,CAACsB,EAAE,CAAC,GAAGR,KAAK,CAACd,eAAe,CAACsB,EAAE,CAAC;gBAEvDP,YAAY,QAAQ,CAAC,IAAI,CAACK;YAC5B;YAEAL,cAAcK;QAChB;QAGA,IAAI,CAACL,YAAY,MAAM,EAAE;YACvBQ,OAAO,MAAM,CAACR,aAAaD;YAC3BC,YAAY,MAAM,GAAG;YAGrB,IAAIT,cAAcS,WAAW,CAACT,aAAa,GAAG;YAC9CL,YAAY,OAAO,CAAC,CAACuB;gBACnBT,WAAW,CAACS,IAAI,GAAG;YACrB;YAGAb,cAAc,OAAO,CAAC,CAACM;gBACrBF,WAAW,CAAC,CAAC,KAAK,EAAEE,OAAO,CAAC,GAAG,IAAIQ;YACrC;QACF;QAGA,IAAInB,gBAAgBQ,AAAwBY,WAAxBZ,KAAK,CAACR,aAAa,EACrCS,WAAW,CAACT,aAAa,IAAIqB,OAAOb,KAAK,CAACR,aAAa;QAIzDL,YAAY,OAAO,CAAC,CAACuB;YACnB,IAAIV,AAAeY,WAAfZ,KAAK,CAACU,IAAI,EACZT,WAAW,CAACS,IAAI,GAAIT,AAAAA,CAAAA,WAAW,CAACS,IAAI,IAAI,KAAKG,OAAOb,KAAK,CAACU,IAAI;QAElE;QAGAb,cAAc,OAAO,CAAC,CAACM;YACrB,IAAIH,KAAK,CAACG,MAAM,EAAEF,WAAW,CAAC,CAAC,KAAK,EAAEE,OAAO,CAAC,CAAC,GAAG,CAACH,KAAK,CAACG,MAAM;QACjE;QAGA,IAAIX,cACFS,YAAY,KAAK,GAAGA,WAAW,CAACT,aAAa;IAEjD;IAGA,MAAMsB,cAAc,CAACC;QACnBlB,cAAc,OAAO,CAAC,CAACM;YACrB,MAAMa,SAAS,CAAC,KAAK,EAAEb,OAAO;YAC9B,IAAIY,IAAI,CAACC,OAAO,EAAE;gBAChBD,IAAI,CAACZ,MAAM,GAAGc,MAAM,IAAI,CAACF,IAAI,CAACC,OAAO,EAAE,IAAI,CAAC;gBAC5C,OAAOD,IAAI,CAACC,OAAO;YACrB;QACF;IACF;IAGA,MAAME,iCAAiC,CAACH;QACtClB,cAAc,OAAO,CAAC,CAACM;YACrB,MAAMgB,SAAS,IAAIR;YACnBI,KAAK,QAAQ,CAAC,OAAO,CAAC,CAACT;gBACrB,IAAIA,KAAK,CAACH,MAAM,EACdG,KAAK,CAACH,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAACiB,IAAcD,OAAO,GAAG,CAACC;YAE9D;YACA,IAAID,OAAO,IAAI,GAAG,GAChBJ,IAAI,CAACZ,MAAM,GAAGc,MAAM,IAAI,CAACE,QAAQ,IAAI,CAAC;QAE1C;IACF;IAGA,MAAME,YAAY,CAACN;QACjB,IAAIA,KAAK,MAAM,EAAE;YACfD,YAAYC;YACZ,OAAOA,KAAK,KAAK,IAAI;QACvB;QAEA,IAAI,CAACA,KAAK,QAAQ,EAAE,QAClB,OAAOA,KAAK,KAAK,IAAI;QAGvB,IAAIO,MAAM;QACVP,KAAK,QAAQ,CAAC,OAAO,CAAC,CAACT;YACrBgB,OAAOD,UAAUf;YACjBnB,YAAY,OAAO,CAAC,CAACuB;gBACnBK,IAAI,CAACL,IAAI,GAAIK,AAAAA,CAAAA,IAAI,CAACL,IAAI,IAAI,KAAMJ,CAAAA,KAAK,CAACI,IAAI,IAAI;YAChD;QACF;QAEAK,KAAK,KAAK,GAAGO;QACb,IAAI9B,cAAcuB,IAAI,CAACvB,aAAa,GAAG8B;QAEvCJ,+BAA+BH;QAE/B,OAAOO;IACT;IAEAvB,KAAK,QAAQ,CAAC,OAAO,CAACsB;IAEtB,OAAOtB,KAAK,QAAQ;AACtB"}
|
|
@@ -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
|
-
|
|
10
|
+
import { datasetPivotHierarchy } from "./datasetPivotHierarchy.js";
|
|
11
|
+
export { datasetBoxplot, datasetDualAxis, datasetHierarchy, datasetHistogram, datasetPivot, datasetPivotHierarchy, datasetScatter, datasetXY, datasetYX, progressive };
|