@visactor/vseed 0.4.11 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/cjs/index.cjs +2 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/dataReshape/dataReshapeByEncoding.d.ts +2 -1
  4. package/dist/esm/dataReshape/dataReshapeByEncoding.js +7 -2
  5. package/dist/esm/dataReshape/dataReshapeByEncoding.js.map +1 -1
  6. package/dist/esm/dataReshape/unfoldDimensions.d.ts +1 -0
  7. package/dist/esm/dataReshape/unfoldDimensions.js +5 -4
  8. package/dist/esm/dataReshape/unfoldDimensions.js.map +1 -1
  9. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js +11 -3
  10. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js.map +1 -1
  11. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js +4 -2
  12. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js.map +1 -1
  13. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js +2 -1
  14. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js.map +1 -1
  15. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js +8 -3
  16. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js.map +1 -1
  17. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js +4 -2
  18. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js.map +1 -1
  19. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js +11 -2
  20. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js.map +1 -1
  21. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js +4 -2
  22. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js.map +1 -1
  23. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js +2 -1
  24. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js.map +1 -1
  25. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js +8 -2
  26. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js.map +1 -1
  27. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js +4 -2
  28. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js.map +1 -1
  29. package/dist/esm/pipeline/spec/chart/pipeline/area.js +6 -2
  30. package/dist/esm/pipeline/spec/chart/pipeline/area.js.map +1 -1
  31. package/dist/esm/pipeline/spec/chart/pipeline/areaPercent.js +6 -2
  32. package/dist/esm/pipeline/spec/chart/pipeline/areaPercent.js.map +1 -1
  33. package/dist/esm/pipeline/spec/chart/pipeline/bar.js +6 -2
  34. package/dist/esm/pipeline/spec/chart/pipeline/bar.js.map +1 -1
  35. package/dist/esm/pipeline/spec/chart/pipeline/barParallel.js +6 -2
  36. package/dist/esm/pipeline/spec/chart/pipeline/barParallel.js.map +1 -1
  37. package/dist/esm/pipeline/spec/chart/pipeline/barPercent.js +6 -2
  38. package/dist/esm/pipeline/spec/chart/pipeline/barPercent.js.map +1 -1
  39. package/dist/esm/pipeline/spec/chart/pipeline/column.js +6 -2
  40. package/dist/esm/pipeline/spec/chart/pipeline/column.js.map +1 -1
  41. package/dist/esm/pipeline/spec/chart/pipeline/columnParallel.js +6 -2
  42. package/dist/esm/pipeline/spec/chart/pipeline/columnParallel.js.map +1 -1
  43. package/dist/esm/pipeline/spec/chart/pipeline/columnPercent.js +6 -2
  44. package/dist/esm/pipeline/spec/chart/pipeline/columnPercent.js.map +1 -1
  45. package/dist/esm/pipeline/spec/chart/pipeline/donut.js +6 -2
  46. package/dist/esm/pipeline/spec/chart/pipeline/donut.js.map +1 -1
  47. package/dist/esm/pipeline/spec/chart/pipeline/funnel.js +6 -2
  48. package/dist/esm/pipeline/spec/chart/pipeline/funnel.js.map +1 -1
  49. package/dist/esm/pipeline/spec/chart/pipeline/line.js +6 -2
  50. package/dist/esm/pipeline/spec/chart/pipeline/line.js.map +1 -1
  51. package/dist/esm/pipeline/spec/chart/pipeline/pie.js +6 -2
  52. package/dist/esm/pipeline/spec/chart/pipeline/pie.js.map +1 -1
  53. package/dist/esm/pipeline/spec/chart/pipeline/raceBar.js +3 -1
  54. package/dist/esm/pipeline/spec/chart/pipeline/raceBar.js.map +1 -1
  55. package/dist/esm/pipeline/spec/chart/pipeline/raceColumn.js +3 -1
  56. package/dist/esm/pipeline/spec/chart/pipeline/raceColumn.js.map +1 -1
  57. package/dist/esm/pipeline/spec/chart/pipeline/raceDonut.js +3 -1
  58. package/dist/esm/pipeline/spec/chart/pipeline/raceDonut.js.map +1 -1
  59. package/dist/esm/pipeline/spec/chart/pipeline/raceLine.js +3 -1
  60. package/dist/esm/pipeline/spec/chart/pipeline/raceLine.js.map +1 -1
  61. package/dist/esm/pipeline/spec/chart/pipeline/racePie.js +3 -1
  62. package/dist/esm/pipeline/spec/chart/pipeline/racePie.js.map +1 -1
  63. package/dist/esm/pipeline/spec/chart/pipeline/radar.js +6 -2
  64. package/dist/esm/pipeline/spec/chart/pipeline/radar.js.map +1 -1
  65. package/dist/esm/pipeline/spec/chart/pipeline/rose.js +6 -2
  66. package/dist/esm/pipeline/spec/chart/pipeline/rose.js.map +1 -1
  67. package/dist/esm/pipeline/spec/chart/pipeline/roseParallel.js +6 -2
  68. package/dist/esm/pipeline/spec/chart/pipeline/roseParallel.js.map +1 -1
  69. package/dist/esm/pipeline/spec/chart/pipes/axes/heatmapBandAxis.js +14 -0
  70. package/dist/esm/pipeline/spec/chart/pipes/axes/heatmapBandAxis.js.map +1 -1
  71. package/dist/esm/pipeline/spec/chart/pipes/axes/radarAngle.js +27 -1
  72. package/dist/esm/pipeline/spec/chart/pipes/axes/radarAngle.js.map +1 -1
  73. package/dist/esm/pipeline/spec/chart/pipes/axes/xBand.js +15 -2
  74. package/dist/esm/pipeline/spec/chart/pipes/axes/xBand.js.map +1 -1
  75. package/dist/esm/pipeline/spec/chart/pipes/axes/yBand.js +15 -2
  76. package/dist/esm/pipeline/spec/chart/pipes/axes/yBand.js.map +1 -1
  77. package/dist/esm/pipeline/spec/chart/pipes/label/label.d.ts +3 -3
  78. package/dist/esm/pipeline/spec/chart/pipes/label/label.js +4 -3
  79. package/dist/esm/pipeline/spec/chart/pipes/label/label.js.map +1 -1
  80. package/dist/esm/pipeline/spec/chart/pipes/label/labelBoxPlot.js +1 -1
  81. package/dist/esm/pipeline/spec/chart/pipes/label/labelBoxPlot.js.map +1 -1
  82. package/dist/esm/pipeline/spec/chart/pipes/label/labelCirclePacking.js +18 -1
  83. package/dist/esm/pipeline/spec/chart/pipes/label/labelCirclePacking.js.map +1 -1
  84. package/dist/esm/pipeline/spec/chart/pipes/label/labelDualAxis.js +1 -1
  85. package/dist/esm/pipeline/spec/chart/pipes/label/labelDualAxis.js.map +1 -1
  86. package/dist/esm/pipeline/spec/chart/pipes/label/labelPie.js +1 -1
  87. package/dist/esm/pipeline/spec/chart/pipes/label/labelPie.js.map +1 -1
  88. package/dist/esm/pipeline/spec/chart/pipes/label/labelScatter.js +1 -1
  89. package/dist/esm/pipeline/spec/chart/pipes/label/labelScatter.js.map +1 -1
  90. package/dist/esm/pipeline/spec/chart/pipes/label/labelSunburst.js +18 -1
  91. package/dist/esm/pipeline/spec/chart/pipes/label/labelSunburst.js.map +1 -1
  92. package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapGroup.js +12 -4
  93. package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapGroup.js.map +1 -1
  94. package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js +4 -2
  95. package/dist/esm/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js.map +1 -1
  96. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.js +5 -0
  97. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.js.map +1 -1
  98. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.js +5 -0
  99. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.js.map +1 -1
  100. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.d.ts +5 -3
  101. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js +51 -32
  102. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js.map +1 -1
  103. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js +8 -7
  104. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js.map +1 -1
  105. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipDualAxis.js +15 -2
  106. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipDualAxis.js.map +1 -1
  107. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHeatmap.js +3 -2
  108. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHeatmap.js.map +1 -1
  109. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHierarchy.js +6 -5
  110. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHierarchy.js.map +1 -1
  111. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipScatter.js +3 -2
  112. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipScatter.js.map +1 -1
  113. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipTreeMap.js +14 -6
  114. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipTreeMap.js.map +1 -1
  115. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js +6 -2
  116. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js.map +1 -1
  117. package/dist/esm/pipeline/spec/table/pipes/columns/pivotColumns.js +8 -3
  118. package/dist/esm/pipeline/spec/table/pipes/columns/pivotColumns.js.map +1 -1
  119. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js +8 -3
  120. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js.map +1 -1
  121. package/dist/esm/pipeline/utils/constant.d.ts +1 -0
  122. package/dist/esm/pipeline/utils/constant.js +1 -0
  123. package/dist/esm/pipeline/utils/constant.js.map +1 -1
  124. package/dist/esm/pipeline/utils/format/createFormatterByDimension.d.ts +2 -0
  125. package/dist/esm/pipeline/utils/format/createFormatterByDimension.js +10 -0
  126. package/dist/esm/pipeline/utils/format/createFormatterByDimension.js.map +1 -0
  127. package/dist/esm/pipeline/utils/format/createTimeFormatter.d.ts +2 -0
  128. package/dist/esm/pipeline/utils/format/createTimeFormatter.js +154 -0
  129. package/dist/esm/pipeline/utils/format/createTimeFormatter.js.map +1 -0
  130. package/dist/esm/pipeline/utils/format/index.d.ts +2 -0
  131. package/dist/esm/pipeline/utils/format/index.js +2 -0
  132. package/dist/esm/types/chartType/area/zArea.d.ts +12 -0
  133. package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +12 -0
  134. package/dist/esm/types/chartType/bar/zBar.d.ts +12 -0
  135. package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +12 -0
  136. package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +12 -0
  137. package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +12 -0
  138. package/dist/esm/types/chartType/circlePacking/zCirclePacking.d.ts +12 -0
  139. package/dist/esm/types/chartType/column/zColumn.d.ts +12 -0
  140. package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +12 -0
  141. package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +12 -0
  142. package/dist/esm/types/chartType/donut/zDonut.d.ts +12 -0
  143. package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +12 -0
  144. package/dist/esm/types/chartType/funnel/zFunnel.d.ts +12 -0
  145. package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +12 -0
  146. package/dist/esm/types/chartType/histogram/zHistogram.d.ts +12 -0
  147. package/dist/esm/types/chartType/line/zLine.d.ts +12 -0
  148. package/dist/esm/types/chartType/pie/zPie.d.ts +12 -0
  149. package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +12 -0
  150. package/dist/esm/types/chartType/raceBar/zRaceBar.d.ts +12 -0
  151. package/dist/esm/types/chartType/raceColumn/zRaceColumn.d.ts +12 -0
  152. package/dist/esm/types/chartType/raceDonut/zRaceDonut.d.ts +12 -0
  153. package/dist/esm/types/chartType/raceLine/zRaceLine.d.ts +12 -0
  154. package/dist/esm/types/chartType/racePie/zRacePie.d.ts +12 -0
  155. package/dist/esm/types/chartType/raceScatter/zRaceScatter.d.ts +12 -0
  156. package/dist/esm/types/chartType/radar/zRadar.d.ts +12 -0
  157. package/dist/esm/types/chartType/rose/zRose.d.ts +12 -0
  158. package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +12 -0
  159. package/dist/esm/types/chartType/scatter/zScatter.d.ts +12 -0
  160. package/dist/esm/types/chartType/sunburst/zSunburst.d.ts +12 -0
  161. package/dist/esm/types/chartType/table/zTable.d.ts +12 -0
  162. package/dist/esm/types/chartType/treeMap/zTreeMap.d.ts +12 -0
  163. package/dist/esm/types/properties/cellStyle/bodyCellStyle.d.ts +1 -1
  164. package/dist/esm/types/properties/cellStyle/bodyCellStyle.js.map +1 -1
  165. package/dist/esm/types/properties/dimensions/baseDimension.d.ts +5 -0
  166. package/dist/esm/types/properties/dimensions/zDimensions.d.ts +36 -0
  167. package/dist/esm/types/properties/dimensions/zDimensions.js +3 -1
  168. package/dist/esm/types/properties/dimensions/zDimensions.js.map +1 -1
  169. package/dist/esm/types/properties/format/index.d.ts +1 -0
  170. package/dist/esm/types/properties/format/index.js +1 -0
  171. package/dist/esm/types/properties/format/timeFormat.d.ts +20 -0
  172. package/dist/esm/types/properties/format/timeFormat.js +16 -0
  173. package/dist/esm/types/properties/format/timeFormat.js.map +1 -0
  174. package/dist/umd/index.js +592 -147
  175. package/dist/umd/index.js.map +1 -1
  176. package/package.json +13 -13
@@ -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, 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
+ {"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 {\n createFormatter,\n createFormatterByDimension,\n createFormatterByMeasure,\n DATUM_HIDE_KEY,\n findMeasureById,\n} from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Locale,\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 locale: Locale = 'zh-CN',\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 const formatter = createFormatterByDimension(item, locale)\n return formatter(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","locale","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","createFormatterByDimension","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
@@ -13,7 +13,7 @@ const labelBoxPlot = (spec, context)=>{
13
13
  measureId: FoldMeasureId,
14
14
  measureValue: MedianMeasureId
15
15
  }
16
- ]);
16
+ ], advancedVSeed?.locale);
17
17
  return result;
18
18
  };
19
19
  export { labelBoxPlot };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelBoxPlot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelBoxPlot.ts"],"sourcesContent":["import type { IPieChartSpec } from '@visactor/vchart'\nimport type { Encoding, PieLabel, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\nimport { FoldMeasureId, MedianMeasureId } from 'src/dataReshape/constant'\n\nexport const labelBoxPlot: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IPieChartSpec\n const { advancedVSeed, vseed } = context\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: PieLabel }\n\n const { label } = baseConfig\n\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [\n {\n measureId: FoldMeasureId,\n measureValue: MedianMeasureId,\n },\n ],\n ) as unknown as IPieChartSpec['label']\n\n return result\n}\n"],"names":["labelBoxPlot","spec","context","result","advancedVSeed","vseed","chartType","encoding","baseConfig","label","buildLabel","FoldMeasureId","MedianMeasureId"],"mappings":";;AAKO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAEC,KAAK,EAAE,GAAGH;IACjC,MAAM,EAAEI,SAAS,EAAEC,QAAQ,EAAE,GAAGH;IAChC,MAAMI,aAAaJ,cAAc,MAAM,CAACE,UAAU;IAElD,MAAM,EAAEG,KAAK,EAAE,GAAGD;IAElBL,OAAO,KAAK,GAAGO,WACbD,OACAJ,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBG,UACA;QACE;YACE,WAAWI;YACX,cAAcC;QAChB;KACD;IAGH,OAAOT;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelBoxPlot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelBoxPlot.ts"],"sourcesContent":["import type { IPieChartSpec } from '@visactor/vchart'\nimport type { Encoding, PieLabel, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\nimport { FoldMeasureId, MedianMeasureId } from 'src/dataReshape/constant'\n\nexport const labelBoxPlot: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IPieChartSpec\n const { advancedVSeed, vseed } = context\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: PieLabel }\n\n const { label } = baseConfig\n\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [\n {\n measureId: FoldMeasureId,\n measureValue: MedianMeasureId,\n },\n ],\n advancedVSeed?.locale,\n ) as unknown as IPieChartSpec['label']\n\n return result\n}\n"],"names":["labelBoxPlot","spec","context","result","advancedVSeed","vseed","chartType","encoding","baseConfig","label","buildLabel","FoldMeasureId","MedianMeasureId"],"mappings":";;AAKO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAEC,KAAK,EAAE,GAAGH;IACjC,MAAM,EAAEI,SAAS,EAAEC,QAAQ,EAAE,GAAGH;IAChC,MAAMI,aAAaJ,cAAc,MAAM,CAACE,UAAU;IAElD,MAAM,EAAEG,KAAK,EAAE,GAAGD;IAElBL,OAAO,KAAK,GAAGO,WACbD,OACAJ,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBG,UACA;QACE;YACE,WAAWI;YACX,cAAcC;QAChB;KACD,EACDR,eAAe;IAGjB,OAAOD;AACT"}
@@ -1,14 +1,31 @@
1
1
  import { label as external_label_js_label } from "./label.js";
2
+ import { createFormatterByDimension } from "../../../../utils/index.js";
3
+ import { Separator } from "../../../../../dataReshape/index.js";
2
4
  const labelCirclePacking = (spec, context)=>{
3
5
  const { advancedVSeed } = context;
4
- const { chartType } = advancedVSeed;
6
+ const { chartType, encoding, dimensions = [] } = advancedVSeed;
5
7
  const baseConfig = advancedVSeed.config[chartType];
6
8
  const { label } = baseConfig;
7
9
  const result = external_label_js_label(spec, context);
8
10
  if (label?.enable) {
9
11
  const labelSpec = result.label;
12
+ const formatHierarchyName = (name)=>{
13
+ const dimIds = encoding.hierarchy || [];
14
+ if (!dimIds.length) return name;
15
+ const dimFormatters = dimIds.map((id)=>{
16
+ const dim = dimensions.find((item)=>item.id === id);
17
+ return createFormatterByDimension(dim, advancedVSeed.locale);
18
+ });
19
+ const parts = String(name ?? '').split(Separator);
20
+ const formatted = parts.map((part, index)=>{
21
+ const formatter = dimFormatters[index] || ((v)=>v);
22
+ return formatter(part);
23
+ });
24
+ return formatted.join(Separator);
25
+ };
10
26
  result.label = {
11
27
  ...labelSpec,
28
+ formatMethod: (_, datum)=>formatHierarchyName(String(datum?.name ?? '')),
12
29
  style: {
13
30
  ...labelSpec?.style,
14
31
  fontSize: 10,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelCirclePacking.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelCirclePacking.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\nimport { label as commonLabel } from './label'\n\nexport const labelCirclePacking: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { chartType } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n // Reuse common label logic to build basic label config\n const result = commonLabel(spec, context) as ILineChartSpec\n\n // If label is enabled, override with circlePacking specific logic\n if (label?.enable) {\n const labelSpec = result.label as any\n result.label = {\n ...labelSpec,\n style: {\n ...labelSpec?.style,\n fontSize: 10,\n visible: (d: any) => {\n return d.depth === 1\n },\n },\n }\n }\n\n return result\n}\n"],"names":["labelCirclePacking","spec","context","advancedVSeed","chartType","baseConfig","label","result","commonLabel","labelSpec","d"],"mappings":";AAIO,MAAMA,qBAAqC,CAACC,MAAMC;IACvD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAE,GAAGD;IACtB,MAAME,aAAaF,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEE,KAAK,EAAE,GAAGD;IAGlB,MAAME,SAASC,wBAAYP,MAAMC;IAGjC,IAAII,OAAO,QAAQ;QACjB,MAAMG,YAAYF,OAAO,KAAK;QAC9BA,OAAO,KAAK,GAAG;YACb,GAAGE,SAAS;YACZ,OAAO;gBACL,GAAGA,WAAW,KAAK;gBACnB,UAAU;gBACV,SAAS,CAACC,IACDA,AAAY,MAAZA,EAAE,KAAK;YAElB;QACF;IACF;IAEA,OAAOH;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelCirclePacking.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelCirclePacking.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\nimport { label as commonLabel } from './label'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\nimport { Separator } from 'src/dataReshape'\n\nexport const labelCirclePacking: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { chartType, encoding, dimensions = [] } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n // Reuse common label logic to build basic label config\n const result = commonLabel(spec, context) as ILineChartSpec\n\n // If label is enabled, override with circlePacking specific logic\n if (label?.enable) {\n const labelSpec = result.label as any\n const formatHierarchyName = (name: string) => {\n const dimIds = encoding.hierarchy || []\n if (!dimIds.length) {\n return name\n }\n const dimFormatters = dimIds.map((id) => {\n const dim = dimensions.find((item) => item.id === id)\n return createFormatterByDimension(dim, advancedVSeed.locale)\n })\n const parts = String(name ?? '').split(Separator)\n const formatted = parts.map((part, index) => {\n const formatter = dimFormatters[index] || ((v: string) => v)\n return formatter(part)\n })\n return formatted.join(Separator)\n }\n\n result.label = {\n ...labelSpec,\n formatMethod: (_: unknown, datum: any) => {\n return formatHierarchyName(String(datum?.name ?? ''))\n },\n style: {\n ...labelSpec?.style,\n fontSize: 10,\n visible: (d: any) => {\n return d.depth === 1\n },\n },\n }\n }\n\n return result\n}\n"],"names":["labelCirclePacking","spec","context","advancedVSeed","chartType","encoding","dimensions","baseConfig","label","result","commonLabel","labelSpec","formatHierarchyName","name","dimIds","dimFormatters","id","dim","item","createFormatterByDimension","parts","String","Separator","formatted","part","index","formatter","v","_","datum","d"],"mappings":";;;AAMO,MAAMA,qBAAqC,CAACC,MAAMC;IACvD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAEC,QAAQ,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACjD,MAAMI,aAAaJ,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEI,KAAK,EAAE,GAAGD;IAGlB,MAAME,SAASC,wBAAYT,MAAMC;IAGjC,IAAIM,OAAO,QAAQ;QACjB,MAAMG,YAAYF,OAAO,KAAK;QAC9B,MAAMG,sBAAsB,CAACC;YAC3B,MAAMC,SAAST,SAAS,SAAS,IAAI,EAAE;YACvC,IAAI,CAACS,OAAO,MAAM,EAChB,OAAOD;YAET,MAAME,gBAAgBD,OAAO,GAAG,CAAC,CAACE;gBAChC,MAAMC,MAAMX,WAAW,IAAI,CAAC,CAACY,OAASA,KAAK,EAAE,KAAKF;gBAClD,OAAOG,2BAA2BF,KAAKd,cAAc,MAAM;YAC7D;YACA,MAAMiB,QAAQC,OAAOR,QAAQ,IAAI,KAAK,CAACS;YACvC,MAAMC,YAAYH,MAAM,GAAG,CAAC,CAACI,MAAMC;gBACjC,MAAMC,YAAYX,aAAa,CAACU,MAAM,IAAM,EAAAE,IAAcA,CAAAA;gBAC1D,OAAOD,UAAUF;YACnB;YACA,OAAOD,UAAU,IAAI,CAACD;QACxB;QAEAb,OAAO,KAAK,GAAG;YACb,GAAGE,SAAS;YACZ,cAAc,CAACiB,GAAYC,QAClBjB,oBAAoBS,OAAOQ,OAAO,QAAQ;YAEnD,OAAO;gBACL,GAAGlB,WAAW,KAAK;gBACnB,UAAU;gBACV,SAAS,CAACmB,IACDA,AAAY,MAAZA,EAAE,KAAK;YAElB;QACF;IACF;IAEA,OAAOrB;AACT"}
@@ -10,7 +10,7 @@ const labelDualAxis = (options)=>(spec, context)=>{
10
10
  const baseConfig = advancedVSeed.config[chartType];
11
11
  result.label = buildLabel(baseConfig.label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
12
12
  options.foldInfo
13
- ]);
13
+ ], advancedVSeed?.locale);
14
14
  result.label.zIndex = DUAL_AXIS_LABEL_Z_INDEX;
15
15
  return result;
16
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelDualAxis.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelDualAxis.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { DualAxisOptions, Encoding, Label, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\nimport { DUAL_AXIS_LABEL_Z_INDEX } from 'src/pipeline/utils/constant'\n\nexport const labelDualAxis = (options: DualAxisOptions): VChartSpecPipe => {\n return (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { encoding } = advancedVSeed\n const { chartType } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n\n result.label = buildLabel(\n baseConfig.label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [options.foldInfo],\n ) as unknown as ILineChartSpec['label']\n ;(result.label as any)!.zIndex = DUAL_AXIS_LABEL_Z_INDEX\n return result\n }\n}\n"],"names":["labelDualAxis","options","spec","context","result","advancedVSeed","vseed","encoding","chartType","baseConfig","buildLabel","DUAL_AXIS_LABEL_Z_INDEX"],"mappings":";;AAKO,MAAMA,gBAAgB,CAACC,UACrB,CAACC,MAAMC;QACZ,MAAMC,SAAS;YAAE,GAAGF,IAAI;QAAC;QACzB,MAAM,EAAEG,aAAa,EAAEC,KAAK,EAAE,GAAGH;QACjC,MAAM,EAAEI,QAAQ,EAAE,GAAGF;QACrB,MAAM,EAAEG,SAAS,EAAE,GAAGH;QACtB,MAAMI,aAAaJ,cAAc,MAAM,CAACG,UAAU;QAElDJ,OAAO,KAAK,GAAGM,WACbD,WAAW,KAAK,EAChBH,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBE,UACA;YAACN,QAAQ,QAAQ;SAAC;QAElBG,OAAO,KAAK,CAAU,MAAM,GAAGO;QACjC,OAAOP;IACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelDualAxis.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelDualAxis.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { DualAxisOptions, Encoding, Label, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\nimport { DUAL_AXIS_LABEL_Z_INDEX } from 'src/pipeline/utils/constant'\n\nexport const labelDualAxis = (options: DualAxisOptions): VChartSpecPipe => {\n return (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { encoding } = advancedVSeed\n const { chartType } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n\n result.label = buildLabel(\n baseConfig.label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [options.foldInfo],\n advancedVSeed?.locale,\n ) as unknown as ILineChartSpec['label']\n ;(result.label as any)!.zIndex = DUAL_AXIS_LABEL_Z_INDEX\n return result\n }\n}\n"],"names":["labelDualAxis","options","spec","context","result","advancedVSeed","vseed","encoding","chartType","baseConfig","buildLabel","DUAL_AXIS_LABEL_Z_INDEX"],"mappings":";;AAKO,MAAMA,gBAAgB,CAACC,UACrB,CAACC,MAAMC;QACZ,MAAMC,SAAS;YAAE,GAAGF,IAAI;QAAC;QACzB,MAAM,EAAEG,aAAa,EAAEC,KAAK,EAAE,GAAGH;QACjC,MAAM,EAAEI,QAAQ,EAAE,GAAGF;QACrB,MAAM,EAAEG,SAAS,EAAE,GAAGH;QACtB,MAAMI,aAAaJ,cAAc,MAAM,CAACG,UAAU;QAElDJ,OAAO,KAAK,GAAGM,WACbD,WAAW,KAAK,EAChBH,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBE,UACA;YAACN,QAAQ,QAAQ;SAAC,EAClBI,eAAe;QAEfD,OAAO,KAAK,CAAU,MAAM,GAAGO;QACjC,OAAOP;IACT"}
@@ -11,7 +11,7 @@ const labelPie = (spec, context)=>{
11
11
  const { label } = baseConfig;
12
12
  result.label = buildLabel(label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
13
13
  foldInfo
14
- ]);
14
+ ], advancedVSeed?.locale);
15
15
  if (label.labelLayout) result.label.layout = {
16
16
  align: label.labelLayout
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelPie.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelPie.ts"],"sourcesContent":["import type { IPieChartSpec } from '@visactor/vchart'\nimport type { Encoding, FoldInfo, PieLabel, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\n\nexport const labelPie: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IPieChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: PieLabel }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n\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 IPieChartSpec['label']\n if (label.labelLayout) {\n ;(result.label as any)!.layout = {\n align: label.labelLayout,\n }\n }\n return result\n}\n"],"names":["labelPie","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","label","buildLabel"],"mappings":";AAIO,MAAMA,WAA2B,CAACC,MAAMC;IAC7C,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,EAAEK,KAAK,EAAE,GAAGF;IAElBN,OAAO,KAAK,GAAGS,WACbD,OACAN,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBI,UACA;QAACE;KAAS;IAEZ,IAAIC,MAAM,WAAW,EACjBR,OAAO,KAAK,CAAU,MAAM,GAAG;QAC/B,OAAOQ,MAAM,WAAW;IAC1B;IAEF,OAAOR;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelPie.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelPie.ts"],"sourcesContent":["import type { IPieChartSpec } from '@visactor/vchart'\nimport type { Encoding, FoldInfo, PieLabel, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\n\nexport const labelPie: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IPieChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: PieLabel }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n\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 advancedVSeed?.locale,\n ) as unknown as IPieChartSpec['label']\n if (label.labelLayout) {\n ;(result.label as any)!.layout = {\n align: label.labelLayout,\n }\n }\n return result\n}\n"],"names":["labelPie","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","label","buildLabel"],"mappings":";AAIO,MAAMA,WAA2B,CAACC,MAAMC;IAC7C,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,EAAEK,KAAK,EAAE,GAAGF;IAElBN,OAAO,KAAK,GAAGS,WACbD,OACAN,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBI,UACA;QAACE;KAAS,EACVN,eAAe;IAEjB,IAAIO,MAAM,WAAW,EACjBR,OAAO,KAAK,CAAU,MAAM,GAAG;QAC/B,OAAOQ,MAAM,WAAW;IAC1B;IAEF,OAAOR;AACT"}
@@ -9,7 +9,7 @@ const labelScatter = (spec, context)=>{
9
9
  const baseConfig = advancedVSeed.config[chartType];
10
10
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
11
11
  const { label } = baseConfig;
12
- result.label = buildLabel(label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, foldInfoList);
12
+ result.label = buildLabel(label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, foldInfoList, advancedVSeed?.locale);
13
13
  return result;
14
14
  };
15
15
  export { labelScatter };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelScatter.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelScatter.ts"],"sourcesContent":["import type { IScatterChartSpec } from '@visactor/vchart'\nimport type { Encoding, FoldInfo, Label, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\n\nexport const labelScatter: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IScatterChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n\n const foldInfoList = datasetReshapeInfo[0].foldInfoList as FoldInfo[]\n\n const { label } = baseConfig\n\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n foldInfoList,\n ) as unknown as IScatterChartSpec['label']\n\n return result\n}\n"],"names":["labelScatter","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfoList","label","buildLabel"],"mappings":";AAIO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,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;IAElD,MAAMG,eAAeJ,kBAAkB,CAAC,EAAE,CAAC,YAAY;IAEvD,MAAM,EAAEK,KAAK,EAAE,GAAGF;IAElBN,OAAO,KAAK,GAAGS,WACbD,OACAN,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBI,UACAE;IAGF,OAAOP;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelScatter.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelScatter.ts"],"sourcesContent":["import type { IScatterChartSpec } from '@visactor/vchart'\nimport type { Encoding, FoldInfo, Label, VChartSpecPipe } from 'src/types'\nimport { buildLabel } from './label'\n\nexport const labelScatter: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as IScatterChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n\n const foldInfoList = datasetReshapeInfo[0].foldInfoList as FoldInfo[]\n\n const { label } = baseConfig\n\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n foldInfoList,\n advancedVSeed?.locale,\n ) as unknown as IScatterChartSpec['label']\n\n return result\n}\n"],"names":["labelScatter","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfoList","label","buildLabel"],"mappings":";AAIO,MAAMA,eAA+B,CAACC,MAAMC;IACjD,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;IAElD,MAAMG,eAAeJ,kBAAkB,CAAC,EAAE,CAAC,YAAY;IAEvD,MAAM,EAAEK,KAAK,EAAE,GAAGF;IAElBN,OAAO,KAAK,GAAGS,WACbD,OACAN,MAAM,QAAQ,EACdA,MAAM,UAAU,EAChBD,cAAc,UAAU,EACxBA,cAAc,QAAQ,EACtBI,UACAE,cACAN,eAAe;IAGjB,OAAOD;AACT"}
@@ -1,14 +1,31 @@
1
1
  import { label as external_label_js_label } from "./label.js";
2
+ import { createFormatterByDimension } from "../../../../utils/index.js";
3
+ import { Separator } from "../../../../../dataReshape/index.js";
2
4
  const labelSunburst = (spec, context)=>{
3
5
  const { advancedVSeed } = context;
4
- const { chartType, encoding } = advancedVSeed;
6
+ const { chartType, encoding, dimensions = [] } = advancedVSeed;
5
7
  const baseConfig = advancedVSeed.config[chartType];
6
8
  const { label } = baseConfig;
7
9
  const result = external_label_js_label(spec, context);
8
10
  if (label?.enable) {
9
11
  const labelSpec = result.label;
12
+ const formatHierarchyName = (name)=>{
13
+ const dimIds = encoding.hierarchy || [];
14
+ if (!dimIds.length) return name;
15
+ const dimFormatters = dimIds.map((id)=>{
16
+ const dim = dimensions.find((item)=>item.id === id);
17
+ return createFormatterByDimension(dim, advancedVSeed.locale);
18
+ });
19
+ const parts = String(name ?? '').split(Separator);
20
+ const formatted = parts.map((part, index)=>{
21
+ const formatter = dimFormatters[index] || ((v)=>v);
22
+ return formatter(part);
23
+ });
24
+ return formatted.join(Separator);
25
+ };
10
26
  result.label = {
11
27
  ...labelSpec,
28
+ formatMethod: (_, datum)=>formatHierarchyName(String(datum?.name ?? '')),
12
29
  style: {
13
30
  ...labelSpec?.style,
14
31
  fontSize: 12,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelSunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelSunburst.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\nimport { label as commonLabel } from './label'\n\nexport const labelSunburst: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n // Reuse common label logic\n const result = commonLabel(spec, context) as ILineChartSpec\n\n // Override with sunburst specific logic\n if (label?.enable) {\n const labelSpec = result.label as any\n result.label = {\n ...labelSpec,\n style: {\n ...labelSpec?.style,\n fontSize: 12,\n fillOpacity: (datum: any) => {\n if (encoding.hierarchy?.length === 1) {\n return 1\n }\n return datum.isLeaf ? 0.4 : 0.6\n },\n },\n }\n }\n\n return result\n}\n"],"names":["labelSunburst","spec","context","advancedVSeed","chartType","encoding","baseConfig","label","result","commonLabel","labelSpec","datum"],"mappings":";AAIO,MAAMA,gBAAgC,CAACC,MAAMC;IAClD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAEC,QAAQ,EAAE,GAAGF;IAChC,MAAMG,aAAaH,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEG,KAAK,EAAE,GAAGD;IAGlB,MAAME,SAASC,wBAAYR,MAAMC;IAGjC,IAAIK,OAAO,QAAQ;QACjB,MAAMG,YAAYF,OAAO,KAAK;QAC9BA,OAAO,KAAK,GAAG;YACb,GAAGE,SAAS;YACZ,OAAO;gBACL,GAAGA,WAAW,KAAK;gBACnB,UAAU;gBACV,aAAa,CAACC;oBACZ,IAAIN,SAAS,SAAS,EAAE,WAAW,GACjC,OAAO;oBAET,OAAOM,MAAM,MAAM,GAAG,MAAM;gBAC9B;YACF;QACF;IACF;IAEA,OAAOH;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelSunburst.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelSunburst.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\nimport { label as commonLabel } from './label'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\nimport { Separator } from 'src/dataReshape'\n\nexport const labelSunburst: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { chartType, encoding, dimensions = [] } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n // Reuse common label logic\n const result = commonLabel(spec, context) as ILineChartSpec\n\n // Override with sunburst specific logic\n if (label?.enable) {\n const labelSpec = result.label as any\n const formatHierarchyName = (name: string) => {\n const dimIds = encoding.hierarchy || []\n if (!dimIds.length) {\n return name\n }\n const dimFormatters = dimIds.map((id) => {\n const dim = dimensions.find((item) => item.id === id)\n return createFormatterByDimension(dim, advancedVSeed.locale)\n })\n const parts = String(name ?? '').split(Separator)\n const formatted = parts.map((part, index) => {\n const formatter = dimFormatters[index] || ((v: string) => v)\n return formatter(part)\n })\n return formatted.join(Separator)\n }\n\n result.label = {\n ...labelSpec,\n formatMethod: (_: unknown, datum: any) => {\n return formatHierarchyName(String(datum?.name ?? ''))\n },\n style: {\n ...labelSpec?.style,\n fontSize: 12,\n fillOpacity: (datum: any) => {\n if (encoding.hierarchy?.length === 1) {\n return 1\n }\n return datum.isLeaf ? 0.4 : 0.6\n },\n },\n }\n }\n\n return result\n}\n"],"names":["labelSunburst","spec","context","advancedVSeed","chartType","encoding","dimensions","baseConfig","label","result","commonLabel","labelSpec","formatHierarchyName","name","dimIds","dimFormatters","id","dim","item","createFormatterByDimension","parts","String","Separator","formatted","part","index","formatter","v","_","datum"],"mappings":";;;AAMO,MAAMA,gBAAgC,CAACC,MAAMC;IAClD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAEC,QAAQ,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACjD,MAAMI,aAAaJ,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEI,KAAK,EAAE,GAAGD;IAGlB,MAAME,SAASC,wBAAYT,MAAMC;IAGjC,IAAIM,OAAO,QAAQ;QACjB,MAAMG,YAAYF,OAAO,KAAK;QAC9B,MAAMG,sBAAsB,CAACC;YAC3B,MAAMC,SAAST,SAAS,SAAS,IAAI,EAAE;YACvC,IAAI,CAACS,OAAO,MAAM,EAChB,OAAOD;YAET,MAAME,gBAAgBD,OAAO,GAAG,CAAC,CAACE;gBAChC,MAAMC,MAAMX,WAAW,IAAI,CAAC,CAACY,OAASA,KAAK,EAAE,KAAKF;gBAClD,OAAOG,2BAA2BF,KAAKd,cAAc,MAAM;YAC7D;YACA,MAAMiB,QAAQC,OAAOR,QAAQ,IAAI,KAAK,CAACS;YACvC,MAAMC,YAAYH,MAAM,GAAG,CAAC,CAACI,MAAMC;gBACjC,MAAMC,YAAYX,aAAa,CAACU,MAAM,IAAM,EAAAE,IAAcA,CAAAA;gBAC1D,OAAOD,UAAUF;YACnB;YACA,OAAOD,UAAU,IAAI,CAACD;QACxB;QAEAb,OAAO,KAAK,GAAG;YACb,GAAGE,SAAS;YACZ,cAAc,CAACiB,GAAYC,QAClBjB,oBAAoBS,OAAOQ,OAAO,QAAQ;YAEnD,OAAO;gBACL,GAAGlB,WAAW,KAAK;gBACnB,UAAU;gBACV,aAAa,CAACkB;oBACZ,IAAIxB,SAAS,SAAS,EAAE,WAAW,GACjC,OAAO;oBAET,OAAOwB,MAAM,MAAM,GAAG,MAAM;gBAC9B;YACF;QACF;IACF;IAEA,OAAOpB;AACT"}
@@ -1,15 +1,25 @@
1
+ import { createFormatterByDimension } from "../../../../utils/index.js";
1
2
  const labelTreeMapGroup = (spec, context)=>{
2
3
  const result = {
3
4
  ...spec
4
5
  };
5
6
  const { advancedVSeed } = context;
6
- const { chartType } = advancedVSeed;
7
+ const { chartType, dimensions = [], encoding } = advancedVSeed;
7
8
  const baseConfig = advancedVSeed.config[chartType];
8
9
  const { label } = baseConfig;
9
10
  if (!label.enable) return result;
10
11
  result.nonLeaf = {
11
12
  visible: true
12
13
  };
14
+ const dimIds = encoding.hierarchy || [];
15
+ const dimFormatters = dimIds.map((id)=>{
16
+ const dim = dimensions.find((item)=>item.id === id);
17
+ return createFormatterByDimension(dim, advancedVSeed.locale);
18
+ });
19
+ const formatHierarchyName = (name, depth)=>{
20
+ if (!dimFormatters?.[depth]) return name;
21
+ return dimFormatters[depth](name);
22
+ };
13
23
  result.nonLeafLabel = {
14
24
  visible: true,
15
25
  position: 'top',
@@ -17,9 +27,7 @@ const labelTreeMapGroup = (spec, context)=>{
17
27
  style: {
18
28
  x: (data)=>(data.labelRect?.x0 || 0) + 4,
19
29
  textAlign: 'left',
20
- text: (data)=>[
21
- data.name
22
- ],
30
+ text: (data)=>formatHierarchyName(String(data.name ?? ''), data.depth),
23
31
  fontSize: 12,
24
32
  fill: '#000'
25
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapGroup.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelTreeMapGroup.ts"],"sourcesContent":["import type { ITreemapChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\n\nexport const labelTreeMapGroup: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { chartType } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n if (!label.enable) {\n return result\n }\n\n result.nonLeaf = {\n visible: true,\n }\n\n result.nonLeafLabel = {\n visible: true,\n position: 'top',\n padding: 30,\n style: {\n x: (data: any) => {\n return (data.labelRect?.x0 || 0) + 4\n },\n textAlign: 'left',\n text: (data: any) => {\n return [data.name]\n },\n fontSize: 12,\n fill: '#000',\n },\n }\n\n return result\n}\n"],"names":["labelTreeMapGroup","spec","context","result","advancedVSeed","chartType","baseConfig","label","data"],"mappings":"AAGO,MAAMA,oBAAoC,CAACC,MAAMC;IACtD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,SAAS,EAAE,GAAGD;IACtB,MAAME,aAAaF,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEE,KAAK,EAAE,GAAGD;IAElB,IAAI,CAACC,MAAM,MAAM,EACf,OAAOJ;IAGTA,OAAO,OAAO,GAAG;QACf,SAAS;IACX;IAEAA,OAAO,YAAY,GAAG;QACpB,SAAS;QACT,UAAU;QACV,SAAS;QACT,OAAO;YACL,GAAG,CAACK,OACMA,AAAAA,CAAAA,KAAK,SAAS,EAAE,MAAM,KAAK;YAErC,WAAW;YACX,MAAM,CAACA,OACE;oBAACA,KAAK,IAAI;iBAAC;YAEpB,UAAU;YACV,MAAM;QACR;IACF;IAEA,OAAOL;AACT"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapGroup.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelTreeMapGroup.ts"],"sourcesContent":["import type { ITreemapChartSpec } from '@visactor/vchart'\nimport type { Label, VChartSpecPipe } from 'src/types'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\n\nexport const labelTreeMapGroup: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ITreemapChartSpec\n const { advancedVSeed } = context\n const { chartType, dimensions = [], encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const { label } = baseConfig\n\n if (!label.enable) {\n return result\n }\n\n result.nonLeaf = {\n visible: true,\n }\n\n const dimIds = encoding.hierarchy || []\n const dimFormatters = dimIds.map((id) => {\n const dim = dimensions.find((item) => item.id === id)\n return createFormatterByDimension(dim, advancedVSeed.locale)\n })\n const formatHierarchyName = (name: string, depth: number) => {\n if (!dimFormatters?.[depth]) {\n return name\n }\n return dimFormatters[depth](name)\n }\n\n result.nonLeafLabel = {\n visible: true,\n position: 'top',\n padding: 30,\n style: {\n x: (data: any) => {\n return (data.labelRect?.x0 || 0) + 4\n },\n textAlign: 'left',\n text: (data: any) => {\n return formatHierarchyName(String(data.name ?? ''), data.depth)\n },\n fontSize: 12,\n fill: '#000',\n },\n }\n\n return result\n}\n"],"names":["labelTreeMapGroup","spec","context","result","advancedVSeed","chartType","dimensions","encoding","baseConfig","label","dimIds","dimFormatters","id","dim","item","createFormatterByDimension","formatHierarchyName","name","depth","data","String"],"mappings":";AAIO,MAAMA,oBAAoC,CAACC,MAAMC;IACtD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,SAAS,EAAEC,aAAa,EAAE,EAAEC,QAAQ,EAAE,GAAGH;IACjD,MAAMI,aAAaJ,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEI,KAAK,EAAE,GAAGD;IAElB,IAAI,CAACC,MAAM,MAAM,EACf,OAAON;IAGTA,OAAO,OAAO,GAAG;QACf,SAAS;IACX;IAEA,MAAMO,SAASH,SAAS,SAAS,IAAI,EAAE;IACvC,MAAMI,gBAAgBD,OAAO,GAAG,CAAC,CAACE;QAChC,MAAMC,MAAMP,WAAW,IAAI,CAAC,CAACQ,OAASA,KAAK,EAAE,KAAKF;QAClD,OAAOG,2BAA2BF,KAAKT,cAAc,MAAM;IAC7D;IACA,MAAMY,sBAAsB,CAACC,MAAcC;QACzC,IAAI,CAACP,eAAe,CAACO,MAAM,EACzB,OAAOD;QAET,OAAON,aAAa,CAACO,MAAM,CAACD;IAC9B;IAEAd,OAAO,YAAY,GAAG;QACpB,SAAS;QACT,UAAU;QACV,SAAS;QACT,OAAO;YACL,GAAG,CAACgB,OACMA,AAAAA,CAAAA,KAAK,SAAS,EAAE,MAAM,KAAK;YAErC,WAAW;YACX,MAAM,CAACA,OACEH,oBAAoBI,OAAOD,KAAK,IAAI,IAAI,KAAKA,KAAK,KAAK;YAEhE,UAAU;YACV,MAAM;QACR;IACF;IAEA,OAAOhB;AACT"}
@@ -1,4 +1,4 @@
1
- import { createFormatter, findMeasureById } from "../../../../utils/index.js";
1
+ import { createFormatter, createFormatterByDimension, findMeasureById } from "../../../../utils/index.js";
2
2
  import { isNumber, merge, uniqueBy } from "remeda";
3
3
  import { MeasureId } from "../../../../../dataReshape/constant.js";
4
4
  import { generateMeasurePercent, generateMeasureValue, label as external_label_js_label } from "./label.js";
@@ -40,7 +40,9 @@ const labelTreeMapLeaf = (spec, context)=>{
40
40
  const resultText = [];
41
41
  const dimLabels = labelDims.map((item)=>{
42
42
  const id = item.id;
43
- return realDatum[id] ?? realDatum.__OriginalData__?.[id];
43
+ const rawValue = realDatum[id] ?? realDatum.__OriginalData__?.[id];
44
+ const formatter = createFormatterByDimension(item, advancedVSeed.locale);
45
+ return formatter(rawValue);
44
46
  }).filter((v)=>null != v && '' !== v);
45
47
  resultText.push(...dimLabels);
46
48
  const meaLabels = labelMeas.map((item)=>generateMeasureValue(realDatum[item.id] ?? realDatum.__OriginalData__?.[item.id], item, autoFormat, numFormat));
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimension, FoldInfo, Label, Measure, NumFormat, VChartSpecPipe } from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport { label as commonLabel, generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelTreeMapLeaf: VChartSpecPipe = (spec, context) => {\n const result = commonLabel(spec, context) 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 foldInfoList = [datasetReshapeInfo[0].foldInfo as FoldInfo]\n\n const { label } = baseConfig\n if (!label.enable) {\n return result\n }\n\n const { showValue, showValuePercent, showDimension, autoFormat, numFormat = {}, wrap } = label\n\n const hasDimLabelEncoding = vseed.dimensions?.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseed.dimensions?.filter((item) => encoding.label?.includes(item.id)) || []\n : showDimension\n ? advancedVSeed.dimensions!.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseed.measures?.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 if (result.label) {\n ;(result.label as any).formatMethod = (_: unknown, datum: Datum) => {\n // TreeMap returns a nested structure where `datum` is an array of children.\n // We need to find the specific data item that matches the current node's name.\n // The current node's name is usually available in the top-level datum object (which is `datum` here).\n // However, VChart's TreeMap datum structure is a bit complex.\n // Based on the user provided example:\n // datum: { name: \"Stapler\", datum: [...], ... }\n\n const nodeName = datum.name\n const dataArray = datum.datum as any[]\n\n if (!dataArray || !Array.isArray(dataArray)) {\n return ''\n }\n\n // Helper to find the matching data node recursively\n const findDataNode = (nodes: any[], name: string): any => {\n for (const node of nodes) {\n if (node.name === name) {\n return node\n }\n if (node.children) {\n const found = findDataNode(node.children, name)\n if (found) return found\n }\n }\n return null\n }\n\n // The structure seems to be that `datum` (the array) contains the root(s) of the hierarchy relevant to this node?\n // Or simply the data array we passed in.\n // Let's try to find the node with the matching name.\n const realDatum = findDataNode(dataArray, nodeName as string)\n\n if (!realDatum) {\n return ''\n }\n\n const resultText: string[] = []\n\n // 1. Dimension Labels\n const dimLabels = labelDims\n .map((item: Dimension) => {\n const id = item.id\n // Try to get from realDatum (it has fields attached in datasetHierarchy.ts)\n // or fallback to __OriginalData__\n return (realDatum[id] ?? realDatum.__OriginalData__?.[id]) as number | string\n })\n .filter((v) => v !== undefined && v !== null && v !== '')\n\n resultText.push(...(dimLabels as string[]))\n\n // 2. Measure Labels (from label encoding)\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(\n (realDatum[item.id] ?? realDatum.__OriginalData__?.[item.id]) as number | string,\n item,\n autoFormat,\n numFormat,\n ),\n )\n resultText.push(...meaLabels)\n\n // 3. Value and Percent (default/implicit)\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n // The measure ID might be in __MeaId__ or we look it up from the datum\n const currentMeasureId = (realDatum[measureId] ?? realDatum.__MeaId__) as string\n const measure = findMeasureById(advancedVSeed.measures!, currentMeasureId)\n\n if (measure) {\n const val = (realDatum[measureValue] ?? realDatum.__MeaValue__ ?? realDatum.value) as number | string\n\n const measureValueLabel = generateMeasureValue(val, measure, autoFormat, numFormat)\n\n if (showValue) {\n resultText.push(measureValueLabel)\n }\n if (showValuePercent) {\n // For TreeMap, percentage usually implies % of parent or total.\n // If we have statistics.sum (total), we can calculate it.\n if (statistics && isNumber(statistics.sum)) {\n resultText.push(generateMeasurePercent(val, statistics.sum, percentFormatter))\n }\n }\n }\n })\n\n if (wrap) {\n return resultText\n }\n return resultText.join(' ')\n }\n }\n\n return result\n}\n"],"names":["labelTreeMapLeaf","spec","context","result","commonLabel","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfoList","label","showValue","showValuePercent","showDimension","autoFormat","numFormat","wrap","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","merge","percentFormatter","createFormatter","_","datum","nodeName","dataArray","Array","findDataNode","nodes","name","node","found","realDatum","resultText","dimLabels","id","v","meaLabels","generateMeasureValue","foldInfo","measureId","measureValue","statistics","currentMeasureId","measure","findMeasureById","val","measureValueLabel","isNumber","generateMeasurePercent"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/labelTreeMapLeaf.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/labelTreeMapLeaf.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByDimension, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimension, FoldInfo, Label, Measure, NumFormat, VChartSpecPipe } from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport { label as commonLabel, generateMeasurePercent, generateMeasureValue } from './label'\n\nexport const labelTreeMapLeaf: VChartSpecPipe = (spec, context) => {\n const result = commonLabel(spec, context) 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 foldInfoList = [datasetReshapeInfo[0].foldInfo as FoldInfo]\n\n const { label } = baseConfig\n if (!label.enable) {\n return result\n }\n\n const { showValue, showValuePercent, showDimension, autoFormat, numFormat = {}, wrap } = label\n\n const hasDimLabelEncoding = vseed.dimensions?.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseed.dimensions?.filter((item) => encoding.label?.includes(item.id)) || []\n : showDimension\n ? advancedVSeed.dimensions!.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseed.measures?.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 if (result.label) {\n ;(result.label as any).formatMethod = (_: unknown, datum: Datum) => {\n // TreeMap returns a nested structure where `datum` is an array of children.\n // We need to find the specific data item that matches the current node's name.\n // The current node's name is usually available in the top-level datum object (which is `datum` here).\n // However, VChart's TreeMap datum structure is a bit complex.\n // Based on the user provided example:\n // datum: { name: \"Stapler\", datum: [...], ... }\n\n const nodeName = datum.name\n const dataArray = datum.datum as any[]\n\n if (!dataArray || !Array.isArray(dataArray)) {\n return ''\n }\n\n // Helper to find the matching data node recursively\n const findDataNode = (nodes: any[], name: string): any => {\n for (const node of nodes) {\n if (node.name === name) {\n return node\n }\n if (node.children) {\n const found = findDataNode(node.children, name)\n if (found) return found\n }\n }\n return null\n }\n\n // The structure seems to be that `datum` (the array) contains the root(s) of the hierarchy relevant to this node?\n // Or simply the data array we passed in.\n // Let's try to find the node with the matching name.\n const realDatum = findDataNode(dataArray, nodeName as string)\n\n if (!realDatum) {\n return ''\n }\n\n const resultText: string[] = []\n\n // 1. Dimension Labels\n const dimLabels = labelDims\n .map((item: Dimension) => {\n const id = item.id\n const rawValue = (realDatum[id] ?? realDatum.__OriginalData__?.[id]) as number | string\n const formatter = createFormatterByDimension(item, advancedVSeed.locale)\n return formatter(rawValue)\n })\n .filter((v) => v !== undefined && v !== null && v !== '')\n\n resultText.push(...(dimLabels as string[]))\n\n // 2. Measure Labels (from label encoding)\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(\n (realDatum[item.id] ?? realDatum.__OriginalData__?.[item.id]) as number | string,\n item,\n autoFormat,\n numFormat,\n ),\n )\n resultText.push(...meaLabels)\n\n // 3. Value and Percent (default/implicit)\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n // The measure ID might be in __MeaId__ or we look it up from the datum\n const currentMeasureId = (realDatum[measureId] ?? realDatum.__MeaId__) as string\n const measure = findMeasureById(advancedVSeed.measures!, currentMeasureId)\n\n if (measure) {\n const val = (realDatum[measureValue] ?? realDatum.__MeaValue__ ?? realDatum.value) as number | string\n\n const measureValueLabel = generateMeasureValue(val, measure, autoFormat, numFormat)\n\n if (showValue) {\n resultText.push(measureValueLabel)\n }\n if (showValuePercent) {\n // For TreeMap, percentage usually implies % of parent or total.\n // If we have statistics.sum (total), we can calculate it.\n if (statistics && isNumber(statistics.sum)) {\n resultText.push(generateMeasurePercent(val, statistics.sum, percentFormatter))\n }\n }\n }\n })\n\n if (wrap) {\n return resultText\n }\n return resultText.join(' ')\n }\n }\n\n return result\n}\n"],"names":["labelTreeMapLeaf","spec","context","result","commonLabel","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfoList","label","showValue","showValuePercent","showDimension","autoFormat","numFormat","wrap","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","merge","percentFormatter","createFormatter","_","datum","nodeName","dataArray","Array","findDataNode","nodes","name","node","found","realDatum","resultText","dimLabels","id","rawValue","formatter","createFormatterByDimension","v","meaLabels","generateMeasureValue","foldInfo","measureId","measureValue","statistics","currentMeasureId","measure","findMeasureById","val","measureValueLabel","isNumber","generateMeasurePercent"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { FoldXMeasureId } from "../../../../../dataReshape/index.js";
2
+ import { createFormatterByDimension } from "../../../../utils/index.js";
2
3
  const pivotColumnDimensions = (spec, context)=>{
3
4
  const result = {
4
5
  ...spec
@@ -17,6 +18,10 @@ const pivotColumnDimensions = (spec, context)=>{
17
18
  const measure = measures.find((m)=>m.id === title);
18
19
  return measure ? measure.alias ?? measure.id : title;
19
20
  };
21
+ else if (dim.timeFormat) {
22
+ const formatter = createFormatterByDimension(dim, advancedVSeed.locale);
23
+ baseConfig.headerFormat = (value)=>formatter(value);
24
+ }
20
25
  return baseConfig;
21
26
  });
22
27
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.ts"],"sourcesContent":["import type { PivotChartConstructorOptions } from '@visactor/vtable'\nimport { FoldXMeasureId } from 'src/dataReshape'\nimport type { Dimensions, PivotChartSpecPipe } from 'src/types'\n\nexport const pivotColumnDimensions: PivotChartSpecPipe = (spec, context): Partial<PivotChartConstructorOptions> => {\n const result = { ...spec } as PivotChartConstructorOptions\n const { advancedVSeed } = context\n const dimensions = advancedVSeed.dimensions as Dimensions\n const measures = advancedVSeed.measures ?? []\n\n if (!dimensions) {\n return result\n }\n const columnDimensions = dimensions.filter((dim) => dim.encoding === 'column')\n const columns = columnDimensions.map((dim) => {\n const baseConfig: any = {\n dimensionKey: dim.id,\n title: dim.alias ?? dim.id,\n }\n\n if (dim.id === FoldXMeasureId) {\n baseConfig.headerFormat = (title: string) => {\n const measure = measures.find((m) => m.id === title)\n\n return measure ? (measure.alias ?? measure.id) : title\n }\n }\n\n return baseConfig\n }) as unknown\n\n return {\n ...result,\n columns: columns,\n } as Partial<PivotChartConstructorOptions>\n}\n"],"names":["pivotColumnDimensions","spec","context","result","advancedVSeed","dimensions","measures","columnDimensions","dim","columns","baseConfig","FoldXMeasureId","title","measure","m"],"mappings":";AAIO,MAAMA,wBAA4C,CAACC,MAAMC;IAC9D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAMG,aAAaD,cAAc,UAAU;IAC3C,MAAME,WAAWF,cAAc,QAAQ,IAAI,EAAE;IAE7C,IAAI,CAACC,YACH,OAAOF;IAET,MAAMI,mBAAmBF,WAAW,MAAM,CAAC,CAACG,MAAQA,AAAiB,aAAjBA,IAAI,QAAQ;IAChE,MAAMC,UAAUF,iBAAiB,GAAG,CAAC,CAACC;QACpC,MAAME,aAAkB;YACtB,cAAcF,IAAI,EAAE;YACpB,OAAOA,IAAI,KAAK,IAAIA,IAAI,EAAE;QAC5B;QAEA,IAAIA,IAAI,EAAE,KAAKG,gBACbD,WAAW,YAAY,GAAG,CAACE;YACzB,MAAMC,UAAUP,SAAS,IAAI,CAAC,CAACQ,IAAMA,EAAE,EAAE,KAAKF;YAE9C,OAAOC,UAAWA,QAAQ,KAAK,IAAIA,QAAQ,EAAE,GAAID;QACnD;QAGF,OAAOF;IACT;IAEA,OAAO;QACL,GAAGP,MAAM;QACT,SAASM;IACX;AACF"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/pivotChart/pivotColumnDimensions.ts"],"sourcesContent":["import type { PivotChartConstructorOptions } from '@visactor/vtable'\nimport { FoldXMeasureId } from 'src/dataReshape'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\nimport type { Dimensions, PivotChartSpecPipe } from 'src/types'\n\nexport const pivotColumnDimensions: PivotChartSpecPipe = (spec, context): Partial<PivotChartConstructorOptions> => {\n const result = { ...spec } as PivotChartConstructorOptions\n const { advancedVSeed } = context\n const dimensions = advancedVSeed.dimensions as Dimensions\n const measures = advancedVSeed.measures ?? []\n\n if (!dimensions) {\n return result\n }\n const columnDimensions = dimensions.filter((dim) => dim.encoding === 'column')\n const columns = columnDimensions.map((dim) => {\n const baseConfig: any = {\n dimensionKey: dim.id,\n title: dim.alias ?? dim.id,\n }\n\n if (dim.id === FoldXMeasureId) {\n baseConfig.headerFormat = (title: string) => {\n const measure = measures.find((m) => m.id === title)\n\n return measure ? (measure.alias ?? measure.id) : title\n }\n } else if (dim.timeFormat) {\n const formatter = createFormatterByDimension(dim, advancedVSeed.locale)\n baseConfig.headerFormat = (value: string | number) => formatter(value)\n }\n\n return baseConfig\n }) as unknown\n\n return {\n ...result,\n columns: columns,\n } as Partial<PivotChartConstructorOptions>\n}\n"],"names":["pivotColumnDimensions","spec","context","result","advancedVSeed","dimensions","measures","columnDimensions","dim","columns","baseConfig","FoldXMeasureId","title","measure","m","formatter","createFormatterByDimension","value"],"mappings":";;AAKO,MAAMA,wBAA4C,CAACC,MAAMC;IAC9D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAMG,aAAaD,cAAc,UAAU;IAC3C,MAAME,WAAWF,cAAc,QAAQ,IAAI,EAAE;IAE7C,IAAI,CAACC,YACH,OAAOF;IAET,MAAMI,mBAAmBF,WAAW,MAAM,CAAC,CAACG,MAAQA,AAAiB,aAAjBA,IAAI,QAAQ;IAChE,MAAMC,UAAUF,iBAAiB,GAAG,CAAC,CAACC;QACpC,MAAME,aAAkB;YACtB,cAAcF,IAAI,EAAE;YACpB,OAAOA,IAAI,KAAK,IAAIA,IAAI,EAAE;QAC5B;QAEA,IAAIA,IAAI,EAAE,KAAKG,gBACbD,WAAW,YAAY,GAAG,CAACE;YACzB,MAAMC,UAAUP,SAAS,IAAI,CAAC,CAACQ,IAAMA,EAAE,EAAE,KAAKF;YAE9C,OAAOC,UAAWA,QAAQ,KAAK,IAAIA,QAAQ,EAAE,GAAID;QACnD;aACK,IAAIJ,IAAI,UAAU,EAAE;YACzB,MAAMO,YAAYC,2BAA2BR,KAAKJ,cAAc,MAAM;YACtEM,WAAW,YAAY,GAAG,CAACO,QAA2BF,UAAUE;QAClE;QAEA,OAAOP;IACT;IAEA,OAAO;QACL,GAAGP,MAAM;QACT,SAASM;IACX;AACF"}
@@ -1,4 +1,5 @@
1
1
  import { FoldYMeasureId } from "../../../../../dataReshape/constant.js";
2
+ import { createFormatterByDimension } from "../../../../utils/index.js";
2
3
  const pivotRowDimensions = (spec, context)=>{
3
4
  const result = {
4
5
  ...spec
@@ -17,6 +18,10 @@ const pivotRowDimensions = (spec, context)=>{
17
18
  const measure = measures.find((m)=>m.id === title);
18
19
  return measure ? measure.alias ?? measure.id : title;
19
20
  };
21
+ else if (dim.timeFormat) {
22
+ const formatter = createFormatterByDimension(dim, advancedVSeed.locale);
23
+ baseConfig.headerFormat = (value)=>formatter(value);
24
+ }
20
25
  return baseConfig;
21
26
  });
22
27
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.ts"],"sourcesContent":["import type { PivotChartConstructorOptions } from '@visactor/vtable'\nimport { FoldYMeasureId } from 'src/dataReshape/constant'\nimport type { Dimensions, PivotChartSpecPipe } from 'src/types'\n\nexport const pivotRowDimensions: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec } as PivotChartConstructorOptions\n const { advancedVSeed } = context\n const dimensions = advancedVSeed.dimensions as Dimensions\n const measures = advancedVSeed.measures ?? []\n if (!dimensions) {\n return result\n }\n const rowDimensions = dimensions.filter((dim) => dim.encoding === 'row')\n const rows = rowDimensions.map((dim) => {\n const baseConfig: any = {\n dimensionKey: dim.id,\n title: dim.alias ?? dim.id,\n }\n\n if (dim.id === FoldYMeasureId) {\n baseConfig.headerFormat = (title: string) => {\n const measure = measures.find((m) => m.id === title)\n\n return measure ? (measure.alias ?? measure.id) : title\n }\n }\n\n return baseConfig\n }) as unknown\n return {\n ...result,\n rows: rows,\n } as Partial<PivotChartConstructorOptions>\n}\n"],"names":["pivotRowDimensions","spec","context","result","advancedVSeed","dimensions","measures","rowDimensions","dim","rows","baseConfig","FoldYMeasureId","title","measure","m"],"mappings":";AAIO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAMG,aAAaD,cAAc,UAAU;IAC3C,MAAME,WAAWF,cAAc,QAAQ,IAAI,EAAE;IAC7C,IAAI,CAACC,YACH,OAAOF;IAET,MAAMI,gBAAgBF,WAAW,MAAM,CAAC,CAACG,MAAQA,AAAiB,UAAjBA,IAAI,QAAQ;IAC7D,MAAMC,OAAOF,cAAc,GAAG,CAAC,CAACC;QAC9B,MAAME,aAAkB;YACtB,cAAcF,IAAI,EAAE;YACpB,OAAOA,IAAI,KAAK,IAAIA,IAAI,EAAE;QAC5B;QAEA,IAAIA,IAAI,EAAE,KAAKG,gBACbD,WAAW,YAAY,GAAG,CAACE;YACzB,MAAMC,UAAUP,SAAS,IAAI,CAAC,CAACQ,IAAMA,EAAE,EAAE,KAAKF;YAE9C,OAAOC,UAAWA,QAAQ,KAAK,IAAIA,QAAQ,EAAE,GAAID;QACnD;QAGF,OAAOF;IACT;IACA,OAAO;QACL,GAAGP,MAAM;QACT,MAAMM;IACR;AACF"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/pivotChart/pivotRowDimensions.ts"],"sourcesContent":["import type { PivotChartConstructorOptions } from '@visactor/vtable'\nimport { FoldYMeasureId } from 'src/dataReshape/constant'\nimport { createFormatterByDimension } from 'src/pipeline/utils'\nimport type { Dimensions, PivotChartSpecPipe } from 'src/types'\n\nexport const pivotRowDimensions: PivotChartSpecPipe = (spec, context) => {\n const result = { ...spec } as PivotChartConstructorOptions\n const { advancedVSeed } = context\n const dimensions = advancedVSeed.dimensions as Dimensions\n const measures = advancedVSeed.measures ?? []\n if (!dimensions) {\n return result\n }\n const rowDimensions = dimensions.filter((dim) => dim.encoding === 'row')\n const rows = rowDimensions.map((dim) => {\n const baseConfig: any = {\n dimensionKey: dim.id,\n title: dim.alias ?? dim.id,\n }\n\n if (dim.id === FoldYMeasureId) {\n baseConfig.headerFormat = (title: string) => {\n const measure = measures.find((m) => m.id === title)\n\n return measure ? (measure.alias ?? measure.id) : title\n }\n } else if (dim.timeFormat) {\n const formatter = createFormatterByDimension(dim, advancedVSeed.locale)\n baseConfig.headerFormat = (value: string | number) => formatter(value)\n }\n\n return baseConfig\n }) as unknown\n return {\n ...result,\n rows: rows,\n } as Partial<PivotChartConstructorOptions>\n}\n"],"names":["pivotRowDimensions","spec","context","result","advancedVSeed","dimensions","measures","rowDimensions","dim","rows","baseConfig","FoldYMeasureId","title","measure","m","formatter","createFormatterByDimension","value"],"mappings":";;AAKO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAMG,aAAaD,cAAc,UAAU;IAC3C,MAAME,WAAWF,cAAc,QAAQ,IAAI,EAAE;IAC7C,IAAI,CAACC,YACH,OAAOF;IAET,MAAMI,gBAAgBF,WAAW,MAAM,CAAC,CAACG,MAAQA,AAAiB,UAAjBA,IAAI,QAAQ;IAC7D,MAAMC,OAAOF,cAAc,GAAG,CAAC,CAACC;QAC9B,MAAME,aAAkB;YACtB,cAAcF,IAAI,EAAE;YACpB,OAAOA,IAAI,KAAK,IAAIA,IAAI,EAAE;QAC5B;QAEA,IAAIA,IAAI,EAAE,KAAKG,gBACbD,WAAW,YAAY,GAAG,CAACE;YACzB,MAAMC,UAAUP,SAAS,IAAI,CAAC,CAACQ,IAAMA,EAAE,EAAE,KAAKF;YAE9C,OAAOC,UAAWA,QAAQ,KAAK,IAAIA,QAAQ,EAAE,GAAID;QACnD;aACK,IAAIJ,IAAI,UAAU,EAAE;YACzB,MAAMO,YAAYC,2BAA2BR,KAAKJ,cAAc,MAAM;YACtEM,WAAW,YAAY,GAAG,CAACO,QAA2BF,UAAUE;QAClE;QAEA,OAAOP;IACT;IACA,OAAO;QACL,GAAGP,MAAM;QACT,MAAMM;IACR;AACF"}
@@ -1,5 +1,7 @@
1
- import type { Dimensions, FoldInfo, Measures, VChartSpecPipe, UnfoldInfo } from '../../../../../types';
2
- export declare const tooltip: VChartSpecPipe;
1
+ import type { Dimensions, FoldInfo, Measures, VChartSpecPipe, UnfoldInfo, Locale, Encoding } from '../../../../../types';
2
+ export declare const tooltip: (tooltipOptions?: {
3
+ titleEncoding?: keyof Encoding;
4
+ }) => VChartSpecPipe;
3
5
  export declare const createDimensionContent: (tooltips: string[], colors: string[], measures: Measures | undefined, foldInfo: FoldInfo, unfoldInfo: UnfoldInfo, hasMultiMeasureGroup: boolean) => {
4
6
  visible: boolean;
5
7
  shapeType: string;
@@ -7,7 +9,7 @@ export declare const createDimensionContent: (tooltips: string[], colors: string
7
9
  key: (v: unknown) => string;
8
10
  value: (v: unknown) => string;
9
11
  }[];
10
- export declare const createMarkContent: (tooltip: string[], dimensions: Dimensions | undefined, measures: Measures | undefined, foldInfo: FoldInfo, unfoldInfo: UnfoldInfo) => ({
12
+ export declare const createMarkContent: (tooltip: string[], dimensions: Dimensions | undefined, measures: Measures | undefined, foldInfo: FoldInfo, unfoldInfo: UnfoldInfo, locale?: Locale) => ({
11
13
  visible: boolean;
12
14
  hasShape: boolean;
13
15
  shapeType: string;
@@ -1,39 +1,57 @@
1
1
  import { pipe, unique, uniqueBy } from "remeda";
2
- import { createFormatterByMeasure, findMeasureById } from "../../../../utils/index.js";
3
- import { MeasureId, MeasureName, ORIGINAL_DATA } from "../../../../../dataReshape/index.js";
2
+ import { MeasureId, MeasureName, ORIGINAL_DATA, Separator } from "../../../../../dataReshape/index.js";
3
+ import { createFormatterByDimension, createFormatterByMeasure, findMeasureById } from "../../../../utils/index.js";
4
4
  import { getTooltipStyle } from "./tooltipStyle.js";
5
5
  import { updateTooltipElement } from "./tooltipElement.js";
6
- const tooltip_tooltip = (spec, context)=>{
7
- const result = {
8
- ...spec
9
- };
10
- const { advancedVSeed, vseed } = context;
11
- const { measures = [], datasetReshapeInfo, chartType, dimensions = [], encoding, reshapeMeasures = [] } = advancedVSeed;
12
- const baseConfig = advancedVSeed.config[chartType];
13
- const { tooltip = {
14
- enable: true
15
- } } = baseConfig;
16
- const { enable = true } = tooltip;
17
- const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
18
- result.tooltip = {
19
- style: getTooltipStyle(tooltip),
20
- visible: !!enable,
21
- mark: {
22
- title: {
23
- visible: false
6
+ const tooltip_tooltip = (tooltipOptions)=>(spec, context)=>{
7
+ const result = {
8
+ ...spec
9
+ };
10
+ if (!context) return result;
11
+ const { advancedVSeed, vseed } = context;
12
+ const { measures = [], datasetReshapeInfo, chartType, dimensions = [], encoding, reshapeMeasures = [] } = advancedVSeed;
13
+ const baseConfig = advancedVSeed.config?.[chartType];
14
+ const { tooltip = {
15
+ enable: true
16
+ } } = baseConfig ?? {};
17
+ const { enable = true } = tooltip;
18
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
19
+ const { titleEncoding } = tooltipOptions || {};
20
+ result.tooltip = {
21
+ style: getTooltipStyle(tooltip),
22
+ visible: !!enable,
23
+ group: {
24
+ title: {
25
+ visible: false
26
+ }
24
27
  },
25
- content: createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, foldInfo, unfoldInfo)
26
- },
27
- dimension: {
28
- title: {
29
- visible: true
28
+ mark: {
29
+ title: {
30
+ visible: false
31
+ },
32
+ content: createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, foldInfo, unfoldInfo, advancedVSeed.locale)
30
33
  },
31
- content: createDimensionContent(encoding.tooltip || [], encoding.color || [], measures, foldInfo, unfoldInfo, reshapeMeasures.length > 1)
32
- },
33
- updateElement: updateTooltipElement
34
+ dimension: {
35
+ title: {
36
+ visible: true,
37
+ value: titleEncoding ? (datum)=>{
38
+ if (!datum) return '';
39
+ const dimIds = encoding[titleEncoding] || [];
40
+ const formatted = dimIds.map((id)=>{
41
+ const dim = dimensions.find((item)=>item.id === id);
42
+ if (!dim) return datum?.[id];
43
+ const formatter = createFormatterByDimension(dim, advancedVSeed.locale);
44
+ return formatter(datum?.[id]);
45
+ });
46
+ return formatted.join(Separator);
47
+ } : void 0
48
+ },
49
+ content: createDimensionContent(encoding.tooltip || [], encoding.color || [], measures, foldInfo, unfoldInfo, reshapeMeasures.length > 1)
50
+ },
51
+ updateElement: updateTooltipElement
52
+ };
53
+ return result;
34
54
  };
35
- return result;
36
- };
37
55
  const createDimensionContent = (tooltips, colors, measures = [], foldInfo, unfoldInfo, hasMultiMeasureGroup)=>{
38
56
  const { measureId, measureValue, foldMap } = foldInfo;
39
57
  const { encodingColor } = unfoldInfo;
@@ -74,7 +92,7 @@ const createDimensionContent = (tooltips, colors, measures = [], foldInfo, unfol
74
92
  }
75
93
  ];
76
94
  };
77
- const createMarkContent = (tooltip, dimensions = [], measures = [], foldInfo, unfoldInfo)=>{
95
+ const createMarkContent = (tooltip, dimensions = [], measures = [], foldInfo, unfoldInfo, locale)=>{
78
96
  const dims = pipe(dimensions.filter((item)=>tooltip.includes(item.id)), uniqueBy((item)=>item.id), uniqueBy((item)=>item.alias));
79
97
  const meas = pipe(measures.filter((item)=>tooltip.includes(item.id)), uniqueBy((item)=>item.id), uniqueBy((item)=>item.alias));
80
98
  const dimContent = dims.map((item)=>({
@@ -88,7 +106,8 @@ const createMarkContent = (tooltip, dimensions = [], measures = [], foldInfo, un
88
106
  },
89
107
  value: (v)=>{
90
108
  const datum = v;
91
- return datum && datum[item.id];
109
+ const formatter = createFormatterByDimension(item, locale);
110
+ return datum ? formatter(datum[item.id]) : '';
92
111
  }
93
112
  }));
94
113
  const meaContent = meas.map((item)=>({