@milaboratories/miplots4 1.0.124 → 1.0.125

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/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/node_modules/d3-drag/src/constant.js +5 -0
  6. package/dist/node_modules/d3-drag/src/constant.js.map +1 -0
  7. package/dist/node_modules/d3-drag/src/drag.js +122 -0
  8. package/dist/node_modules/d3-drag/src/drag.js.map +1 -0
  9. package/dist/node_modules/d3-drag/src/event.js +34 -0
  10. package/dist/node_modules/d3-drag/src/event.js.map +1 -0
  11. package/dist/node_modules/d3-drag/src/noevent.js +10 -5
  12. package/dist/node_modules/d3-drag/src/noevent.js.map +1 -1
  13. package/dist/node_modules/react/index.js +1 -1
  14. package/dist/node_modules/react-dom/index.js +1 -1
  15. package/dist/scatterplot/index.js +27 -27
  16. package/dist/scatterplot/index.js.map +1 -1
  17. package/dist/scatterplot-umap/ChartRenderer.d.ts +8 -8
  18. package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
  19. package/dist/scatterplot-umap/ChartRenderer.js +160 -151
  20. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  21. package/dist/scatterplot-umap/SettingsImpl.d.ts +0 -1
  22. package/dist/scatterplot-umap/SettingsImpl.d.ts.map +1 -1
  23. package/dist/scatterplot-umap/SettingsImpl.js +12 -13
  24. package/dist/scatterplot-umap/SettingsImpl.js.map +1 -1
  25. package/dist/scatterplot-umap/components/Lasso.d.ts +6 -4
  26. package/dist/scatterplot-umap/components/Lasso.d.ts.map +1 -1
  27. package/dist/scatterplot-umap/components/Lasso.js +212 -57
  28. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  29. package/dist/scatterplot-umap/components/SVGLayer.d.ts +1 -1
  30. package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
  31. package/dist/scatterplot-umap/components/SVGLayer.js +49 -46
  32. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  33. package/dist/scatterplot-umap/components/UpperSVG.d.ts +6 -4
  34. package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
  35. package/dist/scatterplot-umap/components/UpperSVG.js +35 -30
  36. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  37. package/dist/scatterplot-umap/constants.d.ts +6 -0
  38. package/dist/scatterplot-umap/constants.d.ts.map +1 -1
  39. package/dist/scatterplot-umap/constants.js +12 -6
  40. package/dist/scatterplot-umap/constants.js.map +1 -1
  41. package/dist/scatterplot-umap/index.d.ts +3 -2
  42. package/dist/scatterplot-umap/index.d.ts.map +1 -1
  43. package/dist/scatterplot-umap/index.js +90 -72
  44. package/dist/scatterplot-umap/index.js.map +1 -1
  45. package/dist/scatterplot-umap/types.d.ts +14 -2
  46. package/dist/scatterplot-umap/types.d.ts.map +1 -1
  47. package/dist/types/bubble.d.ts +10 -10
  48. package/dist/types/common.d.ts +7 -4
  49. package/dist/types/common.d.ts.map +1 -1
  50. package/dist/types/common.js.map +1 -1
  51. package/dist/types/dendro.d.ts +22 -22
  52. package/dist/types/discrete.d.ts +14 -14
  53. package/dist/types/heatmap.d.ts +50 -50
  54. package/dist/types/histogram.d.ts +12 -12
  55. package/dist/types/scatterplot-umap.d.ts +8 -11
  56. package/dist/types/scatterplot-umap.d.ts.map +1 -1
  57. package/dist/types/scatterplot-umap.js +2 -3
  58. package/dist/types/scatterplot-umap.js.map +1 -1
  59. package/dist/types/scatterplot.d.ts +36 -36
  60. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot-umap/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 {splitTextByWidth} from '../discrete/utils';\nimport {SVGLayer} from './components/SVGLayer';\nimport type {AesGetters, CaptionsSizes, Dot, DotsExtents, Point, SVGLayerProps} from './types';\nimport type {ChartScales, ChartSizes, Margins} from './types';\nimport type {DotAesItem} from '../common/types';\nimport type {LegendData, LegendItem} from '../common/types';\nimport {DEFAULT_DOT_AES, MIN_MARGIN} from '../scatterplot/constants';\nimport {LEGEND_OFFSET} from './constants';\nimport type {CurveLayer, DotsLayer, ScatterplotUmapLayer, ScatterplotUmapSettingsImpl} from './SettingsImpl';\nimport {createAesGetter} from '../scatterplot/utils/createAesGetter';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport {getFilteredLabels, updateLabelsBBoxes} from '../scatterplot/utils/getVisibleLabels';\nimport type {Label} from '../scatterplot/utils/getVisibleLabels';\nimport {isContinuousAes} from '../types';\nimport type {ColumnName} from '../types';\nimport type {ScatterplotUmapLegendInfo} from '../types/scatterplot-umap';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {CartesianChart} from '@d3fc/d3fc-chart/src/cartesian';\nimport type {Quadtree} from 'd3-quadtree';\nimport {quadtree} from 'd3-quadtree';\nimport type {ScaleLinear} from 'd3-scale';\nimport {scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog} from 'd3-scale';\nimport {select} from 'd3-selection';\nimport {PADDINGS, TITLE_LINE} 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 type {D3ZoomEvent, ZoomBehavior} from 'd3-zoom';\nimport {zoom} from 'd3-zoom';\nimport type { RGBColor} from 'd3-color';\nimport {rgb} from 'd3-color';\nimport {chartCartesian} from '@d3fc/d3fc-chart';\n// @ts-ignore\nimport {seriesSvgMulti, seriesWebglMulti, seriesWebglPoint} from '@d3fc/d3fc-series';\n// @ts-ignore\nimport {webglFillColor} from '@d3fc/d3fc-webgl';\n// @ts-ignore\nimport {pointer} from '@d3fc/d3fc-pointer';\nimport {polygonContains} from 'd3-polygon';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\n\nfunction convertDotRToSymbolSize(r:number) {\n return (r / 2.35) * (r / 2.35) * 64;\n}\nfunction getPercentToWhite(v:number, opacity:number) {\n return v + (1 - v) * (1 - opacity);\n}\nfunction getColorWithOpacity (c: RGBColor, opacity: number) {\n return [\n getPercentToWhite(c.r / 255, opacity),\n getPercentToWhite(c.g / 255, opacity),\n getPercentToWhite(c.b / 255, opacity),\n 1\n ];\n}\n\nfunction getGettersFromLayers(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\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 return {\n dotFill: createAesGetter(legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineType: createAesGetter(legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n canvasNode: HTMLElement | null = null;\n\n svgLayerElement: SVGElement | null = null;\n svgLayerComponent: ReactElement = (<></>);\n\n aesGetters: AesGetters = {\n dotSize: () => 2,\n dotFill: () => BLACK,\n lineType: () => 'solid'\n };\n\n tools: {\n webglChart: CartesianChart<any, any>;\n qt: Quadtree<Dot>;\n fillColor: () => {\n value: (setter: (d: Dot) => [number, number, number, number]) => void;\n data: (setter: () => Dot[]) => void;\n };\n pointSeries: () => any;\n zoom: ZoomBehavior<any, any>;\n } | null = null;\n\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\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 scales: ChartScales = {\n x: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n y: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n xOriginal: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n yOriginal: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n };\n\n polygon:Point[] = [];\n onPolygonUpdateOutside: (data: number[]) => void = () => undefined;\n onTooltipHintSwitch: (v: boolean) => void = () => undefined;\n\n zoomStateKey = '';\n selectedDot: Dot | null = null;\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n notCalculatedProps: Partial<SVGLayerProps> = {};\n\n allDots: Dot[] = [];\n allPossibleLabels: Label[] = [];\n visibleLabels: Label[] = [];\n\n lassoMode = false;\n\n clear() {\n if (this.parentNode && this.rootNode && this.canvasNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode?.removeChild(this.canvasNode);\n this.parentNode = null;\n this.rootNode = null;\n this.canvasNode = null;\n this.svgLayerElement = null;\n this.tools = 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.canvasNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.parentNode.appendChild(this.canvasNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotUmapSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateViewport(\n xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'],\n dotsExtents: DotsExtents\n ) {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n let {minX, minY, maxX, maxY} = dotsExtents;\n if (xAxis.lowerValue !== undefined) {\n minX = Math.max(minX, xAxis.lowerValue);\n }\n if (xAxis.upperValue !== undefined) {\n maxX = Math.min(maxX, xAxis.upperValue);\n }\n if (yAxis.lowerValue !== undefined) {\n minY = Math.max(minY, yAxis.lowerValue);\n }\n if (yAxis.upperValue !== undefined) {\n maxY = Math.min(maxY, yAxis.upperValue);\n }\n if (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 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 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 = scaleX;\n this.scales.xOriginal = scaleX.copy();\n\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\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 = scaleY;\n this.scales.yOriginal = scaleY.copy();\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n const {ticks, format} = getTicksAndFormat(this.scales.y, onlyPositive);\n const maxYTick = getMaxTickWidth(ticks.map(format));\n\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']) {\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.totalWidth - this.margins.left - this.margins.right,\n 20\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 + this.captionsSizes.xAxisCaptionsWidth + TITLE_LINE,\n left: MIN_MARGIN + this.captionsSizes.yAxisCaptionsWidth + TITLE_LINE,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartHeight, this.legend.height) + this.margins.bottom;\n\n select(this.canvasNode)\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateLegendSize(\n legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'],\n legendLabels: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotUmapLayer[]\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 = legendLabels[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') {\n aesData[columnValue].color = info.aesMap[columnValue]?.[key] ?? BLACK;\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 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 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 initSettings(\n dots: Dot[],\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n dotExtents: DotsExtents,\n onlyPositive: {\n x: boolean;\n y: boolean;\n },\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n grouping: ColumnName[]\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(xAxis, yAxis, dotExtents);\n this.updateCaptionsSize(onlyPositive.y);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n\n this.aesGetters = getGettersFromLayers(legendInfo, layers);\n\n const fillColor = webglFillColor()\n .data(dots)\n .value((d: Dot) => {\n const c = rgb(this.aesGetters.dotFill(d.data));\n const opacity = !d.dimmed && (this.polygon.length < 2 || polygonContains(this.polygon, [d.x, d.y])) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n\n const pointSeries = seriesWebglPoint()\n .equals((a: Dot[], b: Dot[]) => a === b)\n .size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)))\n .crossValue((d: Dot) => d.x)\n .mainValue((d: Dot) => d.y)\n .decorate((program: any) => fillColor(program));\n\n const z = zoom()\n .scaleExtent([0.1, 1000])\n .filter(() => !this.lassoMode)\n .on('start', () => {\n this.selectedDot = null;\n })\n .on('zoom', (e: D3ZoomEvent<SVGElement, unknown>) => {\n const transform = e.transform;\n const x = transform.rescaleX(this.scales.xOriginal);\n const y = transform.rescaleY(this.scales.yOriginal);\n this.scales.x.domain(x.domain());\n this.scales.y.domain(y.domain());\n\n this.zoomStateKey = `${transform.x}_${transform.y}_${transform.k}`; // need it to update axes\n\n this.renderSvgLayer();\n this.renderWebglLayer();\n }).on('end', () => {\n this.allPossibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n this.visibleLabels = getFilteredLabels(this.allPossibleLabels, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n this.renderSvgLayer();\n });\n\n const qt = quadtree<Dot>()\n .x((d: Dot) => d.x)\n .y((d: Dot) => d.y)\n .addAll(dots);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const p = pointer().on('point', ([coord]) => {\n if (!coord) {\n this.selectedDot = null;\n this.renderSvgLayer();\n return;\n }\n // find the closes datapoint to the pointer\n const x = this.scales.x.invert(coord.x);\n const y = this.scales.y.invert(coord.y);\n //const radius = Math.abs(x - this.scales.x.invert(coord.x - 20));\n const closestDatum = this.tools?.qt.find(x, y);\n\n const needRedraw =\n (this.selectedDot && !closestDatum) ||\n (!this.selectedDot && closestDatum) ||\n this.selectedDot?.id !== closestDatum?.id;\n\n this.selectedDot = closestDatum ?? null;\n\n if (needRedraw) {\n this.renderSvgLayer();\n }\n });\n\n const webglChart = chartCartesian({\n xScale: this.scales.x,\n yScale: this.scales.y,\n })\n .xAxisHeight(() => '0') // removing build-in axes from chartCartesian\n .yAxisWidth(() => '0') // removing build-in axes from chartCartesian\n .svgPlotArea(seriesSvgMulti())\n .webglPlotArea(\n // only render the point series on the WebGL layer\n seriesWebglMulti()\n .series([pointSeries])\n .mapping((d: any) => d)\n )\n .decorate(selection => {\n const s = selection.enter();\n if (s && !this.svgLayerElement) {\n s.style('grid-template-columns', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n s.style('grid-template-rows', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n this.svgLayerElement = s.select('.svg-plot-area.plot-area svg').node() as SVGElement;\n }\n s.select('.svg-plot-area.plot-area')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .call(z)\n .call(p);\n });\n\n this.tools = {\n webglChart,\n zoom: z,\n qt,\n fillColor,\n pointSeries,\n };\n\n select(this.canvasNode)\n .datum(dots)\n .style('position', 'absolute')\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateAes(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers']\n ) {\n if (this.tools === null) {\n return;\n }\n this.aesGetters = getGettersFromLayers(legendInfo, layers);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? (() => BLACK);\n const c = rgb(colorGetter(d.data));\n const opacity = !d.dimmed && (this.polygon.length < 2 || polygonContains(this.polygon, [d.x, d.y])) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n }\n\n updatePointSize() {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum([...this.allDots]);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.pointSeries.size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)));\n }\n\n updateByLasso() {\n if (this.tools === null) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools?.fillColor.value((d: Dot) => {\n const aesGetter = this.aesGetters.dotFill ?? (() => BLACK);\n const c = rgb(aesGetter(d.data));\n const opacity = !d.dimmed && (this.polygon.length < 2 || polygonContains(this.polygon, [d.x, d.y])) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n this.renderWebglLayer();\n }\n\n updateData(dots: Dot[]) {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum(dots);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.data(dots);\n this.tools.qt = quadtree<Dot>()\n .x((d: Dot) => d.x)\n .y((d: Dot) => d.y)\n .addAll(dots);\n }\n\n render(\n settingsId: string,\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n keyColumn: ColumnName | null,\n onlyPositive: {x: boolean; y: boolean},\n dots: Dot[],\n dotExtents: DotsExtents,\n dotsByGrouping: Record<string, Dot[]>,\n layers: ScatterplotUmapSettingsImpl['layers'],\n legendInfo: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n allPossibleLabels: Label[],\n onPolygonUpdateOutside: (data: number[]) => void,\n lassoMode: boolean,\n onTooltipHintSwitch: (v:boolean) => void\n ) {\n this.lassoMode = lassoMode;\n if (this.tools === null) {\n this.initSettings(\n dots,\n chartSettings,\n dotExtents,\n onlyPositive,\n legendInfo,\n layers,\n grouping\n );\n this.onPolygonUpdateOutside = onPolygonUpdateOutside;\n this.onTooltipHintSwitch = onTooltipHintSwitch;\n } else {\n const {title, legend} = chartSettings;\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n this.updateAes(legendInfo, layers);\n }\n this.allDots = dots;\n this.allPossibleLabels = allPossibleLabels;\n this.allPossibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n this.visibleLabels = getFilteredLabels(this.allPossibleLabels, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n\n this.notCalculatedProps = {\n settingsId,\n chartSettings,\n onlyPositive,\n keyColumn,\n dotsByGrouping,\n layers\n };\n\n this.renderWebglLayer();\n this.renderSvgLayer();\n }\n\n renderWebglLayer() {\n if (this.tools?.webglChart) {\n select(this.canvasNode).call(this.tools?.webglChart);\n }\n }\n\n onPolygonUpdate = (p:Point[]) => {\n this.polygon = p;\n this.updateByLasso();\n const filteredDotsIndexes = this.allDots\n .filter(d => this.polygon.length > 2 && polygonContains(this.polygon, [d.x, d.y]))\n .map(d => d.idx);\n this.onPolygonUpdateOutside(filteredDotsIndexes);\n };\n\n renderSvgLayer() {\n this.visibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n updateLabelsBBoxes(this.visibleLabels);\n const props = {\n settingsId: this.notCalculatedProps.settingsId,\n chartSettings: this.notCalculatedProps.chartSettings,\n onlyPositive: this.notCalculatedProps.onlyPositive,\n keyColumn: this.notCalculatedProps.keyColumn,\n dotsByGrouping: this.notCalculatedProps.dotsByGrouping,\n layers: this.notCalculatedProps.layers,\n chartSizes: this.chartSizes,\n scales: this.scales,\n margins: this.margins,\n mainTitle: this.mainTitle,\n captionsSizes: this.captionsSizes,\n container: this.svgLayerElement,\n zoomStateKey: this.zoomStateKey,\n selectedDot: this.selectedDot,\n aesGetters: this.aesGetters,\n legendData: this.legend,\n labels: this.visibleLabels,\n onPolygonUpdate: this.onPolygonUpdate,\n onTooltipHintSwitch: this.onTooltipHintSwitch,\n lassoMode: this.lassoMode\n } as SVGLayerProps;\n this.svgLayerComponent = <SVGLayer {...props} />;\n this.reactRoot?.render(this.svgLayerComponent);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["convertDotRToSymbolSize","r","getPercentToWhite","v","opacity","getColorWithOpacity","getGettersFromLayers","legendInfo","layers","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","ChartRenderer","__publicField","jsx","Fragment","BLACK","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","p","filteredDotsIndexes","polygonContains","d","_a","_b","node","createRoot","size","xAxis","yAxis","dotsExtents","scaleX","scaleLog","minX","minY","maxX","maxY","middle","halfRange","rangeH","tempX","PADDINGS","scaleY","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","getMaxTickWidth","ticks","key","format","getTicksAndFormat","maxYTick","title","splitTextByWidth","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","TITLE_LINE","select","legend","legendLabels","grouping","legendItems","emptySizes","column","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","scale","scaleOrdinal","value","layer","isContinuousAes","domain","range","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","res","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","dots","chartSettings","dotExtents","fillColor","webglFillColor","c","rgb","pointSeries","seriesWebglPoint","a","b","program","z","zoom","e","transform","x","y","getFilteredLabels","qt","quadtree","pointer","coord","closestDatum","needRedraw","webglChart","chartCartesian","seriesSvgMulti","seriesWebglMulti","selection","s","colorGetter","aesGetter","settingsId","keyColumn","dotsByGrouping","allPossibleLabels","onPolygonUpdateOutside","lassoMode","onTooltipHintSwitch","updateLabelsBBoxes","props","SVGLayer","message","Error"],"mappings":"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"}
1
+ {"version":3,"file":"ChartRenderer.js","sources":["../../src/scatterplot-umap/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 {splitTextByWidth} from '../discrete/utils';\nimport {SVGLayer} from './components/SVGLayer';\nimport type {\n AesGetters,\n CaptionsSizes,\n Dot,\n DotsExtents,\n LassoControlsState,\n Polygon,\n SVGLayerProps,\n} from './types';\nimport type {ChartScales, ChartSizes, Margins} from './types';\nimport type {DotAesItem} from '../common/types';\nimport type {LegendData, LegendItem} from '../common/types';\nimport {DEFAULT_DOT_AES, MIN_MARGIN} from '../scatterplot/constants';\nimport {LEGEND_OFFSET} from './constants';\nimport type {CurveLayer, DotsLayer, ScatterplotUmapLayer, ScatterplotUmapSettingsImpl} from './SettingsImpl';\nimport {createAesGetter} from '../scatterplot/utils/createAesGetter';\nimport {getTicksAndFormat} from '../scatterplot/utils/getTicksAndFormat';\nimport {getFilteredLabels, updateLabelsBBoxes} from '../scatterplot/utils/getVisibleLabels';\nimport type {Label} from '../scatterplot/utils/getVisibleLabels';\nimport {isContinuousAes} from '../types';\nimport type {ColumnName, ScatterplotEventHandlers} from '../types';\nimport type {ScatterplotUmapLegendInfo} from '../types/scatterplot-umap';\nimport {getContinuousColorScale} from '../utils/getContinuousColorScale';\nimport {getContinuousLegendTicks} from '../utils/getContinuousLegendTicks';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport type {CartesianChart} from '@d3fc/d3fc-chart/src/cartesian';\nimport type {Quadtree} from 'd3-quadtree';\nimport {quadtree} from 'd3-quadtree';\nimport type {ScaleLinear} from 'd3-scale';\nimport {scaleLinear, scaleLog, scaleOrdinal, scaleSqrt, scaleSymlog} from 'd3-scale';\nimport {select} from 'd3-selection';\nimport {PADDINGS, TITLE_LINE} 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 type {D3ZoomEvent, ZoomBehavior} from 'd3-zoom';\nimport {zoom} from 'd3-zoom';\nimport type { RGBColor} from 'd3-color';\nimport {rgb} from 'd3-color';\nimport {chartCartesian} from '@d3fc/d3fc-chart';\n// @ts-ignore\nimport {seriesSvgMulti, seriesWebglMulti, seriesWebglPoint} from '@d3fc/d3fc-series';\n// @ts-ignore\nimport {webglFillColor} from '@d3fc/d3fc-webgl';\n// @ts-ignore\nimport {pointer} from '@d3fc/d3fc-pointer';\nimport {polygonContains} from 'd3-polygon';\nimport { arrangeLegendParts } from '../utils/arrangeLegendParts';\n\nfunction convertDotRToSymbolSize(r:number) {\n return (r / 2.35) * (r / 2.35) * 64;\n}\nfunction getPercentToWhite(v:number, opacity:number) {\n return v + (1 - v) * (1 - opacity);\n}\nfunction getColorWithOpacity (c: RGBColor, opacity: number) {\n return [\n getPercentToWhite(c.r / 255, opacity),\n getPercentToWhite(c.g / 255, opacity),\n getPercentToWhite(c.b / 255, opacity),\n 1\n ];\n}\n\nfunction isDotInsidePolygons(x:number, y:number, polygons: Polygon[]) {\n if (polygons.length === 0) {\n return true;\n }\n return polygons.some((p) => p.closed && p.points.length > 2 && polygonContains(p.points, [x, y]));\n}\n\nfunction getGettersFromLayers(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\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 return {\n dotFill: createAesGetter(legendInfo, dotLayer?.aes.dotFill ?? DEFAULT_DOT_AES.color, 'dotFill'),\n dotSize: createAesGetter(legendInfo, dotLayer?.aes.dotSize ?? DEFAULT_DOT_AES.size, 'dotSize'),\n lineType: createAesGetter(legendInfo, curveLayer?.aes.lineShape ?? 'solid', 'lineShape')\n };\n}\n\nclass ChartRenderer {\n reactRoot: Root | null = null;\n parentNode: HTMLElement | null = null;\n rootNode: HTMLElement | null = null;\n canvasNode: HTMLElement | null = null;\n\n svgLayerElement: SVGElement | null = null;\n svgLayerComponent: ReactElement = (<></>);\n\n aesGetters: AesGetters = {\n dotSize: () => 2,\n dotFill: () => BLACK,\n lineType: () => 'solid'\n };\n\n tools: {\n webglChart: CartesianChart<any, any>;\n qt: Quadtree<Dot>;\n fillColor: () => {\n value: (setter: (d: Dot) => [number, number, number, number]) => void;\n data: (setter: () => Dot[]) => void;\n };\n pointSeries: () => any;\n zoom: ZoomBehavior<any, any>;\n } | null = null;\n\n margins: Margins = {\n top: MIN_MARGIN,\n bottom: MIN_MARGIN,\n left: MIN_MARGIN,\n right: MIN_MARGIN,\n };\n chartSizes: ChartSizes = {\n chartWidth: DEFAULT_WIDTH, // width of single chart\n chartHeight: DEFAULT_HEIGHT, // height of single chart\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 scales: ChartScales = {\n x: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n y: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n xOriginal: scaleLinear().domain([0, 10]).range([0, DEFAULT_WIDTH]),\n yOriginal: scaleLinear().domain([0, 10]).range([DEFAULT_HEIGHT, 0]),\n };\n\n polygons:Polygon[] = [];\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'] = () => undefined;\n onTooltipHintSwitch: ScatterplotEventHandlers['onTooltipHintSwitch'] = () => undefined;\n onLassoControlsStateUpdate: ScatterplotEventHandlers['onLassoControlsStateUpdate'] = () => undefined;\n\n zoomStateKey = '';\n selectedDot: Dot | null = null;\n captionsSizes: CaptionsSizes = {\n xAxisCaptionsWidth: 30,\n yAxisCaptionsWidth: 100,\n };\n mainTitle: string[] = []; // can be multiline\n legend: LegendData = {width: 0, height: 0, items: []};\n\n notCalculatedProps: Partial<SVGLayerProps> = {};\n\n allDots: Dot[] = [];\n allPossibleLabels: Label[] = [];\n visibleLabels: Label[] = [];\n clear() {\n if (this.parentNode && this.rootNode && this.canvasNode) {\n this.parentNode?.removeChild(this.rootNode);\n this.parentNode?.removeChild(this.canvasNode);\n this.parentNode = null;\n this.rootNode = null;\n this.canvasNode = null;\n this.svgLayerElement = null;\n this.tools = 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.canvasNode = document.createElement('div');\n this.parentNode.appendChild(this.rootNode);\n this.parentNode.appendChild(this.canvasNode);\n this.reactRoot = createRoot(this.rootNode);\n }\n }\n\n updateChartSizes(size: ScatterplotUmapSettingsImpl['chartSettings']['size']) {\n this.chartSizes.chartWidth = size.width;\n this.chartSizes.chartHeight = size.height;\n }\n\n updateViewport(\n xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'],\n dotsExtents: DotsExtents\n ) {\n const scaleX = xAxis.scale === 'log' ? scaleLog() : scaleLinear();\n\n let {minX, minY, maxX, maxY} = dotsExtents;\n if (xAxis.lowerValue !== undefined) {\n minX = Math.max(minX, xAxis.lowerValue);\n }\n if (xAxis.upperValue !== undefined) {\n maxX = Math.min(maxX, xAxis.upperValue);\n }\n if (yAxis.lowerValue !== undefined) {\n minY = Math.max(minY, yAxis.lowerValue);\n }\n if (yAxis.upperValue !== undefined) {\n maxY = Math.min(maxY, yAxis.upperValue);\n }\n if (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 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 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 = scaleX;\n this.scales.xOriginal = scaleX.copy();\n\n const scaleY = yAxis.scale === 'log' ? scaleLog() : scaleLinear();\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 = scaleY;\n this.scales.yOriginal = scaleY.copy();\n }\n\n updateCaptionsSize(onlyPositive: boolean) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n\n function getMaxTickWidth(ticks: string[]) {\n return Math.max(...ticks.map(key => textMeasurer.getTextWidth(key)));\n }\n\n const {ticks, format} = getTicksAndFormat(this.scales.y, onlyPositive);\n const maxYTick = getMaxTickWidth(ticks.map(format));\n\n this.captionsSizes = {\n xAxisCaptionsWidth: 20,\n yAxisCaptionsWidth: maxYTick,\n };\n }\n\n createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']) {\n this.mainTitle = splitTextByWidth(\n title.name,\n this.chartSizes.totalWidth - this.margins.left - this.margins.right,\n 20\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 + this.captionsSizes.xAxisCaptionsWidth + TITLE_LINE,\n left: MIN_MARGIN + this.captionsSizes.yAxisCaptionsWidth + TITLE_LINE,\n right: this.legend.width + MIN_MARGIN,\n };\n this.chartSizes.totalWidth = this.margins.left + this.chartSizes.chartWidth + this.margins.right;\n this.chartSizes.totalHeight =\n this.margins.top + Math.max(this.chartSizes.chartHeight, this.legend.height) + this.margins.bottom;\n\n select(this.canvasNode)\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateLegendSize(\n legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'],\n legendLabels: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n layers: ScatterplotUmapLayer[]\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 = legendLabels[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') {\n aesData[columnValue].color = info.aesMap[columnValue]?.[key] ?? BLACK;\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 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 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 initSettings(\n dots: Dot[],\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n dotExtents: DotsExtents,\n onlyPositive: {\n x: boolean;\n y: boolean;\n },\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers'],\n grouping: ColumnName[]\n ) {\n const {xAxis, yAxis, size, title, legend} = chartSettings;\n this.updateChartSizes(size);\n this.updateViewport(xAxis, yAxis, dotExtents);\n this.updateCaptionsSize(onlyPositive.y);\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n\n this.aesGetters = getGettersFromLayers(legendInfo, layers);\n\n const fillColor = webglFillColor()\n .data(dots)\n .value((d: Dot) => {\n const c = rgb(this.aesGetters.dotFill(d.data));\n const opacity = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n\n const pointSeries = seriesWebglPoint()\n .equals((a: Dot[], b: Dot[]) => a === b)\n .size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)))\n .crossValue((d: Dot) => d.x)\n .mainValue((d: Dot) => d.y)\n .decorate((program: any) => fillColor(program));\n\n const z = zoom()\n .scaleExtent([0.1, 1000])\n .filter((e:MouseEvent) => {\n return e.type === 'wheel' || e.metaKey;\n })\n .on('start', () => {\n this.selectedDot = null;\n })\n .on('zoom', (e: D3ZoomEvent<SVGElement, unknown>) => {\n const transform = e.transform;\n const x = transform.rescaleX(this.scales.xOriginal);\n const y = transform.rescaleY(this.scales.yOriginal);\n this.scales.x.domain(x.domain());\n this.scales.y.domain(y.domain());\n\n this.zoomStateKey = `${transform.x}_${transform.y}_${transform.k}`; // need it to update axes\n\n this.renderSvgLayer();\n this.renderWebglLayer();\n }).on('end', () => {\n this.allPossibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n this.visibleLabels = getFilteredLabels(this.allPossibleLabels, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n this.renderSvgLayer();\n });\n\n const qt = quadtree<Dot>()\n .x((d: Dot) => this.scales.xOriginal(d.x))\n .y((d: Dot) => this.scales.yOriginal(d.y))\n .addAll(dots);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const p = pointer().on('point', ([coord]) => {\n if (!coord) {\n this.selectedDot = null;\n this.renderSvgLayer();\n return;\n }\n // find the closes datapoint to the pointer\n const x = this.scales.x.invert(coord.x);\n const y = this.scales.y.invert(coord.y);\n const xOriginal = this.scales.xOriginal(x);\n const yOriginal = this.scales.yOriginal(y);\n //const radius = Math.abs(x - this.scales.x.invert(coord.x - 20));\n let closestDatum = this.tools?.qt.find(xOriginal, yOriginal);\n\n const closestDatumX = this.scales.x(closestDatum?.x ?? 0);\n const closestDatumY = this.scales.y(closestDatum?.y ?? 0);\n const tooFar =\n Math.abs(coord.x - closestDatumX) > 20 ||\n Math.abs(coord.y - closestDatumY) > 20 ||\n Math.sqrt((coord.x - closestDatumX) ** 2 + (coord.y - closestDatumY) ** 2) > 20;\n\n if (tooFar) {\n closestDatum = undefined;\n }\n const needRedraw =\n (this.selectedDot && !closestDatum) ||\n (!this.selectedDot && closestDatum) ||\n this.selectedDot?.id !== closestDatum?.id;\n\n this.selectedDot = closestDatum ?? null;\n\n if (needRedraw) {\n this.renderSvgLayer();\n }\n });\n\n const webglChart = chartCartesian({\n xScale: this.scales.x,\n yScale: this.scales.y,\n })\n .xAxisHeight(() => '0') // removing build-in axes from chartCartesian\n .yAxisWidth(() => '0') // removing build-in axes from chartCartesian\n .svgPlotArea(seriesSvgMulti())\n .webglPlotArea(\n // only render the point series on the WebGL layer\n seriesWebglMulti()\n .series([pointSeries])\n .mapping((d: any) => d)\n )\n .decorate(selection => {\n const s = selection.enter();\n if (s && !this.svgLayerElement) {\n s.style('grid-template-columns', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n s.style('grid-template-rows', '0 auto 1fr auto 0'); // removing build-in axes from chartCartesian\n this.svgLayerElement = s.select('.svg-plot-area.plot-area svg').node() as SVGElement;\n }\n s.select('.svg-plot-area.plot-area').attr('class', 'svg-plot-area plot-area miplots-scatterplot-plot-area')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .call(z)\n .call(p);\n });\n\n this.tools = {\n webglChart,\n zoom: z,\n qt,\n fillColor,\n pointSeries,\n };\n\n select(this.canvasNode)\n .datum(dots)\n .style('position', 'absolute')\n .style('width', this.chartSizes.chartWidth + 'px')\n .style('height', this.chartSizes.chartHeight + 'px')\n .style('top', this.margins.top + 'px')\n .style('left', this.margins.left + 'px');\n }\n\n updateAes(\n legendInfo: ScatterplotUmapLegendInfo,\n layers: ScatterplotUmapSettingsImpl['layers']\n ) {\n if (this.tools === null) {\n return;\n }\n this.aesGetters = getGettersFromLayers(legendInfo, layers);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.value((d: Dot) => {\n const colorGetter = this.aesGetters.dotFill ?? (() => BLACK);\n const c = rgb(colorGetter(d.data));\n const opacity = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n }\n\n updatePointSize() {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum([...this.allDots]);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.pointSeries.size((d: Dot) => convertDotRToSymbolSize(this.aesGetters.dotSize(d.data)));\n }\n\n updateByLasso() {\n if (this.tools === null) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools?.fillColor.value((d: Dot) => {\n const aesGetter = this.aesGetters.dotFill ?? (() => BLACK);\n const c = rgb(aesGetter(d.data));\n const opacity = !d.dimmed && isDotInsidePolygons(d.x, d.y, this.polygons) ? 1 : 0.4;\n return getColorWithOpacity(c, opacity);\n });\n this.renderWebglLayer();\n }\n\n updateData(dots: Dot[]) {\n if (this.tools === null) {\n return;\n }\n select(this.canvasNode).datum(dots);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.tools.fillColor.data(dots);\n this.tools.qt = quadtree<Dot>()\n .x((d: Dot) => d.x)\n .y((d: Dot) => d.y)\n .addAll(dots);\n }\n\n render(\n settingsId: string,\n chartSettings: ScatterplotUmapSettingsImpl['chartSettings'],\n keyColumn: ColumnName | null,\n onlyPositive: {x: boolean; y: boolean},\n dots: Dot[],\n dotExtents: DotsExtents,\n dotsByGrouping: Record<string, Dot[]>,\n layers: ScatterplotUmapSettingsImpl['layers'],\n legendInfo: ScatterplotUmapLegendInfo,\n grouping: ColumnName[],\n allPossibleLabels: Label[],\n onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'],\n onTooltipHintSwitch: (v:boolean) => void,\n onLassoControlsStateUpdate: (v:LassoControlsState) => void,\n ) {\n if (this.tools === null) {\n this.initSettings(\n dots,\n chartSettings,\n dotExtents,\n onlyPositive,\n legendInfo,\n layers,\n grouping\n );\n this.onPolygonUpdateOutside = onPolygonUpdateOutside;\n this.onTooltipHintSwitch = onTooltipHintSwitch;\n this.onLassoControlsStateUpdate = onLassoControlsStateUpdate;\n } else {\n const {title, legend} = chartSettings;\n this.updateLegendSize(legend, legendInfo, grouping, layers);\n this.createMainTitle(title);\n this.updateMargins();\n this.updateAes(legendInfo, layers);\n }\n this.allDots = dots;\n this.allPossibleLabels = allPossibleLabels;\n this.allPossibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n this.visibleLabels = getFilteredLabels(this.allPossibleLabels, this.chartSizes.chartWidth, this.chartSizes.chartHeight);\n\n this.notCalculatedProps = {\n settingsId,\n chartSettings,\n onlyPositive,\n keyColumn,\n dotsByGrouping,\n layers\n };\n\n this.renderWebglLayer();\n this.renderSvgLayer();\n }\n\n renderWebglLayer() {\n if (this.tools?.webglChart) {\n select(this.canvasNode).call(this.tools?.webglChart);\n }\n }\n\n onPolygonUpdate = (p:Polygon[]) => {\n this.polygons = p;\n this.updateByLasso();\n const filteredDotsIndexes = this.allDots\n .filter(d => isDotInsidePolygons(d.x, d.y, this.polygons))\n .map(d => d.idx);\n this.onPolygonUpdateOutside(filteredDotsIndexes, p);\n };\n\n renderSvgLayer() {\n this.visibleLabels.forEach((l) => {\n l.x = this.scales.x(l.dot.x);\n l.y = this.scales.y(l.dot.y);\n });\n updateLabelsBBoxes(this.visibleLabels);\n const props = {\n settingsId: this.notCalculatedProps.settingsId,\n chartSettings: this.notCalculatedProps.chartSettings,\n onlyPositive: this.notCalculatedProps.onlyPositive,\n keyColumn: this.notCalculatedProps.keyColumn,\n dotsByGrouping: this.notCalculatedProps.dotsByGrouping,\n layers: this.notCalculatedProps.layers,\n chartSizes: this.chartSizes,\n scales: this.scales,\n margins: this.margins,\n mainTitle: this.mainTitle,\n captionsSizes: this.captionsSizes,\n container: this.svgLayerElement,\n zoomStateKey: this.zoomStateKey,\n selectedDot: this.selectedDot,\n aesGetters: this.aesGetters,\n legendData: this.legend,\n labels: this.visibleLabels,\n defaultPolygons: this.polygons,\n onPolygonUpdate: this.onPolygonUpdate,\n onTooltipHintSwitch: this.onTooltipHintSwitch,\n onLassoControlsStateUpdate: this.onLassoControlsStateUpdate,\n } as SVGLayerProps;\n this.svgLayerComponent = <SVGLayer {...props} />;\n this.reactRoot?.render(this.svgLayerComponent);\n }\n\n renderError(message: string) {\n this.reactRoot?.render(<Error message={message} />);\n }\n}\n\nexport default ChartRenderer;\n"],"names":["convertDotRToSymbolSize","r","getPercentToWhite","v","opacity","getColorWithOpacity","c","isDotInsidePolygons","x","y","polygons","p","polygonContains","getGettersFromLayers","legendInfo","layers","dotLayer","l","curveLayer","createAesGetter","DEFAULT_DOT_AES","ChartRenderer","__publicField","jsx","Fragment","BLACK","MIN_MARGIN","DEFAULT_WIDTH","DEFAULT_HEIGHT","scaleLinear","filteredDotsIndexes","d","_a","_b","node","createRoot","size","xAxis","yAxis","dotsExtents","scaleX","scaleLog","minX","minY","maxX","maxY","middle","halfRange","rangeH","tempX","PADDINGS","scaleY","rangeV","tempY","onlyPositive","textMeasurer","TextMeasurer","getMaxTickWidth","ticks","key","format","getTicksAndFormat","maxYTick","title","splitTextByWidth","titleTextHeight","TITLE_LINE_HEIGHT","titleHeight","TITLE_MARGIN","TITLE_LINE","select","legend","legendLabels","grouping","legendItems","emptySizes","column","info","MAX_SHOWN_UNIQUE_VALUES_IN_LABELS","aesData","columnValue","scale","scaleOrdinal","value","layer","isContinuousAes","domain","range","columnName","type","colorScale","getContinuousColorScale","tickPositionScale","scaleSymlog","values","getContinuousLegendTicks","scaleSqrt","labels","res","items","arrangeLegendParts","lastItem","legendWidth","LEGEND_OFFSET","legendHeight","dots","chartSettings","dotExtents","fillColor","webglFillColor","rgb","pointSeries","seriesWebglPoint","a","b","program","z","zoom","e","transform","getFilteredLabels","qt","quadtree","pointer","coord","xOriginal","yOriginal","closestDatum","closestDatumX","closestDatumY","needRedraw","webglChart","chartCartesian","seriesSvgMulti","seriesWebglMulti","selection","s","colorGetter","aesGetter","settingsId","keyColumn","dotsByGrouping","allPossibleLabels","onPolygonUpdateOutside","onTooltipHintSwitch","onLassoControlsStateUpdate","updateLabelsBBoxes","props","SVGLayer","message","Error"],"mappings":"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"}
@@ -58,7 +58,6 @@ export declare class ScatterplotUmapSettingsImpl implements SettingsInterface {
58
58
  };
59
59
  readonly inheritedAes: Record<string, AesMap>;
60
60
  readonly layers: ScatterplotUmapLayer[];
61
- readonly lassoMode: boolean;
62
61
  constructor(settings: ScatterplotUmapSettings);
63
62
  }
64
63
  //# sourceMappingURL=SettingsImpl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/SettingsImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SettingsImpl.d.ts","sourceRoot":"","sources":["../../src/scatterplot-umap/SettingsImpl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAC,KAAK,MAAM,EAAE,KAAK,qBAAqB,EAAE,KAAK,UAAU,EAAC,MAAM,UAAU,CAAC;AAClF,OAAO,KAAK,EACR,UAAU,EACV,uBAAuB,EACvB,SAAS,EACT,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACR,cAAc,IAAI,eAAe,EACjC,aAAa,IAAI,cAAc,EAC/B,uBAAuB,EAC1B,MAAM,2BAA2B,CAAC;AAInC,qBAAa,SAAS;IAClB,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,GAAG,EAAE;QACV,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC1E,QAAQ,EAAE,UAAU,GAAG,qBAAqB,CAAC;QAC7C,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,EAAE,MAAM,CAAC;KACnB,CAKC;gBACU,KAAK,EAAE,cAAc;CAMpC;AACD,qBAAa,UAAU;IACnB,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QACV,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC5E,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACnB,CAKC;gBAEU,KAAK,EAAE,eAAe;CAOrC;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1D,qBAAa,2BAA4B,YAAW,iBAAiB;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE;QACpB,QAAQ,CAAC,IAAI,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAC,CAAC;QAC/C,QAAQ,CAAC,KAAK,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,aAAa,CAAA;SAAC,CAAC;QACvE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACxC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACxC,QAAQ,CAAC,KAAK,EAAE;YAAC,IAAI,EAAE,SAAS,CAAA;SAAC,CAAC;QAClC,QAAQ,CAAC,MAAM,EAAE;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,cAAc,CAAA;SAAC,CAAC;QAC3D,QAAQ,CAAC,QAAQ,EAAE;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;SAAC,CAAC;KAC9D,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;gBAE5B,QAAQ,EAAE,uBAAuB;CA4DhD"}
@@ -1,9 +1,9 @@
1
1
  var u = Object.defineProperty;
2
- var s = (l, e, i) => e in l ? u(l, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : l[e] = i;
3
- var o = (l, e, i) => s(l, typeof e != "symbol" ? e + "" : e, i);
4
- import { DEFAULT_HEIGHT as c, DEFAULT_WIDTH as d, BLACK as p } from "../constants.js";
5
- import { ScatterplotUmapSettingsSchema as m } from "../types/scatterplot-umap.js";
6
- import y from "../node_modules/lodash/lodash.js";
2
+ var c = (l, e, i) => e in l ? u(l, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : l[e] = i;
3
+ var o = (l, e, i) => c(l, typeof e != "symbol" ? e + "" : e, i);
4
+ import { DEFAULT_HEIGHT as m, DEFAULT_WIDTH as y, BLACK as p } from "../constants.js";
5
+ import { ScatterplotUmapSettingsSchema as s } from "../types/scatterplot-umap.js";
6
+ import d from "../node_modules/lodash/lodash.js";
7
7
  class n {
8
8
  constructor(e) {
9
9
  o(this, "type", "dots");
@@ -48,18 +48,17 @@ class C {
48
48
  o(this, "chartSettings");
49
49
  o(this, "inheritedAes");
50
50
  o(this, "layers");
51
- o(this, "lassoMode");
52
- var i, h, a, t;
53
- m.parse(e), this.id = y.uniqueId("settings"), this.keyColumn = e.keyColumn ?? null, this.x = e.x, this.y = e.y, this.grouping = e.grouping ?? [], this.label = e.label ?? null, this.highlight = e.highlight ?? null, this.chartSettings = {
51
+ var i, h, t, a;
52
+ s.parse(e), this.id = d.uniqueId("settings"), this.keyColumn = e.keyColumn ?? null, this.x = e.x, this.y = e.y, this.grouping = e.grouping ?? [], this.label = e.label ?? null, this.highlight = e.highlight ?? null, this.chartSettings = {
54
53
  size: {
55
- width: ((i = e == null ? void 0 : e.size) == null ? void 0 : i.width) ?? d,
56
- height: ((h = e == null ? void 0 : e.size) == null ? void 0 : h.height) ?? c
54
+ width: ((i = e == null ? void 0 : e.size) == null ? void 0 : i.width) ?? y,
55
+ height: ((h = e == null ? void 0 : e.size) == null ? void 0 : h.height) ?? m
57
56
  },
58
57
  title: {
59
58
  position: "center",
60
59
  show: !0,
61
60
  ...e.title,
62
- name: ((a = e.title) == null ? void 0 : a.name) ?? "Chart"
61
+ name: ((t = e.title) == null ? void 0 : t.name) ?? "Chart"
63
62
  },
64
63
  yAxis: {
65
64
  title: e.y.label ?? e.y.value,
@@ -75,7 +74,7 @@ class C {
75
74
  showTicks: !0,
76
75
  ...e.xAxis
77
76
  },
78
- frame: { type: ((t = e.frame) == null ? void 0 : t.type) ?? "full" },
77
+ frame: { type: ((a = e.frame) == null ? void 0 : a.type) ?? "full" },
79
78
  legend: {
80
79
  show: !0,
81
80
  position: "right",
@@ -91,7 +90,7 @@ class C {
91
90
  if (r.type === "curve")
92
91
  return new w(r);
93
92
  throw new Error("Unknown layer type");
94
- }).filter(Boolean), this.lassoMode = e.lassoMode ?? !1;
93
+ }).filter(Boolean);
95
94
  }
96
95
  }
97
96
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsImpl.js","sources":["../../src/scatterplot-umap/SettingsImpl.ts"],"sourcesContent":["import {BLACK, DEFAULT_HEIGHT, DEFAULT_WIDTH} from '../constants';\nimport type {ScatterplotAxisSettings} from '../scatterplot/ScatterplotSettingsImpl';\nimport {type AesMap, type InheritAesScatterplot, type PointShape} from '../types';\nimport type {\n ColumnName,\n ContinuousAesFromColumn,\n FrameType,\n LegendPosition,\n LineShape,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport type {\n CurveUmapLayer as OuterCurveLayer,\n DotsUmapLayer as OuterDotsLayer,\n ScatterplotUmapSettings\n} from '../types/scatterplot-umap';\nimport {ScatterplotUmapSettingsSchema} from '../types/scatterplot-umap';\nimport lodash from 'lodash';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotUmapLayer = DotsLayer | CurveLayer;\n\nexport class ScatterplotUmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot-umap';\n readonly keyColumn: ColumnName | null;\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly grouping: ColumnName[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly inheritedAes: Record<string, AesMap>;\n readonly layers: ScatterplotUmapLayer[];\n readonly lassoMode: boolean;\n\n constructor(settings: ScatterplotUmapSettings) {\n ScatterplotUmapSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn ?? null;\n this.x = settings.x;\n this.y = settings.y;\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? DEFAULT_WIDTH,\n height: settings?.size?.height ?? DEFAULT_HEIGHT,\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n\n this.inheritedAes = settings.inheritedAes ?? {};\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n } else if (layer.type === 'curve') {\n return new CurveLayer(layer);\n } else {\n throw new Error('Unknown layer type');\n }\n })\n .filter(Boolean) as ScatterplotUmapLayer[];\n\n this.lassoMode = settings.lassoMode ?? false;\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotUmapSettingsImpl","settings","ScatterplotUmapSettingsSchema","lodash","_a","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT","_c","_d"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsImpl.js","sources":["../../src/scatterplot-umap/SettingsImpl.ts"],"sourcesContent":["import {BLACK, DEFAULT_HEIGHT, DEFAULT_WIDTH} from '../constants';\nimport type {ScatterplotAxisSettings} from '../scatterplot/ScatterplotSettingsImpl';\nimport {type AesMap, type InheritAesScatterplot, type PointShape} from '../types';\nimport type {\n ColumnName,\n ContinuousAesFromColumn,\n FrameType,\n LegendPosition,\n LineShape,\n SettingsInterface,\n TitlePosition,\n} from '../types';\nimport type {\n CurveUmapLayer as OuterCurveLayer,\n DotsUmapLayer as OuterDotsLayer,\n ScatterplotUmapSettings\n} from '../types/scatterplot-umap';\nimport {ScatterplotUmapSettingsSchema} from '../types/scatterplot-umap';\nimport lodash from 'lodash';\n\nexport class DotsLayer {\n readonly type = 'dots';\n readonly aes: {\n dotFill: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n dotShape: PointShape | InheritAesScatterplot;\n dotSize: number | ContinuousAesFromColumn<number>;\n opacity: number;\n } = {\n dotFill: BLACK,\n dotShape: '21',\n dotSize: 3,\n opacity: 1,\n };\n constructor(layer: OuterDotsLayer) {\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\nexport class CurveLayer {\n readonly type = 'curve';\n readonly smoothing: boolean;\n readonly aes: {\n lineColor: string | InheritAesScatterplot | ContinuousAesFromColumn<string>;\n lineWidth: number;\n lineShape: LineShape;\n opacity: number;\n } = {\n lineColor: BLACK,\n lineWidth: 1,\n lineShape: 'solid',\n opacity: 1,\n };\n\n constructor(layer: OuterCurveLayer) {\n this.smoothing = layer.smoothing ?? false;\n this.aes = {\n ...this.aes,\n ...layer.aes,\n };\n }\n}\n\nexport type ScatterplotUmapLayer = DotsLayer | CurveLayer;\n\nexport class ScatterplotUmapSettingsImpl implements SettingsInterface {\n readonly id: string;\n readonly type = 'scatterplot-umap';\n readonly keyColumn: ColumnName | null;\n readonly x: ColumnName;\n readonly y: ColumnName;\n readonly grouping: ColumnName[];\n readonly label: ColumnName | null;\n readonly highlight: ColumnName | null;\n readonly chartSettings: {\n readonly size: {width: number; height: number};\n readonly title: {name: string; show: boolean; position: TitlePosition};\n readonly yAxis: ScatterplotAxisSettings;\n readonly xAxis: ScatterplotAxisSettings;\n readonly frame: {type: FrameType};\n readonly legend: {show: boolean; position: LegendPosition};\n readonly tooltips: {show: boolean; content?: ColumnName[]};\n };\n readonly inheritedAes: Record<string, AesMap>;\n readonly layers: ScatterplotUmapLayer[];\n\n constructor(settings: ScatterplotUmapSettings) {\n ScatterplotUmapSettingsSchema.parse(settings);\n this.id = lodash.uniqueId('settings');\n this.keyColumn = settings.keyColumn ?? null;\n this.x = settings.x;\n this.y = settings.y;\n this.grouping = settings.grouping ?? [];\n this.label = settings.label ?? null;\n this.highlight = settings.highlight ?? null;\n this.chartSettings = {\n size: {\n width: settings?.size?.width ?? DEFAULT_WIDTH,\n height: settings?.size?.height ?? DEFAULT_HEIGHT,\n },\n title: {\n position: 'center',\n show: true,\n ...settings.title,\n name: settings.title?.name ?? 'Chart',\n },\n yAxis: {\n title: settings.y.label ?? settings.y.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.yAxis,\n },\n xAxis: {\n title: settings.x.label ?? settings.x.value,\n scale: 'linear',\n showGrid: true,\n showTicks: true,\n ...settings.xAxis,\n },\n frame: {type: settings.frame?.type ?? 'full'},\n legend: {\n show: true,\n position: 'right',\n ...settings.legend,\n },\n tooltips: {\n show: true,\n ...settings.tooltips,\n },\n };\n\n this.inheritedAes = settings.inheritedAes ?? {};\n\n this.layers = settings.layers\n .map(layer => {\n if (layer.type === 'dots') {\n return new DotsLayer(layer);\n } else if (layer.type === 'curve') {\n return new CurveLayer(layer);\n } else {\n throw new Error('Unknown layer type');\n }\n })\n .filter(Boolean) as ScatterplotUmapLayer[];\n }\n}\n"],"names":["DotsLayer","layer","__publicField","BLACK","CurveLayer","ScatterplotUmapSettingsImpl","settings","ScatterplotUmapSettingsSchema","lodash","_a","DEFAULT_WIDTH","_b","DEFAULT_HEIGHT","_c","_d"],"mappings":";;;;;;AAoBO,MAAMA,EAAU;AAAA,EAanB,YAAYC,GAAuB;AAZ1B,IAAAC,EAAA,cAAO;AACP,IAAAA,EAAA,aAKL;AAAA,MACA,SAASC;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAGT,SAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGF,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AACO,MAAMG,EAAW;AAAA,EAepB,YAAYH,GAAwB;AAd3B,IAAAC,EAAA,cAAO;AACP,IAAAA,EAAA;AACA,IAAAA,EAAA,aAKL;AAAA,MACA,WAAWC;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,IAAA;AAIT,SAAK,YAAYF,EAAM,aAAa,IACpC,KAAK,MAAM;AAAA,MACP,GAAG,KAAK;AAAA,MACR,GAAGA,EAAM;AAAA,IAAA;AAAA,EAEjB;AACJ;AAIO,MAAMI,EAAyD;AAAA,EAqBlE,YAAYC,GAAmC;AApBtC,IAAAJ,EAAA;AACA,IAAAA,EAAA,cAAO;AACP,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AASA,IAAAA,EAAA;AACA,IAAAA,EAAA;;AAGL,IAAAK,EAA8B,MAAMD,CAAQ,GAC5C,KAAK,KAAKE,EAAO,SAAS,UAAU,GACpC,KAAK,YAAYF,EAAS,aAAa,MACvC,KAAK,IAAIA,EAAS,GAClB,KAAK,IAAIA,EAAS,GAClB,KAAK,WAAWA,EAAS,YAAY,CAAA,GACrC,KAAK,QAAQA,EAAS,SAAS,MAC/B,KAAK,YAAYA,EAAS,aAAa,MACvC,KAAK,gBAAgB;AAAA,MACjB,MAAM;AAAA,QACF,SAAOG,IAAAH,KAAA,gBAAAA,EAAU,SAAV,gBAAAG,EAAgB,UAASC;AAAA,QAChC,UAAQC,IAAAL,KAAA,gBAAAA,EAAU,SAAV,gBAAAK,EAAgB,WAAUC;AAAA,MAAA;AAAA,MAEtC,OAAO;AAAA,QACH,UAAU;AAAA,QACV,MAAM;AAAA,QACN,GAAGN,EAAS;AAAA,QACZ,QAAMO,IAAAP,EAAS,UAAT,gBAAAO,EAAgB,SAAQ;AAAA,MAAA;AAAA,MAElC,OAAO;AAAA,QACH,OAAOP,EAAS,EAAE,SAASA,EAAS,EAAE;AAAA,QACtC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,GAAGA,EAAS;AAAA,MAAA;AAAA,MAEhB,OAAO;AAAA,QACH,OAAOA,EAAS,EAAE,SAASA,EAAS,EAAE;AAAA,QACtC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,GAAGA,EAAS;AAAA,MAAA;AAAA,MAEhB,OAAO,EAAC,QAAMQ,IAAAR,EAAS,UAAT,gBAAAQ,EAAgB,SAAQ,OAAA;AAAA,MACtC,QAAQ;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,GAAGR,EAAS;AAAA,MAAA;AAAA,MAEhB,UAAU;AAAA,QACN,MAAM;AAAA,QACN,GAAGA,EAAS;AAAA,MAAA;AAAA,IAChB,GAGJ,KAAK,eAAeA,EAAS,gBAAgB,CAAA,GAE7C,KAAK,SAASA,EAAS,OAClB,IAAI,CAAAL,MAAS;AACV,UAAIA,EAAM,SAAS;AACf,eAAO,IAAID,EAAUC,CAAK;AAC9B,UAAWA,EAAM,SAAS;AACtB,eAAO,IAAIG,EAAWH,CAAK;AAE3B,YAAM,IAAI,MAAM,oBAAoB;AAAA,IAE5C,CAAC,EACA,OAAO,OAAO;AAAA,EACvB;AACJ;"}
@@ -1,8 +1,10 @@
1
- import { ChartScales, ChartSizes, Point } from '../types';
2
- export declare function Lasso({ scales, chartSizes, disabled, onPolygonUpdate }: {
1
+ import { LassoControlsState, Polygon, ChartScales, ChartSizes } from '../types';
2
+ export declare function Lasso({ scales, chartSizes, zoomStateKey, defaultPolygons, onPolygonsApply, onLassoControlsStateUpdate, }: {
3
3
  scales: ChartScales;
4
4
  chartSizes: ChartSizes;
5
- disabled: boolean;
6
- onPolygonUpdate: (data: Point[]) => void;
5
+ zoomStateKey: string;
6
+ defaultPolygons: Polygon[];
7
+ onPolygonsApply: (data: Polygon[]) => void;
8
+ onLassoControlsStateUpdate: (v: LassoControlsState) => void;
7
9
  }): import("react/jsx-runtime").JSX.Element;
8
10
  //# sourceMappingURL=Lasso.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Lasso.d.ts","sourceRoot":"","sources":["../../../src/scatterplot-umap/components/Lasso.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,WAAW,EAAE,UAAU,EAAc,KAAK,EAAC,MAAM,UAAU,CAAC;AAKzE,wBAAgB,KAAK,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAC,EAAE;IACnE,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,CAAC,IAAI,EAAC,KAAK,EAAE,KAAK,IAAI,CAAC;CAC3C,2CAoIA"}
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"}