@visactor/vseed 0.4.6 → 0.4.7
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/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/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/table.js +2 -1
- package/dist/esm/pipeline/spec/table/pipeline/table.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/pivotColumns.js +12 -2
- package/dist/esm/pipeline/spec/table/pipes/columns/pivotColumns.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/indicators/pivotDataConfig.js +39 -4
- package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js.map +1 -1
- 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 +6 -1
- package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +12 -0
- package/dist/esm/types/chartType/pivotTable/zPivotTable.js +2 -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 +291 -211
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"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"}
|
|
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":";;;;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;gBAClB,IAAIA,MAAM,IAAI,EAAE,CAACC,eAAe,EAC9B,OAAO;gBAET,MAAMC,cAAc5D,MAAM,aAAa,GACnC6D,0BAA0BH,MAAM,IAAI,EAAW1D,MAAM,aAAa,EAAEA,MAAM,QAAQ,IAClF8D,SAASJ,MAAM,IAAI,EAAW1D,MAAM,QAAQ,EAAE;gBAClD,OAAO4D;YACT;QAEF,cAAc,CAACG,GAAYC;YACzB,MAAM7D,SAAS,EAAE;YAEjB,MAAM8D,YAAYhB,UAAU,GAAG,CAAC,CAACD;gBAC/B,MAAMkB,KAAKlB,KAAK,EAAE;gBAClB,OAAOgB,KAAK,CAACE,GAAG;YAClB;YAEA,MAAMC,YAAYd,UAAU,GAAG,CAAC,CAACL,OAC/BpC,qBAAqBoD,KAAK,CAAChB,KAAK,EAAE,CAAC,EAAqBA,MAAMF,YAAY9B;YAG5Eb,OAAO,IAAI,IAAI8D;YAEfjC,aAAa,OAAO,CAAC,CAACtB;gBACpB,MAAM,EAAE0D,SAAS,EAAEC,YAAY,EAAEC,UAAU,EAAE,GAAG5D;gBAChD,MAAMI,UAAUyD,gBAAgBxC,uBAAuBiC,KAAK,CAACI,UAAU;gBACvE,IAAItD,SAAS;oBACX,MAAM0D,oBAAoB5D,qBACxBoD,KAAK,CAACK,aAAa,EACnBvD,SACAgC,YACA9B;oBAGF,IAAImB,WACFhC,OAAO,IAAI,CAACqE;oBAEd,IAAIpC,kBACF;wBAAA,IAAIqC,SAAST,KAAK,CAAC,qBAAqB,GAEtC7D,OAAO,IAAI,CAACmB,uBAAuB0C,KAAK,CAAC,qBAAqB,EAAE,GAAGT;6BAC9D,IAAIe,cAAcG,SAASH,WAAW,GAAG,GAC9CnE,OAAO,IAAI,CACTmB,uBAAuB0C,KAAK,CAACK,aAAa,EAAqBC,WAAW,GAAG,EAAEf;oBAEnF;gBAEJ;YACF;YAEApD,OAAO,IAAI,IAAIgE;YAEf,IAAIjC,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,8 +1,9 @@
|
|
|
1
|
-
import { bodyStyle, dimensionTreeToColumns, headerStyle, initTable, measureTreeToColumns, selectionStyle, tableBodyCell, tableThemeStyle } from "../pipes/index.js";
|
|
1
|
+
import { bodyStyle, 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,
|
|
8
9
|
tableThemeStyle,
|
|
@@ -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 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 tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n]\n"],"names":["tableSpecPipeline","initTable","dimensionTreeToColumns","measureTreeToColumns","columnsAggregation","bodyStyle","headerStyle","tableThemeStyle","selectionStyle","tableBodyCell"],"mappings":";AAaO,MAAMA,oBAAkC;IAC7CC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
|
|
@@ -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"}
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
+
import { MeasureId } from "../../../../../dataReshape/index.js";
|
|
2
|
+
import { findAllMeasures } from "../../../../utils/index.js";
|
|
1
3
|
const pivotColumns = (spec, context)=>{
|
|
2
4
|
const { advancedVSeed } = context;
|
|
3
5
|
const { encoding } = advancedVSeed;
|
|
4
6
|
const dimensions = advancedVSeed.dimensionTree;
|
|
5
7
|
const columns = dimensions.filter((item)=>encoding.column?.includes(item.id));
|
|
8
|
+
const allMeasures = findAllMeasures(advancedVSeed.measureTree);
|
|
6
9
|
return {
|
|
7
10
|
...spec,
|
|
8
|
-
columns: columns.map((item)=>
|
|
11
|
+
columns: columns.map((item)=>{
|
|
12
|
+
const res = {
|
|
9
13
|
dimensionKey: item.id,
|
|
10
14
|
title: item.alias || item.id,
|
|
11
15
|
width: 'auto'
|
|
12
|
-
}
|
|
16
|
+
};
|
|
17
|
+
if (item.id === MeasureId) res.headerFormat = (measureId)=>{
|
|
18
|
+
const measure = allMeasures.find((m)=>m.id === measureId);
|
|
19
|
+
return measure?.alias ?? measureId;
|
|
20
|
+
};
|
|
21
|
+
return res;
|
|
22
|
+
})
|
|
13
23
|
};
|
|
14
24
|
};
|
|
15
25
|
export { pivotColumns };
|
|
@@ -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'\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
|
|
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 { MeasureId } from 'src/dataReshape'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { Dimensions, PivotTableSpecPipe } from 'src/types'\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 const allMeasures = findAllMeasures(advancedVSeed.measureTree)\n\n return {\n ...spec,\n columns: columns.map((item) => {\n const res = {\n dimensionKey: item.id,\n title: item.alias || item.id,\n width: 'auto',\n }\n if (item.id === MeasureId) {\n ;(res as any).headerFormat = (measureId: string) => {\n const measure = allMeasures.find((m) => m.id === measureId)\n\n return measure?.alias ?? measureId\n }\n }\n\n return res\n }),\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotColumns","spec","context","advancedVSeed","encoding","dimensions","columns","item","allMeasures","findAllMeasures","res","MeasureId","measureId","measure","m"],"mappings":";;AAKO,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;IAC7E,MAAMC,cAAcC,gBAAgBN,cAAc,WAAW;IAE7D,OAAO;QACL,GAAGF,IAAI;QACP,SAASK,QAAQ,GAAG,CAAC,CAACC;YACpB,MAAMG,MAAM;gBACV,cAAcH,KAAK,EAAE;gBACrB,OAAOA,KAAK,KAAK,IAAIA,KAAK,EAAE;gBAC5B,OAAO;YACT;YACA,IAAIA,KAAK,EAAE,KAAKI,WACZD,IAAY,YAAY,GAAG,CAACE;gBAC5B,MAAMC,UAAUL,YAAY,IAAI,CAAC,CAACM,IAAMA,EAAE,EAAE,KAAKF;gBAEjD,OAAOC,SAAS,SAASD;YAC3B;YAGF,OAAOF;QACT;IACF;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,17 +1,52 @@
|
|
|
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
8
|
aggregationType: 'NONE',
|
|
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
|
+
const dimensionIds = (advancedVSeed.dimensionTree || []).map((dim)=>dim.id);
|
|
19
|
+
dataConfigObj.totals = {};
|
|
20
|
+
if (totals.row) {
|
|
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 columnSubDimensions = totals.column.subTotalsDimensions?.filter((dim)=>dimensionIds.includes(dim));
|
|
35
|
+
const normalizedColumnSubDimensions = totals.column.showSubTotals && (!columnSubDimensions || 0 === columnSubDimensions.length) ? dimensionIds.length > 0 ? [
|
|
36
|
+
dimensionIds[0]
|
|
37
|
+
] : [] : columnSubDimensions;
|
|
38
|
+
dataConfigObj.totals.column = {
|
|
39
|
+
showGrandTotals: totals.column.showGrandTotals ?? false,
|
|
40
|
+
showSubTotals: totals.column.showSubTotals ?? false,
|
|
41
|
+
subTotalsDimensions: normalizedColumnSubDimensions,
|
|
42
|
+
grandTotalLabel,
|
|
43
|
+
subTotalLabel
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
10
47
|
return {
|
|
11
48
|
...spec,
|
|
12
|
-
dataConfig:
|
|
13
|
-
aggregationRules
|
|
14
|
-
}
|
|
49
|
+
dataConfig: dataConfigObj
|
|
15
50
|
};
|
|
16
51
|
};
|
|
17
52
|
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: 'NONE',\n indicatorKey: measure.id,\n }))\n\n
|
|
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 { 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: 'NONE',\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 const dimensionIds = (advancedVSeed.dimensionTree || []).map((dim) => dim.id)\n\n dataConfigObj.totals = {}\n\n // 处理行配置\n if (totals.row) {\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 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;QACnC,MAAME,eAAgBX,AAAAA,CAAAA,cAAc,aAAa,IAAI,EAAC,EAAG,GAAG,CAAC,CAACY,MAAQA,IAAI,EAAE;QAE5EN,cAAc,MAAM,GAAG,CAAC;QAGxB,IAAIC,OAAO,GAAG,EAAE;YACd,MAAMM,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,MAAMQ,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"}
|
|
@@ -7,7 +7,7 @@ import { zEncoding } from './properties/encoding';
|
|
|
7
7
|
import { zDatasetReshapeInfo } from './properties/datasetReshapeInfo';
|
|
8
8
|
import { zTheme, zCustomThemeConfig } from './properties/theme';
|
|
9
9
|
import { type Config } from './properties/config';
|
|
10
|
-
import { zAnalysis, zAnnotation, zRegressionLine, zMarkStyle, zPage } from './properties';
|
|
10
|
+
import { zAnalysis, zAnnotation, zRegressionLine, zMarkStyle, zPage, type PivotTableTotals } from './properties';
|
|
11
11
|
import { zLocale } from './i18n';
|
|
12
12
|
import { zCellStyle } from './properties/cellStyle/cellStyle';
|
|
13
13
|
export type AdvancedVSeed = {
|
|
@@ -32,5 +32,6 @@ export type AdvancedVSeed = {
|
|
|
32
32
|
annotation: z.infer<typeof zAnnotation>;
|
|
33
33
|
locale: z.infer<typeof zLocale>;
|
|
34
34
|
regressionLine: z.infer<typeof zRegressionLine>;
|
|
35
|
+
totals?: PivotTableTotals;
|
|
35
36
|
};
|
|
36
37
|
export declare const zAdvancedVSeed: z.ZodType<AdvancedVSeed>;
|
|
@@ -7,7 +7,7 @@ import { zEncoding } from "./properties/encoding/index.js";
|
|
|
7
7
|
import { zDatasetReshapeInfo } from "./properties/datasetReshapeInfo/index.js";
|
|
8
8
|
import { zCustomThemeConfig, zTheme } from "./properties/theme/index.js";
|
|
9
9
|
import { zConfig } from "./properties/config/index.js";
|
|
10
|
-
import { zAnalysis, zAnnotation, zMarkStyle, zPage, zRegressionLine } from "./properties/index.js";
|
|
10
|
+
import { zAnalysis, zAnnotation, zMarkStyle, zPage, zPivotTableTotals, zRegressionLine } from "./properties/index.js";
|
|
11
11
|
import { zLocale } from "./i18n/index.js";
|
|
12
12
|
import { zCellStyle } from "./properties/cellStyle/cellStyle.js";
|
|
13
13
|
const zAdvancedVSeed = z.object({
|
|
@@ -31,7 +31,8 @@ const zAdvancedVSeed = z.object({
|
|
|
31
31
|
customTheme: zCustomThemeConfig,
|
|
32
32
|
annotation: zAnnotation,
|
|
33
33
|
locale: zLocale,
|
|
34
|
-
regressionLine: zRegressionLine
|
|
34
|
+
regressionLine: zRegressionLine,
|
|
35
|
+
totals: zPivotTableTotals.optional()
|
|
35
36
|
});
|
|
36
37
|
export { zAdvancedVSeed };
|
|
37
38
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types/advancedVSeed.js","sources":["webpack://@visactor/vseed/./src/types/advancedVSeed.ts"],"sourcesContent":["import { z } from 'zod'\nimport { zChartType } from './properties/chartType'\nimport { zDataset } from './properties/dataset'\nimport { zDimensions, zDimensionTree } from './properties/dimensions'\nimport { zMeasures, zMeasureTree } from './properties/measures'\nimport { zEncoding } from './properties/encoding'\nimport { zDatasetReshapeInfo } from './properties/datasetReshapeInfo'\nimport { zTheme, zCustomThemeConfig } from './properties/theme'\nimport { zConfig, type Config } from './properties/config'\nimport {
|
|
1
|
+
{"version":3,"file":"types/advancedVSeed.js","sources":["webpack://@visactor/vseed/./src/types/advancedVSeed.ts"],"sourcesContent":["import { z } from 'zod'\nimport { zChartType } from './properties/chartType'\nimport { zDataset } from './properties/dataset'\nimport { zDimensions, zDimensionTree } from './properties/dimensions'\nimport { zMeasures, zMeasureTree } from './properties/measures'\nimport { zEncoding } from './properties/encoding'\nimport { zDatasetReshapeInfo } from './properties/datasetReshapeInfo'\nimport { zTheme, zCustomThemeConfig } from './properties/theme'\nimport { zConfig, type Config } from './properties/config'\nimport {\n zAnalysis,\n zAnnotation,\n zRegressionLine,\n zMarkStyle,\n zPage,\n zPivotTableTotals,\n type PivotTableTotals,\n} from './properties'\nimport { zLocale } from './i18n'\nimport { zCellStyle } from './properties/cellStyle/cellStyle'\n\nexport type AdvancedVSeed = {\n chartType: z.infer<typeof zChartType>\n dataset: z.infer<typeof zDataset>\n datasetReshapeInfo: z.infer<typeof zDatasetReshapeInfo>\n pivotAllDatasetReshapeInfo: z.infer<typeof zDatasetReshapeInfo>\n dimensions?: z.infer<typeof zDimensions>\n measures?: z.infer<typeof zMeasures>\n reshapeMeasures?: z.infer<typeof zMeasures>[]\n reshapeDimensions?: z.infer<typeof zDimensions>\n measureTree?: z.infer<typeof zMeasureTree>\n dimensionTree?: z.infer<typeof zDimensionTree>\n encoding: z.infer<typeof zEncoding>\n page?: z.infer<typeof zPage>\n config: Config\n analysis: z.infer<typeof zAnalysis>\n theme: z.infer<typeof zTheme>\n markStyle: z.infer<typeof zMarkStyle>\n cellStyle: z.infer<typeof zCellStyle>\n customTheme: z.infer<typeof zCustomThemeConfig>\n annotation: z.infer<typeof zAnnotation>\n locale: z.infer<typeof zLocale>\n regressionLine: z.infer<typeof zRegressionLine>\n totals?: PivotTableTotals\n}\n\nexport const zAdvancedVSeed: z.ZodType<AdvancedVSeed> = z.object({\n chartType: zChartType,\n dataset: zDataset,\n datasetReshapeInfo: zDatasetReshapeInfo,\n pivotAllDatasetReshapeInfo: zDatasetReshapeInfo,\n dimensions: zDimensions.optional(),\n measures: zMeasures.optional(),\n reshapeMeasures: z.array(zMeasures).optional(),\n reshapeDimensions: zDimensions.optional(),\n measureTree: zMeasureTree.optional(), // 现在只有表格中可能会配置这种树状结构\n dimensionTree: zDimensionTree.optional(), // 现在只有表格中可能会配置这种树状结构\n encoding: zEncoding,\n page: zPage.optional(),\n config: zConfig,\n analysis: zAnalysis,\n theme: zTheme,\n markStyle: zMarkStyle,\n cellStyle: zCellStyle,\n customTheme: zCustomThemeConfig,\n annotation: zAnnotation,\n locale: zLocale,\n regressionLine: zRegressionLine,\n totals: zPivotTableTotals.optional(),\n})\n"],"names":["zAdvancedVSeed","z","zChartType","zDataset","zDatasetReshapeInfo","zDimensions","zMeasures","zMeasureTree","zDimensionTree","zEncoding","zPage","zConfig","zAnalysis","zTheme","zMarkStyle","zCellStyle","zCustomThemeConfig","zAnnotation","zLocale","zRegressionLine","zPivotTableTotals"],"mappings":";;;;;;;;;;;;AA8CO,MAAMA,iBAA2CC,EAAE,MAAM,CAAC;IAC/D,WAAWC;IACX,SAASC;IACT,oBAAoBC;IACpB,4BAA4BA;IAC5B,YAAYC,YAAY,QAAQ;IAChC,UAAUC,UAAU,QAAQ;IAC5B,iBAAiBL,EAAE,KAAK,CAACK,WAAW,QAAQ;IAC5C,mBAAmBD,YAAY,QAAQ;IACvC,aAAaE,aAAa,QAAQ;IAClC,eAAeC,eAAe,QAAQ;IACtC,UAAUC;IACV,MAAMC,MAAM,QAAQ;IACpB,QAAQC;IACR,UAAUC;IACV,OAAOC;IACP,WAAWC;IACX,WAAWC;IACX,aAAaC;IACb,YAAYC;IACZ,QAAQC;IACR,gBAAgBC;IAChB,QAAQC,kBAAkB,QAAQ;AACpC"}
|