@visactor/vseed 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/builder/builder/prepare.js +87 -153
- package/dist/esm/builder/builder/prepare.js.map +1 -1
- package/dist/esm/dataSelector/selector.d.ts +2 -2
- package/dist/esm/dataSelector/selector.js.map +1 -1
- package/dist/esm/i18n/i18nData.js +28 -0
- package/dist/esm/i18n/i18nData.js.map +1 -1
- package/dist/esm/pipeline/advanced/chart/pipes/default/defaultMeasures.js.map +1 -1
- package/dist/esm/pipeline/advanced/table/pipeline/pivotTable.js +2 -3
- package/dist/esm/pipeline/advanced/table/pipeline/pivotTable.js.map +1 -1
- package/dist/esm/pipeline/advanced/table/pipes/config/pivotTableConfig.js +2 -1
- package/dist/esm/pipeline/advanced/table/pipes/config/pivotTableConfig.js.map +1 -1
- package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasures.js.map +1 -1
- package/dist/esm/pipeline/advanced/table/pipes/default/index.d.ts +0 -1
- package/dist/esm/pipeline/advanced/table/pipes/default/index.js +1 -2
- package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js +6 -3
- package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js.map +1 -1
- package/dist/esm/pipeline/advanced/table/pipes/index.d.ts +0 -1
- package/dist/esm/pipeline/advanced/table/pipes/index.js +0 -1
- package/dist/esm/pipeline/spec/chart/pipes/label/label.js +6 -2
- package/dist/esm/pipeline/spec/chart/pipes/label/label.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipeline/pivotTable.js +1 -1
- package/dist/esm/pipeline/spec/table/pipeline/pivotTable.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipeline/table.js +3 -1
- package/dist/esm/pipeline/spec/table/pipeline/table.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/cellStyle/pivot.js +1 -3
- package/dist/esm/pipeline/spec/table/pipes/cellStyle/pivot.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.d.ts +8 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.js +76 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.js.map +1 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js +1 -27
- package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/columns/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/index.js +1 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js +1 -27
- package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/columns/utils.d.ts +15 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/utils.js +35 -0
- package/dist/esm/pipeline/spec/table/pipes/columns/utils.js.map +1 -0
- package/dist/esm/pipeline/spec/table/pipes/corner/titleOnDimension.js +3 -2
- package/dist/esm/pipeline/spec/table/pipes/corner/titleOnDimension.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js +41 -5
- package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js +20 -25
- package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js +2 -12
- package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js.map +1 -1
- package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.d.ts +2 -0
- package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.js +51 -0
- package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.js.map +1 -0
- package/dist/esm/pipeline/spec/table/pipes/theme/index.d.ts +1 -0
- package/dist/esm/pipeline/spec/table/pipes/theme/index.js +1 -0
- package/dist/esm/types/advancedVSeed.d.ts +2 -1
- package/dist/esm/types/advancedVSeed.js +3 -2
- package/dist/esm/types/advancedVSeed.js.map +1 -1
- package/dist/esm/types/chartType/area/zArea.d.ts +113 -8
- package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +113 -8
- package/dist/esm/types/chartType/bar/zBar.d.ts +97 -4
- package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +97 -4
- package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +97 -4
- package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +89 -2
- package/dist/esm/types/chartType/circlePacking/zCirclePacking.d.ts +81 -0
- package/dist/esm/types/chartType/column/zColumn.d.ts +97 -4
- package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +97 -4
- package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +97 -4
- package/dist/esm/types/chartType/donut/zDonut.d.ts +81 -0
- package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +121 -10
- package/dist/esm/types/chartType/funnel/zFunnel.d.ts +81 -0
- package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +81 -0
- package/dist/esm/types/chartType/histogram/zHistogram.d.ts +97 -4
- package/dist/esm/types/chartType/line/zLine.d.ts +105 -6
- package/dist/esm/types/chartType/pie/zPie.d.ts +81 -0
- package/dist/esm/types/chartType/pivotTable/pivotTable.d.ts +12 -1
- package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +13 -0
- package/dist/esm/types/chartType/pivotTable/zPivotTable.js +3 -1
- package/dist/esm/types/chartType/pivotTable/zPivotTable.js.map +1 -1
- package/dist/esm/types/chartType/raceBar/zRaceBar.d.ts +97 -4
- package/dist/esm/types/chartType/raceColumn/zRaceColumn.d.ts +97 -4
- package/dist/esm/types/chartType/raceDonut/zRaceDonut.d.ts +81 -0
- package/dist/esm/types/chartType/raceLine/zRaceLine.d.ts +105 -6
- package/dist/esm/types/chartType/racePie/zRacePie.d.ts +81 -0
- package/dist/esm/types/chartType/raceScatter/zRaceScatter.d.ts +97 -4
- package/dist/esm/types/chartType/radar/zRadar.d.ts +81 -0
- package/dist/esm/types/chartType/rose/zRose.d.ts +81 -0
- package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +81 -0
- package/dist/esm/types/chartType/scatter/zScatter.d.ts +97 -4
- package/dist/esm/types/chartType/sunburst/zSunburst.d.ts +81 -0
- package/dist/esm/types/chartType/table/table.d.ts +11 -1
- package/dist/esm/types/chartType/table/zTable.d.ts +7 -0
- package/dist/esm/types/chartType/table/zTable.js +2 -1
- package/dist/esm/types/chartType/table/zTable.js.map +1 -1
- package/dist/esm/types/chartType/treeMap/zTreeMap.d.ts +81 -0
- package/dist/esm/types/dataSelector/selector.d.ts +53 -29
- package/dist/esm/types/dataSelector/selector.js +1 -1
- package/dist/esm/types/dataSelector/selector.js.map +1 -1
- package/dist/esm/types/properties/aggregation/aggregation.d.ts +9 -0
- package/dist/esm/types/properties/aggregation/aggregation.js +0 -0
- package/dist/esm/types/properties/aggregation/index.d.ts +2 -0
- package/dist/esm/types/properties/aggregation/index.js +2 -0
- package/dist/esm/types/properties/aggregation/zAggregation.d.ts +8 -0
- package/dist/esm/types/properties/aggregation/zAggregation.js +11 -0
- package/dist/esm/types/properties/aggregation/zAggregation.js.map +1 -0
- package/dist/esm/types/properties/annotation/annotation.d.ts +8 -2
- package/dist/esm/types/properties/annotation/zAnnotationPoint.d.ts +4 -1
- package/dist/esm/types/properties/config/annotation/zAnnotation.d.ts +8 -2
- package/dist/esm/types/properties/config/area.d.ts +170 -2
- package/dist/esm/types/properties/config/bar.d.ts +255 -3
- package/dist/esm/types/properties/config/boxplot.d.ts +85 -1
- package/dist/esm/types/properties/config/circlePacking.d.ts +81 -0
- package/dist/esm/types/properties/config/column.d.ts +255 -3
- package/dist/esm/types/properties/config/config.d.ts +2425 -19
- package/dist/esm/types/properties/config/dualAxis.d.ts +85 -1
- package/dist/esm/types/properties/config/funnel.d.ts +81 -0
- package/dist/esm/types/properties/config/heatmap.d.ts +81 -0
- package/dist/esm/types/properties/config/histogram.d.ts +85 -1
- package/dist/esm/types/properties/config/label/label.d.ts +18 -1
- package/dist/esm/types/properties/config/label/zLabel.d.ts +81 -0
- package/dist/esm/types/properties/config/label/zLabel.js +3 -2
- package/dist/esm/types/properties/config/label/zLabel.js.map +1 -1
- package/dist/esm/types/properties/config/label/zPieLabel.d.ts +81 -0
- package/dist/esm/types/properties/config/line.d.ts +85 -1
- package/dist/esm/types/properties/config/pie.d.ts +243 -0
- package/dist/esm/types/properties/config/race.d.ts +510 -6
- package/dist/esm/types/properties/config/rose.d.ts +162 -0
- package/dist/esm/types/properties/config/scatter.d.ts +85 -1
- package/dist/esm/types/properties/config/sunburst.d.ts +81 -0
- package/dist/esm/types/properties/config/treeMap.d.ts +81 -0
- package/dist/esm/types/properties/index.d.ts +2 -0
- package/dist/esm/types/properties/index.js +2 -0
- package/dist/esm/types/properties/markStyle/barStyle.d.ts +4 -1
- package/dist/esm/types/properties/markStyle/lineStyle.d.ts +4 -1
- package/dist/esm/types/properties/markStyle/markStyle.d.ts +32 -8
- package/dist/esm/types/properties/markStyle/pointStyle.d.ts +4 -1
- package/dist/esm/types/properties/markStyle/zAreaStyle.d.ts +4 -1
- package/dist/esm/types/properties/theme/customTheme.d.ts +4850 -38
- package/dist/esm/types/properties/totals/index.d.ts +2 -0
- package/dist/esm/types/properties/totals/index.js +2 -0
- package/dist/esm/types/properties/totals/totals.d.ts +34 -0
- package/dist/esm/types/properties/totals/totals.js +0 -0
- package/dist/esm/types/properties/totals/zTotals.d.ts +18 -0
- package/dist/esm/types/properties/totals/zTotals.js +13 -0
- package/dist/esm/types/properties/totals/zTotals.js.map +1 -0
- package/dist/umd/index.js +461 -388
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.d.ts +0 -2
- package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js +0 -19
- package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js.map +0 -1
- package/dist/esm/pipeline/advanced/table/pipes/reshape/index.d.ts +0 -1
- package/dist/esm/pipeline/advanced/table/pipes/reshape/index.js +0 -2
- package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.d.ts +0 -2
- package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js +0 -32
- package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/advanced/table/pipes/encoding/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/table/pipes/encoding/pivotTable.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const encodingForPivotTable: AdvancedPipe = (advancedVSeed) => {\n const { measureTree = [], dimensionTree = [] } = advancedVSeed\n const measures = findAllMeasures(measureTree)\n\n const
|
|
1
|
+
{"version":3,"file":"pipeline/advanced/table/pipes/encoding/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/table/pipes/encoding/pivotTable.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { MeasureId, MeasureName } from 'src/dataReshape'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const encodingForPivotTable: AdvancedPipe = (advancedVSeed) => {\n const { measureTree = [], dimensionTree = [] } = advancedVSeed\n const measures = findAllMeasures(measureTree)\n\n // 过滤掉用户输入中可能存在的虚拟指标维度(__MeaId__ / __MeaName__),\n // pivotTable 不再做 data reshape,这些虚拟维度不再需要\n const filteredDimensionTree = dimensionTree.filter((dim: Dimension) => dim.id !== MeasureId && dim.id !== MeasureName)\n\n const hasDimensionEncoding = filteredDimensionTree.some((item: Dimension) => item.encoding)\n const hasMeasureEncoding = measures.some((item: Measure) => item.encoding)\n const encoding: Encoding = {}\n\n if (hasDimensionEncoding) {\n generateDimensionEncoding(filteredDimensionTree, encoding)\n } else {\n generateDefaultDimensionEncoding(filteredDimensionTree, encoding)\n }\n\n if (hasMeasureEncoding) {\n generateMeasureEncoding(measures, encoding)\n } else {\n generateDefaultMeasureEncoding(measures, encoding)\n }\n\n return { ...advancedVSeed, dimensionTree: filteredDimensionTree, encoding }\n}\n\n/**\n * --------------------维度--------------------\n */\nconst generateDefaultDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n uniqueDimIds.forEach((item, index) => {\n if (index % 2 === 0) {\n encoding.column!.push(item)\n } else {\n encoding.row!.push(item)\n }\n })\n}\nconst generateDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n dimensions.forEach((dim, index) => {\n const id = dim.id\n if (dim.encoding === 'row') {\n encoding.row!.push(id)\n } else if (dim.encoding === 'column') {\n encoding.column!.push(id)\n } else {\n if (index % 2 === 0) {\n encoding.column!.push(id)\n } else {\n encoding.row!.push(id)\n }\n }\n })\n}\n\n/**\n * --------------------指标--------------------\n */\nconst generateDefaultMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = unique(measures.map((item) => item.id))\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\nconst generateMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = measures.map((item) => item.id)\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\n"],"names":["encodingForPivotTable","advancedVSeed","measureTree","dimensionTree","measures","findAllMeasures","filteredDimensionTree","dim","MeasureId","MeasureName","hasDimensionEncoding","item","hasMeasureEncoding","encoding","generateDimensionEncoding","generateDefaultDimensionEncoding","generateMeasureEncoding","generateDefaultMeasureEncoding","dimensions","uniqueDimIds","unique","d","index","id"],"mappings":";;;AAKO,MAAMA,wBAAsC,CAACC;IAClD,MAAM,EAAEC,cAAc,EAAE,EAAEC,gBAAgB,EAAE,EAAE,GAAGF;IACjD,MAAMG,WAAWC,gBAAgBH;IAIjC,MAAMI,wBAAwBH,cAAc,MAAM,CAAC,CAACI,MAAmBA,IAAI,EAAE,KAAKC,aAAaD,IAAI,EAAE,KAAKE;IAE1G,MAAMC,uBAAuBJ,sBAAsB,IAAI,CAAC,CAACK,OAAoBA,KAAK,QAAQ;IAC1F,MAAMC,qBAAqBR,SAAS,IAAI,CAAC,CAACO,OAAkBA,KAAK,QAAQ;IACzE,MAAME,WAAqB,CAAC;IAE5B,IAAIH,sBACFI,0BAA0BR,uBAAuBO;SAEjDE,iCAAiCT,uBAAuBO;IAG1D,IAAID,oBACFI,wBAAwBZ,UAAUS;SAElCI,+BAA+Bb,UAAUS;IAG3C,OAAO;QAAE,GAAGZ,aAAa;QAAE,eAAeK;QAAuBO;IAAS;AAC5E;AAKA,MAAME,mCAAmC,CAACG,YAAwBL;IAChE,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBM,aAAa,OAAO,CAAC,CAACR,MAAMW;QAC1B,IAAIA,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACF;aAEtBE,SAAS,GAAG,CAAE,IAAI,CAACF;IAEvB;AACF;AACA,MAAMG,4BAA4B,CAACI,YAAwBL;IACzD,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBK,WAAW,OAAO,CAAC,CAACX,KAAKe;QACvB,MAAMC,KAAKhB,IAAI,EAAE;QACjB,IAAIA,AAAiB,UAAjBA,IAAI,QAAQ,EACdM,SAAS,GAAG,CAAE,IAAI,CAACU;aACd,IAAIhB,AAAiB,aAAjBA,IAAI,QAAQ,EACrBM,SAAS,MAAM,CAAE,IAAI,CAACU;aAEtB,IAAID,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACU;aAEtBV,SAAS,GAAG,CAAE,IAAI,CAACU;IAGzB;AACF;AAKA,MAAMN,iCAAiC,CAACb,UAAoBS;IAC1DA,SAAS,OAAO,GAAGO,OAAOhB,SAAS,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IACxDE,SAAS,MAAM,GAAGO,OAChBhB,SAAS,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG;AACA,MAAMK,0BAA0B,CAACZ,UAAoBS;IACnDA,SAAS,OAAO,GAAGT,SAAS,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IACjDE,SAAS,MAAM,GAAGO,OAChBhB,SAAS,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG"}
|
|
@@ -2,7 +2,6 @@ export * from "./init/index.js";
|
|
|
2
2
|
export * from "./records/index.js";
|
|
3
3
|
export * from "./config/index.js";
|
|
4
4
|
export * from "./default/index.js";
|
|
5
|
-
export * from "./reshape/index.js";
|
|
6
5
|
export * from "./encoding/index.js";
|
|
7
6
|
export * from "./cellStyle/index.js";
|
|
8
7
|
export * from "./page/index.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DATUM_HIDE_KEY, createFormatter, createFormatterByMeasure, findMeasureById } from "../../../../utils/index.js";
|
|
2
2
|
import { isNumber, merge, uniqueBy } from "remeda";
|
|
3
|
-
import { selector } from "../../../../../dataSelector/index.js";
|
|
3
|
+
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
|
|
4
4
|
import { MeasureId } from "../../../../../dataReshape/constant.js";
|
|
5
5
|
const label_label = (spec, context)=>{
|
|
6
6
|
const result = {
|
|
@@ -45,7 +45,11 @@ const buildLabel = (label, vseedMeasures = [], vseedDimensions = [], advancedVSe
|
|
|
45
45
|
const percentFormatter = createFormatter(percentFormat);
|
|
46
46
|
const result = {
|
|
47
47
|
visible: enable,
|
|
48
|
-
dataFilter: (data)=>data.filter((entry)=>
|
|
48
|
+
dataFilter: (data)=>data.filter((entry)=>{
|
|
49
|
+
if (entry.data?.[DATUM_HIDE_KEY]) return false;
|
|
50
|
+
const shouldApply = label.dynamicFilter ? selectorWithDynamicFilter(entry.data, label.dynamicFilter, label.selector) : selector(entry.data, label.selector, 'Or');
|
|
51
|
+
return shouldApply;
|
|
52
|
+
}),
|
|
49
53
|
formatMethod: (_, datum)=>{
|
|
50
54
|
const result = [];
|
|
51
55
|
const dimLabels = labelDims.map((item)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByMeasure, DATUM_HIDE_KEY, findMeasureById } from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n return entry.data?.[DATUM_HIDE_KEY] !== true && selector(entry.data as Datum, label.selector, 'Or')\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n return datum[id] as number | string\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","selector","_","datum","dimLabels","id","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":";;;;AAmBO,MAAMA,cAAwB,CAACC,MAAMC;IAC1C,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAEC,KAAK,EAAE,GAAGH;IACjC,MAAM,EAAEI,kBAAkB,EAAE,GAAGF;IAC/B,MAAM,EAAEG,SAAS,EAAEC,QAAQ,EAAE,GAAGJ;IAChC,MAAMK,aAAaL,cAAc,MAAM,CAACG,UAAU;IAClD,MAAMG,WAAWJ,kBAAkB,CAAC,EAAE,CAAC,QAAQ;IAE/C,MAAM,EAAEN,KAAK,EAAE,GAAGS;IAClBN,OAAO,KAAK,GAAGQ,WACbX,OACAK,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBI,UACA;QAACE;KAAS;IAGZ,OAAOP;AACT;AAEO,MAAMS,uBAAuB,CAClCC,OACAC,SACAC,iBACAC,YAAuB,CAAC,CAAC;IAEzB,MAAMC,SAASC,MAAMF,WAAWF,QAAQ,SAAS,IAAIA,QAAQ,MAAM;IACnE,MAAMK,gBAAgB;QAAE,GAAGL,OAAO;QAAE,WAAWG;QAAQ,YAAYF,mBAAmBD,QAAQ,UAAU;IAAC;IAEzG,MAAMM,YAAYC,yBAAyBF;IAC3C,OAAOC,UAAUP;AACnB;AAEO,MAAMS,yBAAyB,CAACT,OAAwBU,KAAaH;IAC1E,IAAIP,QAAAA,OAAuC,OAAOW,OAAOX;IACzD,MAAMY,MAAMC,OAAOb;IACnB,IAAIa,OAAO,KAAK,CAACD,MAAM,OAAOD,OAAOX;IAErC,MAAMc,eAAeF,MAAMF;IAC3B,OAAOH,UAAUO;AACnB;AAEO,MAAMhB,aAAa,CACxBX,OACA4B,gBAA0B,EAAE,EAC5BC,kBAA8B,EAAE,EAChCC,yBACAC,uBACAvB,UACAwB;IAEA,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,gBAAgB,EAChBC,aAAa,EACbC,YAAY,EACZC,qBAAqB,EACrBC,WAAW,EACXC,UAAU,EACVC,aAAa,EACbC,eAAe,EACfC,oBAAoB,EACpBC,aAAa,EACbC,UAAU,EACV9B,YAAY,CAAC,CAAC,EACf,GAAGhB;IAEJ,MAAM+C,sBAAsBlB,gBAAgB,IAAI,CAAC,CAACmB,OAASxC,SAAS,KAAK,EAAE,SAASwC,KAAK,EAAE;IAE3F,MAAMC,YAAYC,SAChBH,sBACIlB,gBAAgB,MAAM,CAAC,CAACmB,OAASxC,SAAS,KAAK,EAAE,SAASwC,KAAK,EAAE,KACjEX,gBACEP,wBAAwB,MAAM,CAAC,CAACqB,IAAMA,EAAE,EAAE,KAAKC,aAAaD,AAAe,UAAfA,EAAE,QAAQ,IAAcA,AAAe,aAAfA,EAAE,QAAQ,IAC9F,EAAE,EACR,CAACH,OAAoBA,KAAK,EAAE;IAG9B,MAAMK,YAAYH,SAChBtB,cAAc,MAAM,CAAC,CAACoB,OAASxC,SAAS,KAAK,EAAE,SAASwC,KAAK,EAAE,IAC/D,CAACA,OAAkBA,KAAK,EAAE;IAG5B,MAAMM,gBAA2BpC,MAAMF,WAAW;QAChD,MAAM;IACR;IAEA,MAAMuC,mBAAmBC,gBAAgBF;IAEzC,MAAMnD,SAAS;QACb,SAAS8B;QACT,YAAY,CAACwB,OACJA,KAAK,MAAM,CAAC,CAACC,QACXA,MAAM,IAAI,EAAE,CAACC,eAAe,KAAK,QAAQC,SAASF,MAAM,IAAI,EAAW1D,MAAM,QAAQ,EAAE;QAGlG,cAAc,CAAC6D,GAAYC;YACzB,MAAM3D,SAAS,EAAE;YAEjB,MAAM4D,YAAYd,UAAU,GAAG,CAAC,CAACD;gBAC/B,MAAMgB,KAAKhB,KAAK,EAAE;gBAClB,OAAOc,KAAK,CAACE,GAAG;YAClB;YAEA,MAAMC,YAAYZ,UAAU,GAAG,CAAC,CAACL,OAC/BpC,qBAAqBkD,KAAK,CAACd,KAAK,EAAE,CAAC,EAAqBA,MAAMF,YAAY9B;YAG5Eb,OAAO,IAAI,IAAI4D;YAEf/B,aAAa,OAAO,CAAC,CAACtB;gBACpB,MAAM,EAAEwD,SAAS,EAAEC,YAAY,EAAEC,UAAU,EAAE,GAAG1D;gBAChD,MAAMI,UAAUuD,gBAAgBtC,uBAAuB+B,KAAK,CAACI,UAAU;gBACvE,IAAIpD,SAAS;oBACX,MAAMwD,oBAAoB1D,qBACxBkD,KAAK,CAACK,aAAa,EACnBrD,SACAgC,YACA9B;oBAGF,IAAImB,WACFhC,OAAO,IAAI,CAACmE;oBAEd,IAAIlC,kBACF;wBAAA,IAAImC,SAAST,KAAK,CAAC,qBAAqB,GAEtC3D,OAAO,IAAI,CAACmB,uBAAuBwC,KAAK,CAAC,qBAAqB,EAAE,GAAGP;6BAC9D,IAAIa,cAAcG,SAASH,WAAW,GAAG,GAC9CjE,OAAO,IAAI,CACTmB,uBAAuBwC,KAAK,CAACK,aAAa,EAAqBC,WAAW,GAAG,EAAEb;oBAEnF;gBAEJ;YACF;YAEApD,OAAO,IAAI,IAAI8D;YAEf,IAAI/B,MACF,OAAO/B;YAET,OAAOA,OAAO,IAAI,CAAC;QACrB;QACA,WAAW;QACX,UAAU0C;QACV,OAAO;YACL,QAAQL;YACR,MAAMC;YACN,UAAUC;YACV,YAAYC;YACZ,YAAYC;QACd;QACA,aAAaL;IACf;IAEA,IAAIA,uBACApC,OAAO,KAAK,CAAS,SAAS,GAAG;IAGrC,IAAImC,cACAnC,OAAe,OAAO,GAAG;QACzB,WAAW;QACX,YAAY;IACd;IAGF,OAAOA;AACT"}
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByMeasure, DATUM_HIDE_KEY, findMeasureById } from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n return datum[id] as number | string\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","dimLabels","id","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/table/pipeline/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/pivotTable.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n titleOnDimension,\n pivotTableBodyCell,\n} from '../pipes'\nimport { dataConfig } from '../pipes/indicators/pivotDataConfig'\n\nexport const pivotTableSpecPipeline: SpecPipeline = [\n initPivotTable,\n pivotColumns,\n pivotRows,\n
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipeline/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/pivotTable.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n titleOnDimension,\n pivotTableBodyCell,\n} from '../pipes'\nimport { dataConfig } from '../pipes/indicators/pivotDataConfig'\n\nexport const pivotTableSpecPipeline: SpecPipeline = [\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n titleOnDimension,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n dataConfig,\n pivotTableBodyCell,\n]\n"],"names":["pivotTableSpecPipeline","initPivotTable","pivotColumns","pivotRows","pivotIndicators","titleOnDimension","bodyStyle","headerStyle","rowHeaderStyle","cornerHeaderStyle","tableThemeStyle","selectionStyle","dataConfig","pivotTableBodyCell"],"mappings":";;AAiBO,MAAMA,yBAAuC;IAClDC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { bodyStyle, dimensionTreeToColumns, headerStyle, initTable, measureTreeToColumns, selectionStyle, tableBodyCell, tableThemeStyle } from "../pipes/index.js";
|
|
1
|
+
import { bodyStyle, bottomFrozenStyle, columnsAggregation, dimensionTreeToColumns, headerStyle, initTable, measureTreeToColumns, selectionStyle, tableBodyCell, tableThemeStyle } from "../pipes/index.js";
|
|
2
2
|
const tableSpecPipeline = [
|
|
3
3
|
initTable,
|
|
4
4
|
dimensionTreeToColumns,
|
|
5
5
|
measureTreeToColumns,
|
|
6
|
+
columnsAggregation,
|
|
6
7
|
bodyStyle,
|
|
7
8
|
headerStyle,
|
|
9
|
+
bottomFrozenStyle,
|
|
8
10
|
tableThemeStyle,
|
|
9
11
|
selectionStyle,
|
|
10
12
|
tableBodyCell
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/table/pipeline/table.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/table.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n bodyStyle,\n headerStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n} from '../pipes'\n\nexport const tableSpecPipeline: SpecPipeline = [\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n bodyStyle,\n headerStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n]\n"],"names":["tableSpecPipeline","initTable","dimensionTreeToColumns","measureTreeToColumns","bodyStyle","headerStyle","tableThemeStyle","selectionStyle","tableBodyCell"],"mappings":";
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipeline/table.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/table.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n columnsAggregation,\n bodyStyle,\n headerStyle,\n bottomFrozenStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n} from '../pipes'\n\nexport const tableSpecPipeline: SpecPipeline = [\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n columnsAggregation,\n bodyStyle,\n headerStyle,\n bottomFrozenStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n]\n"],"names":["tableSpecPipeline","initTable","dimensionTreeToColumns","measureTreeToColumns","columnsAggregation","bodyStyle","headerStyle","bottomFrozenStyle","tableThemeStyle","selectionStyle","tableBodyCell"],"mappings":";AAcO,MAAMA,oBAAkC;IAC7CC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { array } from "@visactor/vutils";
|
|
2
|
-
import {
|
|
2
|
+
import { isString } from "remeda";
|
|
3
3
|
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/selector.js";
|
|
4
4
|
import { getCellOriginalDataByDatum, pickBodyCellStyle } from "./common.js";
|
|
5
|
-
import { FoldMeasureValue, MeasureId } from "../../../../../dataReshape/index.js";
|
|
6
5
|
const pivotTableBodyCell = (spec, context)=>{
|
|
7
6
|
const { advancedVSeed } = context;
|
|
8
7
|
const { cellStyle } = advancedVSeed;
|
|
@@ -29,7 +28,6 @@ const pivotTableBodyCell = (spec, context)=>{
|
|
|
29
28
|
headerPaths.forEach((path)=>{
|
|
30
29
|
if (path.dimensionKey) originalDatum[path.dimensionKey] = path.value;
|
|
31
30
|
});
|
|
32
|
-
if (!isNullish(originalDatum[MeasureId]) && !isNullish(originalDatum[FoldMeasureValue])) originalDatum[originalDatum[MeasureId]] = originalDatum[FoldMeasureValue];
|
|
33
31
|
const currentCellData = getCellOriginalDataByDatum(datum, hasDynamicFilter, originalDatum);
|
|
34
32
|
const mergedStyle = bodyCellStyleList.reduce((result, style)=>{
|
|
35
33
|
const shouldApply = style.dynamicFilter ? selectorWithDynamicFilter(currentCellData || originalDatum, style.dynamicFilter, style.selector) : selector(originalDatum, style.selector);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/table/pipes/cellStyle/pivot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/cellStyle/pivot.ts"],"sourcesContent":["import type { IIndicator, PivotTableConstructorOptions } from '@visactor/vtable'\nimport { array } from '@visactor/vutils'\nimport {
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipes/cellStyle/pivot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/cellStyle/pivot.ts"],"sourcesContent":["import type { IIndicator, PivotTableConstructorOptions } from '@visactor/vtable'\nimport { array } from '@visactor/vutils'\nimport { isString } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector/selector'\nimport type { BodyCellStyle, Datum, PivotTableSpecPipe } from 'src/types'\nimport { getCellOriginalDataByDatum, pickBodyCellStyle } from './common'\n\nexport const pivotTableBodyCell: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { cellStyle } = advancedVSeed\n const bodyCellStyle = cellStyle?.bodyCellStyle\n\n if (!bodyCellStyle) {\n return spec as PivotTableConstructorOptions\n }\n const bodyCellStyleList = array(bodyCellStyle) as BodyCellStyle[]\n const indicators = (spec as PivotTableConstructorOptions).indicators || []\n const selectedPos: { col: number; row: number }[] = []\n const hasDynamicFilter = bodyCellStyleList.some((style) => !!style.dynamicFilter)\n\n const newIndicators = indicators.map((ind) => {\n const newInd = isString(ind)\n ? ({\n indicatorKey: ind,\n } as IIndicator)\n : ind\n\n const { indicatorKey } = newInd\n\n newInd.style = (datum: any) => {\n const { dataValue, cellHeaderPaths } = datum\n const headerPaths = [...cellHeaderPaths.colHeaderPaths, ...cellHeaderPaths.rowHeaderPaths]\n\n const originalDatum: Datum = {\n [indicatorKey]: dataValue,\n }\n\n headerPaths.forEach((path: any) => {\n if (path.dimensionKey) {\n originalDatum[path.dimensionKey] = path.value\n }\n })\n\n const currentCellData = getCellOriginalDataByDatum(datum, hasDynamicFilter, originalDatum)\n\n const mergedStyle = bodyCellStyleList.reduce<Record<string, any>>((result, style) => {\n const shouldApply = style.dynamicFilter\n ? selectorWithDynamicFilter(currentCellData || originalDatum, style.dynamicFilter, style.selector)\n : selector(originalDatum, style.selector)\n if (shouldApply) {\n if (selectedPos.length && selectedPos[0].col === datum?.col && selectedPos[0].row === datum?.row) {\n // 说明重复进入了,清空历史\n selectedPos.length = 0\n }\n selectedPos.push({\n col: datum?.col,\n row: datum?.row,\n })\n return {\n ...result,\n ...pickBodyCellStyle(style),\n }\n }\n\n return result\n }, {})\n\n return mergedStyle\n }\n return newInd\n })\n return {\n ...spec,\n runningConfig: {\n ...((spec as any)?.runningConfig || {}),\n selectedPos,\n },\n indicators: newIndicators,\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotTableBodyCell","spec","context","advancedVSeed","cellStyle","bodyCellStyle","bodyCellStyleList","array","indicators","selectedPos","hasDynamicFilter","style","newIndicators","ind","newInd","isString","indicatorKey","datum","dataValue","cellHeaderPaths","headerPaths","originalDatum","path","currentCellData","getCellOriginalDataByDatum","mergedStyle","result","shouldApply","selectorWithDynamicFilter","selector","pickBodyCellStyle"],"mappings":";;;;AAOO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAE,GAAGD;IACtB,MAAME,gBAAgBD,WAAW;IAEjC,IAAI,CAACC,eACH,OAAOJ;IAET,MAAMK,oBAAoBC,MAAMF;IAChC,MAAMG,aAAcP,KAAsC,UAAU,IAAI,EAAE;IAC1E,MAAMQ,cAA8C,EAAE;IACtD,MAAMC,mBAAmBJ,kBAAkB,IAAI,CAAC,CAACK,QAAU,CAAC,CAACA,MAAM,aAAa;IAEhF,MAAMC,gBAAgBJ,WAAW,GAAG,CAAC,CAACK;QACpC,MAAMC,SAASC,SAASF,OACnB;YACC,cAAcA;QAChB,IACAA;QAEJ,MAAM,EAAEG,YAAY,EAAE,GAAGF;QAEzBA,OAAO,KAAK,GAAG,CAACG;YACd,MAAM,EAAEC,SAAS,EAAEC,eAAe,EAAE,GAAGF;YACvC,MAAMG,cAAc;mBAAID,gBAAgB,cAAc;mBAAKA,gBAAgB,cAAc;aAAC;YAE1F,MAAME,gBAAuB;gBAC3B,CAACL,aAAa,EAAEE;YAClB;YAEAE,YAAY,OAAO,CAAC,CAACE;gBACnB,IAAIA,KAAK,YAAY,EACnBD,aAAa,CAACC,KAAK,YAAY,CAAC,GAAGA,KAAK,KAAK;YAEjD;YAEA,MAAMC,kBAAkBC,2BAA2BP,OAAOP,kBAAkBW;YAE5E,MAAMI,cAAcnB,kBAAkB,MAAM,CAAsB,CAACoB,QAAQf;gBACzE,MAAMgB,cAAchB,MAAM,aAAa,GACnCiB,0BAA0BL,mBAAmBF,eAAeV,MAAM,aAAa,EAAEA,MAAM,QAAQ,IAC/FkB,SAASR,eAAeV,MAAM,QAAQ;gBAC1C,IAAIgB,aAAa;oBACf,IAAIlB,YAAY,MAAM,IAAIA,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,OAAOR,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,KAE3FR,YAAY,MAAM,GAAG;oBAEvBA,YAAY,IAAI,CAAC;wBACf,KAAKQ,OAAO;wBACZ,KAAKA,OAAO;oBACd;oBACA,OAAO;wBACL,GAAGS,MAAM;wBACT,GAAGI,kBAAkBnB,MAAM;oBAC7B;gBACF;gBAEA,OAAOe;YACT,GAAG,CAAC;YAEJ,OAAOD;QACT;QACA,OAAOX;IACT;IACA,OAAO;QACL,GAAGb,IAAI;QACP,eAAe;YACb,GAAKA,MAAc,iBAAiB,CAAC,CAAC;YACtCQ;QACF;QACA,YAAYG;IACd;AACF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { intl } from "../../../../../i18n/index.js";
|
|
2
|
+
import { createFormatterByMeasure, findTreeNodesBy, isMeasure } from "../../../../utils/index.js";
|
|
3
|
+
import { extractLeafIds } from "./utils.js";
|
|
4
|
+
const columnsAggregation = (spec, context)=>{
|
|
5
|
+
const { vseed, advancedVSeed } = context;
|
|
6
|
+
const { totals } = vseed;
|
|
7
|
+
if (!totals) return spec;
|
|
8
|
+
const totalLabelMap = {
|
|
9
|
+
sum: intl.i18n`合计`,
|
|
10
|
+
avg: intl.i18n`平均`,
|
|
11
|
+
max: intl.i18n`最大值`,
|
|
12
|
+
min: intl.i18n`最小值`,
|
|
13
|
+
count: intl.i18n`计数`
|
|
14
|
+
};
|
|
15
|
+
const totalLabel = totalLabelMap[totals] || intl.i18n`合计`;
|
|
16
|
+
const vtableAggregationMap = {
|
|
17
|
+
sum: 'SUM',
|
|
18
|
+
avg: 'AVG',
|
|
19
|
+
max: 'MAX',
|
|
20
|
+
min: 'MIN',
|
|
21
|
+
count: 'COUNT'
|
|
22
|
+
};
|
|
23
|
+
const vtableAggregationType = vtableAggregationMap[totals] || 'SUM';
|
|
24
|
+
const dimensionIds = extractLeafIds(advancedVSeed.dimensionTree || []);
|
|
25
|
+
const measureTree = advancedVSeed.measureTree || [];
|
|
26
|
+
const measureIds = extractLeafIds(measureTree);
|
|
27
|
+
const leafMeasures = findTreeNodesBy(measureTree, ()=>true);
|
|
28
|
+
const measureMap = new Map();
|
|
29
|
+
leafMeasures.forEach((node)=>{
|
|
30
|
+
if (isMeasure(node)) measureMap.set(node.id, node);
|
|
31
|
+
});
|
|
32
|
+
let isFirstDimensionColumn = true;
|
|
33
|
+
const updatedColumns = spec.columns?.map((column)=>{
|
|
34
|
+
const fieldKey = column.field;
|
|
35
|
+
if (dimensionIds.has(fieldKey)) {
|
|
36
|
+
if (isFirstDimensionColumn) {
|
|
37
|
+
isFirstDimensionColumn = false;
|
|
38
|
+
return {
|
|
39
|
+
...column,
|
|
40
|
+
aggregation: {
|
|
41
|
+
aggregationType: 'NONE',
|
|
42
|
+
formatFun: ()=>totalLabel
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
...column,
|
|
48
|
+
aggregation: {
|
|
49
|
+
aggregationType: 'NONE',
|
|
50
|
+
formatFun: ()=>''
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (measureIds.has(fieldKey)) {
|
|
55
|
+
const measure = measureMap.get(fieldKey);
|
|
56
|
+
const formatter = createFormatterByMeasure(measure);
|
|
57
|
+
return {
|
|
58
|
+
...column,
|
|
59
|
+
aggregation: {
|
|
60
|
+
aggregationType: vtableAggregationType,
|
|
61
|
+
showOnTop: false,
|
|
62
|
+
formatFun: (value)=>formatter(value)
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return column;
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
...spec,
|
|
70
|
+
columns: updatedColumns,
|
|
71
|
+
bottomFrozenRowCount: 1
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
export { columnsAggregation };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=columnsAggregation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipes/columns/columnsAggregation.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/columnsAggregation.ts"],"sourcesContent":["import { intl } from 'src/i18n'\nimport { createFormatterByMeasure, isMeasure, findTreeNodesBy } from 'src/pipeline/utils'\nimport type { ListTableSpecPipe, Measure } from 'src/types'\nimport { extractLeafIds } from './utils'\n\n/**\n * @description 为表格列添加汇总行配置\n * - 只对度量列应用聚合函数\n * - 在第一个维度列显示汇总标签\n * - 其他维度列留空\n */\nexport const columnsAggregation: ListTableSpecPipe = (spec, context) => {\n const { vseed, advancedVSeed } = context\n const { totals } = vseed as any\n\n if (!totals) {\n return spec\n }\n\n // 映射汇总类型到 i18n 标签\n const totalLabelMap: Record<string, string> = {\n sum: intl.i18n`合计`,\n avg: intl.i18n`平均`,\n max: intl.i18n`最大值`,\n min: intl.i18n`最小值`,\n count: intl.i18n`计数`,\n }\n\n const totalLabel = totalLabelMap[totals] || intl.i18n`合计`\n\n // 映射到 VTable 的聚合类型\n const vtableAggregationMap: Record<string, string> = {\n sum: 'SUM',\n avg: 'AVG',\n max: 'MAX',\n min: 'MIN',\n count: 'COUNT',\n }\n\n const vtableAggregationType = vtableAggregationMap[totals] || 'SUM'\n\n // 从树形结构中提取所有叶子节点的ID\n const dimensionIds = extractLeafIds(advancedVSeed.dimensionTree || [])\n const measureTree = advancedVSeed.measureTree || []\n const measureIds = extractLeafIds(measureTree)\n\n // 创建 measure id 到 measure 对象的映射\n const leafMeasures = findTreeNodesBy(measureTree, () => true)\n const measureMap = new Map<string, Measure>()\n leafMeasures.forEach((node) => {\n if (isMeasure(node)) {\n measureMap.set(node.id, node as Measure)\n }\n })\n\n let isFirstDimensionColumn = true\n\n const updatedColumns = spec.columns?.map((column: any) => {\n const fieldKey = column.field\n\n // 维度列处理\n if (dimensionIds.has(fieldKey)) {\n if (isFirstDimensionColumn) {\n isFirstDimensionColumn = false\n return {\n ...column,\n aggregation: {\n aggregationType: 'NONE',\n formatFun: () => totalLabel,\n },\n }\n }\n\n // 其他维度列留空\n return {\n ...column,\n aggregation: {\n aggregationType: 'NONE',\n formatFun: () => '',\n },\n }\n }\n\n // 度量列处理 - 应用聚合函数和格式化\n if (measureIds.has(fieldKey)) {\n const measure = measureMap.get(fieldKey)\n const formatter = createFormatterByMeasure(measure)\n\n return {\n ...column,\n aggregation: {\n aggregationType: vtableAggregationType,\n showOnTop: false,\n formatFun: (value: number | string | undefined) => formatter(value),\n },\n }\n }\n\n return column\n })\n\n return {\n ...spec,\n columns: updatedColumns,\n bottomFrozenRowCount: 1,\n }\n}\n"],"names":["columnsAggregation","spec","context","vseed","advancedVSeed","totals","totalLabelMap","intl","totalLabel","vtableAggregationMap","vtableAggregationType","dimensionIds","extractLeafIds","measureTree","measureIds","leafMeasures","findTreeNodesBy","measureMap","Map","node","isMeasure","isFirstDimensionColumn","updatedColumns","column","fieldKey","measure","formatter","createFormatterByMeasure","value"],"mappings":";;;AAWO,MAAMA,qBAAwC,CAACC,MAAMC;IAC1D,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGF;IACjC,MAAM,EAAEG,MAAM,EAAE,GAAGF;IAEnB,IAAI,CAACE,QACH,OAAOJ;IAIT,MAAMK,gBAAwC;QAC5C,KAAKC,KAAK,IAAI,CAAC,EAAE,CAAC;QAClB,KAAKA,KAAK,IAAI,CAAC,EAAE,CAAC;QAClB,KAAKA,KAAK,IAAI,CAAC,GAAG,CAAC;QACnB,KAAKA,KAAK,IAAI,CAAC,GAAG,CAAC;QACnB,OAAOA,KAAK,IAAI,CAAC,EAAE,CAAC;IACtB;IAEA,MAAMC,aAAaF,aAAa,CAACD,OAAO,IAAIE,KAAK,IAAI,CAAC,EAAE,CAAC;IAGzD,MAAME,uBAA+C;QACnD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;IACT;IAEA,MAAMC,wBAAwBD,oBAAoB,CAACJ,OAAO,IAAI;IAG9D,MAAMM,eAAeC,eAAeR,cAAc,aAAa,IAAI,EAAE;IACrE,MAAMS,cAAcT,cAAc,WAAW,IAAI,EAAE;IACnD,MAAMU,aAAaF,eAAeC;IAGlC,MAAME,eAAeC,gBAAgBH,aAAa,IAAM;IACxD,MAAMI,aAAa,IAAIC;IACvBH,aAAa,OAAO,CAAC,CAACI;QACpB,IAAIC,UAAUD,OACZF,WAAW,GAAG,CAACE,KAAK,EAAE,EAAEA;IAE5B;IAEA,IAAIE,yBAAyB;IAE7B,MAAMC,iBAAiBrB,KAAK,OAAO,EAAE,IAAI,CAACsB;QACxC,MAAMC,WAAWD,OAAO,KAAK;QAG7B,IAAIZ,aAAa,GAAG,CAACa,WAAW;YAC9B,IAAIH,wBAAwB;gBAC1BA,yBAAyB;gBACzB,OAAO;oBACL,GAAGE,MAAM;oBACT,aAAa;wBACX,iBAAiB;wBACjB,WAAW,IAAMf;oBACnB;gBACF;YACF;YAGA,OAAO;gBACL,GAAGe,MAAM;gBACT,aAAa;oBACX,iBAAiB;oBACjB,WAAW,IAAM;gBACnB;YACF;QACF;QAGA,IAAIT,WAAW,GAAG,CAACU,WAAW;YAC5B,MAAMC,UAAUR,WAAW,GAAG,CAACO;YAC/B,MAAME,YAAYC,yBAAyBF;YAE3C,OAAO;gBACL,GAAGF,MAAM;gBACT,aAAa;oBACX,iBAAiBb;oBACjB,WAAW;oBACX,WAAW,CAACkB,QAAuCF,UAAUE;gBAC/D;YACF;QACF;QAEA,OAAOL;IACT;IAEA,OAAO;QACL,GAAGtB,IAAI;QACP,SAASqB;QACT,sBAAsB;IACxB;AACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isMeasure } from "../../../../utils/index.js";
|
|
2
|
+
import { treeTreeToColumns } from "./utils.js";
|
|
2
3
|
const dimensionTreeToColumns = (spec, context)=>{
|
|
3
4
|
const { advancedVSeed } = context;
|
|
4
5
|
const dimensionTree = advancedVSeed.dimensionTree;
|
|
@@ -20,33 +21,6 @@ const dimensionTreeToColumns = (spec, context)=>{
|
|
|
20
21
|
]
|
|
21
22
|
};
|
|
22
23
|
};
|
|
23
|
-
const treeTreeToColumns = (tree, callback)=>{
|
|
24
|
-
const result = tree.map((item)=>{
|
|
25
|
-
if ('children' in item && Array.isArray(item.children)) {
|
|
26
|
-
const groupNode = item;
|
|
27
|
-
const field = groupNode.id;
|
|
28
|
-
const title = groupNode.alias ?? groupNode.id;
|
|
29
|
-
const props = callback?.(groupNode) || {};
|
|
30
|
-
return {
|
|
31
|
-
field,
|
|
32
|
-
title,
|
|
33
|
-
columns: treeTreeToColumns(item.children, callback),
|
|
34
|
-
...props
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
{
|
|
38
|
-
const field = item.id;
|
|
39
|
-
const title = item.alias ?? item.id;
|
|
40
|
-
const props = callback?.(item) || {};
|
|
41
|
-
return {
|
|
42
|
-
field,
|
|
43
|
-
title,
|
|
44
|
-
...props
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
return result || [];
|
|
49
|
-
};
|
|
50
24
|
export { dimensionTreeToColumns };
|
|
51
25
|
|
|
52
26
|
//# sourceMappingURL=dimensionsToColumns.js.map
|
|
@@ -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 {
|
|
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 { isMeasure } from 'src/pipeline/utils'\nimport type { 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 }\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","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;QACT;QAGF,OAAO,CAAC;IACV;IACA,MAAME,UAAUC,kBAA6CN,eAAeE;IAE5E,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMI;SAAQ;IAClD;AACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createFormatterByMeasure, isMeasure } from "../../../../utils/index.js";
|
|
2
|
+
import { treeTreeToColumns } from "./utils.js";
|
|
2
3
|
const measureTreeToColumns = (spec, context)=>{
|
|
3
4
|
const { advancedVSeed } = context;
|
|
4
5
|
const measureTree = advancedVSeed.measureTree;
|
|
@@ -29,33 +30,6 @@ const fieldFormat = (node)=>{
|
|
|
29
30
|
return formatter(value);
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
|
-
const treeTreeToColumns = (tree, callback)=>{
|
|
33
|
-
const result = tree.map((item)=>{
|
|
34
|
-
if ('children' in item && Array.isArray(item.children)) {
|
|
35
|
-
const groupNode = item;
|
|
36
|
-
const field = groupNode.id;
|
|
37
|
-
const title = groupNode.alias ?? groupNode.id;
|
|
38
|
-
const props = callback?.(groupNode) || {};
|
|
39
|
-
return {
|
|
40
|
-
field,
|
|
41
|
-
title,
|
|
42
|
-
columns: treeTreeToColumns(item.children, callback),
|
|
43
|
-
...props
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
{
|
|
47
|
-
const field = item.id;
|
|
48
|
-
const title = item.alias ?? item.id;
|
|
49
|
-
const props = callback?.(item) || {};
|
|
50
|
-
return {
|
|
51
|
-
field,
|
|
52
|
-
title,
|
|
53
|
-
...props
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
return result || [];
|
|
58
|
-
};
|
|
59
33
|
export { measureTreeToColumns };
|
|
60
34
|
|
|
61
35
|
//# sourceMappingURL=measuresToColumns.js.map
|
|
@@ -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 {
|
|
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'\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 return formatter(value)\n }\n}\n"],"names":["measureTreeToColumns","spec","context","advancedVSeed","measureTree","result","eachNode","node","isMeasure","fieldFormat","columns","treeTreeToColumns","formatter","createFormatterByMeasure","datum","id","value"],"mappings":";;AAKO,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,OAAOH,UAAUI;IACnB;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ColumnsDefine } from '@visactor/vtable';
|
|
2
|
+
/**
|
|
3
|
+
* 从树形结构中提取所有叶子节点的ID
|
|
4
|
+
*/
|
|
5
|
+
export declare function extractLeafIds<T extends {
|
|
6
|
+
id: string;
|
|
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;
|
|
14
|
+
children?: (T | U)[];
|
|
15
|
+
}>(tree: (T | U)[], callback?: (node: T | U) => object) => ColumnsDefine[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { findTreeNodesBy } from "../../../../utils/index.js";
|
|
2
|
+
function extractLeafIds(tree) {
|
|
3
|
+
const leafNodes = findTreeNodesBy(tree, ()=>true);
|
|
4
|
+
return new Set(leafNodes.map((node)=>node.id));
|
|
5
|
+
}
|
|
6
|
+
const treeTreeToColumns = (tree, callback)=>{
|
|
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
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return result || [];
|
|
32
|
+
};
|
|
33
|
+
export { extractLeafIds, treeTreeToColumns };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +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,9 +1,10 @@
|
|
|
1
1
|
const titleOnDimension = (spec)=>{
|
|
2
|
-
const { rows = [], columns = [] } = spec;
|
|
2
|
+
const { rows = [], columns = [], indicatorsAsCol, indicators = [] } = spec;
|
|
3
|
+
const rowsLength = rows.length + (indicatorsAsCol ? 0 : indicators?.length > 0 ? 1 : 0);
|
|
3
4
|
return {
|
|
4
5
|
...spec,
|
|
5
6
|
corner: {
|
|
6
|
-
titleOnDimension:
|
|
7
|
+
titleOnDimension: rowsLength <= 1 && columns.length >= 1 && !indicatorsAsCol ? 'column' : 'row'
|
|
7
8
|
}
|
|
8
9
|
};
|
|
9
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/table/pipes/corner/titleOnDimension.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/corner/titleOnDimension.ts"],"sourcesContent":["import type { PivotTableSpecPipe } from 'src/types'\n\nexport const titleOnDimension: PivotTableSpecPipe = (spec) => {\n const { rows = [], columns = [] } = spec\n\n return {\n ...spec,\n corner: {\n titleOnDimension:
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipes/corner/titleOnDimension.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/corner/titleOnDimension.ts"],"sourcesContent":["import type { PivotTableSpecPipe } from 'src/types'\n\nexport const titleOnDimension: PivotTableSpecPipe = (spec) => {\n const { rows = [], columns = [], indicatorsAsCol, indicators = [] } = spec\n const rowsLength = rows.length + (indicatorsAsCol ? 0 : indicators?.length > 0 ? 1 : 0)\n\n return {\n ...spec,\n corner: {\n titleOnDimension: rowsLength <= 1 && columns.length >= 1 && !indicatorsAsCol ? 'column' : 'row',\n },\n }\n}\n"],"names":["titleOnDimension","spec","rows","columns","indicatorsAsCol","indicators","rowsLength"],"mappings":"AAEO,MAAMA,mBAAuC,CAACC;IACnD,MAAM,EAAEC,OAAO,EAAE,EAAEC,UAAU,EAAE,EAAEC,eAAe,EAAEC,aAAa,EAAE,EAAE,GAAGJ;IACtE,MAAMK,aAAaJ,KAAK,MAAM,GAAIE,CAAAA,kBAAkB,IAAIC,YAAY,SAAS,IAAI,IAAI;IAErF,OAAO;QACL,GAAGJ,IAAI;QACP,QAAQ;YACN,kBAAkBK,cAAc,KAAKH,QAAQ,MAAM,IAAI,KAAK,CAACC,kBAAkB,WAAW;QAC5F;IACF;AACF"}
|
|
@@ -1,17 +1,53 @@
|
|
|
1
|
+
import { intl } from "../../../../../i18n/index.js";
|
|
1
2
|
import { findAllMeasures } from "../../../../utils/index.js";
|
|
2
3
|
const dataConfig = (spec, context)=>{
|
|
3
|
-
const { advancedVSeed } = context;
|
|
4
|
+
const { advancedVSeed, vseed } = context;
|
|
4
5
|
const measures = findAllMeasures(advancedVSeed.measureTree);
|
|
5
6
|
const aggregationRules = measures.map((measure)=>({
|
|
6
7
|
field: measure.id,
|
|
7
|
-
aggregationType: '
|
|
8
|
+
aggregationType: 'SUM',
|
|
8
9
|
indicatorKey: measure.id
|
|
9
10
|
}));
|
|
11
|
+
const dataConfigObj = {
|
|
12
|
+
aggregationRules
|
|
13
|
+
};
|
|
14
|
+
const { totals } = vseed;
|
|
15
|
+
if (totals) {
|
|
16
|
+
const grandTotalLabel = intl.i18n`总计`;
|
|
17
|
+
const subTotalLabel = intl.i18n`小计`;
|
|
18
|
+
dataConfigObj.totals = {};
|
|
19
|
+
if (totals.row) {
|
|
20
|
+
const dimensionIds = (advancedVSeed.dimensionTree || []).filter((dim)=>'row' === dim.encoding).map((dim)=>dim.id);
|
|
21
|
+
const rowSubDimensions = totals.row.subTotalsDimensions?.filter((dim)=>dimensionIds.includes(dim));
|
|
22
|
+
const normalizedRowSubDimensions = totals.row.showSubTotals && (!rowSubDimensions || 0 === rowSubDimensions.length) ? dimensionIds.length > 0 ? [
|
|
23
|
+
dimensionIds[0]
|
|
24
|
+
] : [] : rowSubDimensions;
|
|
25
|
+
dataConfigObj.totals.row = {
|
|
26
|
+
showGrandTotals: totals.row.showGrandTotals ?? false,
|
|
27
|
+
showSubTotals: totals.row.showSubTotals ?? false,
|
|
28
|
+
subTotalsDimensions: normalizedRowSubDimensions,
|
|
29
|
+
grandTotalLabel,
|
|
30
|
+
subTotalLabel
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (totals.column) {
|
|
34
|
+
const dimensionIds = (advancedVSeed.dimensionTree || []).filter((dim)=>'column' === dim.encoding).map((dim)=>dim.id);
|
|
35
|
+
const columnSubDimensions = totals.column.subTotalsDimensions?.filter((dim)=>dimensionIds.includes(dim));
|
|
36
|
+
const normalizedColumnSubDimensions = totals.column.showSubTotals && (!columnSubDimensions || 0 === columnSubDimensions.length) ? dimensionIds.length > 0 ? [
|
|
37
|
+
dimensionIds[0]
|
|
38
|
+
] : [] : columnSubDimensions;
|
|
39
|
+
dataConfigObj.totals.column = {
|
|
40
|
+
showGrandTotals: totals.column.showGrandTotals ?? false,
|
|
41
|
+
showSubTotals: totals.column.showSubTotals ?? false,
|
|
42
|
+
subTotalsDimensions: normalizedColumnSubDimensions,
|
|
43
|
+
grandTotalLabel,
|
|
44
|
+
subTotalLabel
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
10
48
|
return {
|
|
11
49
|
...spec,
|
|
12
|
-
dataConfig:
|
|
13
|
-
aggregationRules
|
|
14
|
-
}
|
|
50
|
+
dataConfig: dataConfigObj
|
|
15
51
|
};
|
|
16
52
|
};
|
|
17
53
|
export { dataConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/table/pipes/indicators/pivotDataConfig.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/indicators/pivotDataConfig.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { PivotTableSpecPipe } from 'src/types'\n\nexport const dataConfig: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measures = findAllMeasures(advancedVSeed.measureTree)\n\n const aggregationRules = measures.map((measure) => ({\n field: measure.id,\n aggregationType: '
|
|
1
|
+
{"version":3,"file":"pipeline/spec/table/pipes/indicators/pivotDataConfig.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/indicators/pivotDataConfig.ts"],"sourcesContent":["import { intl } from 'src/i18n'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { Dimension, PivotTable, PivotTableSpecPipe } from 'src/types'\n\nexport const dataConfig: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const measures = findAllMeasures(advancedVSeed.measureTree)\n\n const aggregationRules = measures.map((measure) => ({\n field: measure.id,\n aggregationType: 'SUM',\n indicatorKey: measure.id,\n }))\n\n const dataConfigObj: any = {\n aggregationRules,\n }\n\n // 处理totals配置\n const { totals } = vseed as PivotTable\n if (totals) {\n const grandTotalLabel = intl.i18n`总计`\n const subTotalLabel = intl.i18n`小计`\n\n dataConfigObj.totals = {}\n\n // 处理行配置\n if (totals.row) {\n const dimensionIds = (advancedVSeed.dimensionTree || [])\n .filter((dim: Dimension) => dim.encoding === 'row')\n .map((dim) => dim.id)\n const rowSubDimensions = totals.row.subTotalsDimensions?.filter((dim) => dimensionIds.includes(dim))\n const normalizedRowSubDimensions =\n totals.row.showSubTotals && (!rowSubDimensions || rowSubDimensions.length === 0)\n ? dimensionIds.length > 0\n ? [dimensionIds[0]]\n : []\n : rowSubDimensions\n\n dataConfigObj.totals.row = {\n showGrandTotals: totals.row.showGrandTotals ?? false,\n showSubTotals: totals.row.showSubTotals ?? false,\n subTotalsDimensions: normalizedRowSubDimensions,\n grandTotalLabel,\n subTotalLabel,\n }\n }\n\n // 处理列配置\n if (totals.column) {\n const dimensionIds = (advancedVSeed.dimensionTree || [])\n .filter((dim: Dimension) => dim.encoding === 'column')\n .map((dim) => dim.id)\n const columnSubDimensions = totals.column.subTotalsDimensions?.filter((dim) => dimensionIds.includes(dim))\n const normalizedColumnSubDimensions =\n totals.column.showSubTotals && (!columnSubDimensions || columnSubDimensions.length === 0)\n ? dimensionIds.length > 0\n ? [dimensionIds[0]]\n : []\n : columnSubDimensions\n\n dataConfigObj.totals.column = {\n showGrandTotals: totals.column.showGrandTotals ?? false,\n showSubTotals: totals.column.showSubTotals ?? false,\n subTotalsDimensions: normalizedColumnSubDimensions,\n grandTotalLabel,\n subTotalLabel,\n }\n }\n }\n\n return {\n ...spec,\n dataConfig: dataConfigObj,\n }\n}\n"],"names":["dataConfig","spec","context","advancedVSeed","vseed","measures","findAllMeasures","aggregationRules","measure","dataConfigObj","totals","grandTotalLabel","intl","subTotalLabel","dimensionIds","dim","rowSubDimensions","normalizedRowSubDimensions","columnSubDimensions","normalizedColumnSubDimensions"],"mappings":";;AAIO,MAAMA,aAAiC,CAACC,MAAMC;IACnD,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IACjC,MAAMG,WAAWC,gBAAgBH,cAAc,WAAW;IAE1D,MAAMI,mBAAmBF,SAAS,GAAG,CAAC,CAACG,UAAa;YAClD,OAAOA,QAAQ,EAAE;YACjB,iBAAiB;YACjB,cAAcA,QAAQ,EAAE;QAC1B;IAEA,MAAMC,gBAAqB;QACzBF;IACF;IAGA,MAAM,EAAEG,MAAM,EAAE,GAAGN;IACnB,IAAIM,QAAQ;QACV,MAAMC,kBAAkBC,KAAK,IAAI,CAAC,EAAE,CAAC;QACrC,MAAMC,gBAAgBD,KAAK,IAAI,CAAC,EAAE,CAAC;QAEnCH,cAAc,MAAM,GAAG,CAAC;QAGxB,IAAIC,OAAO,GAAG,EAAE;YACd,MAAMI,eAAgBX,AAAAA,CAAAA,cAAc,aAAa,IAAI,EAAC,EACnD,MAAM,CAAC,CAACY,MAAmBA,AAAiB,UAAjBA,IAAI,QAAQ,EACvC,GAAG,CAAC,CAACA,MAAQA,IAAI,EAAE;YACtB,MAAMC,mBAAmBN,OAAO,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAACK,MAAQD,aAAa,QAAQ,CAACC;YAC/F,MAAME,6BACJP,OAAO,GAAG,CAAC,aAAa,IAAK,EAACM,oBAAoBA,AAA4B,MAA5BA,iBAAiB,MAAM,AAAK,IAC1EF,aAAa,MAAM,GAAG,IACpB;gBAACA,YAAY,CAAC,EAAE;aAAC,GACjB,EAAE,GACJE;YAENP,cAAc,MAAM,CAAC,GAAG,GAAG;gBACzB,iBAAiBC,OAAO,GAAG,CAAC,eAAe,IAAI;gBAC/C,eAAeA,OAAO,GAAG,CAAC,aAAa,IAAI;gBAC3C,qBAAqBO;gBACrBN;gBACAE;YACF;QACF;QAGA,IAAIH,OAAO,MAAM,EAAE;YACjB,MAAMI,eAAgBX,AAAAA,CAAAA,cAAc,aAAa,IAAI,EAAC,EACnD,MAAM,CAAC,CAACY,MAAmBA,AAAiB,aAAjBA,IAAI,QAAQ,EACvC,GAAG,CAAC,CAACA,MAAQA,IAAI,EAAE;YACtB,MAAMG,sBAAsBR,OAAO,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAACK,MAAQD,aAAa,QAAQ,CAACC;YACrG,MAAMI,gCACJT,OAAO,MAAM,CAAC,aAAa,IAAK,EAACQ,uBAAuBA,AAA+B,MAA/BA,oBAAoB,MAAM,AAAK,IACnFJ,aAAa,MAAM,GAAG,IACpB;gBAACA,YAAY,CAAC,EAAE;aAAC,GACjB,EAAE,GACJI;YAENT,cAAc,MAAM,CAAC,MAAM,GAAG;gBAC5B,iBAAiBC,OAAO,MAAM,CAAC,eAAe,IAAI;gBAClD,eAAeA,OAAO,MAAM,CAAC,aAAa,IAAI;gBAC9C,qBAAqBS;gBACrBR;gBACAE;YACF;QACF;IACF;IAEA,OAAO;QACL,GAAGZ,IAAI;QACP,YAAYQ;IACd;AACF"}
|