@visactor/vseed 0.1.45 → 0.1.47

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 (165) hide show
  1. package/dist/cjs/index.cjs +3 -3
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/builder/builder/builder.d.ts +86 -14
  4. package/dist/esm/dataReshape/constant.d.ts +2 -2
  5. package/dist/esm/dataReshape/constant.js +3 -3
  6. package/dist/esm/dataReshape/constant.js.map +1 -1
  7. package/dist/esm/i18n/i18n.js +2 -2
  8. package/dist/esm/i18n/i18n.js.map +1 -1
  9. package/dist/esm/i18n/i18nData.d.ts +2 -0
  10. package/dist/esm/i18n/i18nData.js +41 -5
  11. package/dist/esm/i18n/i18nData.js.map +1 -0
  12. package/dist/esm/pipeline/advanced/chart/pipeline/area.js +3 -3
  13. package/dist/esm/pipeline/advanced/chart/pipeline/area.js.map +1 -1
  14. package/dist/esm/pipeline/advanced/chart/pipeline/areaPercent.js +3 -3
  15. package/dist/esm/pipeline/advanced/chart/pipeline/areaPercent.js.map +1 -1
  16. package/dist/esm/pipeline/advanced/chart/pipeline/bar.js +3 -3
  17. package/dist/esm/pipeline/advanced/chart/pipeline/bar.js.map +1 -1
  18. package/dist/esm/pipeline/advanced/chart/pipeline/barParallel.js +3 -3
  19. package/dist/esm/pipeline/advanced/chart/pipeline/barParallel.js.map +1 -1
  20. package/dist/esm/pipeline/advanced/chart/pipeline/barPercent.js +3 -3
  21. package/dist/esm/pipeline/advanced/chart/pipeline/barPercent.js.map +1 -1
  22. package/dist/esm/pipeline/advanced/chart/pipeline/boxplot.js +3 -3
  23. package/dist/esm/pipeline/advanced/chart/pipeline/boxplot.js.map +1 -1
  24. package/dist/esm/pipeline/advanced/chart/pipeline/column.js +3 -3
  25. package/dist/esm/pipeline/advanced/chart/pipeline/column.js.map +1 -1
  26. package/dist/esm/pipeline/advanced/chart/pipeline/columnParallel.js +3 -3
  27. package/dist/esm/pipeline/advanced/chart/pipeline/columnParallel.js.map +1 -1
  28. package/dist/esm/pipeline/advanced/chart/pipeline/columnPercent.js +3 -3
  29. package/dist/esm/pipeline/advanced/chart/pipeline/columnPercent.js.map +1 -1
  30. package/dist/esm/pipeline/advanced/chart/pipeline/donut.js +3 -3
  31. package/dist/esm/pipeline/advanced/chart/pipeline/donut.js.map +1 -1
  32. package/dist/esm/pipeline/advanced/chart/pipeline/dualAxis.js +3 -3
  33. package/dist/esm/pipeline/advanced/chart/pipeline/dualAxis.js.map +1 -1
  34. package/dist/esm/pipeline/advanced/chart/pipeline/funnel.js +3 -3
  35. package/dist/esm/pipeline/advanced/chart/pipeline/funnel.js.map +1 -1
  36. package/dist/esm/pipeline/advanced/chart/pipeline/heatmap.js +3 -3
  37. package/dist/esm/pipeline/advanced/chart/pipeline/heatmap.js.map +1 -1
  38. package/dist/esm/pipeline/advanced/chart/pipeline/histogram.js +3 -3
  39. package/dist/esm/pipeline/advanced/chart/pipeline/histogram.js.map +1 -1
  40. package/dist/esm/pipeline/advanced/chart/pipeline/line.js +3 -3
  41. package/dist/esm/pipeline/advanced/chart/pipeline/line.js.map +1 -1
  42. package/dist/esm/pipeline/advanced/chart/pipeline/pie.js +3 -3
  43. package/dist/esm/pipeline/advanced/chart/pipeline/pie.js.map +1 -1
  44. package/dist/esm/pipeline/advanced/chart/pipeline/radar.js +3 -3
  45. package/dist/esm/pipeline/advanced/chart/pipeline/radar.js.map +1 -1
  46. package/dist/esm/pipeline/advanced/chart/pipeline/rose.js +3 -3
  47. package/dist/esm/pipeline/advanced/chart/pipeline/rose.js.map +1 -1
  48. package/dist/esm/pipeline/advanced/chart/pipeline/roseParallel.js +3 -3
  49. package/dist/esm/pipeline/advanced/chart/pipeline/roseParallel.js.map +1 -1
  50. package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js +3 -3
  51. package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js.map +1 -1
  52. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/index.d.ts +1 -1
  53. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/index.js +1 -1
  54. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/pickDimensionsForReshape.d.ts +2 -0
  55. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/pickDimensionsForReshape.js +14 -0
  56. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/pickDimensionsForReshape.js.map +1 -0
  57. package/dist/esm/pipeline/advanced/chart/pipes/measures/index.d.ts +1 -1
  58. package/dist/esm/pipeline/advanced/chart/pipes/measures/index.js +2 -2
  59. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.d.ts +2 -0
  60. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.js +14 -0
  61. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.js.map +1 -0
  62. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js +35 -29
  63. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js.map +1 -1
  64. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js +3 -1
  65. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js.map +1 -1
  66. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js +3 -1
  67. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js.map +1 -1
  68. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js +5 -3
  69. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js.map +1 -1
  70. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js +3 -1
  71. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js.map +1 -1
  72. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js +33 -28
  73. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js.map +1 -1
  74. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js +3 -1
  75. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js.map +1 -1
  76. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js +3 -5
  77. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js.map +1 -1
  78. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js +3 -1
  79. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js.map +1 -1
  80. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js +3 -1
  81. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js.map +1 -1
  82. package/dist/esm/pipeline/spec/chart/pipeline/boxplot.js +3 -2
  83. package/dist/esm/pipeline/spec/chart/pipeline/boxplot.js.map +1 -1
  84. package/dist/esm/pipeline/spec/chart/pipeline/histogram.js +3 -3
  85. package/dist/esm/pipeline/spec/chart/pipeline/histogram.js.map +1 -1
  86. package/dist/esm/pipeline/spec/chart/pipes/axes/xLinear.js +11 -3
  87. package/dist/esm/pipeline/spec/chart/pipes/axes/xLinear.js.map +1 -1
  88. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinear.js +11 -3
  89. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinear.js.map +1 -1
  90. package/dist/esm/pipeline/spec/chart/pipes/crosshair/histogramCrosshair.d.ts +2 -0
  91. package/dist/esm/pipeline/spec/chart/pipes/crosshair/histogramCrosshair.js +27 -0
  92. package/dist/esm/pipeline/spec/chart/pipes/crosshair/histogramCrosshair.js.map +1 -0
  93. package/dist/esm/pipeline/spec/chart/pipes/crosshair/index.d.ts +1 -0
  94. package/dist/esm/pipeline/spec/chart/pipes/crosshair/index.js +2 -1
  95. package/dist/esm/pipeline/spec/chart/pipes/init/boxplot.js +3 -3
  96. package/dist/esm/pipeline/spec/chart/pipes/init/boxplot.js.map +1 -1
  97. package/dist/esm/pipeline/spec/chart/pipes/legend/boxLegend.d.ts +2 -0
  98. package/dist/esm/pipeline/spec/chart/pipes/legend/boxLegend.js +15 -0
  99. package/dist/esm/pipeline/spec/chart/pipes/legend/boxLegend.js.map +1 -0
  100. package/dist/esm/pipeline/spec/chart/pipes/legend/colorLegend.js +3 -4
  101. package/dist/esm/pipeline/spec/chart/pipes/legend/colorLegend.js.map +1 -1
  102. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js +31 -1
  103. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js.map +1 -1
  104. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.js +5 -1
  105. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/linearRegressionLine.js.map +1 -1
  106. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.d.ts +1 -1
  107. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js +5 -1
  108. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js.map +1 -1
  109. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js +14 -5
  110. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js.map +1 -1
  111. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js +6 -4
  112. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js.map +1 -1
  113. package/dist/esm/pipeline/spec/chart/utils/histogram.d.ts +2 -0
  114. package/dist/esm/pipeline/spec/chart/utils/histogram.js +12 -0
  115. package/dist/esm/pipeline/spec/chart/utils/histogram.js.map +1 -0
  116. package/dist/esm/pipeline/utils/measures/delete.d.ts +2 -2
  117. package/dist/esm/pipeline/utils/measures/delete.js +7 -3
  118. package/dist/esm/pipeline/utils/measures/delete.js.map +1 -1
  119. package/dist/esm/pipeline/utils/tree/traverse.d.ts +1 -0
  120. package/dist/esm/pipeline/utils/tree/traverse.js +12 -1
  121. package/dist/esm/pipeline/utils/tree/traverse.js.map +1 -1
  122. package/dist/esm/types/advancedVSeed.d.ts +116 -3
  123. package/dist/esm/types/advancedVSeed.js +2 -0
  124. package/dist/esm/types/advancedVSeed.js.map +1 -1
  125. package/dist/esm/types/chartType/area/zArea.d.ts +12 -3
  126. package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +12 -3
  127. package/dist/esm/types/chartType/bar/zBar.d.ts +12 -3
  128. package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +12 -3
  129. package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +12 -3
  130. package/dist/esm/types/chartType/boxplot/zBoxplot.d.ts +12 -3
  131. package/dist/esm/types/chartType/column/zColumn.d.ts +12 -3
  132. package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +12 -3
  133. package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +12 -3
  134. package/dist/esm/types/chartType/donut/zDonut.d.ts +12 -3
  135. package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +42 -15
  136. package/dist/esm/types/chartType/funnel/zFunnel.d.ts +12 -3
  137. package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +12 -3
  138. package/dist/esm/types/chartType/histogram/zHistogram.d.ts +12 -3
  139. package/dist/esm/types/chartType/line/zLine.d.ts +12 -3
  140. package/dist/esm/types/chartType/pie/zPie.d.ts +12 -3
  141. package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +12 -3
  142. package/dist/esm/types/chartType/radar/zRadar.d.ts +12 -3
  143. package/dist/esm/types/chartType/rose/zRose.d.ts +12 -3
  144. package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +12 -3
  145. package/dist/esm/types/chartType/scatter/zScatter.d.ts +42 -15
  146. package/dist/esm/types/chartType/table/zTable.d.ts +12 -3
  147. package/dist/esm/types/properties/measures/zDualMeasures.d.ts +60 -24
  148. package/dist/esm/types/properties/measures/zMeasures.d.ts +36 -9
  149. package/dist/esm/types/properties/measures/zMeasures.js +13 -4
  150. package/dist/esm/types/properties/measures/zMeasures.js.map +1 -1
  151. package/dist/esm/types/properties/measures/zScatterMeasures.d.ts +60 -24
  152. package/dist/esm/types/properties/regressionLine/linearRegressionLine.d.ts +5 -0
  153. package/dist/esm/types/properties/regressionLine/logisticRegressionLine.d.ts +5 -0
  154. package/dist/esm/types/properties/regressionLine/lowessRegressionLine.d.ts +5 -0
  155. package/dist/esm/types/properties/regressionLine/polynomialRegressionLine.d.ts +5 -0
  156. package/dist/esm/types/zVseed.d.ts +324 -90
  157. package/dist/umd/index.js +349 -197
  158. package/dist/umd/index.js.map +1 -1
  159. package/package.json +1 -1
  160. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/deleteTooltipAndLabelDimensions.d.ts +0 -2
  161. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/deleteTooltipAndLabelDimensions.js +0 -12
  162. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/deleteTooltipAndLabelDimensions.js.map +0 -1
  163. package/dist/esm/pipeline/advanced/chart/pipes/measures/deleteEncodingForMeasure.d.ts +0 -2
  164. package/dist/esm/pipeline/advanced/chart/pipes/measures/deleteEncodingForMeasure.js +0 -12
  165. package/dist/esm/pipeline/advanced/chart/pipes/measures/deleteEncodingForMeasure.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltip.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltip.ts"],"sourcesContent":["import { pipe, uniqueBy } from 'remeda'\nimport { createFormatterByMeasure, findAllMeasures, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimensions, FoldInfo, Measures, VChartSpecPipe, TooltipConfig, UnfoldInfo } from 'src/types'\nimport { ORIGINAL_DATA } from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\n\nexport const tooltip: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed, vseed } = context\n const { measures, datasetReshapeInfo, chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: TooltipConfig }\n const { tooltip = { enable: true } } = baseConfig\n const { enable = true } = tooltip\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0] as unknown as {\n foldInfo: FoldInfo\n unfoldInfo: UnfoldInfo\n }\n\n result.tooltip = {\n style: getTooltipStyle(tooltip),\n visible: !!enable,\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(\n encoding.tooltip || [],\n dimensions,\n findAllMeasures(vseed.measures),\n foldInfo,\n unfoldInfo,\n ),\n },\n dimension: {\n title: {\n visible: true,\n },\n content: createDimensionContent(dimensions, measures, foldInfo, unfoldInfo),\n },\n }\n return result\n}\n\nexport const createDimensionContent = (\n dimensions: Dimensions,\n measures: Measures,\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n) => {\n const { measureId, measureValue, foldMap } = foldInfo\n const { encodingColor } = unfoldInfo\n\n return [\n {\n visible: true,\n shapeType: 'rectRound',\n hasShape: true,\n key: dimensions.some((d) => d.encoding === 'color')\n ? (v: unknown) => {\n const datum = v as Datum\n const key = (datum && (datum[encodingColor] as string)) || ''\n return unfoldInfo.colorIdMap[key].alias ?? key\n }\n : Object.values(foldMap)[0],\n value: (v: unknown) => {\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const value = datum[measureValue] as string | number\n const id = datum[measureId] as string\n const measure = findMeasureById(measures, id)\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n },\n ]\n}\n\nexport const createMarkContent = (\n tooltip: string[],\n dimensions: Dimensions,\n measures: Measures,\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item) => item.id),\n uniqueBy((item) => item.alias),\n )\n const meas = pipe(\n measures.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item) => item.id),\n uniqueBy((item) => item.alias),\n )\n\n const dimContent = dims.map((item) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (v: unknown) => {\n const datum = v as Datum\n if (item.alias || item.id) {\n return item.alias || item.id\n }\n return datum && (datum[item.id] as string)\n },\n value: (v: unknown) => {\n const datum = v as Datum\n return datum && (datum[item.id] as string)\n },\n }))\n\n const meaContent = meas.map((item) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias || item.id,\n value: (v: unknown) => {\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const id = item.id\n if (!datum || !datum[ORIGINAL_DATA] || !datum[ORIGINAL_DATA]) {\n return ''\n }\n const originalData = datum[ORIGINAL_DATA] as Datum\n const value = originalData[id] as string | number\n const measure = findMeasureById(measures, id)\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n }))\n\n const defaultContent = {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (v: unknown) => {\n const { measureName } = foldInfo\n const { encodingColor: colorName } = unfoldInfo\n\n const datum = v as Datum\n return (datum && (datum[measureName || colorName] as string)) || ''\n },\n value: (v: unknown) => {\n const { measureId, measureValue } = foldInfo\n\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const value = datum[measureValue] as string | number\n const id = datum[measureId] as string\n const measure = findMeasureById(measures, id)\n if (!measure) {\n return String(value)\n }\n\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n }\n\n return [...dimContent, defaultContent, ...meaContent]\n}\n"],"names":["tooltip","spec","context","result","advancedVSeed","vseed","measures","datasetReshapeInfo","chartType","dimensions","encoding","baseConfig","enable","foldInfo","unfoldInfo","getTooltipStyle","createMarkContent","findAllMeasures","createDimensionContent","measureId","measureValue","foldMap","encodingColor","d","v","datum","key","Object","value","id","measure","findMeasureById","formatter","createFormatterByMeasure","dims","pipe","item","uniqueBy","meas","dimContent","meaContent","ORIGINAL_DATA","originalData","defaultContent","measureName","colorName","String"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltip.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltip.ts"],"sourcesContent":["import { pipe, uniqueBy } from 'remeda'\nimport { createFormatterByMeasure, findAllMeasures, findMeasureById } from '../../../../utils'\nimport type { Datum, Dimensions, FoldInfo, Measures, VChartSpecPipe, TooltipConfig, UnfoldInfo } from 'src/types'\nimport { ORIGINAL_DATA } from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\n\nexport const tooltip: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed, vseed } = context\n const { measures, datasetReshapeInfo, chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: TooltipConfig }\n const { tooltip = { enable: true } } = baseConfig\n const { enable = true } = tooltip\n const { foldInfo, unfoldInfo } = datasetReshapeInfo[0] as unknown as {\n foldInfo: FoldInfo\n unfoldInfo: UnfoldInfo\n }\n\n result.tooltip = {\n style: getTooltipStyle(tooltip),\n visible: !!enable,\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(\n encoding.tooltip || [],\n dimensions,\n findAllMeasures(vseed.measures),\n foldInfo,\n unfoldInfo,\n ),\n },\n dimension: {\n title: {\n visible: true,\n },\n content: createDimensionContent(dimensions, measures, foldInfo, unfoldInfo),\n },\n }\n return result\n}\n\nexport const createDimensionContent = (\n dimensions: Dimensions,\n measures: Measures,\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n) => {\n const { measureId, measureValue, foldMap } = foldInfo\n const { encodingColor } = unfoldInfo\n\n return [\n {\n visible: true,\n shapeType: 'rectRound',\n hasShape: true,\n key: dimensions.some((d) => d.encoding === 'color')\n ? (v: unknown) => {\n const datum = v as Datum\n const key = (datum && (datum[encodingColor] as string)) || ''\n return unfoldInfo.colorIdMap[key].alias ?? key\n }\n : (v: unknown) => {\n const datum = v as Datum\n const key = (datum && (datum[measureId] as string)) || ''\n return foldMap[key] ?? key\n },\n value: (v: unknown) => {\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const value = datum[measureValue] as string | number\n const id = datum[measureId] as string\n const measure = findMeasureById(measures, id)\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n },\n ]\n}\n\nexport const createMarkContent = (\n tooltip: string[],\n dimensions: Dimensions,\n measures: Measures,\n foldInfo: FoldInfo,\n unfoldInfo: UnfoldInfo,\n) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item) => item.id),\n uniqueBy((item) => item.alias),\n )\n const meas = pipe(\n measures.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item) => item.id),\n uniqueBy((item) => item.alias),\n )\n\n const dimContent = dims.map((item) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (v: unknown) => {\n const datum = v as Datum\n if (item.alias || item.id) {\n return item.alias || item.id\n }\n return datum && (datum[item.id] as string)\n },\n value: (v: unknown) => {\n const datum = v as Datum\n return datum && (datum[item.id] as string)\n },\n }))\n\n const meaContent = meas.map((item) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias || item.id,\n value: (v: unknown) => {\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const id = item.id\n if (!datum || !datum[ORIGINAL_DATA] || !datum[ORIGINAL_DATA]) {\n return ''\n }\n const originalData = datum[ORIGINAL_DATA] as Datum\n const value = originalData[id] as string | number\n const measure = findMeasureById(measures, id)\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n }))\n\n const defaultContent = {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (v: unknown) => {\n const { measureName } = foldInfo\n const { encodingColor: colorName } = unfoldInfo\n\n const datum = v as Datum\n return (datum && (datum[measureName || colorName] as string)) || ''\n },\n value: (v: unknown) => {\n const { measureId, measureValue } = foldInfo\n\n const datum = v as Datum\n if (!datum) {\n return ''\n }\n const value = datum[measureValue] as string | number\n const id = datum[measureId] as string\n const measure = findMeasureById(measures, id)\n if (!measure) {\n return String(value)\n }\n\n const formatter = createFormatterByMeasure(measure)\n return formatter(value)\n },\n }\n\n return [...dimContent, defaultContent, ...meaContent]\n}\n"],"names":["tooltip","spec","context","result","advancedVSeed","vseed","measures","datasetReshapeInfo","chartType","dimensions","encoding","baseConfig","enable","foldInfo","unfoldInfo","getTooltipStyle","createMarkContent","findAllMeasures","createDimensionContent","measureId","measureValue","foldMap","encodingColor","d","v","datum","key","value","id","measure","findMeasureById","formatter","createFormatterByMeasure","dims","pipe","item","uniqueBy","meas","dimContent","meaContent","ORIGINAL_DATA","originalData","defaultContent","measureName","colorName","String"],"mappings":"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"}
@@ -1,14 +1,23 @@
1
1
  import { isNullish, pipe, uniqueBy } from "remeda";
2
2
  import { createFormatterByMeasure, findAllMeasures } from "../../../../utils/index.js";
3
- import { ColorEncoding, MaxMeasureId, MedianMeasureId, MinMeasureId, OutliersMeasureId, Q1MeasureValue, Q3MeasureValue, XEncoding } from "../../../../../dataReshape/index.js";
3
+ import { ColorEncoding, LowerWhisker, MedianMeasureId, OutliersMeasureId, Q1MeasureValue, Q3MeasureValue, UpperWhisker, XEncoding } from "../../../../../dataReshape/index.js";
4
4
  import { getTooltipStyle } from "./tooltipStyle.js";
5
+ import { intl } from "../../../../../i18n/index.js";
5
6
  const boxPlotMeasureKeys = [
6
- MaxMeasureId,
7
+ UpperWhisker,
7
8
  Q3MeasureValue,
8
9
  MedianMeasureId,
9
10
  Q1MeasureValue,
10
- MinMeasureId
11
+ LowerWhisker
11
12
  ];
13
+ const measureAliasMapping = {
14
+ [OutliersMeasureId]: intl.i18n`异常点`,
15
+ [UpperWhisker]: intl.i18n`上边界`,
16
+ [Q3MeasureValue]: intl.i18n`上四分位数`,
17
+ [MedianMeasureId]: intl.i18n`中位数`,
18
+ [Q1MeasureValue]: intl.i18n`下四分位数`,
19
+ [LowerWhisker]: intl.i18n`下边界`
20
+ };
12
21
  const VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE';
13
22
  const tooltipBoxplot = (spec, context)=>{
14
23
  const result = {
@@ -40,7 +49,7 @@ const tooltipBoxplot = (spec, context)=>{
40
49
  const formatter = outerlierMeasure ? createFormatterByMeasure(outerlierMeasure) : defaultFormatter;
41
50
  tooltipItems.push({
42
51
  ...tooltipItems[0],
43
- key: outerlierMeasure?.alias ?? OutliersMeasureId,
52
+ key: outerlierMeasure?.alias ?? measureAliasMapping[OutliersMeasureId],
44
53
  value: formatter(datum?.[VCHART_OUTLIER_KEY])
45
54
  });
46
55
  return tooltipItems;
@@ -52,7 +61,7 @@ const tooltipBoxplot = (spec, context)=>{
52
61
  return {
53
62
  ...entry,
54
63
  value: formatter(datum?.[entry.key]),
55
- key: mea?.alias ?? entry.key
64
+ key: mea?.alias ?? measureAliasMapping[entry?.key] ?? entry.key
56
65
  };
57
66
  }
58
67
  return entry;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.ts"],"sourcesContent":["import { pipe, uniqueBy, isNullish } from 'remeda'\nimport { createFormatterByMeasure, findAllMeasures } from '../../../../utils'\nimport type { Dimension, Dimensions, Encoding, VChartSpecPipe, Tooltip } from 'src/types'\nimport type { Datum, ISpec, ITooltipLinePattern, ITooltipLineActual, TooltipData } from '@visactor/vchart'\nimport {\n ColorEncoding,\n MaxMeasureId,\n MedianMeasureId,\n MinMeasureId,\n OutliersMeasureId,\n Q1MeasureValue,\n Q3MeasureValue,\n XEncoding,\n} from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\n\nconst boxPlotMeasureKeys = [MaxMeasureId, Q3MeasureValue, MedianMeasureId, Q1MeasureValue, MinMeasureId]\nconst VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE'\n\nexport const tooltipBoxplot: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed, vseed } = context\n const { chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: Tooltip }\n const { tooltip = { enable: true } } = baseConfig\n const { enable } = tooltip\n const meas = findAllMeasures(vseed.measures)\n const valueMeasure = meas.find((item) => item.encoding === 'value' || isNullish(item.encoding))\n const defaultFormatter = valueMeasure ? createFormatterByMeasure(valueMeasure) : (v: unknown) => v\n\n result.tooltip = {\n visible: enable,\n style: getTooltipStyle(tooltip),\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding),\n updateContent: (prev: ITooltipLineActual[] | undefined, data: TooltipData | undefined) => {\n const datum = (data as any)?.[0]?.datum?.[0]\n\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n const tooltipItems: ITooltipLineActual[] = (prev ?? []).filter(\n (item: any) => !boxPlotMeasureKeys.includes(item.key as string),\n )\n const outerlierMeasure = meas.find((item) => item.id === OutliersMeasureId)\n const formatter = outerlierMeasure ? createFormatterByMeasure(outerlierMeasure) : defaultFormatter\n\n tooltipItems.push({\n ...(tooltipItems[0] as any),\n key: outerlierMeasure?.alias ?? OutliersMeasureId,\n value: formatter(datum?.[VCHART_OUTLIER_KEY] as number) as string,\n } as ITooltipLineActual)\n\n return tooltipItems\n }\n\n return (prev ?? []).map((entry) => {\n if (boxPlotMeasureKeys.includes((entry as any).key as string)) {\n const mea = meas.find((item) => item.id === (entry as any).key)\n const formatter = mea ? createFormatterByMeasure(mea) : defaultFormatter\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return {\n ...(entry as any),\n value: formatter(datum?.[(entry as any).key] as number) as string,\n key: mea?.alias ?? (entry as any).key,\n }\n }\n\n return entry\n }) as ITooltipLineActual[]\n },\n },\n dimension: {\n visible: false,\n },\n }\n return result as unknown as ISpec\n}\n\nconst createMarkContent = (tooltip: string[], dimensions: Dimensions, encoding: Encoding) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item: Dimension) => item.id),\n uniqueBy((item: Dimension) => item.alias),\n )\n\n const dimContent = dims.map((item: Dimension) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias ?? item.id,\n value: (datum: Datum | undefined) => {\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n if (encoding.color?.includes(item.id)) {\n return datum?.[ColorEncoding] as string\n }\n if (encoding.x?.includes(item.id)) {\n return datum?.[XEncoding] as string\n }\n }\n\n return datum?.[item.id] as string\n },\n }))\n\n const defaultContent = boxPlotMeasureKeys.map((key: string) => {\n return {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key,\n value: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return datum[key] as string | number\n },\n }\n })\n\n return [...dimContent, defaultContent] as ITooltipLinePattern[]\n}\n"],"names":["boxPlotMeasureKeys","MaxMeasureId","Q3MeasureValue","MedianMeasureId","Q1MeasureValue","MinMeasureId","VCHART_OUTLIER_KEY","tooltipBoxplot","spec","context","result","advancedVSeed","vseed","chartType","dimensions","encoding","baseConfig","tooltip","enable","meas","findAllMeasures","valueMeasure","item","isNullish","defaultFormatter","createFormatterByMeasure","v","getTooltipStyle","createMarkContent","prev","data","datum","tooltipItems","outerlierMeasure","OutliersMeasureId","formatter","entry","mea","dims","pipe","uniqueBy","dimContent","ColorEncoding","XEncoding","defaultContent","key"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.ts"],"sourcesContent":["import { pipe, uniqueBy, isNullish } from 'remeda'\nimport { createFormatterByMeasure, findAllMeasures } from '../../../../utils'\nimport type { Dimension, Dimensions, Encoding, VChartSpecPipe, Tooltip } from 'src/types'\nimport type { Datum, ISpec, ITooltipLinePattern, ITooltipLineActual, TooltipData } from '@visactor/vchart'\nimport {\n ColorEncoding,\n LowerWhisker,\n MedianMeasureId,\n OutliersMeasureId,\n Q1MeasureValue,\n Q3MeasureValue,\n UpperWhisker,\n XEncoding,\n} from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\nimport { intl } from 'src/i18n'\n\nconst boxPlotMeasureKeys = [UpperWhisker, Q3MeasureValue, MedianMeasureId, Q1MeasureValue, LowerWhisker]\nconst measureAliasMapping: Record<string, string> = {\n [OutliersMeasureId]: intl.i18n`异常点`,\n [UpperWhisker]: intl.i18n`上边界`,\n [Q3MeasureValue]: intl.i18n`上四分位数`,\n [MedianMeasureId]: intl.i18n`中位数`,\n [Q1MeasureValue]: intl.i18n`下四分位数`,\n [LowerWhisker]: intl.i18n`下边界`,\n}\nconst VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE'\n\nexport const tooltipBoxplot: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed, vseed } = context\n const { chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: Tooltip }\n const { tooltip = { enable: true } } = baseConfig\n const { enable } = tooltip\n const meas = findAllMeasures(vseed.measures)\n const valueMeasure = meas.find((item) => item.encoding === 'value' || isNullish(item.encoding))\n const defaultFormatter = valueMeasure ? createFormatterByMeasure(valueMeasure) : (v: unknown) => v\n\n result.tooltip = {\n visible: enable,\n style: getTooltipStyle(tooltip),\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding),\n updateContent: (prev: ITooltipLineActual[] | undefined, data: TooltipData | undefined) => {\n const datum = (data as any)?.[0]?.datum?.[0]\n\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n const tooltipItems: ITooltipLineActual[] = (prev ?? []).filter(\n (item: any) => !boxPlotMeasureKeys.includes(item.key as string),\n )\n const outerlierMeasure = meas.find((item) => item.id === OutliersMeasureId)\n const formatter = outerlierMeasure ? createFormatterByMeasure(outerlierMeasure) : defaultFormatter\n\n tooltipItems.push({\n ...(tooltipItems[0] as any),\n key: outerlierMeasure?.alias ?? measureAliasMapping[OutliersMeasureId],\n value: formatter(datum?.[VCHART_OUTLIER_KEY] as number) as string,\n } as ITooltipLineActual)\n\n return tooltipItems\n }\n\n return (prev ?? []).map((entry) => {\n if (boxPlotMeasureKeys.includes((entry as any).key as string)) {\n const mea = meas.find((item) => item.id === (entry as any).key)\n const formatter = mea ? createFormatterByMeasure(mea) : defaultFormatter\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return {\n ...(entry as any),\n value: formatter(datum?.[(entry as any).key] as number) as string,\n key: mea?.alias ?? measureAliasMapping[entry?.key as string] ?? (entry as any).key,\n }\n }\n\n return entry\n }) as ITooltipLineActual[]\n },\n },\n dimension: {\n visible: false,\n },\n }\n return result as unknown as ISpec\n}\n\nconst createMarkContent = (tooltip: string[], dimensions: Dimensions, encoding: Encoding) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item: Dimension) => item.id),\n uniqueBy((item: Dimension) => item.alias),\n )\n\n const dimContent = dims.map((item: Dimension) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias ?? item.id,\n value: (datum: Datum | undefined) => {\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n if (encoding.color?.includes(item.id)) {\n return datum?.[ColorEncoding] as string\n }\n if (encoding.x?.includes(item.id)) {\n return datum?.[XEncoding] as string\n }\n }\n\n return datum?.[item.id] as string\n },\n }))\n\n const defaultContent = boxPlotMeasureKeys.map((key: string) => {\n return {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key,\n value: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return datum[key] as string | number\n },\n }\n })\n\n return [...dimContent, defaultContent] as ITooltipLinePattern[]\n}\n"],"names":["boxPlotMeasureKeys","UpperWhisker","Q3MeasureValue","MedianMeasureId","Q1MeasureValue","LowerWhisker","measureAliasMapping","OutliersMeasureId","intl","VCHART_OUTLIER_KEY","tooltipBoxplot","spec","context","result","advancedVSeed","vseed","chartType","dimensions","encoding","baseConfig","tooltip","enable","meas","findAllMeasures","valueMeasure","item","isNullish","defaultFormatter","createFormatterByMeasure","v","getTooltipStyle","createMarkContent","prev","data","datum","tooltipItems","outerlierMeasure","formatter","entry","mea","dims","pipe","uniqueBy","dimContent","ColorEncoding","XEncoding","defaultContent","key"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { isNullish, pipe, uniqueBy } from "remeda";
2
2
  import { BinEndMeasureId, BinStartMeasureId, ColorEncoding, FoldMeasureValue, XEncoding } from "../../../../../dataReshape/index.js";
3
3
  import { getTooltipStyle } from "./tooltipStyle.js";
4
+ import { getDefaultXFormatterOfHistogram } from "../../utils/histogram.js";
4
5
  const VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE';
5
6
  const tooltipHistogram = (spec, context)=>{
6
7
  const result = {
@@ -13,6 +14,7 @@ const tooltipHistogram = (spec, context)=>{
13
14
  enable: true
14
15
  } } = baseConfig;
15
16
  const { enable } = tooltip;
17
+ const defaultXFormatter = getDefaultXFormatterOfHistogram(advancedVSeed);
16
18
  result.tooltip = {
17
19
  style: getTooltipStyle(tooltip),
18
20
  visible: enable,
@@ -20,18 +22,18 @@ const tooltipHistogram = (spec, context)=>{
20
22
  title: {
21
23
  visible: false
22
24
  },
23
- content: createMarkContent(encoding.tooltip || [], dimensions, encoding)
25
+ content: createMarkContent(encoding.tooltip || [], dimensions, encoding, defaultXFormatter)
24
26
  },
25
27
  dimension: {
26
28
  title: {
27
29
  visible: false
28
30
  },
29
- content: createMarkContent(encoding.tooltip || [], dimensions, encoding)
31
+ content: createMarkContent(encoding.tooltip || [], dimensions, encoding, defaultXFormatter)
30
32
  }
31
33
  };
32
34
  return result;
33
35
  };
34
- const createMarkContent = (tooltip, dimensions, encoding)=>{
36
+ const createMarkContent = (tooltip, dimensions, encoding, dimFormatter)=>{
35
37
  const dims = pipe(dimensions.filter((item)=>tooltip.includes(item.id)), uniqueBy((item)=>item.id), uniqueBy((item)=>item.alias));
36
38
  const dimContent = dims.map((item)=>({
37
39
  visible: true,
@@ -53,7 +55,7 @@ const createMarkContent = (tooltip, dimensions, encoding)=>{
53
55
  shapeType: 'rectRound',
54
56
  key: (datum)=>{
55
57
  if (!datum) return '';
56
- return `${datum[BinStartMeasureId]} ~ ${datum[BinEndMeasureId]}`;
58
+ return `[${dimFormatter(+datum[BinStartMeasureId])}, ${dimFormatter(+datum[BinEndMeasureId])})`;
57
59
  },
58
60
  value: (datum)=>{
59
61
  if (!datum) return '';
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.ts"],"sourcesContent":["import { pipe, uniqueBy, isNullish } from 'remeda'\nimport type { Dimension, Dimensions, Encoding, VChartSpecPipe, Tooltip } from 'src/types'\nimport type { Datum, ISpec, ITooltipLinePattern } from '@visactor/vchart'\nimport { BinEndMeasureId, BinStartMeasureId, ColorEncoding, FoldMeasureValue, XEncoding } from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\n\nconst VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE'\n\nexport const tooltipHistogram: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: Tooltip }\n const { tooltip = { enable: true } } = baseConfig\n const { enable } = tooltip\n\n result.tooltip = {\n style: getTooltipStyle(tooltip),\n visible: enable,\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding),\n },\n dimension: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding),\n },\n }\n return result as unknown as ISpec\n}\n\nconst createMarkContent = (tooltip: string[], dimensions: Dimensions, encoding: Encoding) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item: Dimension) => item.id),\n uniqueBy((item: Dimension) => item.alias),\n )\n\n const dimContent = dims.map((item: Dimension) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias ?? item.id,\n value: (datum: Datum | undefined) => {\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n if (encoding.color?.includes(item.id)) {\n return datum?.[ColorEncoding] as string\n }\n if (encoding.x?.includes(item.id)) {\n return datum?.[XEncoding] as string\n }\n }\n\n return datum?.[item.id] as string\n },\n }))\n\n const defaultContent = [\n {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return `${datum[BinStartMeasureId]} ~ ${datum[BinEndMeasureId]}`\n },\n value: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return datum[FoldMeasureValue] as string | number\n },\n },\n ]\n\n return [...dimContent, defaultContent] as ITooltipLinePattern[]\n}\n"],"names":["VCHART_OUTLIER_KEY","tooltipHistogram","spec","context","result","advancedVSeed","chartType","dimensions","encoding","baseConfig","tooltip","enable","getTooltipStyle","createMarkContent","dims","pipe","item","uniqueBy","dimContent","datum","isNullish","ColorEncoding","XEncoding","defaultContent","BinStartMeasureId","BinEndMeasureId","FoldMeasureValue"],"mappings":";;;AAMA,MAAMA,qBAAqB;AAEpB,MAAMC,mBAAmC,CAACC,MAAMC;IACrD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGH;IAC5C,MAAMI,aAAaJ,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEI,UAAU;QAAE,QAAQ;IAAK,CAAC,EAAE,GAAGD;IACvC,MAAM,EAAEE,MAAM,EAAE,GAAGD;IAEnBN,OAAO,OAAO,GAAG;QACf,OAAOQ,gBAAgBF;QACvB,SAASC;QACT,MAAM;YACJ,OAAO;gBACL,SAAS;YACX;YACA,SAASE,kBAAkBL,SAAS,OAAO,IAAI,EAAE,EAAED,YAAYC;QACjE;QACA,WAAW;YACT,OAAO;gBACL,SAAS;YACX;YACA,SAASK,kBAAkBL,SAAS,OAAO,IAAI,EAAE,EAAED,YAAYC;QACjE;IACF;IACA,OAAOJ;AACT;AAEA,MAAMS,oBAAoB,CAACH,SAAmBH,YAAwBC;IACpE,MAAMM,OAAOC,KACXR,WAAW,MAAM,CAAC,CAACS,OAASN,QAAQ,QAAQ,CAACM,KAAK,EAAE,IACpDC,SAAS,CAACD,OAAoBA,KAAK,EAAE,GACrCC,SAAS,CAACD,OAAoBA,KAAK,KAAK;IAG1C,MAAME,aAAaJ,KAAK,GAAG,CAAC,CAACE,OAAqB;YAChD,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAKA,KAAK,KAAK,IAAIA,KAAK,EAAE;YAC1B,OAAO,CAACG;gBACN,IAAI,CAACC,UAAUD,OAAO,CAACnB,mBAAmB,GAAG;oBAC3C,IAAIQ,SAAS,KAAK,EAAE,SAASQ,KAAK,EAAE,GAClC,OAAOG,OAAO,CAACE,cAAc;oBAE/B,IAAIb,SAAS,CAAC,EAAE,SAASQ,KAAK,EAAE,GAC9B,OAAOG,OAAO,CAACG,UAAU;gBAE7B;gBAEA,OAAOH,OAAO,CAACH,KAAK,EAAE,CAAC;YACzB;QACF;IAEA,MAAMO,iBAAiB;QACrB;YACE,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAK,CAACJ;gBACJ,IAAI,CAACA,OACH,OAAO;gBAET,OAAO,GAAGA,KAAK,CAACK,kBAAkB,CAAC,GAAG,EAAEL,KAAK,CAACM,gBAAgB,EAAE;YAClE;YACA,OAAO,CAACN;gBACN,IAAI,CAACA,OACH,OAAO;gBAET,OAAOA,KAAK,CAACO,iBAAiB;YAChC;QACF;KACD;IAED,OAAO;WAAIR;QAAYK;KAAe;AACxC"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.ts"],"sourcesContent":["import { pipe, uniqueBy, isNullish } from 'remeda'\nimport type { Dimension, Dimensions, Encoding, VChartSpecPipe, Tooltip } from 'src/types'\nimport type { Datum, ISpec, ITooltipLinePattern } from '@visactor/vchart'\nimport { BinEndMeasureId, BinStartMeasureId, ColorEncoding, FoldMeasureValue, XEncoding } from 'src/dataReshape'\nimport { getTooltipStyle } from './tooltipStyle'\nimport { getDefaultXFormatterOfHistogram } from '../../utils/histogram'\n\nconst VCHART_OUTLIER_KEY = '__VCHART_BOX_PLOT_OUTLIER_VALUE'\n\nexport const tooltipHistogram: VChartSpecPipe = (spec, context) => {\n const result = { ...spec }\n const { advancedVSeed } = context\n const { chartType, dimensions, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { tooltip: Tooltip }\n const { tooltip = { enable: true } } = baseConfig\n const { enable } = tooltip\n const defaultXFormatter = getDefaultXFormatterOfHistogram(advancedVSeed)\n\n result.tooltip = {\n style: getTooltipStyle(tooltip),\n visible: enable,\n mark: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding, defaultXFormatter),\n },\n dimension: {\n title: {\n visible: false,\n },\n content: createMarkContent(encoding.tooltip || [], dimensions, encoding as Encoding, defaultXFormatter),\n },\n }\n return result as unknown as ISpec\n}\n\nconst createMarkContent = (\n tooltip: string[],\n dimensions: Dimensions,\n encoding: Encoding,\n dimFormatter: (value: number) => string,\n) => {\n const dims = pipe(\n dimensions.filter((item) => tooltip.includes(item.id)),\n uniqueBy((item: Dimension) => item.id),\n uniqueBy((item: Dimension) => item.alias),\n )\n\n const dimContent = dims.map((item: Dimension) => ({\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: item.alias ?? item.id,\n value: (datum: Datum | undefined) => {\n if (!isNullish(datum?.[VCHART_OUTLIER_KEY])) {\n if (encoding.color?.includes(item.id)) {\n return datum?.[ColorEncoding] as string\n }\n if (encoding.x?.includes(item.id)) {\n return datum?.[XEncoding] as string\n }\n }\n\n return datum?.[item.id] as string\n },\n }))\n\n const defaultContent = [\n {\n visible: true,\n hasShape: true,\n shapeType: 'rectRound',\n key: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return `[${dimFormatter(+datum[BinStartMeasureId])}, ${dimFormatter(+datum[BinEndMeasureId])})`\n },\n value: (datum: Datum | undefined) => {\n if (!datum) {\n return ''\n }\n return datum[FoldMeasureValue] as string | number\n },\n },\n ]\n\n return [...dimContent, defaultContent] as ITooltipLinePattern[]\n}\n"],"names":["VCHART_OUTLIER_KEY","tooltipHistogram","spec","context","result","advancedVSeed","chartType","dimensions","encoding","baseConfig","tooltip","enable","defaultXFormatter","getDefaultXFormatterOfHistogram","getTooltipStyle","createMarkContent","dimFormatter","dims","pipe","item","uniqueBy","dimContent","datum","isNullish","ColorEncoding","XEncoding","defaultContent","BinStartMeasureId","BinEndMeasureId","FoldMeasureValue"],"mappings":";;;;AAOA,MAAMA,qBAAqB;AAEpB,MAAMC,mBAAmC,CAACC,MAAMC;IACrD,MAAMC,SAAS;QAAE,GAAGF,IAAI;IAAC;IACzB,MAAM,EAAEG,aAAa,EAAE,GAAGF;IAC1B,MAAM,EAAEG,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGH;IAC5C,MAAMI,aAAaJ,cAAc,MAAM,CAACC,UAAU;IAClD,MAAM,EAAEI,UAAU;QAAE,QAAQ;IAAK,CAAC,EAAE,GAAGD;IACvC,MAAM,EAAEE,MAAM,EAAE,GAAGD;IACnB,MAAME,oBAAoBC,gCAAgCR;IAE1DD,OAAO,OAAO,GAAG;QACf,OAAOU,gBAAgBJ;QACvB,SAASC;QACT,MAAM;YACJ,OAAO;gBACL,SAAS;YACX;YACA,SAASI,kBAAkBP,SAAS,OAAO,IAAI,EAAE,EAAED,YAAYC,UAAsBI;QACvF;QACA,WAAW;YACT,OAAO;gBACL,SAAS;YACX;YACA,SAASG,kBAAkBP,SAAS,OAAO,IAAI,EAAE,EAAED,YAAYC,UAAsBI;QACvF;IACF;IACA,OAAOR;AACT;AAEA,MAAMW,oBAAoB,CACxBL,SACAH,YACAC,UACAQ;IAEA,MAAMC,OAAOC,KACXX,WAAW,MAAM,CAAC,CAACY,OAAST,QAAQ,QAAQ,CAACS,KAAK,EAAE,IACpDC,SAAS,CAACD,OAAoBA,KAAK,EAAE,GACrCC,SAAS,CAACD,OAAoBA,KAAK,KAAK;IAG1C,MAAME,aAAaJ,KAAK,GAAG,CAAC,CAACE,OAAqB;YAChD,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAKA,KAAK,KAAK,IAAIA,KAAK,EAAE;YAC1B,OAAO,CAACG;gBACN,IAAI,CAACC,UAAUD,OAAO,CAACtB,mBAAmB,GAAG;oBAC3C,IAAIQ,SAAS,KAAK,EAAE,SAASW,KAAK,EAAE,GAClC,OAAOG,OAAO,CAACE,cAAc;oBAE/B,IAAIhB,SAAS,CAAC,EAAE,SAASW,KAAK,EAAE,GAC9B,OAAOG,OAAO,CAACG,UAAU;gBAE7B;gBAEA,OAAOH,OAAO,CAACH,KAAK,EAAE,CAAC;YACzB;QACF;IAEA,MAAMO,iBAAiB;QACrB;YACE,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAK,CAACJ;gBACJ,IAAI,CAACA,OACH,OAAO;gBAET,OAAO,CAAC,CAAC,EAAEN,aAAa,CAACM,KAAK,CAACK,kBAAkB,EAAE,EAAE,EAAEX,aAAa,CAACM,KAAK,CAACM,gBAAgB,EAAE,CAAC,CAAC;YACjG;YACA,OAAO,CAACN;gBACN,IAAI,CAACA,OACH,OAAO;gBAET,OAAOA,KAAK,CAACO,iBAAiB;YAChC;QACF;KACD;IAED,OAAO;WAAIR;QAAYK;KAAe;AACxC"}
@@ -0,0 +1,2 @@
1
+ import type { AdvancedVSeed } from '../../../../types';
2
+ export declare const getDefaultXFormatterOfHistogram: (advancedVSeed: AdvancedVSeed) => (value: number) => string;
@@ -0,0 +1,12 @@
1
+ import { createNumFormatter } from "../../../utils/index.js";
2
+ import { createLinearFormat } from "../pipes/axes/format/linearFormat.js";
3
+ const getDefaultXFormatterOfHistogram = (advancedVSeed)=>{
4
+ const { chartType, config } = advancedVSeed;
5
+ const xConfig = config?.[chartType]?.xAxis;
6
+ const { autoFormat = true, numFormat = {} } = xConfig;
7
+ const formatter = createNumFormatter(numFormat);
8
+ return (value)=>createLinearFormat(value, autoFormat, numFormat, formatter);
9
+ };
10
+ export { getDefaultXFormatterOfHistogram };
11
+
12
+ //# sourceMappingURL=histogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline/spec/chart/utils/histogram.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/utils/histogram.ts"],"sourcesContent":["import { createNumFormatter } from 'src/pipeline/utils'\nimport type { AdvancedVSeed, XLinearAxis } from 'src/types'\nimport { createLinearFormat } from '../pipes/axes/format/linearFormat'\n\nexport const getDefaultXFormatterOfHistogram = (advancedVSeed: AdvancedVSeed) => {\n const { chartType, config } = advancedVSeed\n const xConfig = config?.[chartType as 'bar']?.xAxis as XLinearAxis\n const { autoFormat = true, numFormat = {} } = xConfig\n const formatter = createNumFormatter(numFormat)\n return (value: number) => createLinearFormat(value, autoFormat, numFormat, formatter)\n}\n"],"names":["getDefaultXFormatterOfHistogram","advancedVSeed","chartType","config","xConfig","autoFormat","numFormat","formatter","createNumFormatter","value","createLinearFormat"],"mappings":";;AAIO,MAAMA,kCAAkC,CAACC;IAC9C,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAE,GAAGF;IAC9B,MAAMG,UAAUD,QAAQ,CAACD,UAAmB,EAAE;IAC9C,MAAM,EAAEG,aAAa,IAAI,EAAEC,YAAY,CAAC,CAAC,EAAE,GAAGF;IAC9C,MAAMG,YAAYC,mBAAmBF;IACrC,OAAO,CAACG,QAAkBC,mBAAmBD,OAAOJ,YAAYC,WAAWC;AAC7E"}
@@ -3,6 +3,6 @@ import type { Measure, MeasureGroup, MeasureTree } from '../../../types';
3
3
  * @description 删除 measureTree 中符合 callback 条件的节点
4
4
  * @param measureTree 待删除的 measureTree
5
5
  * @param callback 回调函数,用于判断是否删除当前节点
6
- * @returns 删除后的 measureTree
6
+ * @returns 删除的度量
7
7
  */
8
- export declare const deleteMeasureTreeByCallback: <T extends MeasureTree>(measureTree?: T, callback?: (measure: Measure, index: number, measures: (Measure | MeasureGroup)[]) => boolean) => T | undefined;
8
+ export declare const deleteMeasureTreeByCallback: <T extends MeasureTree>(measureTree?: T, callback?: (measure: Measure, index: number, measures: (Measure | MeasureGroup)[]) => boolean) => Measure[];
@@ -1,6 +1,6 @@
1
1
  import { isMeasure, isMeasureGroup } from "./typeGuard.js";
2
2
  const deleteMeasureTreeByCallback = (measureTree, callback)=>{
3
- if (!measureTree) return measureTree;
3
+ if (!measureTree) return;
4
4
  const stack = [
5
5
  ...measureTree
6
6
  ].reverse();
@@ -24,16 +24,20 @@ const deleteMeasureTreeByCallback = (measureTree, callback)=>{
24
24
  nodesToProcess.push(node);
25
25
  }
26
26
  }
27
+ const deleted = [];
27
28
  for (const node of nodesToProcess){
28
29
  const parentList = parents.get(node);
29
30
  if (parentList) {
30
31
  const index = parentList.indexOf(node);
31
32
  if (isMeasure(node)) {
32
- if (callback?.(node, index, parentList)) parentList.splice(index, 1);
33
+ if (callback?.(node, index, parentList)) {
34
+ parentList.splice(index, 1);
35
+ deleted.push(node);
36
+ }
33
37
  }
34
38
  }
35
39
  }
36
- return measureTree;
40
+ return deleted;
37
41
  };
38
42
  export { deleteMeasureTreeByCallback };
39
43
 
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/utils/measures/delete.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/measures/delete.ts"],"sourcesContent":["import type { Measure, MeasureGroup, MeasureTree } from 'src/types'\nimport { isMeasure, isMeasureGroup } from './typeGuard'\n\n/**\n * @description 删除 measureTree 中符合 callback 条件的节点\n * @param measureTree 待删除的 measureTree\n * @param callback 回调函数,用于判断是否删除当前节点\n * @returns 删除后的 measureTree\n */\nexport const deleteMeasureTreeByCallback = <T extends MeasureTree>(\n measureTree?: T,\n callback?: (measure: Measure, index: number, measures: (Measure | MeasureGroup)[]) => boolean,\n) => {\n if (!measureTree) {\n return measureTree\n }\n const stack: (Measure | MeasureGroup)[] = [...measureTree].reverse()\n const parents = new Map<Measure | MeasureGroup, (Measure | MeasureGroup)[]>()\n\n measureTree.forEach((node) => {\n parents.set(node, measureTree)\n })\n\n const nodesToProcess: (Measure | MeasureGroup)[] = []\n const visited = new Set<Measure | MeasureGroup>()\n\n while (stack.length > 0) {\n const node = stack[stack.length - 1]\n\n if (isMeasureGroup(node) && node.children && !visited.has(node)) {\n visited.add(node)\n const children = node.children.slice().reverse()\n for (const child of children) {\n parents.set(child, node.children)\n stack.push(child)\n }\n } else {\n stack.pop()\n nodesToProcess.push(node)\n }\n }\n\n for (const node of nodesToProcess) {\n const parentList = parents.get(node)\n\n if (parentList) {\n const index = parentList.indexOf(node)\n if (isMeasure(node)) {\n if (callback?.(node, index, parentList)) {\n parentList.splice(index, 1)\n }\n }\n }\n }\n\n return measureTree\n}\n"],"names":["deleteMeasureTreeByCallback","measureTree","callback","stack","parents","Map","node","nodesToProcess","visited","Set","isMeasureGroup","children","child","parentList","index","isMeasure"],"mappings":";AASO,MAAMA,8BAA8B,CACzCC,aACAC;IAEA,IAAI,CAACD,aACH,OAAOA;IAET,MAAME,QAAoC;WAAIF;KAAY,CAAC,OAAO;IAClE,MAAMG,UAAU,IAAIC;IAEpBJ,YAAY,OAAO,CAAC,CAACK;QACnBF,QAAQ,GAAG,CAACE,MAAML;IACpB;IAEA,MAAMM,iBAA6C,EAAE;IACrD,MAAMC,UAAU,IAAIC;IAEpB,MAAON,MAAM,MAAM,GAAG,EAAG;QACvB,MAAMG,OAAOH,KAAK,CAACA,MAAM,MAAM,GAAG,EAAE;QAEpC,IAAIO,eAAeJ,SAASA,KAAK,QAAQ,IAAI,CAACE,QAAQ,GAAG,CAACF,OAAO;YAC/DE,QAAQ,GAAG,CAACF;YACZ,MAAMK,WAAWL,KAAK,QAAQ,CAAC,KAAK,GAAG,OAAO;YAC9C,KAAK,MAAMM,SAASD,SAAU;gBAC5BP,QAAQ,GAAG,CAACQ,OAAON,KAAK,QAAQ;gBAChCH,MAAM,IAAI,CAACS;YACb;QACF,OAAO;YACLT,MAAM,GAAG;YACTI,eAAe,IAAI,CAACD;QACtB;IACF;IAEA,KAAK,MAAMA,QAAQC,eAAgB;QACjC,MAAMM,aAAaT,QAAQ,GAAG,CAACE;QAE/B,IAAIO,YAAY;YACd,MAAMC,QAAQD,WAAW,OAAO,CAACP;YACjC,IAAIS,UAAUT,OACZ;gBAAA,IAAIJ,WAAWI,MAAMQ,OAAOD,aAC1BA,WAAW,MAAM,CAACC,OAAO;YAC3B;QAEJ;IACF;IAEA,OAAOb;AACT"}
1
+ {"version":3,"file":"pipeline/utils/measures/delete.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/measures/delete.ts"],"sourcesContent":["import type { Measure, MeasureGroup, MeasureTree } from 'src/types'\nimport { isMeasure, isMeasureGroup } from './typeGuard'\n\n/**\n * @description 删除 measureTree 中符合 callback 条件的节点\n * @param measureTree 待删除的 measureTree\n * @param callback 回调函数,用于判断是否删除当前节点\n * @returns 删除的度量\n */\nexport const deleteMeasureTreeByCallback = <T extends MeasureTree>(\n measureTree?: T,\n callback?: (measure: Measure, index: number, measures: (Measure | MeasureGroup)[]) => boolean,\n): Measure[] => {\n if (!measureTree) {\n return undefined as unknown as Measure[]\n }\n const stack: (Measure | MeasureGroup)[] = [...measureTree].reverse()\n const parents = new Map<Measure | MeasureGroup, (Measure | MeasureGroup)[]>()\n\n measureTree.forEach((node) => {\n parents.set(node, measureTree)\n })\n\n const nodesToProcess: Measure[] = []\n const visited = new Set<Measure | MeasureGroup>()\n\n while (stack.length > 0) {\n const node = stack[stack.length - 1]\n\n if (isMeasureGroup(node) && node.children && !visited.has(node)) {\n visited.add(node)\n const children = node.children.slice().reverse()\n for (const child of children) {\n parents.set(child, node.children)\n stack.push(child)\n }\n } else {\n stack.pop()\n nodesToProcess.push(node as Measure)\n }\n }\n const deleted: Measure[] = []\n\n for (const node of nodesToProcess) {\n const parentList = parents.get(node)\n\n if (parentList) {\n const index = parentList.indexOf(node)\n if (isMeasure(node)) {\n if (callback?.(node, index, parentList)) {\n parentList.splice(index, 1)\n deleted.push(node)\n }\n }\n }\n }\n\n return deleted\n}\n"],"names":["deleteMeasureTreeByCallback","measureTree","callback","stack","parents","Map","node","nodesToProcess","visited","Set","isMeasureGroup","children","child","deleted","parentList","index","isMeasure"],"mappings":";AASO,MAAMA,8BAA8B,CACzCC,aACAC;IAEA,IAAI,CAACD,aACH;IAEF,MAAME,QAAoC;WAAIF;KAAY,CAAC,OAAO;IAClE,MAAMG,UAAU,IAAIC;IAEpBJ,YAAY,OAAO,CAAC,CAACK;QACnBF,QAAQ,GAAG,CAACE,MAAML;IACpB;IAEA,MAAMM,iBAA4B,EAAE;IACpC,MAAMC,UAAU,IAAIC;IAEpB,MAAON,MAAM,MAAM,GAAG,EAAG;QACvB,MAAMG,OAAOH,KAAK,CAACA,MAAM,MAAM,GAAG,EAAE;QAEpC,IAAIO,eAAeJ,SAASA,KAAK,QAAQ,IAAI,CAACE,QAAQ,GAAG,CAACF,OAAO;YAC/DE,QAAQ,GAAG,CAACF;YACZ,MAAMK,WAAWL,KAAK,QAAQ,CAAC,KAAK,GAAG,OAAO;YAC9C,KAAK,MAAMM,SAASD,SAAU;gBAC5BP,QAAQ,GAAG,CAACQ,OAAON,KAAK,QAAQ;gBAChCH,MAAM,IAAI,CAACS;YACb;QACF,OAAO;YACLT,MAAM,GAAG;YACTI,eAAe,IAAI,CAACD;QACtB;IACF;IACA,MAAMO,UAAqB,EAAE;IAE7B,KAAK,MAAMP,QAAQC,eAAgB;QACjC,MAAMO,aAAaV,QAAQ,GAAG,CAACE;QAE/B,IAAIQ,YAAY;YACd,MAAMC,QAAQD,WAAW,OAAO,CAACR;YACjC,IAAIU,UAAUV,OACZ;gBAAA,IAAIJ,WAAWI,MAAMS,OAAOD,aAAa;oBACvCA,WAAW,MAAM,CAACC,OAAO;oBACzBF,QAAQ,IAAI,CAACP;gBACf;YAAA;QAEJ;IACF;IAEA,OAAOO;AACT"}
@@ -1 +1,2 @@
1
1
  export declare const preorderTraverse: <Node, K extends string = "children">(tree: Node[], callback: (node: Node) => boolean, childrenKey?: K) => void;
2
+ export declare const findTreeNodesBy: <Node, K extends string = "children">(nodes: Node[] | undefined, callback: (node: Node) => boolean, childrenKey?: K) => Node[];
@@ -14,6 +14,17 @@ const preorderTraverse = (tree, callback, childrenKey = 'children')=>{
14
14
  }
15
15
  }
16
16
  };
17
- export { preorderTraverse };
17
+ const findTreeNodesBy = (nodes = [], callback, childrenKey = 'children')=>{
18
+ if (!nodes) return [];
19
+ const result = [];
20
+ preorderTraverse(nodes, (node)=>{
21
+ if (!(childrenKey in node)) {
22
+ if (callback(node)) result.push(node);
23
+ }
24
+ return false;
25
+ });
26
+ return result;
27
+ };
28
+ export { findTreeNodesBy, preorderTraverse };
18
29
 
19
30
  //# sourceMappingURL=traverse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/utils/tree/traverse.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/tree/traverse.ts"],"sourcesContent":["/**\n * 支持泛型与可配置子节点键名的非递归前序遍历\n * @param tree 根节点数组\n * @param callback 遍历时对每个节点执行的回调,返回 true 时停止遍历\n * @param childrenKey 子节点键名(默认 'children')\n */\ntype WithChildren<Node, K extends string> = Node & { [P in K]?: Node[] }\n\nexport const preorderTraverse = <Node, K extends string = 'children'>(\n tree: Node[],\n callback: (node: Node) => boolean,\n childrenKey: K = 'children' as K,\n) => {\n if (!tree || tree.length === 0) return\n\n const stack: Node[] = [...tree].reverse()\n\n while (stack.length > 0) {\n const node = stack.pop() as Node\n const stop = callback(node)\n if (stop === true) {\n return\n }\n\n const children = (node as WithChildren<Node, K>)[childrenKey]\n if (Array.isArray(children) && children.length > 0) {\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i]\n stack.push(child)\n }\n }\n }\n}\n"],"names":["preorderTraverse","tree","callback","childrenKey","stack","node","stop","children","Array","i","child"],"mappings":"AAQO,MAAMA,mBAAmB,CAC9BC,MACAC,UACAC,cAAiB,UAAe;IAEhC,IAAI,CAACF,QAAQA,AAAgB,MAAhBA,KAAK,MAAM,EAAQ;IAEhC,MAAMG,QAAgB;WAAIH;KAAK,CAAC,OAAO;IAEvC,MAAOG,MAAM,MAAM,GAAG,EAAG;QACvB,MAAMC,OAAOD,MAAM,GAAG;QACtB,MAAME,OAAOJ,SAASG;QACtB,IAAIC,AAAS,SAATA,MACF;QAGF,MAAMC,WAAYF,IAA8B,CAACF,YAAY;QAC7D,IAAIK,MAAM,OAAO,CAACD,aAAaA,SAAS,MAAM,GAAG,GAC/C,IAAK,IAAIE,IAAIF,SAAS,MAAM,GAAG,GAAGE,KAAK,GAAGA,IAAK;YAC7C,MAAMC,QAAQH,QAAQ,CAACE,EAAE;YACzBL,MAAM,IAAI,CAACM;QACb;IAEJ;AACF"}
1
+ {"version":3,"file":"pipeline/utils/tree/traverse.js","sources":["webpack://@visactor/vseed/./src/pipeline/utils/tree/traverse.ts"],"sourcesContent":["/**\n * 支持泛型与可配置子节点键名的非递归前序遍历\n * @param tree 根节点数组\n * @param callback 遍历时对每个节点执行的回调,返回 true 时停止遍历\n * @param childrenKey 子节点键名(默认 'children')\n */\ntype WithChildren<Node, K extends string> = Node & { [P in K]?: Node[] }\n\nexport const preorderTraverse = <Node, K extends string = 'children'>(\n tree: Node[],\n callback: (node: Node) => boolean,\n childrenKey: K = 'children' as K,\n) => {\n if (!tree || tree.length === 0) return\n\n const stack: Node[] = [...tree].reverse()\n\n while (stack.length > 0) {\n const node = stack.pop() as Node\n const stop = callback(node)\n if (stop === true) {\n return\n }\n\n const children = (node as WithChildren<Node, K>)[childrenKey]\n if (Array.isArray(children) && children.length > 0) {\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i]\n stack.push(child)\n }\n }\n }\n}\n\nexport const findTreeNodesBy = <Node, K extends string = 'children'>(\n nodes: Node[] = [],\n callback: (node: Node) => boolean,\n childrenKey: K = 'children' as K,\n): Node[] => {\n if (!nodes) return []\n const result: Node[] = []\n preorderTraverse<Node, K>(nodes, (node) => {\n if (!(childrenKey in (node as WithChildren<Node, K>))) {\n if (callback(node)) {\n result.push(node)\n }\n }\n return false\n })\n return result\n}\n"],"names":["preorderTraverse","tree","callback","childrenKey","stack","node","stop","children","Array","i","child","findTreeNodesBy","nodes","result"],"mappings":"AAQO,MAAMA,mBAAmB,CAC9BC,MACAC,UACAC,cAAiB,UAAe;IAEhC,IAAI,CAACF,QAAQA,AAAgB,MAAhBA,KAAK,MAAM,EAAQ;IAEhC,MAAMG,QAAgB;WAAIH;KAAK,CAAC,OAAO;IAEvC,MAAOG,MAAM,MAAM,GAAG,EAAG;QACvB,MAAMC,OAAOD,MAAM,GAAG;QACtB,MAAME,OAAOJ,SAASG;QACtB,IAAIC,AAAS,SAATA,MACF;QAGF,MAAMC,WAAYF,IAA8B,CAACF,YAAY;QAC7D,IAAIK,MAAM,OAAO,CAACD,aAAaA,SAAS,MAAM,GAAG,GAC/C,IAAK,IAAIE,IAAIF,SAAS,MAAM,GAAG,GAAGE,KAAK,GAAGA,IAAK;YAC7C,MAAMC,QAAQH,QAAQ,CAACE,EAAE;YACzBL,MAAM,IAAI,CAACM;QACb;IAEJ;AACF;AAEO,MAAMC,kBAAkB,CAC7BC,QAAgB,EAAE,EAClBV,UACAC,cAAiB,UAAe;IAEhC,IAAI,CAACS,OAAO,OAAO,EAAE;IACrB,MAAMC,SAAiB,EAAE;IACzBb,iBAA0BY,OAAO,CAACP;QAChC,IAAI,CAAEF,CAAAA,eAAgBE,IAAG,GACvB;YAAA,IAAIH,SAASG,OACXQ,OAAO,IAAI,CAACR;QACd;QAEF,OAAO;IACT;IACA,OAAOQ;AACT"}
@@ -88,8 +88,8 @@ export declare const zAdvancedVSeed: z.ZodObject<{
88
88
  measures: z.ZodArray<z.ZodUnion<[z.ZodType<import("./properties").MeasureGroup, unknown, z.core.$ZodTypeInternals<import("./properties").MeasureGroup, unknown>>, z.ZodObject<{
89
89
  id: z.ZodString;
90
90
  alias: z.ZodOptional<z.ZodString>;
91
- autoFormat: z.ZodDefault<z.ZodBoolean>;
92
- numFormat: z.ZodDefault<z.ZodOptional<z.ZodObject<{
91
+ autoFormat: z.ZodOptional<z.ZodBoolean>;
92
+ numFormat: z.ZodOptional<z.ZodOptional<z.ZodObject<{
93
93
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
94
94
  number: "number";
95
95
  percent: "percent";
@@ -119,7 +119,7 @@ export declare const zAdvancedVSeed: z.ZodObject<{
119
119
  halfEven: "halfEven";
120
120
  }>>>;
121
121
  }, z.core.$strip>>>;
122
- format: z.ZodDefault<z.ZodOptional<z.ZodObject<{
122
+ format: z.ZodOptional<z.ZodOptional<z.ZodObject<{
123
123
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
124
124
  number: "number";
125
125
  percent: "percent";
@@ -151,6 +151,7 @@ export declare const zAdvancedVSeed: z.ZodObject<{
151
151
  }, z.core.$strip>>>;
152
152
  encoding: z.ZodOptional<z.ZodEnum<{
153
153
  column: "column";
154
+ value: "value";
154
155
  xAxis: "xAxis";
155
156
  yAxis: "yAxis";
156
157
  angle: "angle";
@@ -162,9 +163,121 @@ export declare const zAdvancedVSeed: z.ZodObject<{
162
163
  secondaryYAxis: "secondaryYAxis";
163
164
  radius: "radius";
164
165
  size: "size";
166
+ q1: "q1";
167
+ median: "median";
168
+ q3: "q3";
169
+ min: "min";
170
+ max: "max";
171
+ outliers: "outliers";
172
+ x0: "x0";
173
+ x1: "x1";
165
174
  }>>;
166
175
  parentId: z.ZodOptional<z.ZodString>;
167
176
  }, z.core.$strip>]>>;
177
+ reshapeMeasures: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodType<import("./properties").MeasureGroup, unknown, z.core.$ZodTypeInternals<import("./properties").MeasureGroup, unknown>>, z.ZodObject<{
178
+ id: z.ZodString;
179
+ alias: z.ZodOptional<z.ZodString>;
180
+ autoFormat: z.ZodOptional<z.ZodBoolean>;
181
+ numFormat: z.ZodOptional<z.ZodOptional<z.ZodObject<{
182
+ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
183
+ number: "number";
184
+ percent: "percent";
185
+ permille: "permille";
186
+ scientific: "scientific";
187
+ }>>>;
188
+ ratio: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
189
+ symbol: z.ZodOptional<z.ZodDefault<z.ZodString>>;
190
+ thousandSeparator: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
191
+ prefix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
192
+ suffix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
193
+ fractionDigits: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
194
+ significantDigits: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
195
+ roundingPriority: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
196
+ morePrecision: "morePrecision";
197
+ lessPrecision: "lessPrecision";
198
+ }>>>;
199
+ roundingMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
200
+ floor: "floor";
201
+ ceil: "ceil";
202
+ expand: "expand";
203
+ trunc: "trunc";
204
+ halfCeil: "halfCeil";
205
+ halfFloor: "halfFloor";
206
+ halfExpand: "halfExpand";
207
+ halfTrunc: "halfTrunc";
208
+ halfEven: "halfEven";
209
+ }>>>;
210
+ }, z.core.$strip>>>;
211
+ format: z.ZodOptional<z.ZodOptional<z.ZodObject<{
212
+ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
213
+ number: "number";
214
+ percent: "percent";
215
+ permille: "permille";
216
+ scientific: "scientific";
217
+ }>>>;
218
+ ratio: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
219
+ symbol: z.ZodOptional<z.ZodDefault<z.ZodString>>;
220
+ thousandSeparator: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
221
+ prefix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
222
+ suffix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
223
+ fractionDigits: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
224
+ significantDigits: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
225
+ roundingPriority: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
226
+ morePrecision: "morePrecision";
227
+ lessPrecision: "lessPrecision";
228
+ }>>>;
229
+ roundingMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
230
+ floor: "floor";
231
+ ceil: "ceil";
232
+ expand: "expand";
233
+ trunc: "trunc";
234
+ halfCeil: "halfCeil";
235
+ halfFloor: "halfFloor";
236
+ halfExpand: "halfExpand";
237
+ halfTrunc: "halfTrunc";
238
+ halfEven: "halfEven";
239
+ }>>>;
240
+ }, z.core.$strip>>>;
241
+ encoding: z.ZodOptional<z.ZodEnum<{
242
+ column: "column";
243
+ value: "value";
244
+ xAxis: "xAxis";
245
+ yAxis: "yAxis";
246
+ angle: "angle";
247
+ color: "color";
248
+ detail: "detail";
249
+ tooltip: "tooltip";
250
+ label: "label";
251
+ primaryYAxis: "primaryYAxis";
252
+ secondaryYAxis: "secondaryYAxis";
253
+ radius: "radius";
254
+ size: "size";
255
+ q1: "q1";
256
+ median: "median";
257
+ q3: "q3";
258
+ min: "min";
259
+ max: "max";
260
+ outliers: "outliers";
261
+ x0: "x0";
262
+ x1: "x1";
263
+ }>>;
264
+ parentId: z.ZodOptional<z.ZodString>;
265
+ }, z.core.$strip>]>>>;
266
+ reshapeDimensions: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodType<import("./properties").DimensionGroup, unknown, z.core.$ZodTypeInternals<import("./properties").DimensionGroup, unknown>>, z.ZodObject<{
267
+ id: z.ZodString;
268
+ alias: z.ZodOptional<z.ZodString>;
269
+ encoding: z.ZodOptional<z.ZodEnum<{
270
+ column: "column";
271
+ xAxis: "xAxis";
272
+ yAxis: "yAxis";
273
+ angle: "angle";
274
+ color: "color";
275
+ detail: "detail";
276
+ tooltip: "tooltip";
277
+ label: "label";
278
+ row: "row";
279
+ }>>;
280
+ }, z.core.$strip>]>>>;
168
281
  encoding: z.ZodObject<{
169
282
  x: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
170
283
  y: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
@@ -16,6 +16,8 @@ const zAdvancedVSeed = z.object({
16
16
  datasetReshapeInfo: zDatasetReshapeInfo,
17
17
  dimensions: zDimensionTree,
18
18
  measures: zMeasureTree,
19
+ reshapeMeasures: zMeasureTree.optional(),
20
+ reshapeDimensions: zDimensionTree.optional(),
19
21
  encoding: zEncoding,
20
22
  config: zConfig,
21
23
  analysis: zAnalysis,
@@ -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 { zDimensionTree } from './properties/dimensions'\nimport { zMeasureTree } from './properties/measures'\nimport { zEncoding } from './properties/encoding'\nimport { zDatasetReshapeInfo } from './properties/datasetReshapeInfo'\nimport { zTheme, zCustomThemeConfig } from './properties/theme'\nimport { zConfig } from './properties/config'\nimport { zAnalysis, zAnnotation, zRegressionLine, zMarkStyle } from './properties'\nimport { zLocale } from './i18n'\nimport { zCellStyle } from './properties/cellStyle/cellStyle'\n\nexport const zAdvancedVSeed = z.object({\n chartType: zChartType,\n dataset: zDataset,\n datasetReshapeInfo: zDatasetReshapeInfo,\n dimensions: zDimensionTree,\n measures: zMeasureTree,\n encoding: zEncoding,\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})\n\nexport type AdvancedVSeed = z.infer<typeof zAdvancedVSeed>\n"],"names":["zAdvancedVSeed","z","zChartType","zDataset","zDatasetReshapeInfo","zDimensionTree","zMeasureTree","zEncoding","zConfig","zAnalysis","zTheme","zMarkStyle","zCellStyle","zCustomThemeConfig","zAnnotation","zLocale","zRegressionLine"],"mappings":";;;;;;;;;;;;AAaO,MAAMA,iBAAiBC,EAAE,MAAM,CAAC;IACrC,WAAWC;IACX,SAASC;IACT,oBAAoBC;IACpB,YAAYC;IACZ,UAAUC;IACV,UAAUC;IACV,QAAQC;IACR,UAAUC;IACV,OAAOC;IACP,WAAWC;IACX,WAAWC;IACX,aAAaC;IACb,YAAYC;IACZ,QAAQC;IACR,gBAAgBC;AAClB"}
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 { zDimensionTree } from './properties/dimensions'\nimport { zMeasureTree } from './properties/measures'\nimport { zEncoding } from './properties/encoding'\nimport { zDatasetReshapeInfo } from './properties/datasetReshapeInfo'\nimport { zTheme, zCustomThemeConfig } from './properties/theme'\nimport { zConfig } from './properties/config'\nimport { zAnalysis, zAnnotation, zRegressionLine, zMarkStyle } from './properties'\nimport { zLocale } from './i18n'\nimport { zCellStyle } from './properties/cellStyle/cellStyle'\n\nexport const zAdvancedVSeed = z.object({\n chartType: zChartType,\n dataset: zDataset,\n datasetReshapeInfo: zDatasetReshapeInfo,\n dimensions: zDimensionTree,\n measures: zMeasureTree,\n reshapeMeasures: zMeasureTree.optional(),\n reshapeDimensions: zDimensionTree.optional(),\n encoding: zEncoding,\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})\n\nexport type AdvancedVSeed = z.infer<typeof zAdvancedVSeed>\n"],"names":["zAdvancedVSeed","z","zChartType","zDataset","zDatasetReshapeInfo","zDimensionTree","zMeasureTree","zEncoding","zConfig","zAnalysis","zTheme","zMarkStyle","zCellStyle","zCustomThemeConfig","zAnnotation","zLocale","zRegressionLine"],"mappings":";;;;;;;;;;;;AAaO,MAAMA,iBAAiBC,EAAE,MAAM,CAAC;IACrC,WAAWC;IACX,SAASC;IACT,oBAAoBC;IACpB,YAAYC;IACZ,UAAUC;IACV,iBAAiBA,aAAa,QAAQ;IACtC,mBAAmBD,eAAe,QAAQ;IAC1C,UAAUE;IACV,QAAQC;IACR,UAAUC;IACV,OAAOC;IACP,WAAWC;IACX,WAAWC;IACX,aAAaC;IACb,YAAYC;IACZ,QAAQC;IACR,gBAAgBC;AAClB"}
@@ -43,8 +43,8 @@ export declare const zArea: z.ZodObject<{
43
43
  measures: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<[z.ZodType<import("../..").MeasureGroup, unknown, z.core.$ZodTypeInternals<import("../..").MeasureGroup, unknown>>, z.ZodObject<{
44
44
  id: z.ZodString;
45
45
  alias: z.ZodOptional<z.ZodString>;
46
- autoFormat: z.ZodDefault<z.ZodBoolean>;
47
- numFormat: z.ZodDefault<z.ZodOptional<z.ZodObject<{
46
+ autoFormat: z.ZodOptional<z.ZodBoolean>;
47
+ numFormat: z.ZodOptional<z.ZodOptional<z.ZodObject<{
48
48
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
49
49
  number: "number";
50
50
  percent: "percent";
@@ -74,7 +74,7 @@ export declare const zArea: z.ZodObject<{
74
74
  halfEven: "halfEven";
75
75
  }>>>;
76
76
  }, z.core.$strip>>>;
77
- format: z.ZodDefault<z.ZodOptional<z.ZodObject<{
77
+ format: z.ZodOptional<z.ZodOptional<z.ZodObject<{
78
78
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
79
79
  number: "number";
80
80
  percent: "percent";
@@ -106,6 +106,7 @@ export declare const zArea: z.ZodObject<{
106
106
  }, z.core.$strip>>>;
107
107
  encoding: z.ZodOptional<z.ZodEnum<{
108
108
  column: "column";
109
+ value: "value";
109
110
  xAxis: "xAxis";
110
111
  yAxis: "yAxis";
111
112
  angle: "angle";
@@ -117,6 +118,14 @@ export declare const zArea: z.ZodObject<{
117
118
  secondaryYAxis: "secondaryYAxis";
118
119
  radius: "radius";
119
120
  size: "size";
121
+ q1: "q1";
122
+ median: "median";
123
+ q3: "q3";
124
+ min: "min";
125
+ max: "max";
126
+ outliers: "outliers";
127
+ x0: "x0";
128
+ x1: "x1";
120
129
  }>>;
121
130
  parentId: z.ZodOptional<z.ZodString>;
122
131
  }, z.core.$strip>]>>>>;
@@ -43,8 +43,8 @@ export declare const zAreaPercent: z.ZodObject<{
43
43
  measures: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<[z.ZodType<import("../..").MeasureGroup, unknown, z.core.$ZodTypeInternals<import("../..").MeasureGroup, unknown>>, z.ZodObject<{
44
44
  id: z.ZodString;
45
45
  alias: z.ZodOptional<z.ZodString>;
46
- autoFormat: z.ZodDefault<z.ZodBoolean>;
47
- numFormat: z.ZodDefault<z.ZodOptional<z.ZodObject<{
46
+ autoFormat: z.ZodOptional<z.ZodBoolean>;
47
+ numFormat: z.ZodOptional<z.ZodOptional<z.ZodObject<{
48
48
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
49
49
  number: "number";
50
50
  percent: "percent";
@@ -74,7 +74,7 @@ export declare const zAreaPercent: z.ZodObject<{
74
74
  halfEven: "halfEven";
75
75
  }>>>;
76
76
  }, z.core.$strip>>>;
77
- format: z.ZodDefault<z.ZodOptional<z.ZodObject<{
77
+ format: z.ZodOptional<z.ZodOptional<z.ZodObject<{
78
78
  type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
79
79
  number: "number";
80
80
  percent: "percent";
@@ -106,6 +106,7 @@ export declare const zAreaPercent: z.ZodObject<{
106
106
  }, z.core.$strip>>>;
107
107
  encoding: z.ZodOptional<z.ZodEnum<{
108
108
  column: "column";
109
+ value: "value";
109
110
  xAxis: "xAxis";
110
111
  yAxis: "yAxis";
111
112
  angle: "angle";
@@ -117,6 +118,14 @@ export declare const zAreaPercent: z.ZodObject<{
117
118
  secondaryYAxis: "secondaryYAxis";
118
119
  radius: "radius";
119
120
  size: "size";
121
+ q1: "q1";
122
+ median: "median";
123
+ q3: "q3";
124
+ min: "min";
125
+ max: "max";
126
+ outliers: "outliers";
127
+ x0: "x0";
128
+ x1: "x1";
120
129
  }>>;
121
130
  parentId: z.ZodOptional<z.ZodString>;
122
131
  }, z.core.$strip>]>>>>;