@milaboratories/miplots4 1.0.165 → 1.0.167

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 (60) hide show
  1. package/dist/common/Tooltip.d.ts +2 -1
  2. package/dist/common/Tooltip.js +147 -143
  3. package/dist/common/Tooltip.js.map +1 -1
  4. package/dist/discrete/DiscreteSettingsImpl.d.ts +11 -31
  5. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  6. package/dist/discrete/components/Chart.js +143 -143
  7. package/dist/discrete/components/Chart.js.map +1 -1
  8. package/dist/discrete/index.d.ts +2 -0
  9. package/dist/discrete/index.js +127 -123
  10. package/dist/discrete/index.js.map +1 -1
  11. package/dist/discrete/utils/getFacetLabels.d.ts +3 -0
  12. package/dist/discrete/utils/getFacetLabels.js +16 -0
  13. package/dist/discrete/utils/getFacetLabels.js.map +1 -0
  14. package/dist/heatmap/components/tooltipUtils.js +15 -15
  15. package/dist/heatmap/components/tooltipUtils.js.map +1 -1
  16. package/dist/heatmap/fillCellsData.js +88 -85
  17. package/dist/heatmap/fillCellsData.js.map +1 -1
  18. package/dist/histogram/getHistogramData.js +42 -41
  19. package/dist/histogram/getHistogramData.js.map +1 -1
  20. package/dist/histogram/index.d.ts +1 -0
  21. package/dist/histogram/index.js +59 -57
  22. package/dist/histogram/index.js.map +1 -1
  23. package/dist/scatterplot/components/ChartTooltip.js +34 -33
  24. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  25. package/dist/scatterplot/components/ChartsGroup.js +31 -31
  26. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  27. package/dist/scatterplot/dots.d.ts +2 -2
  28. package/dist/scatterplot/dots.js +9 -9
  29. package/dist/scatterplot/dots.js.map +1 -1
  30. package/dist/scatterplot/index.d.ts +1 -0
  31. package/dist/scatterplot/index.js +61 -59
  32. package/dist/scatterplot/index.js.map +1 -1
  33. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +2 -1
  34. package/dist/scatterplot/utils/sortDotsByGrouping.js +22 -11
  35. package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -1
  36. package/dist/scatterplot-umap/ChartRenderer.d.ts +1 -1
  37. package/dist/scatterplot-umap/ChartRenderer.js +17 -17
  38. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  39. package/dist/scatterplot-umap/components/SVGLayer.js +49 -49
  40. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  41. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  42. package/dist/scatterplot-umap/components/UpperSVG.js +39 -38
  43. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  44. package/dist/scatterplot-umap/index.js +87 -77
  45. package/dist/scatterplot-umap/index.js.map +1 -1
  46. package/dist/types/bubble.js +32 -37
  47. package/dist/types/bubble.js.map +1 -1
  48. package/dist/types/common.d.ts +41 -0
  49. package/dist/types/common.js +39 -35
  50. package/dist/types/common.js.map +1 -1
  51. package/dist/types/discrete.d.ts +680 -70
  52. package/dist/types/discrete.js +141 -141
  53. package/dist/types/discrete.js.map +1 -1
  54. package/dist/types/heatmap.js +54 -59
  55. package/dist/types/heatmap.js.map +1 -1
  56. package/dist/types/scatterplot-umap.js +19 -24
  57. package/dist/types/scatterplot-umap.js.map +1 -1
  58. package/dist/types/scatterplot.js +41 -46
  59. package/dist/types/scatterplot.js.map +1 -1
  60. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import {\n intersection\n} from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ErrorInfoHistogramGroups} from '../types';\nimport { type Category, type ColumnName, type ErrorInfoFacets, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\n\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n facetKeysCombinations: string[][];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {valueColumn, facetBy, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n\n if (facetKeysCombinations.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeysCombinations.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n const groupingValues = grouping ? [grouping.value] : [];\n let groupingKeys = grouping ? this.data.getColumnCategories(grouping.value) : ['null'];\n if (groupingKeys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoHistogramGroups = {\n type: 'tooManyHistogramGroups',\n info: {count: groupingKeys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys);\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues]);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeysCombinations, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n this.calculatedData = {\n facetKeys: facetKeysCombinations.map(v => v.join(', ')),\n facetKeysCombinations,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getLegendInfo","data","grouping","inheritedAes","res","column","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","l","_c","key","_d","prevData","prevKeys","keys","valueColumn","facetBy","binsCount","chartSettings","groupingOrder","facetKeysLists","facetKeysCombinations","getKeysCombinations","MAX_FACETS_COUNT","errorInfo","facetGroupingValues","groupingValues","groupingKeys","MAX_GROUPS_COUNT","intersection","histogramDataByFacets","createHistogramDataByFacets","v","id","facetSettings","layers","groupingDirection","groupingStack"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/histogram/index.ts"],"sourcesContent":["import {\n intersection\n} from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ErrorInfoHistogramGroups} from '../types';\nimport { type Category, type ColumnName, type ErrorInfoFacets, getUnknownErrorInfo, type HistogramEventHandlers, type HistogramSettings, isErrorInfo } from '../types';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { HistogramLegendInfo } from './components/types';\nimport type { GroupedHistogramData } from './getHistogramData';\nimport { createHistogramDataByFacets } from './getHistogramData';\nimport { HistogramSettingsImpl } from './HistogramSettingsImpl';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\nimport { getFacetLabels } from '../discrete/utils/getFacetLabels';\n\nfunction getLegendInfo(\n data: DataFrame,\n grouping: ColumnName[],\n inheritedAes: HistogramSettingsImpl['inheritedAes']\n): HistogramLegendInfo {\n return grouping.reduce((res: HistogramLegendInfo, column) => {\n const categories = data.getColumnCategories(column.value, false);\n const getValueLabel = (category: Category) => (column.valueLabels\n ? String(data.getColumnValue(\n column.valueLabels,\n data.getColumnCategoryRowIndex(column.value, category)\n ))\n : category\n );\n const labels = categories.reduce((res: Record<string, string>, category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {});\n res[column.value] = {\n values: categories.sort((a, b) => labels[a].localeCompare(labels[b], 'en', {numeric: true})),\n aesMap: inheritedAes[column.value],\n labels,\n };\n return res;\n }, {});\n}\n\nexport class ChartHistogram extends AbstractChart {\n settings: HistogramSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n facetKeys: string[];\n facetKeysCombinations: string[][];\n histogramDataByFacets: Record<string, GroupedHistogramData>\n legendInfo: HistogramLegendInfo;\n facetLabels: Record<string, string[]>;\n } | null = null;\n\n constructor(data: DataFrame, settings: HistogramSettings, eventHandlers?: HistogramEventHandlers) {\n super(data, settings);\n\n this.settings = new HistogramSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HistogramSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HistogramSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for histogram');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HistogramSettingsImpl, settings: HistogramSettingsImpl) {\n return (\n prevSettings.valueColumn.value !== settings.valueColumn.value ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping?.value !== settings.grouping?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n prevSettings.binsCount !== settings.binsCount ||\n prevSettings.chartSettings.xAxis.scale !== settings.chartSettings.xAxis.scale ||\n prevSettings.groupingOrder?.some((key, idx) => key !== settings.groupingOrder?.[idx]) ||\n settings.groupingOrder?.some((key, idx) => key !== prevSettings.groupingOrder?.[idx])\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {valueColumn, facetBy, grouping, binsCount, chartSettings, inheritedAes, groupingOrder} = this.settings;\n\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value));\n const facetKeysCombinations = facetKeysLists.length ? getKeysCombinations([...facetKeysLists]) : [['null']];\n\n if (facetKeysCombinations.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeysCombinations.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n const groupingValues = grouping ? [grouping.value] : [];\n let groupingKeys = grouping ? this.data.getColumnCategories(grouping.value) : ['null'];\n if (groupingKeys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoHistogramGroups = {\n type: 'tooManyHistogramGroups',\n info: {count: groupingKeys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (groupingOrder) {\n groupingKeys = intersection(groupingOrder, groupingKeys);\n }\n\n this.data.setGrouping([...facetGroupingValues, ...groupingValues]);\n const histogramDataByFacets = createHistogramDataByFacets(this.data, facetKeysCombinations, groupingKeys, valueColumn, binsCount, chartSettings.xAxis.scale);\n\n const facetKeys = facetKeysCombinations.map(v => v.join(', '));\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeysCombinations);\n this.calculatedData = {\n facetKeys,\n facetKeysCombinations,\n facetLabels,\n histogramDataByFacets,\n legendInfo: getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes)\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {facetLabels} = this.calculatedData;\n const {id, chartSettings, facetSettings, inheritedAes, layers, grouping, groupingDirection, groupingStack, facetBy} = this.settings;\n this.calculatedData.legendInfo = getLegendInfo(this.data, grouping ? [grouping] : [], inheritedAes);\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\n //for titles, if facet by more than 1 column\n this.calculatedData.histogramDataByFacets,\n this.calculatedData.legendInfo,\n layers,\n inheritedAes,\n grouping,\n groupingStack,\n groupingDirection,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getLegendInfo","data","grouping","inheritedAes","res","column","categories","getValueLabel","category","labels","a","b","ChartHistogram","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","HistogramSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","_b","l","_c","key","_d","prevData","prevKeys","keys","valueColumn","facetBy","binsCount","chartSettings","groupingOrder","facetKeysLists","facetKeysCombinations","getKeysCombinations","MAX_FACETS_COUNT","errorInfo","facetGroupingValues","groupingValues","groupingKeys","MAX_GROUPS_COUNT","intersection","histogramDataByFacets","createHistogramDataByFacets","facetKeys","v","facetLabels","getFacetLabels","id","facetSettings","layers","groupingDirection","groupingStack"],"mappings":"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"}
@@ -1,43 +1,44 @@
1
- import { j as l } from "../../_virtual/jsx-runtime.js";
2
- import { r as c } from "../../_virtual/index.js";
3
- import { Tooltip as n } from "../../common/Tooltip.js";
4
- import { useDataFrame as p } from "../../common/useDataFrame.js";
5
- import { formatColumnValue as g } from "../utils/formatColumnValue.js";
6
- import { ChartDot as d } from "./ChartLayersData.js";
7
- import { format as C } from "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
8
- const j = { left: 0, right: 0, top: 0, bottom: 0 }, v = c.memo(({
1
+ import { j as c } from "../../_virtual/jsx-runtime.js";
2
+ import { r as u } from "../../_virtual/index.js";
3
+ import { Tooltip as g } from "../../common/Tooltip.js";
4
+ import { useDataFrame as d } from "../../common/useDataFrame.js";
5
+ import { formatColumnValue as C } from "../utils/formatColumnValue.js";
6
+ import { ChartDot as j } from "./ChartLayersData.js";
7
+ import { format as p } from "../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
8
+ const E = { left: 0, right: 0, top: 0, bottom: 0 }, w = u.memo(({
9
9
  tooltipsData: r,
10
- tooltips: a,
10
+ tooltips: e,
11
11
  keyColumn: m,
12
12
  chartSizes: o,
13
13
  dimensions: t,
14
- scales: f,
15
- aesGetters: u
14
+ scales: a,
15
+ aesGetters: x
16
16
  }) => {
17
- const x = p(), e = t == null ? void 0 : t.padding, h = c.useMemo(() => !t || !f || !e ? j : {
18
- left: t.left + e.left,
19
- right: o.totalWidth - (t.left + e.left),
20
- top: t.top + e.top,
21
- bottom: o.totalHeight - (t.top + e.top)
22
- }, [t, e, o]);
23
- return !t || !f || !e || !r.selectedData || !a.show ? null : /* @__PURE__ */ l.jsxs(l.Fragment, { children: [
24
- r.fixed && /* @__PURE__ */ l.jsxs("g", { transform: `translate(${t.left + e.left}, ${t.top + e.top})`, children: [
25
- /* @__PURE__ */ l.jsx("rect", { width: o.chartWidth, height: o.chartHeight, fill: "rgba(255, 255, 255, 0.8)" }),
26
- /* @__PURE__ */ l.jsx(
27
- d,
17
+ var n;
18
+ const l = d(), f = t == null ? void 0 : t.padding, h = u.useMemo(() => !t || !a || !f ? E : {
19
+ left: t.left + f.left,
20
+ right: o.totalWidth - (t.left + f.left),
21
+ top: t.top + f.top,
22
+ bottom: o.totalHeight - (t.top + f.top)
23
+ }, [t, f, o]);
24
+ return !t || !a || !f || !r.selectedData || !e.show || !((n = e == null ? void 0 : e.content) != null && n.length) ? null : /* @__PURE__ */ c.jsxs(c.Fragment, { children: [
25
+ r.fixed && /* @__PURE__ */ c.jsxs("g", { transform: `translate(${t.left + f.left}, ${t.top + f.top})`, children: [
26
+ /* @__PURE__ */ c.jsx("rect", { width: o.chartWidth, height: o.chartHeight, fill: "rgba(255, 255, 255, 0.8)" }),
27
+ /* @__PURE__ */ c.jsx(
28
+ j,
28
29
  {
29
30
  dot: r.selectedData,
30
- scales: f,
31
- aesGetters: u
31
+ scales: a,
32
+ aesGetters: x
32
33
  }
33
34
  )
34
35
  ] }),
35
- /* @__PURE__ */ l.jsx(
36
- n,
36
+ /* @__PURE__ */ c.jsx(
37
+ g,
37
38
  {
38
- content: E(x, r.selectedData, a == null ? void 0 : a.content),
39
- x: f.x(r.selectedData.x),
40
- y: f.y(r.selectedData.y),
39
+ content: b(l, r.selectedData, e == null ? void 0 : e.content),
40
+ x: a.x(r.selectedData.x),
41
+ y: a.y(r.selectedData.y),
41
42
  active: !0,
42
43
  sideDistances: h,
43
44
  fixed: r.fixed,
@@ -47,15 +48,15 @@ const j = { left: 0, right: 0, top: 0, bottom: 0 }, v = c.memo(({
47
48
  )
48
49
  ] });
49
50
  });
50
- function E(r, a, m = []) {
51
+ function b(r, e, m = []) {
51
52
  const o = [];
52
53
  for (const t of m) {
53
- const f = t != null && t.format ? C(t.format) : void 0;
54
- o.push(`${t.label}: ${g(r, a.idx, t, f)}`);
54
+ const a = t != null && t.format ? p(t.format) : void 0;
55
+ o.push(`${t.label}: ${C(r, e.idx, t, a)}`);
55
56
  }
56
57
  return o;
57
58
  }
58
59
  export {
59
- v as ChartTooltip
60
+ w as ChartTooltip
60
61
  };
61
62
  //# sourceMappingURL=ChartTooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartTooltip.js","sources":["../../../src/scatterplot/components/ChartTooltip.tsx"],"sourcesContent":["import {format} from 'd3-format';\nimport { memo, useMemo } from 'react';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { Dot } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport {formatColumnValue} from '../utils/formatColumnValue';\nimport { ChartDot } from './ChartLayersData';\nimport type {\n AesGetters,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\ninterface Props {\n tooltipsData: TooltipsData<Dot>;\n dimensions: undefined | ChartDimensionsData;\n scales: undefined | ChartScales;\n keyColumn: ColumnName;\n margins: Margins;\n chartSizes: ChartSizes;\n tooltips: ScatterplotSettingsImpl['chartSettings']['tooltips'];\n aesGetters: AesGetters;\n}\n\nconst ZERO_SIDE_DISTANCES = { left: 0, right: 0, top: 0, bottom: 0 };\n\nexport const ChartTooltip = memo(({\n tooltipsData,\n tooltips,\n keyColumn: _,\n chartSizes,\n dimensions,\n scales,\n aesGetters,\n}: Props) => {\n const dataFrame = useDataFrame();\n const padding = dimensions?.padding;\n\n const sideDistances = useMemo(() => {\n if (!dimensions || !scales || !padding) {\n return ZERO_SIDE_DISTANCES;\n }\n\n return ({\n left: dimensions.left + padding.left,\n right: chartSizes.totalWidth - (dimensions.left + padding.left),\n top: dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (dimensions.top + padding.top),\n });\n }, [dimensions, padding, chartSizes]);\n\n if (!dimensions || !scales || !padding || !tooltipsData.selectedData || !tooltips.show) {\n return null;\n }\n\n return (\n <>\n {tooltipsData.fixed && \n <g transform={`translate(${dimensions.left + padding.left}, ${dimensions.top + padding.top})`}>\n <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>\n <ChartDot\n dot={tooltipsData.selectedData}\n scales={scales}\n aesGetters={aesGetters}\n />\n </g>\n }\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipsData.selectedData, tooltips?.content)}\n x={scales.x(tooltipsData.selectedData.x as unknown as { valueOf(): number; } & string) as number}\n y={scales.y(tooltipsData.selectedData.y as unknown as { valueOf(): number; } & string) as number}\n active\n sideDistances={sideDistances}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={null}\n />\n </>\n );\n});\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: Dot, columnsList: ColumnName[] = []) {\n const lines: string[] = [];\n for (const column of columnsList) {\n const columnFormatter = column?.format ? format(column.format) : undefined;\n lines.push(`${column.label}: ${formatColumnValue(dataFrame, dot.idx, column, columnFormatter)}`);\n }\n return lines;\n}\n"],"names":["ZERO_SIDE_DISTANCES","ChartTooltip","memo","tooltipsData","tooltips","_","chartSizes","dimensions","scales","aesGetters","dataFrame","useDataFrame","padding","sideDistances","useMemo","jsxs","Fragment","jsx","ChartDot","Tooltip","getTooltipContent","dot","columnsList","lines","column","columnFormatter","format","formatColumnValue"],"mappings":";;;;;;;AA8BA,MAAMA,IAAsB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAA,GAEpDC,IAAeC,EAAAA,KAAK,CAAC;AAAA,EAC9B,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAWC;AAAA,EACX,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AACJ,MAAa;AACT,QAAMC,IAAYC,EAAA,GACZC,IAAUL,KAAA,gBAAAA,EAAY,SAEtBM,IAAgBC,EAAAA,QAAQ,MACtB,CAACP,KAAc,CAACC,KAAU,CAACI,IACpBZ,IAGH;AAAA,IACJ,MAAMO,EAAW,OAAOK,EAAQ;AAAA,IAChC,OAAON,EAAW,cAAcC,EAAW,OAAOK,EAAQ;AAAA,IAC1D,KAAKL,EAAW,MAAMK,EAAQ;AAAA,IAC9B,QAAQN,EAAW,eAAeC,EAAW,MAAMK,EAAQ;AAAA,EAAA,GAEhE,CAACL,GAAYK,GAASN,CAAU,CAAC;AAEpC,SAAI,CAACC,KAAc,CAACC,KAAU,CAACI,KAAW,CAACT,EAAa,gBAAgB,CAACC,EAAS,OACvE,OAIPW,gBAAAA,EAAAA,KAAAC,YAAA,EACK,UAAA;AAAA,IAAAb,EAAa,SACVY,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaR,EAAW,OAAOK,EAAQ,IAAI,KAAKL,EAAW,MAAMK,EAAQ,GAAG,KACtF,UAAA;AAAA,MAAAK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOX,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,2BAAA,CAA0B;AAAA,MACnGW,gBAAAA,EAAAA;AAAAA,QAACC;AAAA,QAAA;AAAA,UACG,KAAKf,EAAa;AAAA,UAClB,QAAAK;AAAA,UACA,YAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,GACJ;AAAA,IAEJQ,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,SAASC,EAAkBV,GAAWP,EAAa,cAAcC,KAAA,gBAAAA,EAAU,OAAO;AAAA,QAClF,GAAGI,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,GAAGK,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,QAAM;AAAA,QACN,eAAAU;AAAA,QACA,OAAOV,EAAa;AAAA,QACpB,SAASA,EAAa;AAAA,QACtB,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EACf,GACJ;AAER,CAAC;AAED,SAASiB,EAAkBV,GAAsBW,GAAUC,IAA4B,CAAA,GAAI;AACvF,QAAMC,IAAkB,CAAA;AACxB,aAAWC,KAAUF,GAAa;AAC9B,UAAMG,IAAkBD,KAAA,QAAAA,EAAQ,SAASE,EAAOF,EAAO,MAAM,IAAI;AACjE,IAAAD,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKG,EAAkBjB,GAAWW,EAAI,KAAKG,GAAQC,CAAe,CAAC,EAAE;AAAA,EACnG;AACA,SAAOF;AACX;"}
1
+ {"version":3,"file":"ChartTooltip.js","sources":["../../../src/scatterplot/components/ChartTooltip.tsx"],"sourcesContent":["import {format} from 'd3-format';\nimport { memo, useMemo } from 'react';\nimport type { TooltipsData } from '../../common/Tooltip';\nimport { Tooltip } from '../../common/Tooltip';\nimport { useDataFrame } from '../../common/useDataFrame';\nimport type { DataFrame } from '../../DataFrame';\nimport type { ColumnName } from '../../types';\nimport type { Dot } from '../dots';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport {formatColumnValue} from '../utils/formatColumnValue';\nimport { ChartDot } from './ChartLayersData';\nimport type {\n AesGetters,\n ChartDimensionsData,\n ChartScales,\n ChartSizes,\n Margins\n} from './types';\n\ninterface Props {\n tooltipsData: TooltipsData<Dot>;\n dimensions: undefined | ChartDimensionsData;\n scales: undefined | ChartScales;\n keyColumn: ColumnName;\n margins: Margins;\n chartSizes: ChartSizes;\n tooltips: ScatterplotSettingsImpl['chartSettings']['tooltips'];\n aesGetters: AesGetters;\n}\n\nconst ZERO_SIDE_DISTANCES = { left: 0, right: 0, top: 0, bottom: 0 };\n\nexport const ChartTooltip = memo(({\n tooltipsData,\n tooltips,\n keyColumn: _,\n chartSizes,\n dimensions,\n scales,\n aesGetters,\n}: Props) => {\n const dataFrame = useDataFrame();\n const padding = dimensions?.padding;\n\n const sideDistances = useMemo(() => {\n if (!dimensions || !scales || !padding) {\n return ZERO_SIDE_DISTANCES;\n }\n\n return ({\n left: dimensions.left + padding.left,\n right: chartSizes.totalWidth - (dimensions.left + padding.left),\n top: dimensions.top + padding.top,\n bottom: chartSizes.totalHeight - (dimensions.top + padding.top),\n });\n }, [dimensions, padding, chartSizes]);\n\n if (!dimensions || !scales || !padding || !tooltipsData.selectedData || !tooltips.show || !tooltips?.content?.length) {\n return null;\n }\n\n return (\n <>\n {tooltipsData.fixed && \n <g transform={`translate(${dimensions.left + padding.left}, ${dimensions.top + padding.top})`}>\n <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255, 255, 255, 0.8)\"/>\n <ChartDot\n dot={tooltipsData.selectedData}\n scales={scales}\n aesGetters={aesGetters}\n />\n </g>\n }\n <Tooltip\n content={getTooltipContent(dataFrame, tooltipsData.selectedData, tooltips?.content)}\n x={scales.x(tooltipsData.selectedData.x as unknown as { valueOf(): number; } & string) as number}\n y={scales.y(tooltipsData.selectedData.y as unknown as { valueOf(): number; } & string) as number}\n active\n sideDistances={sideDistances}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={null}\n />\n </>\n );\n});\n\nfunction getTooltipContent(dataFrame: DataFrame, dot: Dot, columnsList: ColumnName[] = []) {\n const lines: string[] = [];\n for (const column of columnsList) {\n const columnFormatter = column?.format ? format(column.format) : undefined;\n lines.push(`${column.label}: ${formatColumnValue(dataFrame, dot.idx, column, columnFormatter)}`);\n }\n return lines;\n}\n"],"names":["ZERO_SIDE_DISTANCES","ChartTooltip","memo","tooltipsData","tooltips","_","chartSizes","dimensions","scales","aesGetters","dataFrame","useDataFrame","padding","sideDistances","useMemo","_a","jsxs","Fragment","jsx","ChartDot","Tooltip","getTooltipContent","dot","columnsList","lines","column","columnFormatter","format","formatColumnValue"],"mappings":";;;;;;;AA8BA,MAAMA,IAAsB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAA,GAEpDC,IAAeC,EAAAA,KAAK,CAAC;AAAA,EAC9B,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAWC;AAAA,EACX,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AACJ,MAAa;;AACT,QAAMC,IAAYC,EAAA,GACZC,IAAUL,KAAA,gBAAAA,EAAY,SAEtBM,IAAgBC,EAAAA,QAAQ,MACtB,CAACP,KAAc,CAACC,KAAU,CAACI,IACpBZ,IAGH;AAAA,IACJ,MAAMO,EAAW,OAAOK,EAAQ;AAAA,IAChC,OAAON,EAAW,cAAcC,EAAW,OAAOK,EAAQ;AAAA,IAC1D,KAAKL,EAAW,MAAMK,EAAQ;AAAA,IAC9B,QAAQN,EAAW,eAAeC,EAAW,MAAMK,EAAQ;AAAA,EAAA,GAEhE,CAACL,GAAYK,GAASN,CAAU,CAAC;AAEpC,SAAI,CAACC,KAAc,CAACC,KAAU,CAACI,KAAW,CAACT,EAAa,gBAAgB,CAACC,EAAS,QAAQ,GAACW,IAAAX,KAAA,gBAAAA,EAAU,YAAV,QAAAW,EAAmB,UACnG,OAIPC,gBAAAA,EAAAA,KAAAC,YAAA,EACK,UAAA;AAAA,IAAAd,EAAa,SACVa,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaT,EAAW,OAAOK,EAAQ,IAAI,KAAKL,EAAW,MAAMK,EAAQ,GAAG,KACtF,UAAA;AAAA,MAAAM,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOZ,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,2BAAA,CAA0B;AAAA,MACnGY,gBAAAA,EAAAA;AAAAA,QAACC;AAAA,QAAA;AAAA,UACG,KAAKhB,EAAa;AAAA,UAClB,QAAAK;AAAA,UACA,YAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,GACJ;AAAA,IAEJS,gBAAAA,EAAAA;AAAAA,MAACE;AAAA,MAAA;AAAA,QACG,SAASC,EAAkBX,GAAWP,EAAa,cAAcC,KAAA,gBAAAA,EAAU,OAAO;AAAA,QAClF,GAAGI,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,GAAGK,EAAO,EAAEL,EAAa,aAAa,CAA+C;AAAA,QACrF,QAAM;AAAA,QACN,eAAAU;AAAA,QACA,OAAOV,EAAa;AAAA,QACpB,SAASA,EAAa;AAAA,QACtB,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EACf,GACJ;AAER,CAAC;AAED,SAASkB,EAAkBX,GAAsBY,GAAUC,IAA4B,CAAA,GAAI;AACvF,QAAMC,IAAkB,CAAA;AACxB,aAAWC,KAAUF,GAAa;AAC9B,UAAMG,IAAkBD,KAAA,QAAAA,EAAQ,SAASE,EAAOF,EAAO,MAAM,IAAI;AACjE,IAAAD,EAAM,KAAK,GAAGC,EAAO,KAAK,KAAKG,EAAkBlB,GAAWY,EAAI,KAAKG,GAAQC,CAAe,CAAC,EAAE;AAAA,EACnG;AACA,SAAOF;AACX;"}
@@ -9,32 +9,32 @@ import { LEGEND_OFFSET as Y } from "../constants.js";
9
9
  import { Chart as _ } from "./Chart.js";
10
10
  import { ChartTooltip as q } from "./ChartTooltip.js";
11
11
  function tt({
12
- settingsId: g,
13
- chartSettings: x,
12
+ settingsId: x,
13
+ chartSettings: u,
14
14
  chartSizes: o,
15
15
  chartsDimensions: e,
16
16
  facetKeys: i,
17
- facetSettings: u,
17
+ facetSettings: j,
18
18
  scales: d,
19
- groupedDots: j,
20
- legendData: c,
19
+ groupedDots: c,
20
+ legendData: w,
21
21
  trendsData: s,
22
- columnsCount: w,
22
+ columnsCount: E,
23
23
  margins: l,
24
- keyColumn: E,
25
- mainTitle: T,
26
- facetTitles: v,
27
- captionsSizes: W,
28
- onlyPositive: C,
29
- layersData: F,
24
+ keyColumn: T,
25
+ mainTitle: v,
26
+ facetTitles: W,
27
+ captionsSizes: C,
28
+ onlyPositive: F,
29
+ layersData: L,
30
30
  aesGetters: a,
31
31
  discreteAxesLabels: p,
32
- onTooltipHintSwitch: L
32
+ onTooltipHintSwitch: M
33
33
  }) {
34
- const n = X(L), { xAxis: M, yAxis: $, title: h, frame: H, legend: P, tooltips: b } = x, m = e[i[0]].padding, B = e[i[w - 1]].padding, D = o.chartsWidth + Y, I = m.top, f = O.useMemo(() => Object.fromEntries(
34
+ const { xAxis: $, yAxis: H, title: h, frame: P, legend: b, tooltips: m } = u, n = X(M, m), f = e[i[0]].padding, B = e[i[E - 1]].padding, D = o.chartsWidth + Y, I = f.top, g = O.useMemo(() => Object.fromEntries(
35
35
  i.map((t) => [t, { x: d.x[t], y: d.y[t] }])
36
36
  ), [d.x, d.y, i]);
37
- return /* @__PURE__ */ r.jsx(G, { dataId: g, children: /* @__PURE__ */ r.jsx("div", { style: { position: "relative", width: o.totalWidth, height: o.totalHeight }, children: /* @__PURE__ */ r.jsxs(
37
+ return /* @__PURE__ */ r.jsx(G, { dataId: x, children: /* @__PURE__ */ r.jsx("div", { style: { position: "relative", width: o.totalWidth, height: o.totalHeight }, children: /* @__PURE__ */ r.jsxs(
38
38
  "svg",
39
39
  {
40
40
  xmlns: "http://www.w3.org/2000/svg",
@@ -48,10 +48,10 @@ function tt({
48
48
  /* @__PURE__ */ r.jsx(
49
49
  A,
50
50
  {
51
- title: T,
51
+ title: v,
52
52
  show: h.show,
53
53
  position: h.position,
54
- leftPadding: m.left,
54
+ leftPadding: f.left,
55
55
  rightPadding: B.right,
56
56
  chartsWidth: o.chartsWidth
57
57
  }
@@ -60,39 +60,39 @@ function tt({
60
60
  _,
61
61
  {
62
62
  facetKey: t,
63
- scales: f[t],
63
+ scales: g[t],
64
64
  width: o.chartWidth,
65
65
  height: o.chartHeight,
66
66
  dimensions: e[t],
67
- facetSettings: u,
68
- xAxis: M,
69
- yAxis: $,
67
+ facetSettings: j,
68
+ xAxis: $,
69
+ yAxis: H,
70
70
  discreteLabelsX: p.x[t],
71
71
  discreteLabelsY: p.y[t],
72
- frameType: H.type,
73
- dotsData: j[t],
72
+ frameType: P.type,
73
+ dotsData: c[t],
74
74
  trendsData: s ? s[t] : null,
75
- facetTitle: v[t],
76
- captionsSizes: W,
77
- layersData: F[t],
78
- onlyPositive: C,
75
+ facetTitle: W[t],
76
+ captionsSizes: C,
77
+ layersData: L[t],
78
+ onlyPositive: F,
79
79
  aesGetters: a,
80
80
  onMouseEnterDot: n.onMouseEnter,
81
81
  onMouseLeaveDot: n.onMouseLeave
82
82
  },
83
83
  t
84
84
  )),
85
- P.show && /* @__PURE__ */ r.jsx("g", { transform: `translate(${D},${I})`, children: /* @__PURE__ */ r.jsx(R, { legendData: c }) }),
85
+ b.show && /* @__PURE__ */ r.jsx("g", { transform: `translate(${D},${I})`, children: /* @__PURE__ */ r.jsx(R, { legendData: w }) }),
86
86
  /* @__PURE__ */ r.jsx(
87
87
  q,
88
88
  {
89
89
  tooltipsData: n,
90
90
  dimensions: e[n.currentFacet],
91
- scales: f[n.currentFacet],
92
- keyColumn: E,
91
+ scales: g[n.currentFacet],
92
+ keyColumn: T,
93
93
  margins: l,
94
94
  chartSizes: o,
95
- tooltips: b,
95
+ tooltips: m,
96
96
  aesGetters: a
97
97
  }
98
98
  )
@@ -1 +1 @@
1
- {"version":3,"file":"ChartsGroup.js","sources":["../../../src/scatterplot/components/ChartsGroup.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport type { ColumnName } from '../../types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { TrendsData } from '../linearRegression';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Chart } from './Chart';\nimport { ChartTooltip } from './ChartTooltip';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Margins,\n} from './types';\n\ninterface ChartsGroupProps {\n chartSettings: ScatterplotSettingsImpl['chartSettings'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n settingsId: string;\n groupedDots: GroupedDots;\n legendData: LegendData;\n trendsData: TrendsData | null;\n columnsCount: number;\n margins: Margins;\n keyColumn: ColumnName;\n mainTitle: string[];\n facetTitles: Record<string, string[]>;\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean, y: boolean};\n layersData: Record<string, ScatterplotLayerData[]>;\n aesGetters: AesGetters;\n discreteAxesLabels: {\n x: Record<string, Record<string, string[]>>,\n y: Record<string, Record<string, string[]>>\n };\n onTooltipHintSwitch: (v:boolean) => void;\n}\n\nexport function ChartsGroup({\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n scales,\n groupedDots,\n legendData,\n trendsData,\n columnsCount,\n margins,\n keyColumn,\n mainTitle,\n facetTitles,\n captionsSizes,\n onlyPositive,\n layersData,\n aesGetters,\n discreteAxesLabels,\n onTooltipHintSwitch\n}: ChartsGroupProps) {\n const tooltipsData = useTooltip<Dot>(onTooltipHintSwitch);\n \n const {xAxis, yAxis, title, frame, legend, tooltips} = chartSettings;\n\n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = leftTopChartPadding.top;\n\n const scalesByFacet = useMemo(() => {\n return Object.fromEntries(\n facetKeys.map(key => [key, {x: scales.x[key], y: scales.y[key]}])\n );\n }, [scales.x, scales.y, facetKeys]);\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <div style={{ position: 'relative', width: chartSizes.totalWidth, height: chartSizes.totalHeight }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{ position: 'absolute', top: 0, left: 0, zIndex: 0 }}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(key => (\n <Chart\n key={key}\n facetKey={key}\n scales={scalesByFacet[key]}\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n dimensions={chartsDimensions[key]}\n facetSettings={facetSettings}\n xAxis={xAxis}\n yAxis={yAxis}\n discreteLabelsX={discreteAxesLabels.x[key]}\n discreteLabelsY={discreteAxesLabels.y[key]}\n frameType={frame.type}\n dotsData={groupedDots[key]}\n trendsData={trendsData ? trendsData[key] : null}\n facetTitle={facetTitles[key]}\n captionsSizes={captionsSizes}\n layersData={layersData[key]}\n onlyPositive={onlyPositive}\n aesGetters={aesGetters}\n onMouseEnterDot={tooltipsData.onMouseEnter}\n onMouseLeaveDot={tooltipsData.onMouseLeave}\n />\n ))}\n {legend.show && (\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legendData} />\n </g>\n )}\n\n <ChartTooltip\n tooltipsData={tooltipsData}\n dimensions={chartsDimensions[tooltipsData.currentFacet]}\n scales={scalesByFacet[tooltipsData.currentFacet]}\n keyColumn={keyColumn}\n margins={margins}\n chartSizes={chartSizes}\n tooltips={tooltips}\n aesGetters={aesGetters}\n />\n </g>\n </svg>\n </div>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","scales","groupedDots","legendData","trendsData","columnsCount","margins","keyColumn","mainTitle","facetTitles","captionsSizes","onlyPositive","layersData","aesGetters","discreteAxesLabels","onTooltipHintSwitch","tooltipsData","useTooltip","xAxis","yAxis","title","frame","legend","tooltips","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","scalesByFacet","useMemo","key","ErrorBoundary","jsx","jsxs","fonts","ChartsTitle","Chart","Legend","ChartTooltip"],"mappings":"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"}
1
+ {"version":3,"file":"ChartsGroup.js","sources":["../../../src/scatterplot/components/ChartsGroup.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { ChartsTitle } from '../../common/ChartsTitle';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport fonts from '../../common/fonts';\nimport { Legend } from '../../common/Legend';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { LegendData } from '../../common/types';\nimport type { ColumnName } from '../../types';\nimport { LEGEND_OFFSET } from '../constants';\nimport type { Dot, GroupedDots } from '../dots';\nimport type { ScatterplotLayerData } from '../getLayersData';\nimport type { TrendsData } from '../linearRegression';\nimport type { ScatterplotSettingsImpl } from '../ScatterplotSettingsImpl';\nimport { Chart } from './Chart';\nimport { ChartTooltip } from './ChartTooltip';\nimport type {\n AesGetters,\n CaptionsSizes,\n ChartDimensionsData,\n ChartSizes,\n ChartsScales,\n Margins,\n} from './types';\n\ninterface ChartsGroupProps {\n chartSettings: ScatterplotSettingsImpl['chartSettings'];\n facetSettings: ScatterplotSettingsImpl['facetSettings'];\n chartSizes: ChartSizes;\n chartsDimensions: Record<string, ChartDimensionsData>;\n scales: ChartsScales;\n facetKeys: string[];\n settingsId: string;\n groupedDots: GroupedDots;\n legendData: LegendData;\n trendsData: TrendsData | null;\n columnsCount: number;\n margins: Margins;\n keyColumn: ColumnName;\n mainTitle: string[];\n facetTitles: Record<string, string[]>;\n captionsSizes: CaptionsSizes;\n onlyPositive: {x: boolean, y: boolean};\n layersData: Record<string, ScatterplotLayerData[]>;\n aesGetters: AesGetters;\n discreteAxesLabels: {\n x: Record<string, Record<string, string[]>>,\n y: Record<string, Record<string, string[]>>\n };\n onTooltipHintSwitch: (v:boolean) => void;\n}\n\nexport function ChartsGroup({\n settingsId,\n chartSettings,\n chartSizes,\n chartsDimensions,\n facetKeys,\n facetSettings,\n scales,\n groupedDots,\n legendData,\n trendsData,\n columnsCount,\n margins,\n keyColumn,\n mainTitle,\n facetTitles,\n captionsSizes,\n onlyPositive,\n layersData,\n aesGetters,\n discreteAxesLabels,\n onTooltipHintSwitch\n}: ChartsGroupProps) {\n const {xAxis, yAxis, title, frame, legend, tooltips} = chartSettings;\n const tooltipsData = useTooltip<Dot>(onTooltipHintSwitch, tooltips);\n \n const leftTopChartPadding = chartsDimensions[facetKeys[0]].padding;\n const rightTopChartPadding = chartsDimensions[facetKeys[columnsCount - 1]].padding;\n\n const legendLeft = chartSizes.chartsWidth + LEGEND_OFFSET;\n const legendTop = leftTopChartPadding.top;\n\n const scalesByFacet = useMemo(() => {\n return Object.fromEntries(\n facetKeys.map(key => [key, {x: scales.x[key], y: scales.y[key]}])\n );\n }, [scales.x, scales.y, facetKeys]);\n\n return (\n <ErrorBoundary dataId={settingsId}>\n <div style={{ position: 'relative', width: chartSizes.totalWidth, height: chartSizes.totalHeight }}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${chartSizes.totalWidth} ${chartSizes.totalHeight}`}\n width={chartSizes.totalWidth}\n height={chartSizes.totalHeight}\n style={{ position: 'absolute', top: 0, left: 0, zIndex: 0 }}\n >\n <defs>{fonts}</defs>\n <g transform={`translate(${margins.left},${margins.top})`} fontFamily=\"Manrope\">\n <ChartsTitle\n title={mainTitle}\n show={title.show}\n position={title.position}\n leftPadding={leftTopChartPadding.left}\n rightPadding={rightTopChartPadding.right}\n chartsWidth={chartSizes.chartsWidth}\n />\n {facetKeys.map(key => (\n <Chart\n key={key}\n facetKey={key}\n scales={scalesByFacet[key]}\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n dimensions={chartsDimensions[key]}\n facetSettings={facetSettings}\n xAxis={xAxis}\n yAxis={yAxis}\n discreteLabelsX={discreteAxesLabels.x[key]}\n discreteLabelsY={discreteAxesLabels.y[key]}\n frameType={frame.type}\n dotsData={groupedDots[key]}\n trendsData={trendsData ? trendsData[key] : null}\n facetTitle={facetTitles[key]}\n captionsSizes={captionsSizes}\n layersData={layersData[key]}\n onlyPositive={onlyPositive}\n aesGetters={aesGetters}\n onMouseEnterDot={tooltipsData.onMouseEnter}\n onMouseLeaveDot={tooltipsData.onMouseLeave}\n />\n ))}\n {legend.show && (\n <g transform={`translate(${legendLeft},${legendTop})`}>\n <Legend legendData={legendData} />\n </g>\n )}\n\n <ChartTooltip\n tooltipsData={tooltipsData}\n dimensions={chartsDimensions[tooltipsData.currentFacet]}\n scales={scalesByFacet[tooltipsData.currentFacet]}\n keyColumn={keyColumn}\n margins={margins}\n chartSizes={chartSizes}\n tooltips={tooltips}\n aesGetters={aesGetters}\n />\n </g>\n </svg>\n </div>\n </ErrorBoundary>\n );\n}\n"],"names":["ChartsGroup","settingsId","chartSettings","chartSizes","chartsDimensions","facetKeys","facetSettings","scales","groupedDots","legendData","trendsData","columnsCount","margins","keyColumn","mainTitle","facetTitles","captionsSizes","onlyPositive","layersData","aesGetters","discreteAxesLabels","onTooltipHintSwitch","xAxis","yAxis","title","frame","legend","tooltips","tooltipsData","useTooltip","leftTopChartPadding","rightTopChartPadding","legendLeft","LEGEND_OFFSET","legendTop","scalesByFacet","useMemo","key","ErrorBoundary","jsx","jsxs","fonts","ChartsTitle","Chart","Legend","ChartTooltip"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { DataFrame } from '../DataFrame';
2
2
  import { ColumnName, DataValue } from '../types';
3
- import { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';
3
+ import { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';
4
4
  export type Dot = {
5
5
  idx: number;
6
6
  x: string | number;
@@ -15,4 +15,4 @@ export type GroupedDots = Record<string, {
15
15
  maxY: number;
16
16
  dots: Dot[];
17
17
  }>;
18
- export declare function getDots(data: DataFrame, facetKeysCombinations: string[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']): GroupedDots;
18
+ export declare function getDots(data: DataFrame, facetKeysCombinations: string[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'], dotsLayer?: DotsLayer): GroupedDots;
@@ -1,23 +1,23 @@
1
- import { formatColumnValue as w } from "./utils/formatColumnValue.js";
2
- import { sortDotsByGrouping as F } from "./utils/sortDotsByGrouping.js";
3
- import { format as G } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
4
- function D(t, x, v, I, o, m, g, C, M) {
5
- const l = {}, V = o != null && o.format ? G(o.format) : void 0;
1
+ import { formatColumnValue as F } from "./utils/formatColumnValue.js";
2
+ import { sortDotsByGrouping as G } from "./utils/sortDotsByGrouping.js";
3
+ import { format as X } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
4
+ function h(t, x, v, I, o, m, g, C, M, V) {
5
+ const l = {}, d = o != null && o.format ? X(o.format) : void 0;
6
6
  for (const p of x) {
7
7
  const r = [];
8
8
  let s = 1 / 0, u = 1 / 0, f = -1 / 0, c = -1 / 0;
9
- const d = p.concat([""]), y = t.getRowsByGrouping(d);
9
+ const w = p.concat([""]), y = t.getRowsByGrouping(w);
10
10
  for (let a = 0; a < y.length; a++) {
11
11
  const n = y[a], e = t.getColumnValue(v.value, n), i = t.getColumnValue(I.value, n);
12
12
  C.scale !== "discrete" && (typeof e != "number" || !isFinite(e)) || M.scale !== "discrete" && (typeof i != "number" || !isFinite(i)) || (s = Math.min(s, e), u = Math.min(u, i), f = Math.max(f, e), c = Math.max(c, i), r.push({
13
13
  x: e,
14
14
  y: i,
15
- label: w(t, n, o, V),
15
+ label: F(t, n, o, d),
16
16
  dimmed: m ? !t.getColumnValue(m.value, n) : !1,
17
17
  idx: n
18
18
  }));
19
19
  }
20
- F(t, r, g, m), l[p.join("_")] = {
20
+ G(t, r, g, m, V), l[p.join("_")] = {
21
21
  minX: s,
22
22
  maxX: f,
23
23
  minY: u,
@@ -28,6 +28,6 @@ function D(t, x, v, I, o, m, g, C, M) {
28
28
  return l;
29
29
  }
30
30
  export {
31
- D as getDots
31
+ h as getDots
32
32
  };
33
33
  //# sourceMappingURL=dots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBN,KAAA,QAAAA,EAAO,SAASO,EAAOP,EAAM,MAAM,IAAI;AAE9D,aAAWQ,KAAaX,GAAuB;AAC3C,UAAMY,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOnB,EAAK,kBAAkBkB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAAStB,EAAK,eAAeE,EAAE,OAAOmB,CAAM,GAC5CE,IAASvB,EAAK,eAAeG,EAAE,OAAOkB,CAAM;AAElD,MAAId,EAAM,UAAU,eAAe,OAAOe,KAAW,YAAY,CAAC,SAASA,CAAM,MAG7Ed,EAAM,UAAU,eAAe,OAAOe,KAAW,YAAY,CAAC,SAASA,CAAM,OAIjFT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAA,QACH,GAAGC;AAAA,QACH,OAAOC,EAAkBxB,GAAMqB,GAAQjB,GAAOM,CAAc;AAAA,QAC5D,QAAQL,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOgB,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAA,MAAA,CACR;AAAA,IACL;AAEA,IAAAI,EAAmBzB,GAAMa,GAAMP,GAAUD,CAAS,GAElDI,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAA,MACA,MAAAE;AAAA,MACA,MAAAD;AAAA,MACA,MAAAE;AAAA,MACA,MAAAJ;AAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;"}
1
+ {"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n dotsLayer?: DotsLayer\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight, dotsLayer);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","dotsLayer","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBP,KAAA,QAAAA,EAAO,SAASQ,EAAOR,EAAM,MAAM,IAAI;AAE9D,aAAWS,KAAaZ,GAAuB;AAC3C,UAAMa,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOpB,EAAK,kBAAkBmB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASvB,EAAK,eAAeE,EAAE,OAAOoB,CAAM,GAC5CE,IAASxB,EAAK,eAAeG,EAAE,OAAOmB,CAAM;AAElD,MAAIf,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,MAG7Ef,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,OAIjFT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAA,QACH,GAAGC;AAAA,QACH,OAAOC,EAAkBzB,GAAMsB,GAAQlB,GAAOO,CAAc;AAAA,QAC5D,QAAQN,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOiB,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAA,MAAA,CACR;AAAA,IACL;AAEA,IAAAI,EAAmB1B,GAAMc,GAAMR,GAAUD,GAAWI,CAAS,GAE7DC,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAA,MACA,MAAAE;AAAA,MACA,MAAAD;AAAA,MACA,MAAAE;AAAA,MACA,MAAAJ;AAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;"}
@@ -19,6 +19,7 @@ export declare class ChartScatterplot extends AbstractChart {
19
19
  dotsByFacets: GroupedDots;
20
20
  facetKeys: string[];
21
21
  facetKeysCombinations: string[][];
22
+ facetLabels: Record<string, string[]>;
22
23
  trendsData: TrendsData | null;
23
24
  legendLabels: ScatterplotLegendInfo;
24
25
  layersData: Record<string, ScatterplotLayerData[]>;