@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.
Files changed (44) 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/annotation/annotationPointCommon.js +14 -1
  14. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js.map +1 -1
  15. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.d.ts +9 -1
  16. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js +51 -46
  17. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetHierarchy.js.map +1 -1
  18. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.d.ts +2 -0
  19. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js +72 -0
  20. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetPivotHierarchy.js.map +1 -0
  21. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -0
  22. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.js +2 -1
  23. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.d.ts +2 -0
  24. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js +7 -0
  25. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/drill.js.map +1 -0
  26. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.d.ts +1 -0
  27. package/dist/esm/pipeline/spec/chart/pipes/hierarchy/index.js +2 -0
  28. package/dist/esm/pipeline/spec/chart/pipes/index.d.ts +1 -0
  29. package/dist/esm/pipeline/spec/chart/pipes/index.js +1 -0
  30. package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js +0 -1
  31. package/dist/esm/pipeline/spec/chart/pipes/init/circlePacking.js.map +1 -1
  32. package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js +0 -1
  33. package/dist/esm/pipeline/spec/chart/pipes/init/sunburst.js.map +1 -1
  34. package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js +0 -1
  35. package/dist/esm/pipeline/spec/chart/pipes/init/treeMap.js.map +1 -1
  36. package/dist/esm/pipeline/utils/constant.d.ts +3 -0
  37. package/dist/esm/pipeline/utils/constant.js +3 -0
  38. package/dist/esm/pipeline/utils/constant.js.map +1 -1
  39. package/dist/esm/pipeline/utils/measures/typeGuard.d.ts +2 -2
  40. package/dist/esm/pipeline/utils/measures/typeGuard.js +1 -1
  41. package/dist/esm/pipeline/utils/measures/typeGuard.js.map +1 -1
  42. package/dist/umd/index.js +152 -56
  43. package/dist/umd/index.js.map +1 -1
  44. package/package.json +4 -4
@@ -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,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/init/sunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/init/sunburst.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ISunburstChartSpec } from '@visactor/vchart'\n\nexport const initSunburst: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ISunburstChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo, encoding } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'sunburst'\n result.categoryField = 'name'\n result.valueField = foldInfo.measureValue\n result.outerRadius = 1\n result.innerRadius = 0\n result.gap = 0\n result.offsetX = 0\n result.offsetY = 0\n result.drill = true\n result.padding = 0\n result.labelAutoVisible = {\n enable: true,\n circumference: 5,\n }\n result.sunburst = {\n visible: true,\n style: {\n fillOpacity: (datum: any) => {\n if (encoding.hierarchy?.length === 1) {\n return 1\n }\n return datum.isLeaf ? 0.4 : 0.8\n },\n },\n }\n\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initSunburst","spec","context","result","advancedVSeed","datasetReshapeInfo","encoding","foldInfo","datum"],"mappings":"AAGO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAEC,QAAQ,EAAE,GAAGF;IACzC,MAAM,EAAEG,QAAQ,EAAE,GAAGF,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGI,SAAS,YAAY;IACzCJ,OAAO,WAAW,GAAG;IACrBA,OAAO,WAAW,GAAG;IACrBA,OAAO,GAAG,GAAG;IACbA,OAAO,OAAO,GAAG;IACjBA,OAAO,OAAO,GAAG;IACjBA,OAAO,KAAK,GAAG;IACfA,OAAO,OAAO,GAAG;IACjBA,OAAO,gBAAgB,GAAG;QACxB,QAAQ;QACR,eAAe;IACjB;IACAA,OAAO,QAAQ,GAAG;QAChB,SAAS;QACT,OAAO;YACL,aAAa,CAACK;gBACZ,IAAIF,SAAS,SAAS,EAAE,WAAW,GACjC,OAAO;gBAET,OAAOE,MAAM,MAAM,GAAG,MAAM;YAC9B;QACF;IACF;IAEAL,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/init/sunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/init/sunburst.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ISunburstChartSpec } from '@visactor/vchart'\n\nexport const initSunburst: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ISunburstChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo, encoding } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'sunburst'\n result.categoryField = 'name'\n result.valueField = foldInfo.measureValue\n result.outerRadius = 1\n result.innerRadius = 0\n result.gap = 0\n result.offsetX = 0\n result.offsetY = 0\n result.padding = 0\n result.labelAutoVisible = {\n enable: true,\n circumference: 5,\n }\n result.sunburst = {\n visible: true,\n style: {\n fillOpacity: (datum: any) => {\n if (encoding.hierarchy?.length === 1) {\n return 1\n }\n return datum.isLeaf ? 0.4 : 0.8\n },\n },\n }\n\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initSunburst","spec","context","result","advancedVSeed","datasetReshapeInfo","encoding","foldInfo","datum"],"mappings":"AAGO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAEC,QAAQ,EAAE,GAAGF;IACzC,MAAM,EAAEG,QAAQ,EAAE,GAAGF,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGI,SAAS,YAAY;IACzCJ,OAAO,WAAW,GAAG;IACrBA,OAAO,WAAW,GAAG;IACrBA,OAAO,GAAG,GAAG;IACbA,OAAO,OAAO,GAAG;IACjBA,OAAO,OAAO,GAAG;IACjBA,OAAO,OAAO,GAAG;IACjBA,OAAO,gBAAgB,GAAG;QACxB,QAAQ;QACR,eAAe;IACjB;IACAA,OAAO,QAAQ,GAAG;QAChB,SAAS;QACT,OAAO;YACL,aAAa,CAACK;gBACZ,IAAIF,SAAS,SAAS,EAAE,WAAW,GACjC,OAAO;gBAET,OAAOE,MAAM,MAAM,GAAG,MAAM;YAC9B;QACF;IACF;IAEAL,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
@@ -9,7 +9,6 @@ const initTreeMap = (spec, context)=>{
9
9
  result.categoryField = 'name';
10
10
  result.valueField = foldInfo.measureValue;
11
11
  result.padding = 0;
12
- result.drill = true;
13
12
  result.animationEnter = {
14
13
  easing: 'cubicInOut'
15
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/init/treeMap.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/init/treeMap.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ITreemapChartSpec } from '@visactor/vchart'\n\nexport const initTreeMap: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'treemap'\n result.categoryField = 'name'\n result.valueField = foldInfo.measureValue\n result.padding = 0\n result.drill = true\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initTreeMap","spec","context","result","advancedVSeed","datasetReshapeInfo","foldInfo"],"mappings":"AAGO,MAAMA,cAA8B,CAACC,MAAMC;IAChD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGD;IAC/B,MAAM,EAAEE,QAAQ,EAAE,GAAGD,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGG,SAAS,YAAY;IACzCH,OAAO,OAAO,GAAG;IACjBA,OAAO,KAAK,GAAG;IACfA,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/treeMap.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/init/treeMap.ts"],"sourcesContent":["import type { VChartSpecPipe } from 'src/types'\nimport type { ITreemapChartSpec } from '@visactor/vchart'\n\nexport const initTreeMap: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { foldInfo } = datasetReshapeInfo[0]\n\n result.type = 'treemap'\n result.categoryField = 'name'\n result.valueField = foldInfo.measureValue\n result.padding = 0\n result.animationEnter = {\n easing: 'cubicInOut',\n }\n result.animationExit = {\n easing: 'cubicInOut',\n }\n result.animationUpdate = {\n easing: 'cubicInOut',\n }\n\n return result\n}\n"],"names":["initTreeMap","spec","context","result","advancedVSeed","datasetReshapeInfo","foldInfo"],"mappings":"AAGO,MAAMA,cAA8B,CAACC,MAAMC;IAChD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGD;IAC/B,MAAM,EAAEE,QAAQ,EAAE,GAAGD,kBAAkB,CAAC,EAAE;IAE1CF,OAAO,IAAI,GAAG;IACdA,OAAO,aAAa,GAAG;IACvBA,OAAO,UAAU,GAAGG,SAAS,YAAY;IACzCH,OAAO,OAAO,GAAG;IACjBA,OAAO,cAAc,GAAG;QACtB,QAAQ;IACV;IACAA,OAAO,aAAa,GAAG;QACrB,QAAQ;IACV;IACAA,OAAO,eAAe,GAAG;QACvB,QAAQ;IACV;IAEA,OAAOA;AACT"}
@@ -28,6 +28,9 @@ export declare const ChartTypeEnum: {
28
28
  readonly Pie: "pie";
29
29
  readonly Donut: "donut";
30
30
  readonly Radar: "radar";
31
+ readonly CirclePacking: "circlePacking";
32
+ readonly Sunburst: "sunburst";
33
+ readonly TreeMap: "treeMap";
31
34
  readonly Funnel: "funnel";
32
35
  readonly Heatmap: "heatmap";
33
36
  readonly Boxplot: "boxPlot";
@@ -28,6 +28,9 @@ const ChartTypeEnum = {
28
28
  Pie: 'pie',
29
29
  Donut: 'donut',
30
30
  Radar: 'radar',
31
+ CirclePacking: 'circlePacking',
32
+ Sunburst: 'sunburst',
33
+ TreeMap: 'treeMap',
31
34
  Funnel: 'funnel',
32
35
  Heatmap: 'heatmap',
33
36
  Boxplot: 'boxPlot',
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/utils/constant.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/constant.ts"],"sourcesContent":["// 标注层 z-index\nexport const ANNOTATION_Z_INDEX = 1000\n// 线性轴 顶部空隙 预留5px\nexport const LINEAR_AXIS_INNER_OFFSET_TOP = 12\n// 双轴图 柱图 ZIndex\nexport const DUAL_AXIS_CHART_COLUMN_Z_INDEX = 1000\n// 双轴图 非柱图 ZIndex\nexport const DUAL_AXIS_CHART_NON_COLUMN_Z_INDEX = 1001\n// 双轴图 标注层 ZIndex\nexport const DUAL_AXIS_LABEL_Z_INDEX = 1002\n// 默认父级id\nexport const DEFAULT_PARENT_ID = '__DefaultParentId__'\n// 轴标签间距\nexport const AXIS_LABEL_SPACE = 8\n// 透视轴 band 类型内边距\nexport const BAND_AXIS_INNER_OFFSET_IN_PIVOT = 2\n\n// 图表类型枚举\nexport const ChartTypeEnum = {\n Table: 'table',\n PivotTable: 'pivotTable',\n // cartesian\n Line: 'line',\n Column: 'column',\n ColumnPercent: 'columnPercent',\n ColumnParallel: 'columnParallel',\n Bar: 'bar',\n RaceBar: 'raceBar',\n RaceColumn: 'raceColumn',\n RaceScatter: 'raceScatter',\n BarPercent: 'barPercent',\n BarParallel: 'barParallel',\n Area: 'area',\n AreaPercent: 'areaPercent',\n DualAxis: 'dualAxis',\n Scatter: 'scatter',\n // polar\n Rose: 'rose',\n RoseParallel: 'roseParallel',\n Pie: 'pie',\n Donut: 'donut',\n Radar: 'radar',\n // other\n Funnel: 'funnel',\n Heatmap: 'heatmap',\n Boxplot: 'boxPlot',\n Histogram: 'histogram',\n} as const\n\n// Heatmap hide cell\nexport const DATUM_HIDE_KEY = '__VSEED_HideItem__'\n"],"names":["ANNOTATION_Z_INDEX","LINEAR_AXIS_INNER_OFFSET_TOP","DUAL_AXIS_CHART_COLUMN_Z_INDEX","DUAL_AXIS_CHART_NON_COLUMN_Z_INDEX","DUAL_AXIS_LABEL_Z_INDEX","DEFAULT_PARENT_ID","AXIS_LABEL_SPACE","BAND_AXIS_INNER_OFFSET_IN_PIVOT","ChartTypeEnum","DATUM_HIDE_KEY"],"mappings":"AACO,MAAMA,qBAAqB;AAE3B,MAAMC,+BAA+B;AAErC,MAAMC,iCAAiC;AAEvC,MAAMC,qCAAqC;AAE3C,MAAMC,0BAA0B;AAEhC,MAAMC,oBAAoB;AAE1B,MAAMC,mBAAmB;AAEzB,MAAMC,kCAAkC;AAGxC,MAAMC,gBAAgB;IAC3B,OAAO;IACP,YAAY;IAEZ,MAAM;IACN,QAAQ;IACR,eAAe;IACf,gBAAgB;IAChB,KAAK;IACL,SAAS;IACT,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,MAAM;IACN,aAAa;IACb,UAAU;IACV,SAAS;IAET,MAAM;IACN,cAAc;IACd,KAAK;IACL,OAAO;IACP,OAAO;IAEP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,WAAW;AACb;AAGO,MAAMC,iBAAiB"}
1
+ {"version":3,"file":"pipeline/utils/constant.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/constant.ts"],"sourcesContent":["// 标注层 z-index\nexport const ANNOTATION_Z_INDEX = 1000\n// 线性轴 顶部空隙 预留5px\nexport const LINEAR_AXIS_INNER_OFFSET_TOP = 12\n// 双轴图 柱图 ZIndex\nexport const DUAL_AXIS_CHART_COLUMN_Z_INDEX = 1000\n// 双轴图 非柱图 ZIndex\nexport const DUAL_AXIS_CHART_NON_COLUMN_Z_INDEX = 1001\n// 双轴图 标注层 ZIndex\nexport const DUAL_AXIS_LABEL_Z_INDEX = 1002\n// 默认父级id\nexport const DEFAULT_PARENT_ID = '__DefaultParentId__'\n// 轴标签间距\nexport const AXIS_LABEL_SPACE = 8\n// 透视轴 band 类型内边距\nexport const BAND_AXIS_INNER_OFFSET_IN_PIVOT = 2\n\n// 图表类型枚举\nexport const ChartTypeEnum = {\n Table: 'table',\n PivotTable: 'pivotTable',\n // cartesian\n Line: 'line',\n Column: 'column',\n ColumnPercent: 'columnPercent',\n ColumnParallel: 'columnParallel',\n Bar: 'bar',\n RaceBar: 'raceBar',\n RaceColumn: 'raceColumn',\n RaceScatter: 'raceScatter',\n BarPercent: 'barPercent',\n BarParallel: 'barParallel',\n Area: 'area',\n AreaPercent: 'areaPercent',\n DualAxis: 'dualAxis',\n Scatter: 'scatter',\n // polar\n Rose: 'rose',\n RoseParallel: 'roseParallel',\n Pie: 'pie',\n Donut: 'donut',\n Radar: 'radar',\n // hierarchical\n CirclePacking: 'circlePacking',\n Sunburst: 'sunburst',\n TreeMap: 'treeMap',\n // other\n Funnel: 'funnel',\n Heatmap: 'heatmap',\n Boxplot: 'boxPlot',\n Histogram: 'histogram',\n} as const\n\n// Heatmap hide cell\nexport const DATUM_HIDE_KEY = '__VSEED_HideItem__'\n"],"names":["ANNOTATION_Z_INDEX","LINEAR_AXIS_INNER_OFFSET_TOP","DUAL_AXIS_CHART_COLUMN_Z_INDEX","DUAL_AXIS_CHART_NON_COLUMN_Z_INDEX","DUAL_AXIS_LABEL_Z_INDEX","DEFAULT_PARENT_ID","AXIS_LABEL_SPACE","BAND_AXIS_INNER_OFFSET_IN_PIVOT","ChartTypeEnum","DATUM_HIDE_KEY"],"mappings":"AACO,MAAMA,qBAAqB;AAE3B,MAAMC,+BAA+B;AAErC,MAAMC,iCAAiC;AAEvC,MAAMC,qCAAqC;AAE3C,MAAMC,0BAA0B;AAEhC,MAAMC,oBAAoB;AAE1B,MAAMC,mBAAmB;AAEzB,MAAMC,kCAAkC;AAGxC,MAAMC,gBAAgB;IAC3B,OAAO;IACP,YAAY;IAEZ,MAAM;IACN,QAAQ;IACR,eAAe;IACf,gBAAgB;IAChB,KAAK;IACL,SAAS;IACT,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,MAAM;IACN,aAAa;IACb,UAAU;IACV,SAAS;IAET,MAAM;IACN,cAAc;IACd,KAAK;IACL,OAAO;IACP,OAAO;IAEP,eAAe;IACf,UAAU;IACV,SAAS;IAET,QAAQ;IACR,SAAS;IACT,SAAS;IACT,WAAW;AACb;AAGO,MAAMC,iBAAiB"}
@@ -1,5 +1,5 @@
1
- import type { Measure, MeasureGroup } from '../../../types';
1
+ import type { ChartType, Measure, MeasureGroup } from '../../../types';
2
2
  export declare const isMeasure: (measure: Measure | MeasureGroup) => measure is Measure;
3
3
  export declare const isMeasureGroup: (measure: Measure | MeasureGroup) => measure is MeasureGroup;
4
4
  export declare const isMeasures: (measures: Measure[] | MeasureGroup[]) => measures is Measure[];
5
- export declare const isPositionMeasure: (measure: Measure, chartType: string) => boolean;
5
+ export declare const isPositionMeasure: (measure: Measure, chartType: ChartType) => boolean;
@@ -4,7 +4,7 @@ const isMeasureGroup = (measure)=>'children' in measure;
4
4
  const isMeasures = (measures)=>measures.every(isMeasure);
5
5
  const isPositionMeasure = (measure, chartType)=>{
6
6
  if (!measure.encoding) return true;
7
- if (chartType === ChartTypeEnum.Funnel) return 'size' === measure.encoding;
7
+ if (ChartTypeEnum.Funnel === chartType || ChartTypeEnum.CirclePacking === chartType || ChartTypeEnum.Sunburst === chartType || ChartTypeEnum.TreeMap === chartType) return 'size' === measure.encoding;
8
8
  if (chartType === ChartTypeEnum.Heatmap) return 'color' === measure.encoding;
9
9
  if ([
10
10
  ChartTypeEnum.Pie,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/utils/measures/typeGuard.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/measures/typeGuard.ts"],"sourcesContent":["import type { Measure, MeasureGroup } from 'src/types'\nimport { ChartTypeEnum } from '../constant'\n\nexport const isMeasure = (measure: Measure | MeasureGroup): measure is Measure => {\n return !('children' in measure)\n}\n\nexport const isMeasureGroup = (measure: Measure | MeasureGroup): measure is MeasureGroup => {\n return 'children' in measure\n}\n\nexport const isMeasures = (measures: Measure[] | MeasureGroup[]): measures is Measure[] => {\n return measures.every(isMeasure)\n}\n\nexport const isPositionMeasure = (measure: Measure, chartType: string): boolean => {\n if (!measure.encoding) {\n return true\n }\n\n if (chartType === ChartTypeEnum.Funnel) {\n return measure.encoding === 'size'\n }\n\n if (chartType === ChartTypeEnum.Heatmap) {\n return measure.encoding === 'color'\n }\n\n if (\n ([ChartTypeEnum.Pie, ChartTypeEnum.Donut, ChartTypeEnum.Rose, ChartTypeEnum.RoseParallel] as string[]).includes(\n chartType,\n )\n ) {\n return measure.encoding === 'angle'\n }\n\n if (chartType === ChartTypeEnum.DualAxis) {\n return ['primaryYAxis', 'secondaryYAxis'].includes(measure.encoding as string)\n }\n\n if (ChartTypeEnum.Radar === chartType) {\n return measure.encoding === 'radius'\n }\n\n if (\n (\n [\n ChartTypeEnum.Line,\n ChartTypeEnum.Area,\n ChartTypeEnum.AreaPercent,\n ChartTypeEnum.Column,\n ChartTypeEnum.ColumnParallel,\n ChartTypeEnum.ColumnPercent,\n ] as string[]\n ).includes(chartType)\n ) {\n return measure.encoding === 'yAxis'\n }\n\n if (([ChartTypeEnum.Bar, ChartTypeEnum.BarParallel, ChartTypeEnum.BarPercent] as string[]).includes(chartType)) {\n return measure.encoding === 'xAxis'\n }\n\n return chartType === ChartTypeEnum.Boxplot && measure.encoding === 'value'\n}\n"],"names":["isMeasure","measure","isMeasureGroup","isMeasures","measures","isPositionMeasure","chartType","ChartTypeEnum"],"mappings":";AAGO,MAAMA,YAAY,CAACC,UACjB,CAAE,eAAcA,OAAM;AAGxB,MAAMC,iBAAiB,CAACD,UACtB,cAAcA;AAGhB,MAAME,aAAa,CAACC,WAClBA,SAAS,KAAK,CAACJ;AAGjB,MAAMK,oBAAoB,CAACJ,SAAkBK;IAClD,IAAI,CAACL,QAAQ,QAAQ,EACnB,OAAO;IAGT,IAAIK,cAAcC,cAAc,MAAM,EACpC,OAAON,AAAqB,WAArBA,QAAQ,QAAQ;IAGzB,IAAIK,cAAcC,cAAc,OAAO,EACrC,OAAON,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IACG;QAACM,cAAc,GAAG;QAAEA,cAAc,KAAK;QAAEA,cAAc,IAAI;QAAEA,cAAc,YAAY;KAAC,CAAc,QAAQ,CAC7GD,YAGF,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IAAIK,cAAcC,cAAc,QAAQ,EACtC,OAAO;QAAC;QAAgB;KAAiB,CAAC,QAAQ,CAACN,QAAQ,QAAQ;IAGrE,IAAIM,cAAc,KAAK,KAAKD,WAC1B,OAAOL,AAAqB,aAArBA,QAAQ,QAAQ;IAGzB,IAEI;QACEM,cAAc,IAAI;QAClBA,cAAc,IAAI;QAClBA,cAAc,WAAW;QACzBA,cAAc,MAAM;QACpBA,cAAc,cAAc;QAC5BA,cAAc,aAAa;KAC5B,CACD,QAAQ,CAACD,YAEX,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IAAK;QAACM,cAAc,GAAG;QAAEA,cAAc,WAAW;QAAEA,cAAc,UAAU;KAAC,CAAc,QAAQ,CAACD,YAClG,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,OAAOK,cAAcC,cAAc,OAAO,IAAIN,AAAqB,YAArBA,QAAQ,QAAQ;AAChE"}
1
+ {"version":3,"file":"pipeline/utils/measures/typeGuard.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/measures/typeGuard.ts"],"sourcesContent":["import type { ChartType, Measure, MeasureGroup } from 'src/types'\nimport { ChartTypeEnum } from '../constant'\n\nexport const isMeasure = (measure: Measure | MeasureGroup): measure is Measure => {\n return !('children' in measure)\n}\n\nexport const isMeasureGroup = (measure: Measure | MeasureGroup): measure is MeasureGroup => {\n return 'children' in measure\n}\n\nexport const isMeasures = (measures: Measure[] | MeasureGroup[]): measures is Measure[] => {\n return measures.every(isMeasure)\n}\n\nexport const isPositionMeasure = (measure: Measure, chartType: ChartType): boolean => {\n if (!measure.encoding) {\n return true\n }\n\n if (\n ChartTypeEnum.Funnel === chartType ||\n ChartTypeEnum.CirclePacking === chartType ||\n ChartTypeEnum.Sunburst === chartType ||\n ChartTypeEnum.TreeMap === chartType\n ) {\n return measure.encoding === 'size'\n }\n\n if (chartType === ChartTypeEnum.Heatmap) {\n return measure.encoding === 'color'\n }\n\n if (\n ([ChartTypeEnum.Pie, ChartTypeEnum.Donut, ChartTypeEnum.Rose, ChartTypeEnum.RoseParallel] as string[]).includes(\n chartType,\n )\n ) {\n return measure.encoding === 'angle'\n }\n\n if (chartType === ChartTypeEnum.DualAxis) {\n return ['primaryYAxis', 'secondaryYAxis'].includes(measure.encoding as string)\n }\n\n if (ChartTypeEnum.Radar === chartType) {\n return measure.encoding === 'radius'\n }\n\n if (\n (\n [\n ChartTypeEnum.Line,\n ChartTypeEnum.Area,\n ChartTypeEnum.AreaPercent,\n ChartTypeEnum.Column,\n ChartTypeEnum.ColumnParallel,\n ChartTypeEnum.ColumnPercent,\n ] as string[]\n ).includes(chartType)\n ) {\n return measure.encoding === 'yAxis'\n }\n\n if (([ChartTypeEnum.Bar, ChartTypeEnum.BarParallel, ChartTypeEnum.BarPercent] as string[]).includes(chartType)) {\n return measure.encoding === 'xAxis'\n }\n\n return chartType === ChartTypeEnum.Boxplot && measure.encoding === 'value'\n}\n"],"names":["isMeasure","measure","isMeasureGroup","isMeasures","measures","isPositionMeasure","chartType","ChartTypeEnum"],"mappings":";AAGO,MAAMA,YAAY,CAACC,UACjB,CAAE,eAAcA,OAAM;AAGxB,MAAMC,iBAAiB,CAACD,UACtB,cAAcA;AAGhB,MAAME,aAAa,CAACC,WAClBA,SAAS,KAAK,CAACJ;AAGjB,MAAMK,oBAAoB,CAACJ,SAAkBK;IAClD,IAAI,CAACL,QAAQ,QAAQ,EACnB,OAAO;IAGT,IACEM,cAAc,MAAM,KAAKD,aACzBC,cAAc,aAAa,KAAKD,aAChCC,cAAc,QAAQ,KAAKD,aAC3BC,cAAc,OAAO,KAAKD,WAE1B,OAAOL,AAAqB,WAArBA,QAAQ,QAAQ;IAGzB,IAAIK,cAAcC,cAAc,OAAO,EACrC,OAAON,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IACG;QAACM,cAAc,GAAG;QAAEA,cAAc,KAAK;QAAEA,cAAc,IAAI;QAAEA,cAAc,YAAY;KAAC,CAAc,QAAQ,CAC7GD,YAGF,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IAAIK,cAAcC,cAAc,QAAQ,EACtC,OAAO;QAAC;QAAgB;KAAiB,CAAC,QAAQ,CAACN,QAAQ,QAAQ;IAGrE,IAAIM,cAAc,KAAK,KAAKD,WAC1B,OAAOL,AAAqB,aAArBA,QAAQ,QAAQ;IAGzB,IAEI;QACEM,cAAc,IAAI;QAClBA,cAAc,IAAI;QAClBA,cAAc,WAAW;QACzBA,cAAc,MAAM;QACpBA,cAAc,cAAc;QAC5BA,cAAc,aAAa;KAC5B,CACD,QAAQ,CAACD,YAEX,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,IAAK;QAACM,cAAc,GAAG;QAAEA,cAAc,WAAW;QAAEA,cAAc,UAAU;KAAC,CAAc,QAAQ,CAACD,YAClG,OAAOL,AAAqB,YAArBA,QAAQ,QAAQ;IAGzB,OAAOK,cAAcC,cAAc,OAAO,IAAIN,AAAqB,YAArBA,QAAQ,QAAQ;AAChE"}
package/dist/umd/index.js CHANGED
@@ -462,6 +462,7 @@
462
462
  builder.spec = spec;
463
463
  return spec;
464
464
  } catch (e) {
465
+ console.error(e);
465
466
  throw new Error(`buildSpec error: ${e.message}`);
466
467
  } finally{
467
468
  const end = 'undefined' != typeof performance ? performance.now() : Date.now();
@@ -578,6 +579,9 @@
578
579
  Pie: 'pie',
579
580
  Donut: 'donut',
580
581
  Radar: 'radar',
582
+ CirclePacking: 'circlePacking',
583
+ Sunburst: 'sunburst',
584
+ TreeMap: 'treeMap',
581
585
  Funnel: 'funnel',
582
586
  Heatmap: 'heatmap',
583
587
  Boxplot: 'boxPlot',
@@ -589,7 +593,7 @@
589
593
  const isMeasures = (measures)=>measures.every(isMeasure);
590
594
  const isPositionMeasure = (measure, chartType)=>{
591
595
  if (!measure.encoding) return true;
592
- if (chartType === ChartTypeEnum.Funnel) return 'size' === measure.encoding;
596
+ if (ChartTypeEnum.Funnel === chartType || ChartTypeEnum.CirclePacking === chartType || ChartTypeEnum.Sunburst === chartType || ChartTypeEnum.TreeMap === chartType) return 'size' === measure.encoding;
593
597
  if (chartType === ChartTypeEnum.Heatmap) return 'color' === measure.encoding;
594
598
  if ([
595
599
  ChartTypeEnum.Pie,
@@ -4066,7 +4070,20 @@
4066
4070
  const findSelectedDatas = options.findSelectedDatas ?? ((dataset, s)=>dataset.filter((datum)=>selector_selector(datum, s)));
4067
4071
  const generateMarkPoint = options.generateMarkPoint ?? ((datum)=>[
4068
4072
  {
4069
- coordinate: (data)=>data.find((item)=>isSubset(datum, item))
4073
+ coordinate: (data, context)=>{
4074
+ const targetDatum = data.find((item)=>isSubset(datum, item));
4075
+ if (true === context.getStack()) {
4076
+ const stackedDatum = {
4077
+ ...datum,
4078
+ ...targetDatum
4079
+ };
4080
+ return {
4081
+ ...stackedDatum,
4082
+ [context.getStackValueField()]: stackedDatum['__VCHART_STACK_END']
4083
+ };
4084
+ }
4085
+ return targetDatum;
4086
+ }
4070
4087
  }
4071
4088
  ]);
4072
4089
  return (spec, context)=>{
@@ -14304,6 +14321,8 @@
14304
14321
  encoding.tooltip = chunk_QJLMYOTX_i(dimensions.map((item)=>item.id));
14305
14322
  encoding.tooltip = encoding.tooltip.filter((d)=>d !== MeasureId);
14306
14323
  encoding.label = chunk_QJLMYOTX_i(dimensions.filter((item)=>'label' === item.encoding).map((item)=>item.id));
14324
+ encoding.row = chunk_QJLMYOTX_i(dimensions.filter((item)=>'row' === item.encoding).map((item)=>item.id));
14325
+ encoding.column = chunk_QJLMYOTX_i(dimensions.filter((item)=>'column' === item.encoding).map((item)=>item.id));
14307
14326
  };
14308
14327
  const hierarchy_generateDefaultMeasureEncoding = (measures, encoding)=>{
14309
14328
  encoding.size = chunk_QJLMYOTX_i(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
@@ -14391,7 +14410,6 @@
14391
14410
  result.categoryField = 'name';
14392
14411
  result.valueField = foldInfo.measureValue;
14393
14412
  result.padding = 0;
14394
- result.drill = true;
14395
14413
  result.animationEnter = {
14396
14414
  easing: 'cubicInOut'
14397
14415
  };
@@ -14403,15 +14421,19 @@
14403
14421
  };
14404
14422
  return result;
14405
14423
  };
14424
+ const drill = (spec)=>({
14425
+ ...spec,
14426
+ drill: true
14427
+ });
14406
14428
  const datasetHierarchy = (spec, context)=>{
14407
14429
  const result = {
14408
14430
  ...spec
14409
14431
  };
14410
14432
  const { advancedVSeed } = context;
14411
- const { datasetReshapeInfo, dataset } = advancedVSeed;
14412
- const { foldInfo } = datasetReshapeInfo[0];
14433
+ const { datasetReshapeInfo, dataset, measures } = advancedVSeed;
14434
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
14413
14435
  const hierarchyFields = advancedVSeed.encoding?.hierarchy || [];
14414
- const measureKeys = advancedVSeed.measures?.map((m)=>m.id) || [];
14436
+ const measureKeys = findAllMeasures(measures).map((m)=>m.id);
14415
14437
  if (!hierarchyFields.length) {
14416
14438
  result.data = [
14417
14439
  {
@@ -14421,7 +14443,7 @@
14421
14443
  ];
14422
14444
  return result;
14423
14445
  }
14424
- const tree = buildTree(dataset, hierarchyFields, foldInfo, measureKeys);
14446
+ const tree = buildTree(dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys);
14425
14447
  result.data = [
14426
14448
  {
14427
14449
  id: 'data',
@@ -14430,8 +14452,15 @@
14430
14452
  ];
14431
14453
  return result;
14432
14454
  };
14433
- const buildTree = (dataset, hierarchyFields, foldInfo, measureKeys = [])=>{
14455
+ const buildTree = (dataset, hierarchyFields, foldInfo, unfoldInfo, measureKeys = [])=>{
14434
14456
  const { measureValue, measureId, measureName } = foldInfo;
14457
+ const { encodingColor, encodingColorId } = unfoldInfo;
14458
+ const collectFields = [
14459
+ measureId,
14460
+ measureName,
14461
+ encodingColor,
14462
+ encodingColorId
14463
+ ].filter(Boolean);
14435
14464
  const root = {
14436
14465
  name: 'root',
14437
14466
  children: []
@@ -14447,10 +14476,7 @@
14447
14476
  name: value,
14448
14477
  children: []
14449
14478
  };
14450
- for(let j = 0; j <= i; j++){
14451
- const key = hierarchyFields[j];
14452
- child[key] = datum[key];
14453
- }
14479
+ for(let j = 0; j <= i; j++)child[hierarchyFields[j]] = datum[hierarchyFields[j]];
14454
14480
  currentNode.children.push(child);
14455
14481
  }
14456
14482
  currentNode = child;
@@ -14462,54 +14488,54 @@
14462
14488
  measureKeys.forEach((key)=>{
14463
14489
  currentNode[key] = 0;
14464
14490
  });
14465
- currentNode._measureIds = new Set();
14466
- currentNode._measureNames = new Set();
14491
+ collectFields.forEach((field)=>{
14492
+ currentNode[`_set_${field}`] = new Set();
14493
+ });
14467
14494
  }
14468
14495
  if (measureValue && void 0 !== datum[measureValue]) currentNode[measureValue] += Number(datum[measureValue]);
14469
14496
  measureKeys.forEach((key)=>{
14470
14497
  if (void 0 !== datum[key]) currentNode[key] = (currentNode[key] || 0) + Number(datum[key]);
14471
14498
  });
14472
- if (datum[measureId]) currentNode._measureIds.add(datum[measureId]);
14473
- if (datum[measureName]) currentNode._measureNames.add(datum[measureName]);
14499
+ collectFields.forEach((field)=>{
14500
+ if (datum[field]) currentNode[`_set_${field}`].add(datum[field]);
14501
+ });
14474
14502
  if (measureValue) currentNode.value = currentNode[measureValue];
14475
14503
  });
14504
+ const flattenSets = (node)=>{
14505
+ collectFields.forEach((field)=>{
14506
+ const setKey = `_set_${field}`;
14507
+ if (node[setKey]) {
14508
+ node[field] = Array.from(node[setKey]).join('+');
14509
+ delete node[setKey];
14510
+ }
14511
+ });
14512
+ };
14513
+ const mergeCollectFieldsFromChildren = (node)=>{
14514
+ collectFields.forEach((field)=>{
14515
+ const merged = new Set();
14516
+ node.children.forEach((child)=>{
14517
+ if (child[field]) child[field].split('+').forEach((v)=>merged.add(v));
14518
+ });
14519
+ if (merged.size > 0) node[field] = Array.from(merged).join('+');
14520
+ });
14521
+ };
14476
14522
  const aggregate = (node)=>{
14477
14523
  if (node.isLeaf) {
14478
- if (measureId && node._measureIds) {
14479
- node[measureId] = Array.from(node._measureIds).join('+');
14480
- delete node._measureIds;
14481
- }
14482
- if (measureName && node._measureNames) {
14483
- node[measureName] = Array.from(node._measureNames).join('+');
14484
- delete node._measureNames;
14485
- }
14524
+ flattenSets(node);
14486
14525
  return node.value || 0;
14487
14526
  }
14488
- if (node.children && node.children.length > 0) {
14489
- let sum = 0;
14490
- node.children.forEach((child)=>{
14491
- sum += aggregate(child);
14492
- measureKeys.forEach((key)=>{
14493
- node[key] = (node[key] || 0) + (child[key] || 0);
14494
- });
14527
+ if (!node.children?.length) return node.value || 0;
14528
+ let sum = 0;
14529
+ node.children.forEach((child)=>{
14530
+ sum += aggregate(child);
14531
+ measureKeys.forEach((key)=>{
14532
+ node[key] = (node[key] || 0) + (child[key] || 0);
14495
14533
  });
14496
- node.value = sum;
14497
- if (measureValue) node[measureValue] = sum;
14498
- if (measureId && node.children[0]) {
14499
- const childIds = new Set();
14500
- node.children.forEach((child)=>{
14501
- if (child[measureId]) child[measureId].split('+').forEach((id)=>childIds.add(id));
14502
- });
14503
- node[measureId] = Array.from(childIds).join('+');
14504
- const childNames = new Set();
14505
- node.children.forEach((child)=>{
14506
- if (child[measureName]) child[measureName].split('+').forEach((name)=>childNames.add(name));
14507
- });
14508
- node[measureName] = Array.from(childNames).join('+');
14509
- }
14510
- return sum;
14511
- }
14512
- return node.value || 0;
14534
+ });
14535
+ node.value = sum;
14536
+ if (measureValue) node[measureValue] = sum;
14537
+ mergeCollectFieldsFromChildren(node);
14538
+ return sum;
14513
14539
  };
14514
14540
  root.children.forEach(aggregate);
14515
14541
  return root.children;
@@ -14603,6 +14629,72 @@
14603
14629
  };
14604
14630
  return result;
14605
14631
  };
14632
+ const datasetPivotHierarchy = (spec, context)=>{
14633
+ const result = {
14634
+ ...spec
14635
+ };
14636
+ const { advancedVSeed } = context;
14637
+ const { dataset, datasetReshapeInfo, measures } = advancedVSeed;
14638
+ const measureKeys = findAllMeasures(measures).map((m)=>m.id);
14639
+ const hierarchyFields = advancedVSeed.encoding?.hierarchy || [];
14640
+ const rows = advancedVSeed.encoding?.row || [];
14641
+ const columns = advancedVSeed.encoding?.column || [];
14642
+ const pivotDims = [
14643
+ ...rows,
14644
+ ...columns
14645
+ ];
14646
+ const records = dataset.reduce((pre, cur, index)=>{
14647
+ const id = datasetReshapeInfo[index].id;
14648
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[index];
14649
+ if (pivotDims.length > 0) {
14650
+ const groupedDataset = groupByDimensions(cur, pivotDims);
14651
+ pre[id] = groupedDataset.flatMap((data)=>{
14652
+ const root = {
14653
+ ...data,
14654
+ children: buildTree(data.children, hierarchyFields, foldInfo, unfoldInfo, measureKeys)
14655
+ };
14656
+ const rootProps = chunk_KI5X74E2_y(root, [
14657
+ 'children'
14658
+ ]);
14659
+ const rootTree = root.children.map((child)=>({
14660
+ ...child,
14661
+ ...rootProps
14662
+ }));
14663
+ return rootTree;
14664
+ });
14665
+ } else {
14666
+ const tree = buildTree(cur, hierarchyFields, foldInfo, unfoldInfo, measureKeys);
14667
+ pre[id] = tree;
14668
+ }
14669
+ return pre;
14670
+ }, {});
14671
+ return {
14672
+ ...result,
14673
+ records: records
14674
+ };
14675
+ };
14676
+ function groupByDimensions(data, dimKeys) {
14677
+ if (0 === dimKeys.length) return data;
14678
+ const buckets = new Map();
14679
+ for (const item of data){
14680
+ const compositeKey = dimKeys.map((k)=>String(item[k])).join('\x00');
14681
+ if (!buckets.has(compositeKey)) {
14682
+ const dimValues = {};
14683
+ for (const k of dimKeys)dimValues[k] = item[k];
14684
+ buckets.set(compositeKey, {
14685
+ dimValues,
14686
+ items: []
14687
+ });
14688
+ }
14689
+ buckets.get(compositeKey).items.push(item);
14690
+ }
14691
+ const result = [];
14692
+ for (const [, { dimValues, items }] of buckets)result.push({
14693
+ ...dimValues,
14694
+ children: items
14695
+ });
14696
+ return result;
14697
+ }
14606
14698
  const tooltipTreeMap = (spec, context)=>{
14607
14699
  const result = tooltip_tooltip(spec, context);
14608
14700
  const { advancedVSeed, vseed } = context;
@@ -14692,6 +14784,7 @@
14692
14784
  };
14693
14785
  const treeMap = [
14694
14786
  initTreeMap,
14787
+ drill,
14695
14788
  datasetHierarchy,
14696
14789
  colorAdapter(color_color, linearColor),
14697
14790
  background_backgroundColor,
@@ -14703,8 +14796,9 @@
14703
14796
  const pivotTreeMap = [
14704
14797
  initPivot,
14705
14798
  pivotGridStyle,
14706
- pivotIndicatorsAsRow,
14707
- datasetPivot,
14799
+ pivotIndicatorsAsCol,
14800
+ pivotHideIndicatorName,
14801
+ datasetPivotHierarchy,
14708
14802
  pivotIndicators_pivotIndicators([
14709
14803
  initTreeMap,
14710
14804
  datasetHierarchy,
@@ -14792,7 +14886,6 @@
14792
14886
  result.gap = 0;
14793
14887
  result.offsetX = 0;
14794
14888
  result.offsetY = 0;
14795
- result.drill = true;
14796
14889
  result.padding = 0;
14797
14890
  result.labelAutoVisible = {
14798
14891
  enable: true,
@@ -14920,6 +15013,7 @@
14920
15013
  };
14921
15014
  const sunburst = [
14922
15015
  initSunburst,
15016
+ drill,
14923
15017
  datasetHierarchy,
14924
15018
  colorAdapter(color_color, linearColor),
14925
15019
  background_backgroundColor,
@@ -14930,8 +15024,9 @@
14930
15024
  const pivotSunburst = [
14931
15025
  initPivot,
14932
15026
  pivotGridStyle,
14933
- pivotIndicatorsAsRow,
14934
- datasetPivot,
15027
+ pivotIndicatorsAsCol,
15028
+ pivotHideIndicatorName,
15029
+ datasetPivotHierarchy,
14935
15030
  pivotIndicators_pivotIndicators([
14936
15031
  initSunburst,
14937
15032
  datasetHierarchy,
@@ -15013,7 +15108,6 @@
15013
15108
  result.type = 'circlePacking';
15014
15109
  result.categoryField = 'name';
15015
15110
  result.valueField = foldInfo.measureValue;
15016
- result.drill = true;
15017
15111
  result.circlePacking = {
15018
15112
  style: {
15019
15113
  fillOpacity: (d)=>d.isLeaf ? 0.75 : 0.25
@@ -15057,6 +15151,7 @@
15057
15151
  };
15058
15152
  const circlePacking = [
15059
15153
  initCirclePacking,
15154
+ drill,
15060
15155
  datasetHierarchy,
15061
15156
  colorAdapter(color_color, linearColor),
15062
15157
  background_backgroundColor,
@@ -15067,8 +15162,9 @@
15067
15162
  const pivotCirclePacking = [
15068
15163
  initPivot,
15069
15164
  pivotGridStyle,
15070
- pivotIndicatorsAsRow,
15071
- datasetPivot,
15165
+ pivotIndicatorsAsCol,
15166
+ pivotHideIndicatorName,
15167
+ datasetPivotHierarchy,
15072
15168
  pivotIndicators_pivotIndicators([
15073
15169
  initCirclePacking,
15074
15170
  datasetHierarchy,