@visactor/vseed 0.4.17 → 0.4.20

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.
@@ -1,4 +1,35 @@
1
1
  import { FoldMeasureId } from "../../../../../dataReshape/constant.js";
2
+ const reverseStackCornerRadius = (cornerRadius)=>{
3
+ if (!Array.isArray(cornerRadius)) return cornerRadius;
4
+ const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius;
5
+ return [
6
+ bottomRight,
7
+ bottomLeft,
8
+ topLeft,
9
+ topRight
10
+ ];
11
+ };
12
+ const mergeStackCornerRadius = (cornerRadius)=>{
13
+ if (!Array.isArray(cornerRadius)) return cornerRadius;
14
+ const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius;
15
+ return [
16
+ Math.max(topLeft, bottomRight),
17
+ Math.max(topRight, bottomLeft),
18
+ Math.max(bottomRight, topLeft),
19
+ Math.max(bottomLeft, topRight)
20
+ ];
21
+ };
22
+ const getStackRangeCornerRadius = (cornerRadius, datum)=>{
23
+ const stackStart = datum?.['__VCHART_STACK_START'];
24
+ const stackEnd = datum?.['__VCHART_STACK_END'];
25
+ if ('number' != typeof stackStart || 'number' != typeof stackEnd) return;
26
+ const hasPositivePart = stackStart > 0 || stackEnd > 0;
27
+ const hasNegativePart = stackStart < 0 || stackEnd < 0;
28
+ if (hasPositivePart && hasNegativePart) return mergeStackCornerRadius(cornerRadius);
29
+ if (hasPositivePart) return cornerRadius;
30
+ if (hasNegativePart) return reverseStackCornerRadius(cornerRadius);
31
+ return 0;
32
+ };
2
33
  const stackCornerRadius_stackCornerRadius = (spec, context)=>{
3
34
  const { advancedVSeed, vseed } = context;
4
35
  const { chartType } = vseed;
@@ -7,7 +38,11 @@ const stackCornerRadius_stackCornerRadius = (spec, context)=>{
7
38
  return {
8
39
  ...spec,
9
40
  stackCornerRadius: (_, datum)=>{
10
- if (datum && datum[datum[FoldMeasureId]] > 0) return stackCornerRadius;
41
+ const stackRangeCornerRadius = getStackRangeCornerRadius(stackCornerRadius, datum);
42
+ if (void 0 !== stackRangeCornerRadius) return stackRangeCornerRadius;
43
+ const value = datum?.[datum?.[FoldMeasureId]];
44
+ if (value > 0) return stackCornerRadius;
45
+ if (value < 0) return reverseStackCornerRadius(stackCornerRadius);
11
46
  return 0;
12
47
  }
13
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/stack/stackCornerRadius.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/stack/stackCornerRadius.ts"],"sourcesContent":["import type { IBarChartSpec } from '@visactor/vchart'\nimport { FoldMeasureId } from 'src/dataReshape/constant'\nimport type { Datum, VChartSpecPipe, StackCornerRadius } from 'src/types'\n\nexport const stackCornerRadius: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { chartType } = vseed\n const stackCornerRadius = advancedVSeed.config?.[chartType as 'column']?.stackCornerRadius as StackCornerRadius\n\n if (chartType === 'dualAxis' && (spec as any).type !== 'bar') {\n return spec\n }\n\n return {\n ...spec,\n stackCornerRadius: (_: unknown, datum: Datum) => {\n if (datum && datum[datum[FoldMeasureId]] > 0) {\n return stackCornerRadius\n }\n\n return 0\n },\n } as IBarChartSpec\n}\n"],"names":["stackCornerRadius","spec","context","advancedVSeed","vseed","chartType","_","datum","FoldMeasureId"],"mappings":";AAIO,MAAMA,sCAAoC,CAACC,MAAMC;IACtD,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IACjC,MAAM,EAAEG,SAAS,EAAE,GAAGD;IACtB,MAAMJ,oBAAoBG,cAAc,MAAM,EAAE,CAACE,UAAsB,EAAE;IAEzE,IAAIA,AAAc,eAAdA,aAA6BJ,AAAsB,UAAtBA,KAAa,IAAI,EAChD,OAAOA;IAGT,OAAO;QACL,GAAGA,IAAI;QACP,mBAAmB,CAACK,GAAYC;YAC9B,IAAIA,SAASA,KAAK,CAACA,KAAK,CAACC,cAAc,CAAC,GAAG,GACzC,OAAOR;YAGT,OAAO;QACT;IACF;AACF"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/stack/stackCornerRadius.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/stack/stackCornerRadius.ts"],"sourcesContent":["import type { IBarChartSpec } from '@visactor/vchart'\nimport { FoldMeasureId } from 'src/dataReshape/constant'\nimport type { Datum, VChartSpecPipe, StackCornerRadius } from 'src/types'\n\nconst reverseStackCornerRadius = (cornerRadius: StackCornerRadius): StackCornerRadius => {\n if (!Array.isArray(cornerRadius)) {\n return cornerRadius\n }\n\n const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius\n\n return [bottomRight, bottomLeft, topLeft, topRight]\n}\n\nconst mergeStackCornerRadius = (cornerRadius: StackCornerRadius): StackCornerRadius => {\n if (!Array.isArray(cornerRadius)) {\n return cornerRadius\n }\n\n const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius\n\n return [\n Math.max(topLeft, bottomRight),\n Math.max(topRight, bottomLeft),\n Math.max(bottomRight, topLeft),\n Math.max(bottomLeft, topRight),\n ]\n}\n\nconst getStackRangeCornerRadius = (\n cornerRadius: StackCornerRadius,\n datum: Datum,\n): StackCornerRadius | 0 | undefined => {\n const stackStart = datum?.['__VCHART_STACK_START']\n const stackEnd = datum?.['__VCHART_STACK_END']\n\n if (typeof stackStart !== 'number' || typeof stackEnd !== 'number') {\n return undefined\n }\n\n const hasPositivePart = stackStart > 0 || stackEnd > 0\n const hasNegativePart = stackStart < 0 || stackEnd < 0\n\n if (hasPositivePart && hasNegativePart) {\n // Mixed positive/negative stack range: merge normal/reverse corners for whole-bar style.\n return mergeStackCornerRadius(cornerRadius)\n }\n\n if (hasPositivePart) {\n return cornerRadius\n }\n\n if (hasNegativePart) {\n return reverseStackCornerRadius(cornerRadius)\n }\n\n return 0\n}\n\nexport const stackCornerRadius: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { chartType } = vseed\n const stackCornerRadius = advancedVSeed.config?.[chartType as 'column']?.stackCornerRadius as StackCornerRadius\n\n if (chartType === 'dualAxis' && (spec as any).type !== 'bar') {\n return spec\n }\n\n return {\n ...spec,\n stackCornerRadius: (_: unknown, datum: Datum) => {\n const stackRangeCornerRadius = getStackRangeCornerRadius(stackCornerRadius, datum)\n\n if (stackRangeCornerRadius !== undefined) {\n return stackRangeCornerRadius\n }\n\n const value = datum?.[datum?.[FoldMeasureId]]\n\n if (value > 0) {\n return stackCornerRadius\n }\n\n if (value < 0) {\n return reverseStackCornerRadius(stackCornerRadius)\n }\n\n return 0\n },\n } as IBarChartSpec\n}\n"],"names":["reverseStackCornerRadius","cornerRadius","Array","topLeft","topRight","bottomRight","bottomLeft","mergeStackCornerRadius","Math","getStackRangeCornerRadius","datum","stackStart","stackEnd","hasPositivePart","hasNegativePart","stackCornerRadius","spec","context","advancedVSeed","vseed","chartType","_","stackRangeCornerRadius","undefined","value","FoldMeasureId"],"mappings":";AAIA,MAAMA,2BAA2B,CAACC;IAChC,IAAI,CAACC,MAAM,OAAO,CAACD,eACjB,OAAOA;IAGT,MAAM,CAACE,UAAU,CAAC,EAAEC,WAAW,CAAC,EAAEC,cAAc,CAAC,EAAEC,aAAa,CAAC,CAAC,GAAGL;IAErE,OAAO;QAACI;QAAaC;QAAYH;QAASC;KAAS;AACrD;AAEA,MAAMG,yBAAyB,CAACN;IAC9B,IAAI,CAACC,MAAM,OAAO,CAACD,eACjB,OAAOA;IAGT,MAAM,CAACE,UAAU,CAAC,EAAEC,WAAW,CAAC,EAAEC,cAAc,CAAC,EAAEC,aAAa,CAAC,CAAC,GAAGL;IAErE,OAAO;QACLO,KAAK,GAAG,CAACL,SAASE;QAClBG,KAAK,GAAG,CAACJ,UAAUE;QACnBE,KAAK,GAAG,CAACH,aAAaF;QACtBK,KAAK,GAAG,CAACF,YAAYF;KACtB;AACH;AAEA,MAAMK,4BAA4B,CAChCR,cACAS;IAEA,MAAMC,aAAaD,OAAO,CAAC,uBAAuB;IAClD,MAAME,WAAWF,OAAO,CAAC,qBAAqB;IAE9C,IAAI,AAAsB,YAAtB,OAAOC,cAA2B,AAAoB,YAApB,OAAOC,UAC3C;IAGF,MAAMC,kBAAkBF,aAAa,KAAKC,WAAW;IACrD,MAAME,kBAAkBH,aAAa,KAAKC,WAAW;IAErD,IAAIC,mBAAmBC,iBAErB,OAAOP,uBAAuBN;IAGhC,IAAIY,iBACF,OAAOZ;IAGT,IAAIa,iBACF,OAAOd,yBAAyBC;IAGlC,OAAO;AACT;AAEO,MAAMc,sCAAoC,CAACC,MAAMC;IACtD,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IACjC,MAAM,EAAEG,SAAS,EAAE,GAAGD;IACtB,MAAMJ,oBAAoBG,cAAc,MAAM,EAAE,CAACE,UAAsB,EAAE;IAEzE,IAAIA,AAAc,eAAdA,aAA6BJ,AAAsB,UAAtBA,KAAa,IAAI,EAChD,OAAOA;IAGT,OAAO;QACL,GAAGA,IAAI;QACP,mBAAmB,CAACK,GAAYX;YAC9B,MAAMY,yBAAyBb,0BAA0BM,mBAAmBL;YAE5E,IAAIY,AAA2BC,WAA3BD,wBACF,OAAOA;YAGT,MAAME,QAAQd,OAAO,CAACA,OAAO,CAACe,cAAc,CAAC;YAE7C,IAAID,QAAQ,GACV,OAAOT;YAGT,IAAIS,QAAQ,GACV,OAAOxB,yBAAyBe;YAGlC,OAAO;QACT;IACF;AACF"}
@@ -1,4 +1,4 @@
1
- import { createFormatterByDimension, isMeasure } from "../../../../utils/index.js";
1
+ import { createFormatterByDimension, isDimensionGroup } from "../../../../utils/index.js";
2
2
  import { treeTreeToColumns } from "./utils.js";
3
3
  const dimensionTreeToColumns = (spec, context)=>{
4
4
  const { advancedVSeed } = context;
@@ -7,14 +7,30 @@ const dimensionTreeToColumns = (spec, context)=>{
7
7
  ...spec
8
8
  };
9
9
  const eachNode = (node)=>{
10
- if (isMeasure(node)) return {
10
+ const field = node.id;
11
+ const title = node.alias ?? node.id;
12
+ if (isDimensionGroup(node)) return {
13
+ field,
14
+ title,
15
+ headerStyle: {
16
+ textAlign: 'left'
17
+ }
18
+ };
19
+ return {
20
+ field,
21
+ title,
11
22
  width: 'auto',
23
+ style: {
24
+ textAlign: 'left'
25
+ },
26
+ headerStyle: {
27
+ textAlign: 'left'
28
+ },
12
29
  fieldFormat: (datum)=>{
13
30
  const formatter = createFormatterByDimension(node, advancedVSeed.locale);
14
31
  return formatter(datum[node.id]);
15
32
  }
16
33
  };
17
- return {};
18
34
  };
19
35
  const columns = treeTreeToColumns(dimensionTree, eachNode);
20
36
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/dimensionsToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/dimensionsToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByDimension, isMeasure } from 'src/pipeline/utils'\nimport type { Datum, Dimension, DimensionGroup, DimensionTree, ListTableSpecPipe } from 'src/types'\nimport { treeTreeToColumns } from './utils'\n\nexport const dimensionTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const dimensionTree = (advancedVSeed as unknown as { dimensionTree: DimensionTree }).dimensionTree\n const result = { ...spec } as ListTableConstructorOptions\n const eachNode = (node: Dimension | DimensionGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n fieldFormat: (datum: Datum) => {\n const formatter = createFormatterByDimension(node as Dimension, advancedVSeed.locale)\n return formatter(datum[node.id] as string | number)\n },\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Dimension, DimensionGroup>(dimensionTree, eachNode)\n\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n"],"names":["dimensionTreeToColumns","spec","context","advancedVSeed","dimensionTree","result","eachNode","node","isMeasure","datum","formatter","createFormatterByDimension","columns","treeTreeToColumns"],"mappings":";;AAKO,MAAMA,yBAA4C,CAACC,MAAMC;IAC9D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,gBAAiBD,cAA8D,aAAa;IAClG,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IACzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;YACP,aAAa,CAACE;gBACZ,MAAMC,YAAYC,2BAA2BJ,MAAmBJ,cAAc,MAAM;gBACpF,OAAOO,UAAUD,KAAK,CAACF,KAAK,EAAE,CAAC;YACjC;QACF;QAGF,OAAO,CAAC;IACV;IACA,MAAMK,UAAUC,kBAA6CT,eAAeE;IAE5E,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMO;SAAQ;IAClD;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/dimensionsToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/dimensionsToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByDimension, isDimensionGroup } from 'src/pipeline/utils'\nimport type { Datum, Dimension, DimensionGroup, DimensionTree, ListTableSpecPipe } from 'src/types'\nimport { treeTreeToColumns } from './utils'\n\nexport const dimensionTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const dimensionTree = (advancedVSeed as unknown as { dimensionTree: DimensionTree }).dimensionTree\n const result = { ...spec } as ListTableConstructorOptions\n const eachNode = (node: Dimension | DimensionGroup) => {\n const field = node.id\n const title = node.alias ?? node.id\n\n if (isDimensionGroup(node)) {\n return {\n field,\n title,\n headerStyle: {\n textAlign: 'left',\n },\n }\n }\n\n return {\n field,\n title,\n width: 'auto',\n style: {\n textAlign: 'left',\n },\n headerStyle: {\n textAlign: 'left',\n },\n fieldFormat: (datum: Datum) => {\n const formatter = createFormatterByDimension(node, advancedVSeed.locale)\n return formatter(datum[node.id] as string | number)\n },\n }\n }\n const columns = treeTreeToColumns<Dimension, DimensionGroup>(dimensionTree, eachNode)\n\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n"],"names":["dimensionTreeToColumns","spec","context","advancedVSeed","dimensionTree","result","eachNode","node","field","title","isDimensionGroup","datum","formatter","createFormatterByDimension","columns","treeTreeToColumns"],"mappings":";;AAKO,MAAMA,yBAA4C,CAACC,MAAMC;IAC9D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,gBAAiBD,cAA8D,aAAa;IAClG,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IACzB,MAAMK,WAAW,CAACC;QAChB,MAAMC,QAAQD,KAAK,EAAE;QACrB,MAAME,QAAQF,KAAK,KAAK,IAAIA,KAAK,EAAE;QAEnC,IAAIG,iBAAiBH,OACnB,OAAO;YACLC;YACAC;YACA,aAAa;gBACX,WAAW;YACb;QACF;QAGF,OAAO;YACLD;YACAC;YACA,OAAO;YACP,OAAO;gBACL,WAAW;YACb;YACA,aAAa;gBACX,WAAW;YACb;YACA,aAAa,CAACE;gBACZ,MAAMC,YAAYC,2BAA2BN,MAAMJ,cAAc,MAAM;gBACvE,OAAOS,UAAUD,KAAK,CAACJ,KAAK,EAAE,CAAC;YACjC;QACF;IACF;IACA,MAAMO,UAAUC,kBAA6CX,eAAeE;IAE5E,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMS;SAAQ;IAClD;AACF"}
@@ -1,4 +1,4 @@
1
- import { createFormatterByMeasure, isMeasure } from "../../../../utils/index.js";
1
+ import { createFormatterByMeasure, isMeasureGroup } from "../../../../utils/index.js";
2
2
  import { treeTreeToColumns } from "./utils.js";
3
3
  import { isNullish } from "remeda";
4
4
  import { isUndefined } from "@visactor/vutils";
@@ -9,11 +9,27 @@ const measureTreeToColumns = (spec, context)=>{
9
9
  ...spec
10
10
  };
11
11
  const eachNode = (node)=>{
12
- if (isMeasure(node)) return {
12
+ const field = node.id;
13
+ const title = node.alias ?? node.id;
14
+ if (isMeasureGroup(node)) return {
15
+ field,
16
+ title,
17
+ headerStyle: {
18
+ textAlign: 'right'
19
+ }
20
+ };
21
+ return {
22
+ field,
23
+ title,
13
24
  width: 'auto',
25
+ style: {
26
+ textAlign: 'right'
27
+ },
28
+ headerStyle: {
29
+ textAlign: 'right'
30
+ },
14
31
  fieldFormat: fieldFormat(node)
15
32
  };
16
- return {};
17
33
  };
18
34
  const columns = treeTreeToColumns(measureTree, eachNode);
19
35
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/measuresToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/measuresToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByMeasure, isMeasure } from 'src/pipeline/utils'\nimport type { MeasureGroup, Measure, MeasureTree, ListTableSpecPipe, Datum } from 'src/types'\nimport { treeTreeToColumns } from './utils'\nimport { isNullish } from 'remeda'\nimport { isUndefined } from '@visactor/vutils'\n\nexport const measureTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measureTree = (advancedVSeed as unknown as { measureTree: MeasureTree }).measureTree\n const result = { ...spec } as ListTableConstructorOptions\n\n const eachNode = (node: Measure | MeasureGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n fieldFormat: fieldFormat(node),\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Measure, MeasureGroup>(measureTree, eachNode)\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n\nconst fieldFormat = (node: Measure) => {\n const formatter = createFormatterByMeasure(node)\n\n return (datum: Datum) => {\n const { id } = node\n const value = datum[id] as number | string | undefined\n if (isNullish(value) || isUndefined(value)) {\n return value\n }\n return formatter(value)\n }\n}\n"],"names":["measureTreeToColumns","spec","context","advancedVSeed","measureTree","result","eachNode","node","isMeasure","fieldFormat","columns","treeTreeToColumns","formatter","createFormatterByMeasure","datum","id","value","isNullish","isUndefined"],"mappings":";;;;AAOO,MAAMA,uBAA0C,CAACC,MAAMC;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,cAAeD,cAA0D,WAAW;IAC1F,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IAEzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;YACP,aAAaE,YAAYF;QAC3B;QAGF,OAAO,CAAC;IACV;IACA,MAAMG,UAAUC,kBAAyCP,aAAaE;IACtE,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMK;SAAQ;IAClD;AACF;AAEA,MAAMD,cAAc,CAACF;IACnB,MAAMK,YAAYC,yBAAyBN;IAE3C,OAAO,CAACO;QACN,MAAM,EAAEC,EAAE,EAAE,GAAGR;QACf,MAAMS,QAAQF,KAAK,CAACC,GAAG;QACvB,IAAIE,UAAUD,UAAUE,YAAYF,QAClC,OAAOA;QAET,OAAOJ,UAAUI;IACnB;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/measuresToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/measuresToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByMeasure, isMeasureGroup } from 'src/pipeline/utils'\nimport type { MeasureGroup, Measure, MeasureTree, ListTableSpecPipe, Datum } from 'src/types'\nimport { treeTreeToColumns } from './utils'\nimport { isNullish } from 'remeda'\nimport { isUndefined } from '@visactor/vutils'\n\nexport const measureTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measureTree = (advancedVSeed as unknown as { measureTree: MeasureTree }).measureTree\n const result = { ...spec } as ListTableConstructorOptions\n\n const eachNode = (node: Measure | MeasureGroup) => {\n const field = node.id\n const title = node.alias ?? node.id\n\n if (isMeasureGroup(node)) {\n return {\n field,\n title,\n headerStyle: {\n textAlign: 'right',\n },\n }\n }\n\n return {\n field,\n title,\n width: 'auto',\n style: {\n textAlign: 'right',\n },\n headerStyle: {\n textAlign: 'right',\n },\n fieldFormat: fieldFormat(node),\n }\n }\n const columns = treeTreeToColumns<Measure, MeasureGroup>(measureTree, eachNode)\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n\nconst fieldFormat = (node: Measure) => {\n const formatter = createFormatterByMeasure(node)\n\n return (datum: Datum) => {\n const { id } = node\n const value = datum[id] as number | string | undefined\n if (isNullish(value) || isUndefined(value)) {\n return value\n }\n return formatter(value)\n }\n}\n"],"names":["measureTreeToColumns","spec","context","advancedVSeed","measureTree","result","eachNode","node","field","title","isMeasureGroup","fieldFormat","columns","treeTreeToColumns","formatter","createFormatterByMeasure","datum","id","value","isNullish","isUndefined"],"mappings":";;;;AAOO,MAAMA,uBAA0C,CAACC,MAAMC;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,cAAeD,cAA0D,WAAW;IAC1F,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IAEzB,MAAMK,WAAW,CAACC;QAChB,MAAMC,QAAQD,KAAK,EAAE;QACrB,MAAME,QAAQF,KAAK,KAAK,IAAIA,KAAK,EAAE;QAEnC,IAAIG,eAAeH,OACjB,OAAO;YACLC;YACAC;YACA,aAAa;gBACX,WAAW;YACb;QACF;QAGF,OAAO;YACLD;YACAC;YACA,OAAO;YACP,OAAO;gBACL,WAAW;YACb;YACA,aAAa;gBACX,WAAW;YACb;YACA,aAAaE,YAAYJ;QAC3B;IACF;IACA,MAAMK,UAAUC,kBAAyCT,aAAaE;IACtE,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMO;SAAQ;IAClD;AACF;AAEA,MAAMD,cAAc,CAACJ;IACnB,MAAMO,YAAYC,yBAAyBR;IAE3C,OAAO,CAACS;QACN,MAAM,EAAEC,EAAE,EAAE,GAAGV;QACf,MAAMW,QAAQF,KAAK,CAACC,GAAG;QACvB,IAAIE,UAAUD,UAAUE,YAAYF,QAClC,OAAOA;QAET,OAAOJ,UAAUI;IACnB;AACF"}
@@ -12,6 +12,9 @@ const pivotColumns = (spec, context)=>{
12
12
  dimensionKey: item.id,
13
13
  title: item.alias || item.id,
14
14
  width: 'auto',
15
+ headerStyle: {
16
+ textAlign: 'right'
17
+ },
15
18
  headerFormat: (value)=>formatter(value)
16
19
  };
17
20
  })
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/pivotColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/pivotColumns.ts"],"sourcesContent":["import type { PivotTableConstructorOptions } from '@visactor/vtable'\nimport type { Dimensions, PivotTableSpecPipe } from 'src/types'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\n\nexport const pivotColumns: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { encoding } = advancedVSeed\n const dimensions = advancedVSeed.dimensionTree as Dimensions\n const columns = dimensions.filter((item) => encoding.column?.includes(item.id))\n\n return {\n ...spec,\n columns: columns.map((item) => {\n const formatter = createFormatterByDimension(item, advancedVSeed.locale)\n return {\n dimensionKey: item.id,\n title: item.alias || item.id,\n width: 'auto',\n headerFormat: (value: string | number) => formatter(value),\n }\n }),\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotColumns","spec","context","advancedVSeed","encoding","dimensions","columns","item","formatter","createFormatterByDimension","value"],"mappings":";AAIO,MAAMA,eAAmC,CAACC,MAAMC;IACrD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,QAAQ,EAAE,GAAGD;IACrB,MAAME,aAAaF,cAAc,aAAa;IAC9C,MAAMG,UAAUD,WAAW,MAAM,CAAC,CAACE,OAASH,SAAS,MAAM,EAAE,SAASG,KAAK,EAAE;IAE7E,OAAO;QACL,GAAGN,IAAI;QACP,SAASK,QAAQ,GAAG,CAAC,CAACC;YACpB,MAAMC,YAAYC,2BAA2BF,MAAMJ,cAAc,MAAM;YACvE,OAAO;gBACL,cAAcI,KAAK,EAAE;gBACrB,OAAOA,KAAK,KAAK,IAAIA,KAAK,EAAE;gBAC5B,OAAO;gBACP,cAAc,CAACG,QAA2BF,UAAUE;YACtD;QACF;IACF;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/pivotColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/pivotColumns.ts"],"sourcesContent":["import type { PivotTableConstructorOptions } from '@visactor/vtable'\nimport type { Dimensions, PivotTableSpecPipe } from 'src/types'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\n\nexport const pivotColumns: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { encoding } = advancedVSeed\n const dimensions = advancedVSeed.dimensionTree as Dimensions\n const columns = dimensions.filter((item) => encoding.column?.includes(item.id))\n\n return {\n ...spec,\n columns: columns.map((item) => {\n const formatter = createFormatterByDimension(item, advancedVSeed.locale)\n return {\n dimensionKey: item.id,\n title: item.alias || item.id,\n width: 'auto',\n headerStyle: {\n textAlign: 'right',\n },\n headerFormat: (value: string | number) => formatter(value),\n }\n }),\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotColumns","spec","context","advancedVSeed","encoding","dimensions","columns","item","formatter","createFormatterByDimension","value"],"mappings":";AAIO,MAAMA,eAAmC,CAACC,MAAMC;IACrD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,QAAQ,EAAE,GAAGD;IACrB,MAAME,aAAaF,cAAc,aAAa;IAC9C,MAAMG,UAAUD,WAAW,MAAM,CAAC,CAACE,OAASH,SAAS,MAAM,EAAE,SAASG,KAAK,EAAE;IAE7E,OAAO;QACL,GAAGN,IAAI;QACP,SAASK,QAAQ,GAAG,CAAC,CAACC;YACpB,MAAMC,YAAYC,2BAA2BF,MAAMJ,cAAc,MAAM;YACvE,OAAO;gBACL,cAAcI,KAAK,EAAE;gBACrB,OAAOA,KAAK,KAAK,IAAIA,KAAK,EAAE;gBAC5B,OAAO;gBACP,aAAa;oBACX,WAAW;gBACb;gBACA,cAAc,CAACG,QAA2BF,UAAUE;YACtD;QACF;IACF;AACF"}
@@ -5,11 +5,6 @@ import type { ColumnsDefine } from '@visactor/vtable';
5
5
  export declare function extractLeafIds<T extends {
6
6
  id: string;
7
7
  }>(tree: T[]): Set<string>;
8
- export declare const treeTreeToColumns: <T extends {
9
- id: string;
10
- alias?: string;
11
- }, U extends {
12
- id: string;
13
- alias?: string;
8
+ export declare const treeTreeToColumns: <T extends object, U extends {
14
9
  children?: (T | U)[];
15
10
  }>(tree: (T | U)[], callback?: (node: T | U) => object) => ColumnsDefine[];
@@ -5,28 +5,12 @@ function extractLeafIds(tree) {
5
5
  }
6
6
  const treeTreeToColumns = (tree, callback)=>{
7
7
  const result = tree.map((item)=>{
8
- if ('children' in item && Array.isArray(item.children)) {
9
- const groupNode = item;
10
- const field = groupNode.id;
11
- const title = groupNode.alias ?? groupNode.id;
12
- const props = callback?.(groupNode) || {};
13
- return {
14
- field,
15
- title,
16
- columns: treeTreeToColumns(item.children, callback),
17
- ...props
18
- };
19
- }
20
- {
21
- const field = item.id;
22
- const title = item.alias ?? item.id;
23
- const props = callback?.(item) || {};
24
- return {
25
- field,
26
- title,
27
- ...props
28
- };
29
- }
8
+ const props = callback?.(item) || {};
9
+ if ('children' in item && Array.isArray(item.children)) return {
10
+ ...props,
11
+ columns: treeTreeToColumns(item.children, callback)
12
+ };
13
+ return props;
30
14
  });
31
15
  return result || [];
32
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/utils.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/utils.ts"],"sourcesContent":["import type { ColumnsDefine } from '@visactor/vtable'\nimport { findTreeNodesBy } from 'src/pipeline/utils'\n\n/**\n * 从树形结构中提取所有叶子节点的ID\n */\nexport function extractLeafIds<T extends { id: string }>(tree: T[]): Set<string> {\n const leafNodes = findTreeNodesBy(tree, () => true)\n return new Set(leafNodes.map((node) => node.id))\n}\n\nexport const treeTreeToColumns = <\n T extends { id: string; alias?: string },\n U extends { id: string; alias?: string; children?: (T | U)[] },\n>(\n tree: (T | U)[],\n callback?: (node: T | U) => object,\n): ColumnsDefine[] => {\n const result = tree.map((item) => {\n if ('children' in item && Array.isArray(item.children)) {\n const groupNode = item as unknown as U\n const field = groupNode.id\n const title = groupNode.alias ?? groupNode.id\n const props = callback?.(groupNode) || {}\n // group\n return {\n field,\n title,\n columns: treeTreeToColumns(item.children, callback),\n ...props,\n }\n } else {\n const field = item.id\n const title = item.alias ?? item.id\n const props = callback?.(item) || {}\n // leaf\n return {\n field,\n title,\n ...props,\n }\n }\n }) as unknown as ColumnsDefine[]\n\n return result || []\n}\n"],"names":["extractLeafIds","tree","leafNodes","findTreeNodesBy","Set","node","treeTreeToColumns","callback","result","item","Array","groupNode","field","title","props"],"mappings":";AAMO,SAASA,eAAyCC,IAAS;IAChE,MAAMC,YAAYC,gBAAgBF,MAAM,IAAM;IAC9C,OAAO,IAAIG,IAAIF,UAAU,GAAG,CAAC,CAACG,OAASA,KAAK,EAAE;AAChD;AAEO,MAAMC,oBAAoB,CAI/BL,MACAM;IAEA,MAAMC,SAASP,KAAK,GAAG,CAAC,CAACQ;QACvB,IAAI,cAAcA,QAAQC,MAAM,OAAO,CAACD,KAAK,QAAQ,GAAG;YACtD,MAAME,YAAYF;YAClB,MAAMG,QAAQD,UAAU,EAAE;YAC1B,MAAME,QAAQF,UAAU,KAAK,IAAIA,UAAU,EAAE;YAC7C,MAAMG,QAAQP,WAAWI,cAAc,CAAC;YAExC,OAAO;gBACLC;gBACAC;gBACA,SAASP,kBAAkBG,KAAK,QAAQ,EAAEF;gBAC1C,GAAGO,KAAK;YACV;QACF;QAAO;YACL,MAAMF,QAAQH,KAAK,EAAE;YACrB,MAAMI,QAAQJ,KAAK,KAAK,IAAIA,KAAK,EAAE;YACnC,MAAMK,QAAQP,WAAWE,SAAS,CAAC;YAEnC,OAAO;gBACLG;gBACAC;gBACA,GAAGC,KAAK;YACV;QACF;IACF;IAEA,OAAON,UAAU,EAAE;AACrB"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/utils.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/utils.ts"],"sourcesContent":["import type { ColumnsDefine } from '@visactor/vtable'\nimport { findTreeNodesBy } from 'src/pipeline/utils'\n\n/**\n * 从树形结构中提取所有叶子节点的ID\n */\nexport function extractLeafIds<T extends { id: string }>(tree: T[]): Set<string> {\n const leafNodes = findTreeNodesBy(tree, () => true)\n return new Set(leafNodes.map((node) => node.id))\n}\n\nexport const treeTreeToColumns = <T extends object, U extends { children?: (T | U)[] }>(\n tree: (T | U)[],\n callback?: (node: T | U) => object,\n): ColumnsDefine[] => {\n const result = tree.map((item) => {\n const props = callback?.(item) || {}\n\n if ('children' in item && Array.isArray(item.children)) {\n return {\n ...props,\n columns: treeTreeToColumns(item.children, callback),\n }\n }\n\n return props\n }) as unknown as ColumnsDefine[]\n\n return result || []\n}\n"],"names":["extractLeafIds","tree","leafNodes","findTreeNodesBy","Set","node","treeTreeToColumns","callback","result","item","props","Array"],"mappings":";AAMO,SAASA,eAAyCC,IAAS;IAChE,MAAMC,YAAYC,gBAAgBF,MAAM,IAAM;IAC9C,OAAO,IAAIG,IAAIF,UAAU,GAAG,CAAC,CAACG,OAASA,KAAK,EAAE;AAChD;AAEO,MAAMC,oBAAoB,CAC/BL,MACAM;IAEA,MAAMC,SAASP,KAAK,GAAG,CAAC,CAACQ;QACvB,MAAMC,QAAQH,WAAWE,SAAS,CAAC;QAEnC,IAAI,cAAcA,QAAQE,MAAM,OAAO,CAACF,KAAK,QAAQ,GACnD,OAAO;YACL,GAAGC,KAAK;YACR,SAASJ,kBAAkBG,KAAK,QAAQ,EAAEF;QAC5C;QAGF,OAAOG;IACT;IAEA,OAAOF,UAAU,EAAE;AACrB"}
@@ -14,10 +14,6 @@ export declare const ChartTypeEnum: {
14
14
  readonly ColumnPercent: "columnPercent";
15
15
  readonly ColumnParallel: "columnParallel";
16
16
  readonly Bar: "bar";
17
- readonly RaceBar: "raceBar";
18
- readonly RaceColumn: "raceColumn";
19
- readonly RaceScatter: "raceScatter";
20
- readonly RaceLine: "raceLine";
21
17
  readonly BarPercent: "barPercent";
22
18
  readonly BarParallel: "barParallel";
23
19
  readonly Area: "area";
@@ -32,6 +28,12 @@ export declare const ChartTypeEnum: {
32
28
  readonly CirclePacking: "circlePacking";
33
29
  readonly Sunburst: "sunburst";
34
30
  readonly TreeMap: "treeMap";
31
+ readonly RaceBar: "raceBar";
32
+ readonly RaceColumn: "raceColumn";
33
+ readonly RaceScatter: "raceScatter";
34
+ readonly RaceLine: "raceLine";
35
+ readonly RacePie: "racePie";
36
+ readonly RaceDonut: "raceDonut";
35
37
  readonly Funnel: "funnel";
36
38
  readonly Heatmap: "heatmap";
37
39
  readonly Boxplot: "boxPlot";
@@ -14,10 +14,6 @@ const ChartTypeEnum = {
14
14
  ColumnPercent: 'columnPercent',
15
15
  ColumnParallel: 'columnParallel',
16
16
  Bar: 'bar',
17
- RaceBar: 'raceBar',
18
- RaceColumn: 'raceColumn',
19
- RaceScatter: 'raceScatter',
20
- RaceLine: 'raceLine',
21
17
  BarPercent: 'barPercent',
22
18
  BarParallel: 'barParallel',
23
19
  Area: 'area',
@@ -32,6 +28,12 @@ const ChartTypeEnum = {
32
28
  CirclePacking: 'circlePacking',
33
29
  Sunburst: 'sunburst',
34
30
  TreeMap: 'treeMap',
31
+ RaceBar: 'raceBar',
32
+ RaceColumn: 'raceColumn',
33
+ RaceScatter: 'raceScatter',
34
+ RaceLine: 'raceLine',
35
+ RacePie: 'racePie',
36
+ RaceDonut: 'raceDonut',
35
37
  Funnel: 'funnel',
36
38
  Heatmap: 'heatmap',
37
39
  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 RaceLine: 'raceLine',\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,UAAU;IACV,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
+ {"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 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 // Race\n RaceBar: 'raceBar',\n RaceColumn: 'raceColumn',\n RaceScatter: 'raceScatter',\n RaceLine: 'raceLine',\n RacePie: 'racePie',\n RaceDonut: 'raceDonut',\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,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,SAAS;IACT,YAAY;IACZ,aAAa;IACb,UAAU;IACV,SAAS;IACT,WAAW;IAEX,QAAQ;IACR,SAAS;IACT,SAAS;IACT,WAAW;AACb;AAGO,MAAMC,iBAAiB"}
package/dist/umd/index.js CHANGED
@@ -3108,10 +3108,6 @@ self.R = R;
3108
3108
  ColumnPercent: 'columnPercent',
3109
3109
  ColumnParallel: 'columnParallel',
3110
3110
  Bar: 'bar',
3111
- RaceBar: 'raceBar',
3112
- RaceColumn: 'raceColumn',
3113
- RaceScatter: 'raceScatter',
3114
- RaceLine: 'raceLine',
3115
3111
  BarPercent: 'barPercent',
3116
3112
  BarParallel: 'barParallel',
3117
3113
  Area: 'area',
@@ -3126,6 +3122,12 @@ self.R = R;
3126
3122
  CirclePacking: 'circlePacking',
3127
3123
  Sunburst: 'sunburst',
3128
3124
  TreeMap: 'treeMap',
3125
+ RaceBar: 'raceBar',
3126
+ RaceColumn: 'raceColumn',
3127
+ RaceScatter: 'raceScatter',
3128
+ RaceLine: 'raceLine',
3129
+ RacePie: 'racePie',
3130
+ RaceDonut: 'raceDonut',
3129
3131
  Funnel: 'funnel',
3130
3132
  Heatmap: 'heatmap',
3131
3133
  Boxplot: 'boxPlot',
@@ -3924,28 +3926,12 @@ self.R = R;
3924
3926
  }
3925
3927
  const treeTreeToColumns = (tree, callback)=>{
3926
3928
  const result = tree.map((item)=>{
3927
- if ('children' in item && Array.isArray(item.children)) {
3928
- const groupNode = item;
3929
- const field = groupNode.id;
3930
- const title = groupNode.alias ?? groupNode.id;
3931
- const props = callback?.(groupNode) || {};
3932
- return {
3933
- field,
3934
- title,
3935
- columns: treeTreeToColumns(item.children, callback),
3936
- ...props
3937
- };
3938
- }
3939
- {
3940
- const field = item.id;
3941
- const title = item.alias ?? item.id;
3942
- const props = callback?.(item) || {};
3943
- return {
3944
- field,
3945
- title,
3946
- ...props
3947
- };
3948
- }
3929
+ const props = callback?.(item) || {};
3930
+ if ('children' in item && Array.isArray(item.children)) return {
3931
+ ...props,
3932
+ columns: treeTreeToColumns(item.children, callback)
3933
+ };
3934
+ return props;
3949
3935
  });
3950
3936
  return result || [];
3951
3937
  };
@@ -3956,14 +3942,30 @@ self.R = R;
3956
3942
  ...spec
3957
3943
  };
3958
3944
  const eachNode = (node)=>{
3959
- if (isMeasure(node)) return {
3945
+ const field = node.id;
3946
+ const title = node.alias ?? node.id;
3947
+ if (isDimensionGroup(node)) return {
3948
+ field,
3949
+ title,
3950
+ headerStyle: {
3951
+ textAlign: 'left'
3952
+ }
3953
+ };
3954
+ return {
3955
+ field,
3956
+ title,
3960
3957
  width: 'auto',
3958
+ style: {
3959
+ textAlign: 'left'
3960
+ },
3961
+ headerStyle: {
3962
+ textAlign: 'left'
3963
+ },
3961
3964
  fieldFormat: (datum)=>{
3962
3965
  const formatter = createFormatterByDimension(node, advancedVSeed.locale);
3963
3966
  return formatter(datum[node.id]);
3964
3967
  }
3965
3968
  };
3966
- return {};
3967
3969
  };
3968
3970
  const columns = treeTreeToColumns(dimensionTree, eachNode);
3969
3971
  return {
@@ -4055,11 +4057,27 @@ self.R = R;
4055
4057
  ...spec
4056
4058
  };
4057
4059
  const eachNode = (node)=>{
4058
- if (isMeasure(node)) return {
4060
+ const field = node.id;
4061
+ const title = node.alias ?? node.id;
4062
+ if (isMeasureGroup(node)) return {
4063
+ field,
4064
+ title,
4065
+ headerStyle: {
4066
+ textAlign: 'right'
4067
+ }
4068
+ };
4069
+ return {
4070
+ field,
4071
+ title,
4059
4072
  width: 'auto',
4073
+ style: {
4074
+ textAlign: 'right'
4075
+ },
4076
+ headerStyle: {
4077
+ textAlign: 'right'
4078
+ },
4060
4079
  fieldFormat: fieldFormat(node)
4061
4080
  };
4062
- return {};
4063
4081
  };
4064
4082
  const columns = treeTreeToColumns(measureTree, eachNode);
4065
4083
  return {
@@ -4670,6 +4688,9 @@ self.R = R;
4670
4688
  dimensionKey: item.id,
4671
4689
  title: item.alias || item.id,
4672
4690
  width: 'auto',
4691
+ headerStyle: {
4692
+ textAlign: 'right'
4693
+ },
4673
4694
  headerFormat: (value)=>formatter(value)
4674
4695
  };
4675
4696
  })
@@ -8899,6 +8920,37 @@ self.R = R;
8899
8920
  result.animation = true;
8900
8921
  return result;
8901
8922
  };
8923
+ const reverseStackCornerRadius = (cornerRadius)=>{
8924
+ if (!Array.isArray(cornerRadius)) return cornerRadius;
8925
+ const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius;
8926
+ return [
8927
+ bottomRight,
8928
+ bottomLeft,
8929
+ topLeft,
8930
+ topRight
8931
+ ];
8932
+ };
8933
+ const mergeStackCornerRadius = (cornerRadius)=>{
8934
+ if (!Array.isArray(cornerRadius)) return cornerRadius;
8935
+ const [topLeft = 0, topRight = 0, bottomRight = 0, bottomLeft = 0] = cornerRadius;
8936
+ return [
8937
+ Math.max(topLeft, bottomRight),
8938
+ Math.max(topRight, bottomLeft),
8939
+ Math.max(bottomRight, topLeft),
8940
+ Math.max(bottomLeft, topRight)
8941
+ ];
8942
+ };
8943
+ const getStackRangeCornerRadius = (cornerRadius, datum)=>{
8944
+ const stackStart = datum?.['__VCHART_STACK_START'];
8945
+ const stackEnd = datum?.['__VCHART_STACK_END'];
8946
+ if ('number' != typeof stackStart || 'number' != typeof stackEnd) return;
8947
+ const hasPositivePart = stackStart > 0 || stackEnd > 0;
8948
+ const hasNegativePart = stackStart < 0 || stackEnd < 0;
8949
+ if (hasPositivePart && hasNegativePart) return mergeStackCornerRadius(cornerRadius);
8950
+ if (hasPositivePart) return cornerRadius;
8951
+ if (hasNegativePart) return reverseStackCornerRadius(cornerRadius);
8952
+ return 0;
8953
+ };
8902
8954
  const stackCornerRadius_stackCornerRadius = (spec, context)=>{
8903
8955
  const { advancedVSeed, vseed } = context;
8904
8956
  const { chartType } = vseed;
@@ -8907,7 +8959,11 @@ self.R = R;
8907
8959
  return {
8908
8960
  ...spec,
8909
8961
  stackCornerRadius: (_, datum)=>{
8910
- if (datum && datum[datum[FoldMeasureId]] > 0) return stackCornerRadius;
8962
+ const stackRangeCornerRadius = getStackRangeCornerRadius(stackCornerRadius, datum);
8963
+ if (void 0 !== stackRangeCornerRadius) return stackRangeCornerRadius;
8964
+ const value = datum?.[datum?.[FoldMeasureId]];
8965
+ if (value > 0) return stackCornerRadius;
8966
+ if (value < 0) return reverseStackCornerRadius(stackCornerRadius);
8911
8967
  return 0;
8912
8968
  }
8913
8969
  };