@milaboratories/miplots4 1.0.128 → 1.0.129

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 (39) hide show
  1. package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
  2. package/dist/heatmap/ChartRenderer.js +251 -233
  3. package/dist/heatmap/ChartRenderer.js.map +1 -1
  4. package/dist/heatmap/components/Captions/GroupCaptions.d.ts.map +1 -1
  5. package/dist/heatmap/components/Captions/GroupCaptions.js +45 -36
  6. package/dist/heatmap/components/Captions/GroupCaptions.js.map +1 -1
  7. package/dist/heatmap/components/Chart.d.ts.map +1 -1
  8. package/dist/heatmap/components/Chart.js +71 -69
  9. package/dist/heatmap/components/Chart.js.map +1 -1
  10. package/dist/heatmap/components/Dendrograms.d.ts +3 -1
  11. package/dist/heatmap/components/Dendrograms.d.ts.map +1 -1
  12. package/dist/heatmap/components/Dendrograms.js +54 -48
  13. package/dist/heatmap/components/Dendrograms.js.map +1 -1
  14. package/dist/heatmap/components/types.d.ts +2 -2
  15. package/dist/heatmap/components/types.d.ts.map +1 -1
  16. package/dist/heatmap/getDendrograms.d.ts +2 -2
  17. package/dist/heatmap/getDendrograms.d.ts.map +1 -1
  18. package/dist/heatmap/getDendrograms.js +36 -36
  19. package/dist/heatmap/getDendrograms.js.map +1 -1
  20. package/dist/heatmap/utils/calculateCaptionTails.d.ts +2 -2
  21. package/dist/heatmap/utils/calculateCaptionTails.d.ts.map +1 -1
  22. package/dist/heatmap/utils/calculateCaptionTails.js +89 -54
  23. package/dist/heatmap/utils/calculateCaptionTails.js.map +1 -1
  24. package/dist/heatmap/utils/calculateChartSideElementSizes.js +19 -19
  25. package/dist/heatmap/utils/calculateChartSideElementSizes.js.map +1 -1
  26. package/dist/scatterplot/ChartRenderer.d.ts.map +1 -1
  27. package/dist/scatterplot/ChartRenderer.js +191 -178
  28. package/dist/scatterplot/ChartRenderer.js.map +1 -1
  29. package/dist/scatterplot/components/ChartsGroup.js +3 -3
  30. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  31. package/dist/scatterplot-umap/components/Lasso.d.ts.map +1 -1
  32. package/dist/scatterplot-umap/components/Lasso.js +148 -124
  33. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  34. package/dist/scatterplot-umap/components/LowerSVG.js +12 -12
  35. package/dist/scatterplot-umap/components/LowerSVG.js.map +1 -1
  36. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  37. package/dist/scatterplot-umap/index.js +60 -60
  38. package/dist/scatterplot-umap/index.js.map +1 -1
  39. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import {Error} from '../common/Error';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport {FACET_TITLE_LINE} from '../discrete/constants';\nimport {splitTextByWidth} from '../discrete/utils';\nimport type {CurveLayer, DotsLayer} from './ScatterplotSettingsImpl';\nimport type {AesGetters, CaptionsSizes, Margins} from './components/types';\nimport {\n DEFAULT_DOT_AES,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport {LEGEND_OFFSET} from './constants';\nimport type {GroupedDots} from './dots';\nimport type {ScatterplotLayerData} from './getLayersData';\nimport type {TrendsData} from './linearRegression';\nimport type {ScatterplotLayer} from './ScatterplotSettingsImpl';\nimport type {ScatterplotSettingsImpl} from './ScatterplotSettingsImpl';\nimport {createAesGetter} from './utils/createAesGetter';\nimport {getTicksAndFormat} from './utils/getTicksAndFormat';\nimport {isContinuousAes} from '../types';\nimport type {ColumnName, ScatterplotLegendInfo} from '../types';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {ScaleLinear} from 'd3-scale';\nimport {scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog} from 'd3-scale';\nimport {DEFAULT_TICKS_SIZE, PADDINGS} from './constants';\nimport type {ReactElement} from 'react';\nimport React from 'react';\nimport type {Root} from 'react-dom/client';\nimport {createRoot} from 'react-dom/client';\nimport {ChartsGroup} from './components/ChartsGroup';\nimport type {ChartDimensionsData, ChartSizes, ChartsScales} from './components/types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings?: ScatterplotSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n facetKeys.forEach(key => {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n this.scales.x[key] = scaleX;\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain();\n const i1 = trend.getInterval(xBounds[0]);\n const i2 = trend.getInterval(xBounds[1]);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n this.scales.y[key] = scaleY;\n });\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = info.aesMap[columnValue]?.[key] ?? BLACK;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = info.aesMap[columnValue]?.[key] ?? '21';\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = info.aesMap[columnValue]?.[key] ?? 3;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, groupedDots, trendsData);\n this.updateCaptionsSize(onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins();\n const component = (\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","createAesGetters","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","scaleX","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","_b","_c","scaleOrdinal","value","layer","isContinuousAes","domain","range","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","ChartsGroup","message","Error"],"mappings":"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"}
1
+ {"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot/ChartRenderer.tsx"],"sourcesContent":["import {Error} from '../common/Error';\nimport {\n BLACK,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n MAX_SHOWN_UNIQUE_VALUES_IN_LABELS,\n TITLE_LINE_HEIGHT,\n TITLE_MARGIN,\n} from '../constants';\nimport {FACET_TITLE_LINE} from '../discrete/constants';\nimport {splitTextByWidth} from '../discrete/utils';\nimport type {CurveLayer, DotsLayer} from './ScatterplotSettingsImpl';\nimport type {AesGetters, CaptionsSizes, Margins} from './components/types';\nimport {\n DEFAULT_DOT_AES,\n FACET_AXIS_OFFSET,\n FACET_TITLE_OFFSET,\n MIN_MARGIN,\n MIN_PADDING,\n TICK_OFFSET,\n TITLE_LINE,\n} from './constants';\nimport {LEGEND_OFFSET} from './constants';\nimport type {GroupedDots} from './dots';\nimport type {ScatterplotLayerData} from './getLayersData';\nimport type {TrendsData} from './linearRegression';\nimport type {ScatterplotLayer} from './ScatterplotSettingsImpl';\nimport type {ScatterplotSettingsImpl} from './ScatterplotSettingsImpl';\nimport {createAesGetter} from './utils/createAesGetter';\nimport {getTicksAndFormat} from './utils/getTicksAndFormat';\nimport {isContinuousAes} from '../types';\nimport type {ColumnName, ScatterplotLegendInfo} from '../types';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {ScaleLinear} from 'd3-scale';\nimport {scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog} from 'd3-scale';\nimport {DEFAULT_TICKS_SIZE, PADDINGS} from './constants';\nimport type {ReactElement} from 'react';\nimport React from 'react';\nimport type {Root} from 'react-dom/client';\nimport {createRoot} from 'react-dom/client';\nimport {ChartsGroup} from './components/ChartsGroup';\nimport type {ChartDimensionsData, ChartSizes, ChartsScales} from './components/types';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\nimport type { DotAesItem, LegendData, LegendItem } from '../common/types';\n\nfunction getChartEdgeSides(index: number, facetsCount: number, columnsCount: number, rowsCount: number) {\n const chartSides: ('left' | 'right' | 'top' | 'bottom')[] = [];\n if (index % columnsCount === columnsCount - 1) {\n chartSides.push('right');\n }\n if (index % columnsCount === 0) {\n chartSides.push('left');\n }\n if (index < columnsCount) {\n chartSides.push('top');\n }\n if (\n Math.ceil((index + 1) / columnsCount) === rowsCount ||\n (Math.ceil((index + 1) / columnsCount) === rowsCount - 1 &&\n index % columnsCount > (facetsCount - 1) % columnsCount)\n ) {\n chartSides.push('bottom');\n }\n return chartSides;\n}\n\nfunction calculatePaddings(\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n captionsSizes: CaptionsSizes,\n currentRowFacetKeys: string[],\n facetTitles: Record<string, string[]>,\n chartEdgeSides: ('left' | 'right' | 'top' | 'bottom')[],\n facetSettings?: ScatterplotSettingsImpl['facetSettings']\n) {\n const needLeftAxis = chartEdgeSides.includes('left') || !facetSettings?.sharedY;\n const needLeftAxisTitle = chartEdgeSides.includes('left') && yAxis.title !== '';\n const needBottomAxis = chartEdgeSides.includes('bottom') || !facetSettings?.sharedX;\n const needBottomAxisTitle = chartEdgeSides.includes('bottom') && xAxis.title !== '';\n\n const yCaptions = captionsSizes.yAxisCaptionsWidth + 2 * TICK_OFFSET;\n const yTicks = (yAxis.showTicks ? DEFAULT_TICKS_SIZE : 0) + TICK_OFFSET;\n const yAxisTitle = needLeftAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const xCaptions = captionsSizes.xAxisCaptionsWidth + 2 * TICK_OFFSET;\n const xTicks = xAxis.showTicks ? DEFAULT_TICKS_SIZE : 0;\n const xAxisTitle = needBottomAxisTitle ? TITLE_LINE + MIN_PADDING : 0;\n\n const leftAxisElements = yCaptions + yTicks + yAxisTitle + FACET_AXIS_OFFSET;\n const bottomAxisElements = xCaptions + xTicks + xAxisTitle + FACET_AXIS_OFFSET;\n\n const facetTitlesLinesCount = Math.max(...currentRowFacetKeys.map(key => facetTitles[key].length));\n return {\n left: needLeftAxis ? leftAxisElements : MIN_PADDING,\n top: facetTitlesLinesCount === 0 ? 0 : FACET_TITLE_OFFSET * 2 + facetTitlesLinesCount * FACET_TITLE_LINE,\n bottom: needBottomAxis ? bottomAxisElements + 8 : MIN_PADDING,\n right: MIN_PADDING,\n };\n}\n\n// facet keys grouped by rows\nfunction getFacetRows(facetKeys: string[], nRows: number, nColumns: number): string[][] {\n const result: string[][] = [];\n for (let i = 0; i < nRows; i++) {\n result.push(facetKeys.slice(i * nColumns, i * nColumns + nColumns));\n }\n return result;\n}\n\nfunction getRowColumn(idx: number, columnsCount: number) {\n const row = Math.floor(idx / columnsCount);\n const column = idx - row * columnsCount;\n return [row, column];\n}\n\nfunction createAesGetters(\n legendInfo: ScatterplotLegendInfo,\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend']\n): AesGetters {\n const dotLayer = layers.find(l => l.type === 'dots') as DotsLayer | undefined;\n const curveLayer = layers.find(l => l.type === 'curve') as CurveLayer | undefined;\n\n return {\n dotShape: createAesGetter(legendInfo, dotLayer?.aes.dotShape ?? DEFAULT_DOT_AES.shape,'dotShape'),\n dotColor: createAesGetter(legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineShape: createAesGetter(legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape'),\n lineColor: createAesGetter(legendInfo, curveLayer?.aes.lineColor ?? BLACK, 'lineColor'),\n trendColor: createAesGetter(legendInfo, trend?.color ?? DEFAULT_DOT_AES.color, 'fillColor')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n component: ReactElement = (<></>);\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartsDimensions: Record<string, ChartDimensionsData> = {};\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\n chartsWidth: DEFAULT_WIDTH, // width of all charts in charts row\n chartsHeight: DEFAULT_HEIGHT, // width of all charts in charts column, without axes\n totalWidth: DEFAULT_WIDTH, // width of all charts in charts row, plus left axis, plus legend\n totalHeight: DEFAULT_HEIGHT, // width of all charts in charts height, plus bottom axis, plus top title\n };\n columnsCount = 1;\n rowsCount = 1;\n scales: ChartsScales = {\n x: {null: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH])},\n y: {null: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0])},\n };\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n facetTitles: Record<string, string[]> = {}; // can be multiline\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n clear() {\n if (this.parentNode && this.rootNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode = null;\n this.rootNode = null;\n }\n // timeout to avoid trying to unmount during rendering\n setTimeout(() => {\n this.reactRoot?.unmount();\n this.reactRoot = null;\n });\n }\n\n init(node: HTMLElement) {\n if (this.parentNode === null) {\n this.parentNode = node;\n this.rootNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateChartDimensions(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n ) {\n const {chartWidth, chartHeight} = this.chartSizes;\n let currentLeft = 0;\n let currentTop = 0;\n this.chartsDimensions = facetKeys.reduce((res: Record<string, ChartDimensionsData>, key: string, index) => {\n const [currentRow, currentColumn] = getRowColumn(index, this.columnsCount);\n const chartEdgeSides = getChartEdgeSides(index, facetKeys.length, this.columnsCount, this.rowsCount);\n const padding = calculatePaddings(\n xAxis,\n yAxis,\n this.captionsSizes,\n getFacetRows(facetKeys, this.rowsCount, this.columnsCount)[currentRow],\n this.facetTitles,\n chartEdgeSides,\n facetSettings\n );\n\n const outerWidth = chartWidth + padding.left + padding.right;\n const outerHeight = chartHeight + padding.top + padding.bottom;\n res[key] = {\n left: currentLeft,\n top: currentTop,\n chartEdgeSides,\n padding,\n inner: {width: chartWidth, height: chartHeight},\n outer: {width: outerWidth, height: outerHeight},\n };\n currentLeft += outerWidth;\n if (currentColumn === this.columnsCount - 1) {\n currentLeft = 0;\n currentTop += outerHeight;\n }\n return res;\n }, {});\n\n const chartsWidth = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.width + this.chartsDimensions[key].left)\n );\n const chartsHeight = Math.max(\n ...facetKeys.map(key => this.chartsDimensions[key].outer.height + this.chartsDimensions[key].top)\n );\n this.chartSizes.chartsWidth = chartsWidth;\n this.chartSizes.chartsHeight = chartsHeight;\n }\n\n updateViewport(\n facetKeys: string[],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null\n ) {\n const facetCount = facetKeys.length;\n const maxNRows = Math.min(facetSettings.nRows ?? facetCount, facetCount);\n const maxNCols = Math.min(facetSettings.nCols ?? facetCount, facetCount);\n // Use columns/rows count from settings if some of them defined, else make 1 column\n this.columnsCount = facetSettings.nRows ? Math.ceil(facetCount / maxNRows) : maxNCols;\n this.rowsCount = Math.ceil(facetCount / this.columnsCount);\n\n let [minXAll, maxXAll] = [Infinity, -Infinity];\n let [minYAll, maxYAll] = [Infinity, -Infinity];\n const dotExtentsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const dotsData = groupedDots[key];\n const {minX, minY, maxX, maxY} = dotsData;\n minXAll = Math.min(minXAll, minX);\n minYAll = Math.min(minYAll, minY);\n maxXAll = Math.max(maxXAll, maxX);\n maxYAll = Math.max(maxYAll, maxY);\n res[key] = {minX, maxX, minY, maxY};\n return res;\n }, {});\n\n const newScalesX:ChartsScales['x'] = {};\n const newScalesY:ChartsScales['y'] = {};\n\n let needsUpdateXScales = false;\n let needsUpdateYScales = false;\n facetKeys.forEach(key => {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const extents = dotExtentsByKeys[key];\n let minX = xAxis.lowerValue ? Number(xAxis.lowerValue) : facetSettings.sharedX ? minXAll : extents.minX;\n let maxX = xAxis.upperValue ? Number(xAxis.upperValue) : facetSettings.sharedX ? maxXAll : extents.maxX;\n\n if (typeof xAxis.symmetricRange !== 'undefined') {\n const middle = xAxis.symmetricRange;\n if (middle >= minX && middle <= maxX) {\n const halfRange = Math.max(middle - minX, maxX - middle);\n minX = middle - halfRange;\n maxX = middle + halfRange;\n }\n }\n\n const rangeH = [0, this.chartSizes.chartWidth];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempX = scaleX\n .copy()\n .domain([minX, maxX])\n .range([PADDINGS.LEFT, this.chartSizes.chartWidth - PADDINGS.RIGHT]);\n scaleX\n .domain([tempX.invert(0), tempX.invert(this.chartSizes.chartWidth)])\n .range(rangeH)\n .nice();\n const prevScale = this.scales.x[key];\n if (prevScale && !needsUpdateXScales) {\n const domain = prevScale.domain();\n const range = prevScale.domain();\n if (\n domain[0] !== scaleX.domain()[0] || domain[1] !== scaleX.domain()[1]\n || range[0] !== scaleX.range()[0] || range[1] !== scaleX.range()[1]\n ) {\n needsUpdateXScales = true;\n }\n }\n newScalesX[key] = scaleX;\n });\n // for right Y viewport bounds we must know X bounds, to calculate trends area Y bounds\n const trendYBoundsByKeys = facetKeys.reduce((res: Record<string, Record<string, number>>, key) => {\n const trendsList = trendsData ? trendsData[key] : [];\n res[key] = trendsList.reduce(\n (res, trend) => {\n const xBounds = trend.bounded ? trend.xBounds : this.scales.x[key].domain();\n const i1 = trend.getInterval(xBounds[0]);\n const i2 = trend.getInterval(xBounds[1]);\n res.minY = Math.min(res.minY, isNaN(i1.left) ? res.minY : i1.left, isNaN(i2.left) ? res.minY : i2.left);\n res.maxY = Math.max(res.maxY, isNaN(i1.right) ? res.maxY : i1.right, isNaN(i2.right) ? res.maxY : i2.right);\n return res;\n },\n {minY: Infinity, maxY: -Infinity}\n );\n minYAll = Math.min(minYAll, res[key].minY);\n maxYAll = Math.max(maxYAll, res[key].maxY);\n return res;\n }, {});\n facetKeys.forEach(key => {\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n const dotExtents = dotExtentsByKeys[key];\n const trendExtents = trendYBoundsByKeys[key];\n let minY = yAxis.lowerValue ? Number(yAxis.lowerValue) : facetSettings.sharedY ? minYAll : Math.min(dotExtents.minY, trendExtents.minY);\n let maxY = yAxis.upperValue ? Number(yAxis.upperValue) : facetSettings.sharedY ? maxYAll : Math.max(dotExtents.maxY, trendExtents.maxY);\n\n if (typeof yAxis.symmetricRange !== 'undefined') {\n const middle = yAxis.symmetricRange;\n if (middle >= minY && middle <= maxY) {\n const halfRange = Math.max(middle - minY, maxY - middle);\n minY = middle - halfRange;\n maxY = middle + halfRange;\n }\n }\n\n const rangeV = [this.chartSizes.chartHeight, 0];\n // supporting scale, it needs to add offsets of fixed size in pixels to general scale Y\n const tempY = scaleY\n .copy()\n .domain([minY, maxY])\n .range([this.chartSizes.chartHeight - PADDINGS.BOTTOM, PADDINGS.TOP]);\n scaleY\n .domain([tempY.invert(this.chartSizes.chartHeight), tempY.invert(0)])\n .range(rangeV)\n .nice();\n\n const prevScale = this.scales.y[key];\n if (prevScale && !needsUpdateYScales) {\n const domain = prevScale.domain();\n const range = prevScale.domain();\n if (\n domain[0] !== scaleY.domain()[0] || domain[1] !== scaleY.domain()[1]\n || range[0] !== scaleY.range()[0] || range[1] !== scaleY.range()[1]\n ) {\n needsUpdateYScales = true;\n }\n }\n newScalesY[key] = scaleY;\n });\n\n if (needsUpdateXScales) {\n this.scales.x = newScalesX;\n }\n if (needsUpdateYScales) {\n this.scales.y = newScalesY;\n }\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n let maxYTick = 0;\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n Object.values(this.scales.y).forEach(scale => {\n const {ticks, format} = getTicksAndFormat(scale, onlyPositive);\n maxYTick = Math.max(maxYTick, getMaxTickWidth(ticks.map(format)));\n });\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(facetKeys: string[], title: ScatterplotSettingsImpl['chartSettings']['title']) {\n const firstChart = this.chartsDimensions[facetKeys[0]];\n const lastChart = this.chartsDimensions[facetKeys[facetKeys.length - 1]];\n\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.chartsWidth - firstChart.padding.left - lastChart.padding.right,\n 20\n );\n }\n\n createFacetTitles(facetKeys: string[], facetLabels: string[][]) {\n this.facetTitles = facetKeys.reduce((res: Record<string, string[]>, key, idx) => {\n if (facetLabels[idx].length === 1 && facetLabels[idx][0] === 'null') {\n res[key] = [];\n } else {\n res[key] = splitTextByWidth(facetLabels[idx].join(', '), this.chartSizes.chartWidth, 14);\n }\n return res;\n }, {});\n }\n\n updateMargins() {\n const titleTextHeight = TITLE_LINE_HEIGHT * this.mainTitle.length;\n const titleHeight = titleTextHeight > 0 ? titleTextHeight + TITLE_MARGIN * 2 : 0;\n this.margins = {\n top: Math.max(titleHeight, MIN_MARGIN),\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartsWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartsHeight, this.legend.height) + this.margins.bottom;\n }\n\n updateLegendSize(\n legend: ScatterplotSettingsImpl['chartSettings']['legend'],\n legendInfo: ScatterplotLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotLayer[]\n ) {\n if (!legend.show) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const legendItems: LegendItem[] = [];\n const emptySizes = {width:0, height:0, left:0, top: 0};\n\n grouping.forEach(column => {\n const info = legendInfo[column.value];\n if (info.usedAes.length === 0 || !info.aesMap) {\n return;\n }\n if (info.values.length > MAX_SHOWN_UNIQUE_VALUES_IN_LABELS) {\n console.warn(`Too many values for discrete legend (${info.values.length})`);\n return;\n }\n const aesData: Record<string, DotAesItem> = {};\n info.values.forEach(columnValue => {\n if (!aesData[columnValue]) {\n aesData[columnValue] = {...DEFAULT_DOT_AES} as DotAesItem;\n }\n info.usedAes.forEach(key => {\n if (key === 'dotFill' || key === 'lineColor') {\n aesData[columnValue].color = info.aesMap[columnValue]?.[key] ?? BLACK;\n }\n if (key === 'dotShape') {\n aesData[columnValue].shape = info.aesMap[columnValue]?.[key] ?? '21';\n }\n if (key === 'dotSize') {\n aesData[columnValue].size = info.aesMap[columnValue]?.[key] ?? 3;\n }\n });\n });\n\n const title = column.label ?? column.value;\n const scale = scaleOrdinal<DotAesItem>()\n .domain(info.values)\n .range(info.values.map(value => aesData[value]))\n .unknown(DEFAULT_DOT_AES);\n legendItems.push({...emptySizes, id: column.value, type: 'dots', title, scale, values:info.values, labels:info.labels});\n });\n\n layers.forEach(layer => {\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotFill)) {\n const {domain, range, columnName, type = 'linear'} = layer.aes.dotFill;\n const title = columnName.label ?? columnName.value;\n const colorScale = getContinuousColorScale(range, domain, 'linear') as ScaleLinear<string, string>; // always linear for legend - scale to render gradient, not for dots\n const tickPositionScale = (type === 'log' ? scaleSymlog<string, string>() : scaleLinear<string, string>())\n .domain(domain)\n // @ts-ignore\n .range([this.chartSizes.chartHeight, 0]);\n const values = getContinuousLegendTicks(tickPositionScale, domain as [number, number]);\n legendItems.push({...emptySizes, id: 'dotFill', type: 'continuous', title, scale: colorScale, tickPositionScale, values});\n }\n if (layer.type === 'dots' && isContinuousAes(layer.aes.dotSize)) {\n const {columnName, domain, range} = layer.aes.dotSize;\n const title = columnName.label ?? columnName.value;\n const scale = scaleSqrt(domain, range);\n const values = scale.ticks(3);\n const format = scale.tickFormat(3);\n const labels = values.reduce((res: Record<string, string>, v) => {\n res[String(v)] = format(v);\n return res;\n }, {});\n legendItems.push({...emptySizes, id: columnName.value, type: 'size', title, scale, values, labels});\n }\n });\n\n if (!legendItems.length) {\n this.legend = {width: 0, height: 0, items: []};\n return;\n }\n\n const items = arrangeLegendParts(legendItems, this.chartSizes.chartHeight);\n\n const lastItem = items[items.length - 1];\n const legendWidth = lastItem.left + lastItem.width + LEGEND_OFFSET;\n const legendHeight = this.chartSizes.chartHeight;\n\n this.legend = {\n width: legendWidth,\n height: legendHeight,\n items,\n };\n }\n\n render(\n settingsId: string,\n chartSettings: ScatterplotSettingsImpl['chartSettings'],\n facetSettings: ScatterplotSettingsImpl['facetSettings'],\n facetKeys: string[],\n facetLabels: string[][],\n groupedDots: GroupedDots,\n trendsData: TrendsData | null,\n keyColumn: ColumnName,\n onlyPositive: {x: boolean; y: boolean},\n legendInfo: ScatterplotLegendInfo,\n layersData: Record<string, ScatterplotLayerData[]>,\n grouping: ColumnName[],\n layers: ScatterplotLayer[],\n trend: ScatterplotSettingsImpl['trend'],\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(facetKeys, facetSettings, xAxis, yAxis, groupedDots, trendsData);\n this.updateCaptionsSize(onlyPositive.y);\n this.createFacetTitles(facetKeys, facetLabels);\n this.updateChartDimensions(facetKeys, facetSettings, xAxis, yAxis);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(facetKeys, title);\n this.updateMargins();\n const component = (\n <ChartsGroup\n settingsId={settingsId}\n chartSettings={chartSettings}\n facetKeys={facetKeys}\n facetSettings={facetSettings}\n chartSizes={this.chartSizes}\n chartsDimensions={this.chartsDimensions}\n scales={this.scales}\n groupedDots={groupedDots}\n trendsData={trendsData}\n legendData={this.legend}\n columnsCount={this.columnsCount}\n margins={this.margins}\n keyColumn={keyColumn}\n mainTitle={this.mainTitle}\n facetTitles={this.facetTitles}\n captionsSizes={this.captionsSizes}\n onlyPositive={onlyPositive}\n layersData={layersData}\n aesGetters={createAesGetters(legendInfo, layers, trend)}\n onTooltipHintSwitch={onTooltipHintSwitch}\n />\n );\n this.component = component;\n this.reactRoot?.render(component);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["getChartEdgeSides","index","facetsCount","columnsCount","rowsCount","chartSides","calculatePaddings","xAxis","yAxis","captionsSizes","currentRowFacetKeys","facetTitles","chartEdgeSides","facetSettings","needLeftAxis","needLeftAxisTitle","needBottomAxis","needBottomAxisTitle","yCaptions","TICK_OFFSET","yTicks","DEFAULT_TICKS_SIZE","yAxisTitle","TITLE_LINE","MIN_PADDING","xCaptions","xTicks","xAxisTitle","leftAxisElements","FACET_AXIS_OFFSET","bottomAxisElements","facetTitlesLinesCount","key","FACET_TITLE_OFFSET","FACET_TITLE_LINE","getFacetRows","facetKeys","nRows","nColumns","result","i","getRowColumn","idx","row","column","createAesGetters","legendInfo","layers","trend","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","BLACK","ChartRenderer","__publicField","jsx","Fragment","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","_a","node","createRoot","size","chartWidth","chartHeight","currentLeft","currentTop","res","currentRow","currentColumn","padding","outerWidth","outerHeight","chartsWidth","chartsHeight","groupedDots","trendsData","facetCount","maxNRows","maxNCols","minXAll","maxXAll","minYAll","maxYAll","dotExtentsByKeys","dotsData","minX","minY","maxX","maxY","newScalesX","newScalesY","needsUpdateXScales","needsUpdateYScales","scaleX","scaleLog","extents","middle","halfRange","rangeH","tempX","PADDINGS","prevScale","domain","range","trendYBoundsByKeys","trendsList","xBounds","i1","i2","scaleY","dotExtents","trendExtents","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","maxYTick","getMaxTickWidth","ticks","scale","format","getTicksAndFormat","title","firstChart","lastChart","splitTextByWidth","facetLabels","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","legend","grouping","legendItems","emptySizes","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","_b","_c","scaleOrdinal","value","layer","isContinuousAes","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","v","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","settingsId","chartSettings","keyColumn","layersData","onTooltipHintSwitch","component","ChartsGroup","message","Error"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { Legend as N } from "../../common/Legend.js";
7
7
  import { useTooltip as R } from "../../common/Tooltip.js";
8
8
  import { LEGEND_OFFSET as _ } from "../constants.js";
9
9
  import { Chart as q } from "./Chart.js";
10
- import { ChartTooltip as J } from "./ChartTooltip.js";
10
+ import { ChartTooltip as y } from "./ChartTooltip.js";
11
11
  function S({
12
12
  settingsId: f,
13
13
  chartSettings: g,
@@ -32,7 +32,7 @@ function S({
32
32
  }) {
33
33
  const n = R(F), { xAxis: M, yAxis: $, title: p, frame: L, legend: H, tooltips: P } = g, h = e[i[0]].padding, B = e[i[c - 1]].padding, D = o.chartsWidth + _, b = h.top, m = A.useMemo(() => Object.fromEntries(
34
34
  i.map((t) => [t, { x: d.x[t], y: d.y[t] }])
35
- ), [d, i]);
35
+ ), [d.x, d.y, i]);
36
36
  return /* @__PURE__ */ r.jsx(O, { dataId: f, children: /* @__PURE__ */ r.jsx("div", { style: { position: "relative", width: o.totalWidth, height: o.totalHeight }, children: /* @__PURE__ */ r.jsxs(
37
37
  "svg",
38
38
  {
@@ -81,7 +81,7 @@ function S({
81
81
  )),
82
82
  H.show && /* @__PURE__ */ r.jsx("g", { transform: `translate(${D},${b})`, children: /* @__PURE__ */ r.jsx(N, { legendData: j }) }),
83
83
  /* @__PURE__ */ r.jsx(
84
- J,
84
+ y,
85
85
  {
86
86
  tooltipsData: n,
87
87
  dimensions: e[n.currentFacet],
@@ -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 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 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, 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 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","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 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 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 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","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 +1 @@
1
- {"version":3,"file":"Lasso.d.ts","sourceRoot":"","sources":["../../../src/scatterplot-umap/components/Lasso.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAY,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAItC,OAAO,KAAK,EAAC,WAAW,EAAE,UAAU,EAAQ,MAAM,UAAU,CAAC;AAuB7D,wBAAgB,KAAK,CAAC,EAClB,MAAM,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,0BAA0B,GAC7B,EAAE;IACC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/D,2CAyWA"}
1
+ {"version":3,"file":"Lasso.d.ts","sourceRoot":"","sources":["../../../src/scatterplot-umap/components/Lasso.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAY,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAItC,OAAO,KAAK,EAAC,WAAW,EAAE,UAAU,EAAQ,MAAM,UAAU,CAAC;AAyB7D,wBAAgB,KAAK,CAAC,EAClB,MAAM,EACN,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,0BAA0B,GAC7B,EAAE;IACC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,0BAA0B,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/D,2CA6XA"}