@milaboratories/miplots4 1.0.164 → 1.0.166

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 (66) hide show
  1. package/dist/_virtual/index10.js +2 -5
  2. package/dist/_virtual/index10.js.map +1 -1
  3. package/dist/_virtual/index5.js +5 -2
  4. package/dist/_virtual/index5.js.map +1 -1
  5. package/dist/_virtual/index6.js +4 -4
  6. package/dist/_virtual/index7.js +1 -1
  7. package/dist/_virtual/index8.js +4 -4
  8. package/dist/_virtual/index9.js +3 -3
  9. package/dist/bubble/components/ChartsGroup.js +21 -21
  10. package/dist/bubble/components/ChartsGroup.js.map +1 -1
  11. package/dist/common/Tooltip.d.ts +2 -1
  12. package/dist/common/Tooltip.js +147 -143
  13. package/dist/common/Tooltip.js.map +1 -1
  14. package/dist/discrete/DiscreteSettingsImpl.d.ts +11 -31
  15. package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
  16. package/dist/discrete/components/Chart.js +143 -143
  17. package/dist/discrete/components/Chart.js.map +1 -1
  18. package/dist/discrete/layers/stats/pValueCalculation.js +5 -5
  19. package/dist/heatmap/components/ChartsGroup.js +9 -9
  20. package/dist/heatmap/components/ChartsGroup.js.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.js +4 -4
  23. package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js +1 -1
  24. package/dist/scatterplot/components/ChartTooltip.js +34 -33
  25. package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
  26. package/dist/scatterplot/components/ChartsGroup.js +31 -31
  27. package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
  28. package/dist/scatterplot/dots.d.ts +2 -2
  29. package/dist/scatterplot/dots.js +9 -9
  30. package/dist/scatterplot/dots.js.map +1 -1
  31. package/dist/scatterplot/index.js +1 -1
  32. package/dist/scatterplot/index.js.map +1 -1
  33. package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +2 -1
  34. package/dist/scatterplot/utils/sortDotsByGrouping.js +22 -11
  35. package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -1
  36. package/dist/scatterplot-umap/ChartRenderer.d.ts +4 -3
  37. package/dist/scatterplot-umap/ChartRenderer.js +169 -164
  38. package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
  39. package/dist/scatterplot-umap/components/Lasso.js +49 -49
  40. package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
  41. package/dist/scatterplot-umap/components/SVGLayer.js +49 -49
  42. package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
  43. package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
  44. package/dist/scatterplot-umap/components/UpperSVG.js +39 -38
  45. package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
  46. package/dist/scatterplot-umap/constants.d.ts +6 -5
  47. package/dist/scatterplot-umap/constants.js +12 -11
  48. package/dist/scatterplot-umap/constants.js.map +1 -1
  49. package/dist/scatterplot-umap/index.d.ts +1 -0
  50. package/dist/scatterplot-umap/index.js +103 -83
  51. package/dist/scatterplot-umap/index.js.map +1 -1
  52. package/dist/types/bubble.js +32 -37
  53. package/dist/types/bubble.js.map +1 -1
  54. package/dist/types/common.d.ts +42 -0
  55. package/dist/types/common.js +39 -35
  56. package/dist/types/common.js.map +1 -1
  57. package/dist/types/discrete.d.ts +680 -70
  58. package/dist/types/discrete.js +141 -141
  59. package/dist/types/discrete.js.map +1 -1
  60. package/dist/types/heatmap.js +54 -59
  61. package/dist/types/heatmap.js.map +1 -1
  62. package/dist/types/scatterplot-umap.js +19 -24
  63. package/dist/types/scatterplot-umap.js.map +1 -1
  64. package/dist/types/scatterplot.js +41 -46
  65. package/dist/types/scatterplot.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Lasso.js","sources":["../../../src/scatterplot-umap/components/Lasso.tsx"],"sourcesContent":["import {SCATTERPLOT_LASSO_EVENTS} from '../constants';\nimport type {LassoControlsState, LassoMode} from '../types';\nimport type {Polygon} from '../types';\nimport type {Selection} from 'd3-selection';\nimport {select} from 'd3-selection';\nimport {BLACK} from '../../constants';\nimport type {ChartScales, ChartSizes, Point} from '../types';\nimport type {MouseEvent} from 'react';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {drag} from 'd3-drag';\n\nconst SELECTION_COLOR = '#845CFF';\nconst START_GREY = '#CFD1DB';\nconst CLOSING_DISTANCE = 20;\nconst R = 3;\nconst R_START = 6;\nconst MAX_HISTORY_LENGTH = 10;\n\ntype CircleData = { // moving point for editing\n idx: number;\n p: Point;\n};\ntype CirclesSelection = Selection<SVGCircleElement, CircleData, SVGGElement | null, CircleData>;\n\ntype HistoryFrame = {\n newPolygonPoints: Point[],\n closedPolygons: Polygon[]\n}\n\n// Mode = 'selection': creating new polygons, pan with button\n// Mode = 'pen': selecting polygon to edit or delete, any zooming actions\nexport function Lasso({\n scales,\n chartSizes,\n zoomStateKey,\n defaultPolygons,\n onPolygonsApply,\n onLassoControlsStateUpdate,\n}: {\n scales: ChartScales;\n chartSizes: ChartSizes;\n zoomStateKey: string;\n defaultPolygons: Polygon[];\n onPolygonsApply: (data: Polygon[]) => void;\n onLassoControlsStateUpdate: (v: LassoControlsState) => void;\n}) {\n useEffect(() => {\n // Events from outer controls\n function onPolygonDelete() {\n if (newPolygonPointsRef.current.length > 0) {\n clearNotFinishedPolygon();\n } else if (selectedPolygonRef.current === null) {\n updatePolygons([]);\n onPolygonsApply([]);\n } else {\n updatePolygons([...closedPolygonsRef.current.filter((_p, idx) => idx !== selectedPolygonRef.current)]);\n updateSelectedPolygon(null);\n onPolygonsApply(closedPolygonsRef.current);\n }\n }\n\n function onModeSelect(e: CustomEvent<LassoMode>) {\n updateMode(e.detail);\n }\n function onClickBack() {\n loadHistoryItem(historyIndexRef.current - 1);\n }\n function onClickForward() {\n loadHistoryItem(historyIndexRef.current + 1);\n }\n document.addEventListener(SCATTERPLOT_LASSO_EVENTS.delete, onPolygonDelete);\n document.addEventListener(SCATTERPLOT_LASSO_EVENTS.selectMode, onModeSelect as EventListener);\n document.addEventListener(SCATTERPLOT_LASSO_EVENTS.back, onClickBack);\n document.addEventListener(SCATTERPLOT_LASSO_EVENTS.forward, onClickForward);\n return () => {\n document.removeEventListener(SCATTERPLOT_LASSO_EVENTS.delete, onPolygonDelete);\n document.removeEventListener(SCATTERPLOT_LASSO_EVENTS.selectMode, onModeSelect as EventListener);\n document.removeEventListener(SCATTERPLOT_LASSO_EVENTS.back, onClickBack);\n document.removeEventListener(SCATTERPLOT_LASSO_EVENTS.forward, onClickForward);\n };\n }, []);\n\n // inner state\n const [lassoMode, setLassoMode] = useState<LassoMode>('pen');\n\n const [closedPolygons, setClosedPolygons] = useState<Polygon[]>(defaultPolygons);\n const closedPolygonsRef = useRef<Polygon[]>(defaultPolygons);\n\n const [hoveredPolygon, setHoveredPolygon] = useState<number | null>(null);\n\n const [selectedPolygon, setSelectedPolygon] = useState<number | null>(null);\n const selectedPolygonRef = useRef<number | null>(null);\n\n const [newPolygonPoints, setNewPolygonPoints] = useState<Point[]>([]);\n const newPolygonPointsRef = useRef(newPolygonPoints);\n\n const [history, setHistory] = useState<HistoryFrame[]>([{newPolygonPoints, closedPolygons}]);\n const [historyIndex, setHistoryIndex] = useState(0);\n const historyRef = useRef(history);\n const historyIndexRef = useRef(historyIndex);\n\n const [movingPoint, setMovingPoint] = useState<null | Point>(null);\n const movingPointRef = useRef<null | Point>(null);\n\n const [closeToStartPoint, setCloseToStartPoint] = useState(false);\n\n const selectedCirclesContainerRef = useRef<SVGGElement | null>(null);\n const selectedCirclesSelectionRef = useRef<CirclesSelection | null>(null);\n\n const saveCurrentStateToHistory = useCallback(function () {\n const newHistoryItem = {\n newPolygonPoints: [...newPolygonPointsRef.current],\n closedPolygons: [...closedPolygonsRef.current]\n };\n const newHistory = historyRef.current.slice(0, historyIndexRef.current + 1);\n newHistory.push(newHistoryItem);\n if (newHistory.length > MAX_HISTORY_LENGTH) {\n newHistory.shift();\n }\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n historyRef.current = newHistory;\n historyIndexRef.current = newHistory.length - 1;\n }, []);\n\n const loadHistoryItem = useCallback(function (index:number) {\n if (index > historyRef.current.length - 1 || index < 0) {\n return;\n }\n updateMode('selection');\n const historyState = historyRef.current[index];\n updatePolygons(historyState.closedPolygons, false);\n updateNewPolygon(historyState.newPolygonPoints, false);\n setHistoryIndex(index);\n historyIndexRef.current = index;\n }, []);\n function updatePolygons(p: Polygon[], saveToHistory = true) {\n setClosedPolygons(p);\n closedPolygonsRef.current = p;\n if (saveToHistory) {\n saveCurrentStateToHistory();\n }\n }\n\n function updateNewPolygon(points:Point[], saveToHistory = true) {\n newPolygonPointsRef.current = points;\n setNewPolygonPoints(points);\n if (saveToHistory) {\n saveCurrentStateToHistory();\n }\n }\n\n function updateSelectedPolygon(idx: number | null) {\n setSelectedPolygon(idx);\n selectedPolygonRef.current = idx;\n }\n\n function updateMode(v: LassoMode) {\n setLassoMode(v);\n if (v === 'selection') {\n updateSelectedPolygon(null);\n selectedCirclesSelectionRef.current = null;\n selectedCirclesContainerRef.current = null;\n }\n if (v === 'pen') {\n if (newPolygonPointsRef.current.length > 2) {\n const polygon:Polygon = {points: newPolygonPointsRef.current, closed: true};\n updatePolygons([...closedPolygonsRef.current, polygon]);\n onPolygonsApply([...closedPolygonsRef.current, polygon]);\n }\n clearNotFinishedPolygon();\n }\n }\n function clearNotFinishedPolygon(saveToHistory = true) {\n movingPointRef.current = null;\n updateNewPolygon([], saveToHistory);\n }\n\n function onKeyDown(e: KeyboardEvent) {\n const escape = e.key === 'Escape';\n if (!escape) {\n return;\n }\n clearNotFinishedPolygon();\n }\n\n useEffect(() => {\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, []);\n\n useEffect(() => {\n selectedCirclesSelectionRef.current?.attr('cx', d => scales.x(d.p[0])).attr('cy', d => scales.y(d.p[1]));\n }, [zoomStateKey, chartSizes.chartWidth, chartSizes.chartHeight]);\n\n const onNewPointAddByClick = useCallback(function () {\n setCloseToStartPoint(false);\n if (!movingPointRef.current || lassoMode === 'pen') {\n return;\n }\n const currentCoords = [...movingPointRef.current] as Point;\n const x = scales.x.invert(currentCoords[0]);\n const y = scales.y.invert(currentCoords[1]);\n\n if (!newPolygonPointsRef.current.length) {\n updateNewPolygon([[x, y]]);\n return;\n }\n\n const points = newPolygonPointsRef.current;\n const tooFar = !closeToStartPoint;\n if (tooFar || points.length < 3) {\n updateNewPolygon([...points, [x, y]]);\n } else {\n const polygon:Polygon = {points: [...points], closed: true};\n clearNotFinishedPolygon(false);\n updatePolygons([...closedPolygons, polygon]);\n // to avoid freezing of ui updating in case of big amount of points to apply polygons and change opacity\n setTimeout(() => onPolygonsApply([...closedPolygons, polygon]), 0);\n }\n }, [lassoMode, closeToStartPoint]);\n\n const onMouseMove = useCallback(function(e: MouseEvent<SVGRectElement>) {\n const p: Point = [e.nativeEvent.offsetX, e.nativeEvent.offsetY];\n const points = newPolygonPointsRef.current;\n const startPoint = newPolygonPointsRef.current[0];\n if (startPoint) {\n const startX = scales.x(startPoint[0]);\n const startY = scales.y(startPoint[1]);\n const distance = points.length > 1\n ? Math.sqrt((p[0] - startX) ** 2 + (p[1] - startY) ** 2)\n : Infinity;\n setCloseToStartPoint(distance < CLOSING_DISTANCE);\n } else {\n setCloseToStartPoint(false);\n }\n\n setMovingPoint(p);\n movingPointRef.current = p;\n }, []);\n\n function clearSelectedCircles() {\n if (selectedCirclesContainerRef.current) {\n select(selectedCirclesContainerRef.current).data([]).exit().remove();\n }\n }\n\n function updateSelectedCircles(el: SVGGElement | null) {\n if (el !== selectedCirclesContainerRef.current && el) {\n clearSelectedCircles();\n selectedCirclesContainerRef.current = el;\n onPolygonSelect(selectedPolygon);\n }\n }\n\n const onPolygonSelect = useCallback(function (idx: number | null) {\n if (lassoMode === 'selection') {\n return;\n }\n if (idx !== null) {\n const d = drag<SVGCircleElement, CircleData, SVGGElement | null>()\n .on('drag', function (e) {\n const el = select<SVGCircleElement, CircleData>(this);\n const d = el.data()[0] as number[] & CircleData;\n d[0] = e.x;\n d[1] = e.y;\n d.p = [scales.x.invert(d[0]), scales.y.invert(d[1])];\n el.attr('cx', d[0]).attr('cy', d[1]);\n const editedPolygons = closedPolygonsRef.current.map((polygon, polygonIdx) => {\n return idx !== polygonIdx ? polygon : {\n ...polygon,\n points: polygon.points.map((el, pointIdx) =>\n pointIdx === d.idx ? ([scales.x.invert(d[0]), scales.y.invert(d[1])] as Point) : el\n ),\n };\n });\n updatePolygons(editedPolygons, false);\n })\n .on('end', function () {\n saveCurrentStateToHistory();\n onPolygonsApply(closedPolygonsRef.current);\n });\n const draggablePointsData = closedPolygonsRef.current[idx].points.map((p, idx) => ({idx, p}));\n const selectedCircles = select(selectedCirclesContainerRef.current)\n .selectAll<SVGCircleElement, CircleData>('circle')\n .data(draggablePointsData, (d) => d.idx)\n .join('circle');\n selectedCirclesSelectionRef.current = selectedCircles;\n\n selectedCircles\n .attr('cx', d => scales.x(d.p[0]))\n .attr('cy', d => scales.y(d.p[1]))\n .attr('r', R)\n .attr('fill', 'white')\n .attr('stroke', SELECTION_COLOR);\n selectedCircles.call(d);\n }\n }, []);\n\n useEffect(() => {\n onLassoControlsStateUpdate({\n mode: lassoMode,\n backEnabled: historyIndex > 0,\n forwardEnabled: historyIndex < history.length - 1,\n deleteEnabled: selectedPolygon !== null || closedPolygons.length > 0 || newPolygonPoints.length > 0,\n });\n }, [lassoMode, selectedPolygon, closedPolygons, newPolygonPoints, historyIndex, history]);\n\n return (\n <>\n <g>\n <defs>\n <pattern\n id=\"diagonalStripes\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45 0 0)\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"10\" stroke={SELECTION_COLOR} strokeWidth=\"1\" />\n </pattern>\n </defs>\n <rect\n fill=\"transparent\"\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n onMouseMove={onMouseMove}\n onClick={onNewPointAddByClick}\n />\n {closedPolygons.map((p, idx) => {\n const isHovered = idx === hoveredPolygon;\n const isSelected = idx === selectedPolygon;\n const points = p.points.map(p => [scales.x(p[0]), scales.y(p[1])]);\n const pathD =\n points\n .map((p, idx) => {\n return (idx === 0 ? 'M' : 'L') + p[0] + ',' + p[1];\n })\n .join('') + 'z';\n return (\n <g key={idx}>\n <path\n d={pathD}\n fill={isHovered && !isSelected ? 'url(#diagonalStripes)' : 'transparent'}\n stroke={isSelected || isHovered ? SELECTION_COLOR : BLACK}\n onMouseOver={() => setHoveredPolygon(idx)}\n onMouseLeave={() => setHoveredPolygon(null)}\n onClick={() => updateSelectedPolygon(idx)}\n style={{pointerEvents: lassoMode === 'selection' || isSelected ? 'none' : 'auto'}}\n />\n {isSelected && <g ref={el => updateSelectedCircles(el)} />}\n </g>\n );\n })}\n <polyline\n points={newPolygonPoints.map((p) => `${scales.x(p[0])},${scales.y(p[1])}`).join(' ')}\n stroke={BLACK}\n fill=\"none\"\n style={{pointerEvents: 'none'}}\n />\n {newPolygonPoints.length > 1 && movingPoint && (\n <g style={{pointerEvents: 'none'}}>\n <circle\n cx={scales.x(newPolygonPoints[0][0])}\n cy={scales.y(newPolygonPoints[0][1])}\n r={R_START}\n fill=\"none\"\n stroke={START_GREY}\n strokeDasharray=\"3 3\"\n />\n <line\n x1={movingPoint[0]}\n y1={movingPoint[1]}\n x2={scales.x(newPolygonPoints[0][0])}\n y2={scales.y(newPolygonPoints[0][1])}\n stroke={START_GREY}\n strokeDasharray=\"3 3\"\n />\n </g>\n )}\n {newPolygonPoints.length > 0 && movingPoint && (\n <g style={{pointerEvents: 'none'}}>\n <line\n x1={scales.x(newPolygonPoints[newPolygonPoints.length - 1][0])}\n y1={scales.y(newPolygonPoints[newPolygonPoints.length - 1][1])}\n x2={movingPoint[0]}\n y2={movingPoint[1]}\n stroke={SELECTION_COLOR}\n />\n {newPolygonPoints.map((p, idx) => (\n <circle\n key={idx}\n cx={scales.x(p[0])}\n cy={scales.y(p[1])}\n r={R}\n fill=\"white\"\n stroke={idx > 0 ? SELECTION_COLOR : BLACK}\n />\n ))}\n <circle\n cx={movingPoint[0]}\n cy={movingPoint[1]}\n r={R}\n fill=\"white\"\n stroke={SELECTION_COLOR}\n />\n </g>\n )}\n {closeToStartPoint && movingPoint && (\n <circle\n cx={movingPoint[0] + 5}\n cy={movingPoint[1] - 5}\n r={2}\n fill=\"none\"\n stroke={SELECTION_COLOR}\n strokeWidth={0.5}\n />\n )}\n </g>\n </>\n );\n}\n"],"names":["SELECTION_COLOR","START_GREY","CLOSING_DISTANCE","R","R_START","MAX_HISTORY_LENGTH","Lasso","scales","chartSizes","zoomStateKey","defaultPolygons","onPolygonsApply","onLassoControlsStateUpdate","useEffect","onPolygonDelete","newPolygonPointsRef","clearNotFinishedPolygon","selectedPolygonRef","updatePolygons","closedPolygonsRef","_p","idx","updateSelectedPolygon","onModeSelect","e","updateMode","onClickBack","loadHistoryItem","historyIndexRef","onClickForward","SCATTERPLOT_LASSO_EVENTS","lassoMode","setLassoMode","useState","closedPolygons","setClosedPolygons","useRef","hoveredPolygon","setHoveredPolygon","selectedPolygon","setSelectedPolygon","newPolygonPoints","setNewPolygonPoints","history","setHistory","historyIndex","setHistoryIndex","historyRef","movingPoint","setMovingPoint","movingPointRef","closeToStartPoint","setCloseToStartPoint","selectedCirclesContainerRef","selectedCirclesSelectionRef","saveCurrentStateToHistory","useCallback","newHistoryItem","newHistory","index","historyState","updateNewPolygon","p","saveToHistory","points","v","polygon","onKeyDown","_a","d","onNewPointAddByClick","currentCoords","x","y","onMouseMove","startPoint","startX","startY","distance","clearSelectedCircles","select","updateSelectedCircles","el","onPolygonSelect","drag","editedPolygons","polygonIdx","pointIdx","draggablePointsData","selectedCircles","jsx","Fragment","isHovered","isSelected","pathD","BLACK","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Lasso.js","sources":["../../../src/scatterplot-umap/components/Lasso.tsx"],"sourcesContent":["import {SCATTERPLOT_CONTROLS_EVENTS} from '../constants';\nimport type {LassoControlsState, LassoMode} from '../types';\nimport type {Polygon} from '../types';\nimport type {Selection} from 'd3-selection';\nimport {select} from 'd3-selection';\nimport {BLACK} from '../../constants';\nimport type {ChartScales, ChartSizes, Point} from '../types';\nimport type {MouseEvent} from 'react';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {drag} from 'd3-drag';\n\nconst SELECTION_COLOR = '#845CFF';\nconst START_GREY = '#CFD1DB';\nconst CLOSING_DISTANCE = 20;\nconst R = 3;\nconst R_START = 6;\nconst MAX_HISTORY_LENGTH = 10;\n\ntype CircleData = { // moving point for editing\n idx: number;\n p: Point;\n};\ntype CirclesSelection = Selection<SVGCircleElement, CircleData, SVGGElement | null, CircleData>;\n\ntype HistoryFrame = {\n newPolygonPoints: Point[],\n closedPolygons: Polygon[]\n}\n\n// Mode = 'selection': creating new polygons, pan with button\n// Mode = 'pen': selecting polygon to edit or delete, any zooming actions\nexport function Lasso({\n scales,\n chartSizes,\n zoomStateKey,\n defaultPolygons,\n onPolygonsApply,\n onLassoControlsStateUpdate,\n}: {\n scales: ChartScales;\n chartSizes: ChartSizes;\n zoomStateKey: string;\n defaultPolygons: Polygon[];\n onPolygonsApply: (data: Polygon[]) => void;\n onLassoControlsStateUpdate: (v: LassoControlsState) => void;\n}) {\n useEffect(() => {\n // Events from outer controls\n function onPolygonDelete() {\n if (newPolygonPointsRef.current.length > 0) {\n clearNotFinishedPolygon();\n } else if (selectedPolygonRef.current === null) {\n updatePolygons([]);\n onPolygonsApply([]);\n } else {\n updatePolygons([...closedPolygonsRef.current.filter((_p, idx) => idx !== selectedPolygonRef.current)]);\n updateSelectedPolygon(null);\n onPolygonsApply(closedPolygonsRef.current);\n }\n }\n\n function onModeSelect(e: CustomEvent<LassoMode>) {\n updateMode(e.detail);\n }\n function onClickBack() {\n loadHistoryItem(historyIndexRef.current - 1);\n }\n function onClickForward() {\n loadHistoryItem(historyIndexRef.current + 1);\n }\n document.addEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoDelete, onPolygonDelete);\n document.addEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode, onModeSelect as EventListener);\n document.addEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoBack, onClickBack);\n document.addEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoForward, onClickForward);\n return () => {\n document.removeEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoDelete, onPolygonDelete);\n document.removeEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoSelectMode, onModeSelect as EventListener);\n document.removeEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoBack, onClickBack);\n document.removeEventListener(SCATTERPLOT_CONTROLS_EVENTS.lassoForward, onClickForward);\n };\n }, []);\n\n // inner state\n const [lassoMode, setLassoMode] = useState<LassoMode>('pen');\n\n const [closedPolygons, setClosedPolygons] = useState<Polygon[]>(defaultPolygons);\n const closedPolygonsRef = useRef<Polygon[]>(defaultPolygons);\n\n const [hoveredPolygon, setHoveredPolygon] = useState<number | null>(null);\n\n const [selectedPolygon, setSelectedPolygon] = useState<number | null>(null);\n const selectedPolygonRef = useRef<number | null>(null);\n\n const [newPolygonPoints, setNewPolygonPoints] = useState<Point[]>([]);\n const newPolygonPointsRef = useRef(newPolygonPoints);\n\n const [history, setHistory] = useState<HistoryFrame[]>([{newPolygonPoints, closedPolygons}]);\n const [historyIndex, setHistoryIndex] = useState(0);\n const historyRef = useRef(history);\n const historyIndexRef = useRef(historyIndex);\n\n const [movingPoint, setMovingPoint] = useState<null | Point>(null);\n const movingPointRef = useRef<null | Point>(null);\n\n const [closeToStartPoint, setCloseToStartPoint] = useState(false);\n\n const selectedCirclesContainerRef = useRef<SVGGElement | null>(null);\n const selectedCirclesSelectionRef = useRef<CirclesSelection | null>(null);\n\n const saveCurrentStateToHistory = useCallback(function () {\n const newHistoryItem = {\n newPolygonPoints: [...newPolygonPointsRef.current],\n closedPolygons: [...closedPolygonsRef.current]\n };\n const newHistory = historyRef.current.slice(0, historyIndexRef.current + 1);\n newHistory.push(newHistoryItem);\n if (newHistory.length > MAX_HISTORY_LENGTH) {\n newHistory.shift();\n }\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n historyRef.current = newHistory;\n historyIndexRef.current = newHistory.length - 1;\n }, []);\n\n const loadHistoryItem = useCallback(function (index:number) {\n if (index > historyRef.current.length - 1 || index < 0) {\n return;\n }\n updateMode('selection');\n const historyState = historyRef.current[index];\n updatePolygons(historyState.closedPolygons, false);\n updateNewPolygon(historyState.newPolygonPoints, false);\n setHistoryIndex(index);\n historyIndexRef.current = index;\n }, []);\n function updatePolygons(p: Polygon[], saveToHistory = true) {\n setClosedPolygons(p);\n closedPolygonsRef.current = p;\n if (saveToHistory) {\n saveCurrentStateToHistory();\n }\n }\n\n function updateNewPolygon(points:Point[], saveToHistory = true) {\n newPolygonPointsRef.current = points;\n setNewPolygonPoints(points);\n if (saveToHistory) {\n saveCurrentStateToHistory();\n }\n }\n\n function updateSelectedPolygon(idx: number | null) {\n setSelectedPolygon(idx);\n selectedPolygonRef.current = idx;\n }\n\n function updateMode(v: LassoMode) {\n setLassoMode(v);\n if (v === 'selection') {\n updateSelectedPolygon(null);\n selectedCirclesSelectionRef.current = null;\n selectedCirclesContainerRef.current = null;\n }\n if (v === 'pen') {\n if (newPolygonPointsRef.current.length > 2) {\n const polygon:Polygon = {points: newPolygonPointsRef.current, closed: true};\n updatePolygons([...closedPolygonsRef.current, polygon]);\n onPolygonsApply([...closedPolygonsRef.current, polygon]);\n }\n clearNotFinishedPolygon();\n }\n }\n function clearNotFinishedPolygon(saveToHistory = true) {\n movingPointRef.current = null;\n updateNewPolygon([], saveToHistory);\n }\n\n function onKeyDown(e: KeyboardEvent) {\n const escape = e.key === 'Escape';\n if (!escape) {\n return;\n }\n clearNotFinishedPolygon();\n }\n\n useEffect(() => {\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, []);\n\n useEffect(() => {\n selectedCirclesSelectionRef.current?.attr('cx', d => scales.x(d.p[0])).attr('cy', d => scales.y(d.p[1]));\n }, [zoomStateKey, chartSizes.chartWidth, chartSizes.chartHeight]);\n\n const onNewPointAddByClick = useCallback(function () {\n setCloseToStartPoint(false);\n if (!movingPointRef.current || lassoMode === 'pen') {\n return;\n }\n const currentCoords = [...movingPointRef.current] as Point;\n const x = scales.x.invert(currentCoords[0]);\n const y = scales.y.invert(currentCoords[1]);\n\n if (!newPolygonPointsRef.current.length) {\n updateNewPolygon([[x, y]]);\n return;\n }\n\n const points = newPolygonPointsRef.current;\n const tooFar = !closeToStartPoint;\n if (tooFar || points.length < 3) {\n updateNewPolygon([...points, [x, y]]);\n } else {\n const polygon:Polygon = {points: [...points], closed: true};\n clearNotFinishedPolygon(false);\n updatePolygons([...closedPolygons, polygon]);\n // to avoid freezing of ui updating in case of big amount of points to apply polygons and change opacity\n setTimeout(() => onPolygonsApply([...closedPolygons, polygon]), 0);\n }\n }, [lassoMode, closeToStartPoint]);\n\n const onMouseMove = useCallback(function(e: MouseEvent<SVGRectElement>) {\n const p: Point = [e.nativeEvent.offsetX, e.nativeEvent.offsetY];\n const points = newPolygonPointsRef.current;\n const startPoint = newPolygonPointsRef.current[0];\n if (startPoint) {\n const startX = scales.x(startPoint[0]);\n const startY = scales.y(startPoint[1]);\n const distance = points.length > 1\n ? Math.sqrt((p[0] - startX) ** 2 + (p[1] - startY) ** 2)\n : Infinity;\n setCloseToStartPoint(distance < CLOSING_DISTANCE);\n } else {\n setCloseToStartPoint(false);\n }\n\n setMovingPoint(p);\n movingPointRef.current = p;\n }, []);\n\n function clearSelectedCircles() {\n if (selectedCirclesContainerRef.current) {\n select(selectedCirclesContainerRef.current).data([]).exit().remove();\n }\n }\n\n function updateSelectedCircles(el: SVGGElement | null) {\n if (el !== selectedCirclesContainerRef.current && el) {\n clearSelectedCircles();\n selectedCirclesContainerRef.current = el;\n onPolygonSelect(selectedPolygon);\n }\n }\n\n const onPolygonSelect = useCallback(function (idx: number | null) {\n if (lassoMode === 'selection') {\n return;\n }\n if (idx !== null) {\n const d = drag<SVGCircleElement, CircleData, SVGGElement | null>()\n .on('drag', function (e) {\n const el = select<SVGCircleElement, CircleData>(this);\n const d = el.data()[0] as number[] & CircleData;\n d[0] = e.x;\n d[1] = e.y;\n d.p = [scales.x.invert(d[0]), scales.y.invert(d[1])];\n el.attr('cx', d[0]).attr('cy', d[1]);\n const editedPolygons = closedPolygonsRef.current.map((polygon, polygonIdx) => {\n return idx !== polygonIdx ? polygon : {\n ...polygon,\n points: polygon.points.map((el, pointIdx) =>\n pointIdx === d.idx ? ([scales.x.invert(d[0]), scales.y.invert(d[1])] as Point) : el\n ),\n };\n });\n updatePolygons(editedPolygons, false);\n })\n .on('end', function () {\n saveCurrentStateToHistory();\n onPolygonsApply(closedPolygonsRef.current);\n });\n const draggablePointsData = closedPolygonsRef.current[idx].points.map((p, idx) => ({idx, p}));\n const selectedCircles = select(selectedCirclesContainerRef.current)\n .selectAll<SVGCircleElement, CircleData>('circle')\n .data(draggablePointsData, (d) => d.idx)\n .join('circle');\n selectedCirclesSelectionRef.current = selectedCircles;\n\n selectedCircles\n .attr('cx', d => scales.x(d.p[0]))\n .attr('cy', d => scales.y(d.p[1]))\n .attr('r', R)\n .attr('fill', 'white')\n .attr('stroke', SELECTION_COLOR);\n selectedCircles.call(d);\n }\n }, []);\n\n useEffect(() => {\n onLassoControlsStateUpdate({\n mode: lassoMode,\n backEnabled: historyIndex > 0,\n forwardEnabled: historyIndex < history.length - 1,\n deleteEnabled: selectedPolygon !== null || closedPolygons.length > 0 || newPolygonPoints.length > 0,\n });\n }, [lassoMode, selectedPolygon, closedPolygons, newPolygonPoints, historyIndex, history]);\n\n return (\n <>\n <g>\n <defs>\n <pattern\n id=\"diagonalStripes\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45 0 0)\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"10\" stroke={SELECTION_COLOR} strokeWidth=\"1\" />\n </pattern>\n </defs>\n <rect\n fill=\"transparent\"\n width={chartSizes.chartWidth}\n height={chartSizes.chartHeight}\n onMouseMove={onMouseMove}\n onClick={onNewPointAddByClick}\n />\n {closedPolygons.map((p, idx) => {\n const isHovered = idx === hoveredPolygon;\n const isSelected = idx === selectedPolygon;\n const points = p.points.map(p => [scales.x(p[0]), scales.y(p[1])]);\n const pathD =\n points\n .map((p, idx) => {\n return (idx === 0 ? 'M' : 'L') + p[0] + ',' + p[1];\n })\n .join('') + 'z';\n return (\n <g key={idx}>\n <path\n d={pathD}\n fill={isHovered && !isSelected ? 'url(#diagonalStripes)' : 'transparent'}\n stroke={isSelected || isHovered ? SELECTION_COLOR : BLACK}\n onMouseOver={() => setHoveredPolygon(idx)}\n onMouseLeave={() => setHoveredPolygon(null)}\n onClick={() => updateSelectedPolygon(idx)}\n style={{pointerEvents: lassoMode === 'selection' || isSelected ? 'none' : 'auto'}}\n />\n {isSelected && <g ref={el => updateSelectedCircles(el)} />}\n </g>\n );\n })}\n <polyline\n points={newPolygonPoints.map((p) => `${scales.x(p[0])},${scales.y(p[1])}`).join(' ')}\n stroke={BLACK}\n fill=\"none\"\n style={{pointerEvents: 'none'}}\n />\n {newPolygonPoints.length > 1 && movingPoint && (\n <g style={{pointerEvents: 'none'}}>\n <circle\n cx={scales.x(newPolygonPoints[0][0])}\n cy={scales.y(newPolygonPoints[0][1])}\n r={R_START}\n fill=\"none\"\n stroke={START_GREY}\n strokeDasharray=\"3 3\"\n />\n <line\n x1={movingPoint[0]}\n y1={movingPoint[1]}\n x2={scales.x(newPolygonPoints[0][0])}\n y2={scales.y(newPolygonPoints[0][1])}\n stroke={START_GREY}\n strokeDasharray=\"3 3\"\n />\n </g>\n )}\n {newPolygonPoints.length > 0 && movingPoint && (\n <g style={{pointerEvents: 'none'}}>\n <line\n x1={scales.x(newPolygonPoints[newPolygonPoints.length - 1][0])}\n y1={scales.y(newPolygonPoints[newPolygonPoints.length - 1][1])}\n x2={movingPoint[0]}\n y2={movingPoint[1]}\n stroke={SELECTION_COLOR}\n />\n {newPolygonPoints.map((p, idx) => (\n <circle\n key={idx}\n cx={scales.x(p[0])}\n cy={scales.y(p[1])}\n r={R}\n fill=\"white\"\n stroke={idx > 0 ? SELECTION_COLOR : BLACK}\n />\n ))}\n <circle\n cx={movingPoint[0]}\n cy={movingPoint[1]}\n r={R}\n fill=\"white\"\n stroke={SELECTION_COLOR}\n />\n </g>\n )}\n {closeToStartPoint && movingPoint && (\n <circle\n cx={movingPoint[0] + 5}\n cy={movingPoint[1] - 5}\n r={2}\n fill=\"none\"\n stroke={SELECTION_COLOR}\n strokeWidth={0.5}\n />\n )}\n </g>\n </>\n );\n}\n"],"names":["SELECTION_COLOR","START_GREY","CLOSING_DISTANCE","R","R_START","MAX_HISTORY_LENGTH","Lasso","scales","chartSizes","zoomStateKey","defaultPolygons","onPolygonsApply","onLassoControlsStateUpdate","useEffect","onPolygonDelete","newPolygonPointsRef","clearNotFinishedPolygon","selectedPolygonRef","updatePolygons","closedPolygonsRef","_p","idx","updateSelectedPolygon","onModeSelect","e","updateMode","onClickBack","loadHistoryItem","historyIndexRef","onClickForward","SCATTERPLOT_CONTROLS_EVENTS","lassoMode","setLassoMode","useState","closedPolygons","setClosedPolygons","useRef","hoveredPolygon","setHoveredPolygon","selectedPolygon","setSelectedPolygon","newPolygonPoints","setNewPolygonPoints","history","setHistory","historyIndex","setHistoryIndex","historyRef","movingPoint","setMovingPoint","movingPointRef","closeToStartPoint","setCloseToStartPoint","selectedCirclesContainerRef","selectedCirclesSelectionRef","saveCurrentStateToHistory","useCallback","newHistoryItem","newHistory","index","historyState","updateNewPolygon","p","saveToHistory","points","v","polygon","onKeyDown","_a","d","onNewPointAddByClick","currentCoords","x","y","onMouseMove","startPoint","startX","startY","distance","clearSelectedCircles","select","updateSelectedCircles","el","onPolygonSelect","drag","editedPolygons","polygonIdx","pointIdx","draggablePointsData","selectedCircles","jsx","Fragment","isHovered","isSelected","pathD","BLACK","jsxs"],"mappings":"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"}
@@ -1,72 +1,72 @@
1
- import { j as p } from "../../_virtual/jsx-runtime.js";
2
- import { r as h } from "../../_virtual/index.js";
3
- import { r as w } from "../../_virtual/index2.js";
4
- import { ErrorBoundary as y } from "../../common/ErrorBoundary.js";
5
- import { useTooltip as B } from "../../common/Tooltip.js";
6
- import G from "./LowerSVG.js";
7
- import I from "./UpperSVG.js";
8
- function k({
9
- settingsId: s,
10
- scales: t,
11
- chartSettings: x,
12
- mainTitle: n,
13
- keyColumn: a,
14
- margins: j,
15
- chartSizes: f,
16
- captionsSizes: l,
1
+ import { j as m } from "../../_virtual/jsx-runtime.js";
2
+ import { r as y } from "../../_virtual/index.js";
3
+ import { r as B } from "../../_virtual/index2.js";
4
+ import { ErrorBoundary as G } from "../../common/ErrorBoundary.js";
5
+ import { useTooltip as I } from "../../common/Tooltip.js";
6
+ import P from "./LowerSVG.js";
7
+ import R from "./UpperSVG.js";
8
+ function A({
9
+ settingsId: x,
10
+ scales: f,
11
+ chartSettings: i,
12
+ mainTitle: l,
13
+ keyColumn: n,
14
+ margins: a,
15
+ chartSizes: t,
16
+ captionsSizes: j,
17
17
  container: r,
18
- zoomStateKey: i,
19
- aesGetters: u,
18
+ zoomStateKey: u,
19
+ aesGetters: s,
20
20
  legendData: E,
21
- labels: e,
22
- onPolygonUpdate: d,
21
+ labels: d,
22
+ onPolygonUpdate: e,
23
23
  onTooltipHintSwitch: v,
24
24
  onLassoControlsStateUpdate: L,
25
25
  dotsByGrouping: M,
26
26
  layers: V,
27
- defaultPolygons: g,
27
+ defaultPolygons: w,
28
28
  selectedDot: o = null
29
29
  }) {
30
30
  if (!r)
31
31
  return null;
32
- const m = B(v);
33
- return h.useEffect(() => {
34
- o ? m.onMouseEnter(o) : m.onMouseLeave();
35
- }, [o]), /* @__PURE__ */ p.jsx("div", { children: /* @__PURE__ */ p.jsxs(y, { dataId: s, children: [
36
- /* @__PURE__ */ p.jsx(
37
- G,
32
+ const p = I(v, i.tooltips);
33
+ return y.useEffect(() => {
34
+ o ? p.onMouseEnter(o) : p.onMouseLeave();
35
+ }, [o]), /* @__PURE__ */ m.jsx("div", { children: /* @__PURE__ */ m.jsxs(G, { dataId: x, children: [
36
+ /* @__PURE__ */ m.jsx(
37
+ P,
38
38
  {
39
- aesGetters: u,
39
+ aesGetters: s,
40
40
  dotsByGrouping: M,
41
41
  layers: V,
42
- scales: t,
43
- keyColumn: a,
44
- margins: j,
45
- mainTitle: n,
46
- captionsSizes: l,
47
- chartSettings: x,
48
- chartSizes: f,
42
+ scales: f,
43
+ keyColumn: n,
44
+ margins: a,
45
+ mainTitle: l,
46
+ captionsSizes: j,
47
+ chartSettings: i,
48
+ chartSizes: t,
49
49
  container: r,
50
- zoomStateKey: i,
50
+ zoomStateKey: u,
51
51
  legendData: E,
52
- tooltipData: m
52
+ tooltipData: p
53
53
  }
54
54
  ),
55
- w.createPortal(
56
- /* @__PURE__ */ p.jsx(
57
- I,
55
+ B.createPortal(
56
+ /* @__PURE__ */ m.jsx(
57
+ R,
58
58
  {
59
- scales: t,
59
+ scales: f,
60
60
  container: r,
61
- aesGetters: u,
62
- labels: e,
63
- chartSizes: f,
64
- zoomStateKey: i,
61
+ aesGetters: s,
62
+ labels: d,
63
+ chartSizes: t,
64
+ zoomStateKey: u,
65
65
  selectedDot: o,
66
- defaultPolygons: g,
67
- onPolygonUpdate: d,
66
+ defaultPolygons: w,
67
+ onPolygonUpdate: e,
68
68
  onLassoControlsStateUpdate: L,
69
- tooltipData: m
69
+ tooltipData: p
70
70
  }
71
71
  ),
72
72
  r
@@ -74,6 +74,6 @@ function k({
74
74
  ] }) });
75
75
  }
76
76
  export {
77
- k as SVGLayer
77
+ A as SVGLayer
78
78
  };
79
79
  //# sourceMappingURL=SVGLayer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SVGLayer.js","sources":["../../../src/scatterplot-umap/components/SVGLayer.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { DotInfo, SVGLayerProps } from '../types';\nimport LowerSvg from './LowerSVG';\nimport UpperSVG from './UpperSVG';\n\nexport function SVGLayer({\n settingsId,\n scales,\n chartSettings,\n mainTitle,\n keyColumn,\n margins,\n chartSizes,\n captionsSizes,\n container,\n zoomStateKey,\n aesGetters,\n legendData,\n labels,\n onPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate,\n dotsByGrouping,\n layers,\n defaultPolygons,\n selectedDot = null,\n}: SVGLayerProps) {\n if (!container) {\n return null;\n }\n const tooltipData = useTooltip<DotInfo>(onTooltipHintSwitch);\n useEffect(() => {\n if (selectedDot) {\n tooltipData.onMouseEnter(selectedDot);\n } else {\n tooltipData.onMouseLeave();\n }\n }, [selectedDot]);\n\n return (\n <div>\n <ErrorBoundary dataId={settingsId}>\n <LowerSvg\n aesGetters={aesGetters}\n dotsByGrouping={dotsByGrouping}\n layers={layers}\n scales={scales}\n keyColumn={keyColumn}\n margins={margins}\n mainTitle={mainTitle}\n captionsSizes={captionsSizes}\n chartSettings={chartSettings}\n chartSizes={chartSizes}\n container={container}\n zoomStateKey={zoomStateKey}\n legendData={legendData}\n tooltipData={tooltipData}\n />\n {createPortal(\n <UpperSVG\n scales={scales}\n container={container}\n aesGetters={aesGetters}\n labels={labels}\n chartSizes={chartSizes}\n zoomStateKey={zoomStateKey}\n selectedDot={selectedDot}\n defaultPolygons={defaultPolygons}\n onPolygonUpdate={onPolygonUpdate}\n onLassoControlsStateUpdate={onLassoControlsStateUpdate}\n tooltipData={tooltipData}\n />,\n container\n )}\n </ErrorBoundary>\n </div>\n );\n}\n"],"names":["SVGLayer","settingsId","scales","chartSettings","mainTitle","keyColumn","margins","chartSizes","captionsSizes","container","zoomStateKey","aesGetters","legendData","labels","onPolygonUpdate","onTooltipHintSwitch","onLassoControlsStateUpdate","dotsByGrouping","layers","defaultPolygons","selectedDot","tooltipData","useTooltip","useEffect","jsx","jsxs","ErrorBoundary","LowerSvg","createPortal","UpperSVG"],"mappings":";;;;;;;AAQO,SAASA,EAAS;AAAA,EACrB,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC,IAAc;AAClB,GAAkB;AACd,MAAI,CAACX;AACD,WAAO;AAEX,QAAMY,IAAcC,EAAoBP,CAAmB;AAC3DQ,SAAAA,EAAAA,UAAU,MAAM;AACZ,IAAIH,IACAC,EAAY,aAAaD,CAAW,IAEpCC,EAAY,aAAA;AAAA,EAEpB,GAAG,CAACD,CAAW,CAAC,GAGZI,gBAAAA,EAAAA,IAAC,OAAA,EACD,UAAAC,gBAAAA,EAAAA,KAACC,GAAA,EAAc,QAAQzB,GACnB,UAAA;AAAA,IAAAuB,gBAAAA,EAAAA;AAAAA,MAACG;AAAA,MAAA;AAAA,QACG,YAAAhB;AAAA,QACA,gBAAAM;AAAA,QACA,QAAAC;AAAA,QACA,QAAAhB;AAAA,QACA,WAAAG;AAAA,QACA,SAAAC;AAAA,QACA,WAAAF;AAAA,QACA,eAAAI;AAAA,QACA,eAAAL;AAAA,QACA,YAAAI;AAAA,QACA,WAAAE;AAAA,QACA,cAAAC;AAAA,QACA,YAAAE;AAAA,QACA,aAAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHO,EAAAA;AAAAA,MACGJ,gBAAAA,EAAAA;AAAAA,QAACK;AAAA,QAAA;AAAA,UACG,QAAA3B;AAAA,UACA,WAAAO;AAAA,UACA,YAAAE;AAAA,UACA,QAAAE;AAAA,UACA,YAAAN;AAAA,UACA,cAAAG;AAAA,UACA,aAAAU;AAAA,UACA,iBAAAD;AAAA,UACA,iBAAAL;AAAA,UACA,4BAAAE;AAAA,UACA,aAAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJZ;AAAA,IAAA;AAAA,EACJ,EAAA,CACJ,EAAA,CACA;AAER;"}
1
+ {"version":3,"file":"SVGLayer.js","sources":["../../../src/scatterplot-umap/components/SVGLayer.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ErrorBoundary } from '../../common/ErrorBoundary';\nimport { useTooltip } from '../../common/Tooltip';\nimport type { DotInfo, SVGLayerProps } from '../types';\nimport LowerSvg from './LowerSVG';\nimport UpperSVG from './UpperSVG';\n\nexport function SVGLayer({\n settingsId,\n scales,\n chartSettings,\n mainTitle,\n keyColumn,\n margins,\n chartSizes,\n captionsSizes,\n container,\n zoomStateKey,\n aesGetters,\n legendData,\n labels,\n onPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate,\n dotsByGrouping,\n layers,\n defaultPolygons,\n selectedDot = null,\n}: SVGLayerProps) {\n if (!container) {\n return null;\n }\n const tooltipData = useTooltip<DotInfo>(onTooltipHintSwitch, chartSettings.tooltips);\n useEffect(() => {\n if (selectedDot) {\n tooltipData.onMouseEnter(selectedDot);\n } else {\n tooltipData.onMouseLeave();\n }\n }, [selectedDot]);\n\n return (\n <div>\n <ErrorBoundary dataId={settingsId}>\n <LowerSvg\n aesGetters={aesGetters}\n dotsByGrouping={dotsByGrouping}\n layers={layers}\n scales={scales}\n keyColumn={keyColumn}\n margins={margins}\n mainTitle={mainTitle}\n captionsSizes={captionsSizes}\n chartSettings={chartSettings}\n chartSizes={chartSizes}\n container={container}\n zoomStateKey={zoomStateKey}\n legendData={legendData}\n tooltipData={tooltipData}\n />\n {createPortal(\n <UpperSVG\n scales={scales}\n container={container}\n aesGetters={aesGetters}\n labels={labels}\n chartSizes={chartSizes}\n zoomStateKey={zoomStateKey}\n selectedDot={selectedDot}\n defaultPolygons={defaultPolygons}\n onPolygonUpdate={onPolygonUpdate}\n onLassoControlsStateUpdate={onLassoControlsStateUpdate}\n tooltipData={tooltipData}\n />,\n container\n )}\n </ErrorBoundary>\n </div>\n );\n}\n"],"names":["SVGLayer","settingsId","scales","chartSettings","mainTitle","keyColumn","margins","chartSizes","captionsSizes","container","zoomStateKey","aesGetters","legendData","labels","onPolygonUpdate","onTooltipHintSwitch","onLassoControlsStateUpdate","dotsByGrouping","layers","defaultPolygons","selectedDot","tooltipData","useTooltip","useEffect","jsx","jsxs","ErrorBoundary","LowerSvg","createPortal","UpperSVG"],"mappings":";;;;;;;AAQO,SAASA,EAAS;AAAA,EACrB,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC,IAAc;AAClB,GAAkB;AACd,MAAI,CAACX;AACD,WAAO;AAEX,QAAMY,IAAcC,EAAoBP,GAAqBZ,EAAc,QAAQ;AACnFoB,SAAAA,EAAAA,UAAU,MAAM;AACZ,IAAIH,IACAC,EAAY,aAAaD,CAAW,IAEpCC,EAAY,aAAA;AAAA,EAEpB,GAAG,CAACD,CAAW,CAAC,GAGZI,gBAAAA,EAAAA,IAAC,OAAA,EACD,UAAAC,gBAAAA,EAAAA,KAACC,GAAA,EAAc,QAAQzB,GACnB,UAAA;AAAA,IAAAuB,gBAAAA,EAAAA;AAAAA,MAACG;AAAA,MAAA;AAAA,QACG,YAAAhB;AAAA,QACA,gBAAAM;AAAA,QACA,QAAAC;AAAA,QACA,QAAAhB;AAAA,QACA,WAAAG;AAAA,QACA,SAAAC;AAAA,QACA,WAAAF;AAAA,QACA,eAAAI;AAAA,QACA,eAAAL;AAAA,QACA,YAAAI;AAAA,QACA,WAAAE;AAAA,QACA,cAAAC;AAAA,QACA,YAAAE;AAAA,QACA,aAAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHO,EAAAA;AAAAA,MACGJ,gBAAAA,EAAAA;AAAAA,QAACK;AAAA,QAAA;AAAA,UACG,QAAA3B;AAAA,UACA,WAAAO;AAAA,UACA,YAAAE;AAAA,UACA,QAAAE;AAAA,UACA,YAAAN;AAAA,UACA,cAAAG;AAAA,UACA,aAAAU;AAAA,UACA,iBAAAD;AAAA,UACA,iBAAAL;AAAA,UACA,4BAAAE;AAAA,UACA,aAAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJZ;AAAA,IAAA;AAAA,EACJ,EAAA,CACJ,EAAA,CACA;AAER;"}
@@ -1,7 +1,7 @@
1
1
  import { TooltipsData } from '../../common/Tooltip';
2
2
  import { Label } from '../../scatterplot/utils/getVisibleLabels';
3
3
  import { AesGetters, ChartScales, ChartSizes, DotInfo, LassoControlsState, Polygon } from '../types';
4
- declare function UpperSVG({ scales, container, labels, aesGetters, chartSizes, zoomStateKey, defaultPolygons, onPolygonUpdate, onLassoControlsStateUpdate, tooltipData }: {
4
+ declare function UpperSVG({ scales, container, labels, aesGetters, chartSizes, zoomStateKey, defaultPolygons, onPolygonUpdate, onLassoControlsStateUpdate, tooltipData, selectedDot }: {
5
5
  scales: ChartScales;
6
6
  container: SVGElement | null;
7
7
  aesGetters: AesGetters;
@@ -1,28 +1,29 @@
1
- import { j as e } from "../../_virtual/jsx-runtime.js";
2
- import { getLabelMinX as g, getLabelMinY as j } from "../../scatterplot/utils/getVisibleLabels.js";
3
- import { Lasso as y } from "./Lasso.js";
4
- function w({
5
- scales: n,
6
- container: x,
7
- labels: l,
8
- aesGetters: s,
9
- chartSizes: r,
10
- zoomStateKey: o,
11
- defaultPolygons: a,
12
- onPolygonUpdate: c,
13
- onLassoControlsStateUpdate: h,
14
- tooltipData: t
1
+ import { j as n } from "../../_virtual/jsx-runtime.js";
2
+ import { getLabelMinX as y, getLabelMinY as u } from "../../scatterplot/utils/getVisibleLabels.js";
3
+ import { Lasso as c } from "./Lasso.js";
4
+ function E({
5
+ scales: r,
6
+ container: s,
7
+ labels: a,
8
+ aesGetters: o,
9
+ chartSizes: i,
10
+ zoomStateKey: l,
11
+ defaultPolygons: p,
12
+ onPolygonUpdate: h,
13
+ onLassoControlsStateUpdate: d,
14
+ tooltipData: m,
15
+ selectedDot: t
15
16
  }) {
16
- return x ? /* @__PURE__ */ e.jsxs("g", { children: [
17
- l.map((i, m) => {
18
- const { name: f, height: d, width: p } = i;
19
- return /* @__PURE__ */ e.jsx("g", { children: /* @__PURE__ */ e.jsxs("g", { transform: `translate(${g(i)},${j(i)})`, children: [
20
- /* @__PURE__ */ e.jsx("rect", { x: "0", y: "0", width: p, height: d, fill: "transparent", stroke: "none" }),
21
- /* @__PURE__ */ e.jsx(
17
+ return s ? /* @__PURE__ */ n.jsxs("g", { children: [
18
+ a.map((e, f) => {
19
+ const { name: g, height: x, width: j } = e;
20
+ return /* @__PURE__ */ n.jsx("g", { children: /* @__PURE__ */ n.jsxs("g", { transform: `translate(${y(e)},${u(e)})`, children: [
21
+ /* @__PURE__ */ n.jsx("rect", { x: "0", y: "0", width: j, height: x, fill: "transparent", stroke: "none" }),
22
+ /* @__PURE__ */ n.jsx(
22
23
  "text",
23
24
  {
24
25
  x: 0,
25
- y: d / 2,
26
+ y: x / 2,
26
27
  stroke: "white",
27
28
  strokeWidth: 2,
28
29
  paintOrder: "stroke",
@@ -30,36 +31,36 @@ function w({
30
31
  fontFamily: "Manrope",
31
32
  fontSize: "16px",
32
33
  dominantBaseline: "middle",
33
- children: f
34
+ children: g
34
35
  }
35
36
  )
36
- ] }) }, m);
37
+ ] }) }, f);
37
38
  }),
38
- t.selectedData && /* @__PURE__ */ e.jsx(
39
+ t && /* @__PURE__ */ n.jsx(
39
40
  "circle",
40
41
  {
41
- cx: n.x(t.selectedData.x),
42
- cy: n.y(t.selectedData.y),
43
- r: Math.max(s.dotSize(t.selectedData.idx) * 1.2, 5),
44
- fill: s.dotFill(t.selectedData.idx),
42
+ cx: r.x(t.x),
43
+ cy: r.y(t.y),
44
+ r: Math.max(o.dotSize(t.idx) * 1.2, 5),
45
+ fill: o.dotFill(t.idx),
45
46
  style: { pointerEvents: "none" }
46
47
  }
47
48
  ),
48
- /* @__PURE__ */ e.jsx(
49
- y,
49
+ /* @__PURE__ */ n.jsx(
50
+ c,
50
51
  {
51
- scales: n,
52
- chartSizes: r,
53
- zoomStateKey: o,
54
- defaultPolygons: a,
55
- onPolygonsApply: c,
56
- onLassoControlsStateUpdate: h
52
+ scales: r,
53
+ chartSizes: i,
54
+ zoomStateKey: l,
55
+ defaultPolygons: p,
56
+ onPolygonsApply: h,
57
+ onLassoControlsStateUpdate: d
57
58
  }
58
59
  ),
59
- t.fixed && /* @__PURE__ */ e.jsx("rect", { width: r.chartWidth, height: r.chartHeight, fill: "rgba(255,255,255,0.8)" })
60
+ m.fixed && /* @__PURE__ */ n.jsx("rect", { width: i.chartWidth, height: i.chartHeight, fill: "rgba(255,255,255,0.8)" })
60
61
  ] }) : null;
61
62
  }
62
63
  export {
63
- w as default
64
+ E as default
64
65
  };
65
66
  //# sourceMappingURL=UpperSVG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpperSVG.js","sources":["../../../src/scatterplot-umap/components/UpperSVG.tsx"],"sourcesContent":["import type { TooltipsData } from '../../common/Tooltip';\nimport { getLabelMinX, getLabelMinY, type Label } from '../../scatterplot/utils/getVisibleLabels';\nimport type { AesGetters, ChartScales, ChartSizes, DotInfo, LassoControlsState, Polygon } from '../types';\nimport { Lasso } from './Lasso';\n\nfunction UpperSVG({\n scales,\n container,\n labels,\n aesGetters,\n chartSizes,\n zoomStateKey,\n defaultPolygons,\n onPolygonUpdate,\n onLassoControlsStateUpdate,\n tooltipData\n}: {\n scales: ChartScales;\n container: SVGElement | null;\n aesGetters: AesGetters;\n labels: Label[];\n chartSizes: ChartSizes;\n zoomStateKey: string;\n defaultPolygons: Polygon[];\n onLassoControlsStateUpdate: (v:LassoControlsState) => void;\n onPolygonUpdate: (data:Polygon[]) => void;\n tooltipData: TooltipsData<DotInfo>;\n selectedDot?: DotInfo | null;\n}) {\n if (!container) {\n return null;\n }\n\n return (\n <g>\n {labels.map((label, idx) => {\n const {name, height, width} = label;\n return (\n <g key={idx}>\n <g transform={`translate(${getLabelMinX(label)},${getLabelMinY(label)})`}>\n <rect x=\"0\" y=\"0\" width={width} height={height} fill=\"transparent\" stroke=\"none\" />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n </g>\n );\n })}\n {tooltipData.selectedData && (\n <circle\n cx={scales.x(tooltipData.selectedData.x)}\n cy={scales.y(tooltipData.selectedData.y)}\n r={Math.max(aesGetters.dotSize(tooltipData.selectedData.idx) * 1.2, 5)}\n fill={aesGetters.dotFill(tooltipData.selectedData.idx)}\n style={{pointerEvents: 'none'}}\n />\n )}\n <Lasso\n scales={scales}\n chartSizes={chartSizes}\n zoomStateKey={zoomStateKey}\n defaultPolygons={defaultPolygons}\n onPolygonsApply={onPolygonUpdate}\n onLassoControlsStateUpdate={onLassoControlsStateUpdate}\n />\n {tooltipData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n </g>\n );\n}\n\nexport default UpperSVG;\n"],"names":["UpperSVG","scales","container","labels","aesGetters","chartSizes","zoomStateKey","defaultPolygons","onPolygonUpdate","onLassoControlsStateUpdate","tooltipData","label","idx","name","height","width","jsx","jsxs","getLabelMinX","getLabelMinY","Lasso"],"mappings":";;;AAKA,SAASA,EAAS;AAAA,EACd,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,aAAAC;AACJ,GAYG;AACC,SAAKR,2BAKA,KAAA,EACI,UAAA;AAAA,IAAAC,EAAO,IAAI,CAACQ,GAAOC,MAAQ;AACxB,YAAM,EAAC,MAAAC,GAAM,QAAAC,GAAQ,OAAAC,EAAA,IAASJ;AAC9B,aACIK,gBAAAA,EAAAA,IAAC,KAAA,EACG,UAAAC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaC,EAAaP,CAAK,CAAC,IAAIQ,EAAaR,CAAK,CAAC,KACjE,UAAA;AAAA,QAAAK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAAD,GAAc,QAAAD,GAAgB,MAAK,eAAc,QAAO,OAAA,CAAO;AAAA,QACjFE,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,GAAG;AAAA,YACH,GAAGF,IAAS;AAAA,YACZ,QAAO;AAAA,YACP,aAAa;AAAA,YACb,YAAW;AAAA,YACX,OAAO,EAAC,eAAe,OAAA;AAAA,YACvB,YAAW;AAAA,YACX,UAAS;AAAA,YACT,kBAAiB;AAAA,YAEhB,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CACJ,KAhBID,CAiBR;AAAA,IAER,CAAC;AAAA,IACAF,EAAY,gBACTM,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAIf,EAAO,EAAES,EAAY,aAAa,CAAC;AAAA,QACvC,IAAIT,EAAO,EAAES,EAAY,aAAa,CAAC;AAAA,QACvC,GAAG,KAAK,IAAIN,EAAW,QAAQM,EAAY,aAAa,GAAG,IAAI,KAAK,CAAC;AAAA,QACrE,MAAMN,EAAW,QAAQM,EAAY,aAAa,GAAG;AAAA,QACrD,OAAO,EAAC,eAAe,OAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAGrCM,gBAAAA,EAAAA;AAAAA,MAACI;AAAA,MAAA;AAAA,QACG,QAAAnB;AAAA,QACA,YAAAI;AAAA,QACA,cAAAC;AAAA,QACA,iBAAAC;AAAA,QACA,iBAAiBC;AAAA,QACjB,4BAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHC,EAAY,SAASM,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOX,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,EAAA,GAC1H,IA9CO;AAgDf;"}
1
+ {"version":3,"file":"UpperSVG.js","sources":["../../../src/scatterplot-umap/components/UpperSVG.tsx"],"sourcesContent":["import type { TooltipsData } from '../../common/Tooltip';\nimport { getLabelMinX, getLabelMinY, type Label } from '../../scatterplot/utils/getVisibleLabels';\nimport type { AesGetters, ChartScales, ChartSizes, DotInfo, LassoControlsState, Polygon } from '../types';\nimport { Lasso } from './Lasso';\n\nfunction UpperSVG({\n scales,\n container,\n labels,\n aesGetters,\n chartSizes,\n zoomStateKey,\n defaultPolygons,\n onPolygonUpdate,\n onLassoControlsStateUpdate,\n tooltipData,\n selectedDot\n}: {\n scales: ChartScales;\n container: SVGElement | null;\n aesGetters: AesGetters;\n labels: Label[];\n chartSizes: ChartSizes;\n zoomStateKey: string;\n defaultPolygons: Polygon[];\n onLassoControlsStateUpdate: (v:LassoControlsState) => void;\n onPolygonUpdate: (data:Polygon[]) => void;\n tooltipData: TooltipsData<DotInfo>;\n selectedDot?: DotInfo | null;\n}) {\n if (!container) {\n return null;\n }\n\n return (\n <g>\n {labels.map((label, idx) => {\n const {name, height, width} = label;\n return (\n <g key={idx}>\n <g transform={`translate(${getLabelMinX(label)},${getLabelMinY(label)})`}>\n <rect x=\"0\" y=\"0\" width={width} height={height} fill=\"transparent\" stroke=\"none\" />\n <text\n x={0}\n y={height / 2}\n stroke=\"white\"\n strokeWidth={2}\n paintOrder=\"stroke\"\n style={{pointerEvents: 'none'}}\n fontFamily=\"Manrope\"\n fontSize=\"16px\"\n dominantBaseline=\"middle\"\n >\n {name}\n </text>\n </g>\n </g>\n );\n })}\n {selectedDot && (\n <circle\n cx={scales.x(selectedDot.x)}\n cy={scales.y(selectedDot.y)}\n r={Math.max(aesGetters.dotSize(selectedDot.idx) * 1.2, 5)}\n fill={aesGetters.dotFill(selectedDot.idx)}\n style={{pointerEvents: 'none'}}\n />\n )}\n <Lasso\n scales={scales}\n chartSizes={chartSizes}\n zoomStateKey={zoomStateKey}\n defaultPolygons={defaultPolygons}\n onPolygonsApply={onPolygonUpdate}\n onLassoControlsStateUpdate={onLassoControlsStateUpdate}\n />\n {tooltipData.fixed && <rect width={chartSizes.chartWidth} height={chartSizes.chartHeight} fill=\"rgba(255,255,255,0.8)\"/>}\n </g>\n );\n}\n\nexport default UpperSVG;\n"],"names":["UpperSVG","scales","container","labels","aesGetters","chartSizes","zoomStateKey","defaultPolygons","onPolygonUpdate","onLassoControlsStateUpdate","tooltipData","selectedDot","label","idx","name","height","width","jsx","jsxs","getLabelMinX","getLabelMinY","Lasso"],"mappings":";;;AAKA,SAASA,EAAS;AAAA,EACd,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AACJ,GAYG;AACC,SAAKT,2BAKA,KAAA,EACI,UAAA;AAAA,IAAAC,EAAO,IAAI,CAACS,GAAOC,MAAQ;AACxB,YAAM,EAAC,MAAAC,GAAM,QAAAC,GAAQ,OAAAC,EAAA,IAASJ;AAC9B,aACIK,gBAAAA,EAAAA,IAAC,KAAA,EACG,UAAAC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAW,aAAaC,EAAaP,CAAK,CAAC,IAAIQ,EAAaR,CAAK,CAAC,KACjE,UAAA;AAAA,QAAAK,gBAAAA,EAAAA,IAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAAD,GAAc,QAAAD,GAAgB,MAAK,eAAc,QAAO,OAAA,CAAO;AAAA,QACjFE,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,GAAG;AAAA,YACH,GAAGF,IAAS;AAAA,YACZ,QAAO;AAAA,YACP,aAAa;AAAA,YACb,YAAW;AAAA,YACX,OAAO,EAAC,eAAe,OAAA;AAAA,YACvB,YAAW;AAAA,YACX,UAAS;AAAA,YACT,kBAAiB;AAAA,YAEhB,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CACJ,KAhBID,CAiBR;AAAA,IAER,CAAC;AAAA,IACAF,KACGM,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAIhB,EAAO,EAAEU,EAAY,CAAC;AAAA,QAC1B,IAAIV,EAAO,EAAEU,EAAY,CAAC;AAAA,QAC1B,GAAG,KAAK,IAAIP,EAAW,QAAQO,EAAY,GAAG,IAAI,KAAK,CAAC;AAAA,QACxD,MAAMP,EAAW,QAAQO,EAAY,GAAG;AAAA,QACxC,OAAO,EAAC,eAAe,OAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAGrCM,gBAAAA,EAAAA;AAAAA,MAACI;AAAA,MAAA;AAAA,QACG,QAAApB;AAAA,QACA,YAAAI;AAAA,QACA,cAAAC;AAAA,QACA,iBAAAC;AAAA,QACA,iBAAiBC;AAAA,QACjB,4BAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHC,EAAY,SAASO,gBAAAA,EAAAA,IAAC,QAAA,EAAK,OAAOZ,EAAW,YAAY,QAAQA,EAAW,aAAa,MAAK,wBAAA,CAAuB;AAAA,EAAA,GAC1H,IA9CO;AAgDf;"}
@@ -9,9 +9,10 @@ export declare const DEFAULT_TICKS_SIZE = 4;
9
9
  export declare const TICK_OFFSET = 6;
10
10
  export declare const MIN_PADDING = 12;
11
11
  export declare const LEGEND_OFFSET = 24;
12
- export declare const SCATTERPLOT_LASSO_EVENTS: {
13
- delete: string;
14
- selectMode: string;
15
- back: string;
16
- forward: string;
12
+ export declare const SCATTERPLOT_CONTROLS_EVENTS: {
13
+ lassoDelete: string;
14
+ lassoSelectMode: string;
15
+ lassoBack: string;
16
+ lassoForward: string;
17
+ resetViewport: string;
17
18
  };
@@ -1,19 +1,20 @@
1
- const E = {
1
+ const T = {
2
2
  TOP: 30,
3
3
  BOTTOM: 30,
4
4
  LEFT: 30,
5
5
  RIGHT: 30
6
- }, S = 20, T = 4, L = 24, O = {
7
- delete: "LASSO_DELETE",
8
- selectMode: "LASSO_SELECT_MODE",
9
- back: "LASSO_BACK",
10
- forward: "LASSO_FORWARD"
6
+ }, E = 20, S = 4, O = 24, s = {
7
+ lassoDelete: "LASSO_DELETE",
8
+ lassoSelectMode: "LASSO_SELECT_MODE",
9
+ lassoBack: "LASSO_BACK",
10
+ lassoForward: "LASSO_FORWARD",
11
+ resetViewport: "SCATTERPLOT_RESET_VIEWPORT"
11
12
  };
12
13
  export {
13
- T as DEFAULT_TICKS_SIZE,
14
- L as LEGEND_OFFSET,
15
- E as PADDINGS,
16
- O as SCATTERPLOT_LASSO_EVENTS,
17
- S as TITLE_LINE
14
+ S as DEFAULT_TICKS_SIZE,
15
+ O as LEGEND_OFFSET,
16
+ T as PADDINGS,
17
+ s as SCATTERPLOT_CONTROLS_EVENTS,
18
+ E as TITLE_LINE
18
19
  };
19
20
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/scatterplot-umap/constants.ts"],"sourcesContent":["// inner paddings in chart area\nexport const PADDINGS = {\n TOP: 30,\n BOTTOM: 30,\n LEFT: 30,\n RIGHT: 30\n};\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\nexport const MIN_PADDING = 12;\n\nexport const LEGEND_OFFSET = 24;\n\nexport const SCATTERPLOT_LASSO_EVENTS = {\n delete: 'LASSO_DELETE',\n selectMode: 'LASSO_SELECT_MODE',\n back: 'LASSO_BACK',\n forward: 'LASSO_FORWARD'\n};\n"],"names":["PADDINGS","TITLE_LINE","DEFAULT_TICKS_SIZE","LEGEND_OFFSET","SCATTERPLOT_LASSO_EVENTS"],"mappings":"AACO,MAAMA,IAAW;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACX,GAEaC,IAAa,IACbC,IAAqB,GAIrBC,IAAgB,IAEhBC,IAA2B;AAAA,EACpC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,SAAS;AACb;"}
1
+ {"version":3,"file":"constants.js","sources":["../../src/scatterplot-umap/constants.ts"],"sourcesContent":["// inner paddings in chart area\nexport const PADDINGS = {\n TOP: 30,\n BOTTOM: 30,\n LEFT: 30,\n RIGHT: 30\n};\n\nexport const TITLE_LINE = 20;\nexport const DEFAULT_TICKS_SIZE = 4;\nexport const TICK_OFFSET = 6;\nexport const MIN_PADDING = 12;\n\nexport const LEGEND_OFFSET = 24;\n\nexport const SCATTERPLOT_CONTROLS_EVENTS = {\n lassoDelete: 'LASSO_DELETE',\n lassoSelectMode: 'LASSO_SELECT_MODE',\n lassoBack: 'LASSO_BACK',\n lassoForward: 'LASSO_FORWARD',\n resetViewport: 'SCATTERPLOT_RESET_VIEWPORT'\n};\n"],"names":["PADDINGS","TITLE_LINE","DEFAULT_TICKS_SIZE","LEGEND_OFFSET","SCATTERPLOT_CONTROLS_EVENTS"],"mappings":"AACO,MAAMA,IAAW;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACX,GAEaC,IAAa,IACbC,IAAqB,GAIrBC,IAAgB,IAEhBC,IAA8B;AAAA,EACvC,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,eAAe;AACnB;"}
@@ -11,6 +11,7 @@ export declare class ChartScatterplotUmap extends AbstractChart {
11
11
  onPolygonUpdate: (data: number[], polygons: Polygon[]) => void;
12
12
  onTooltipHintSwitch: (v: boolean) => void;
13
13
  onLassoControlsStateUpdate: (v: LassoControlsState) => void;
14
+ onZoomChange: (isZoomChanged: boolean) => void;
14
15
  calculatedData: {
15
16
  dots: Dot[];
16
17
  groupingKeys: string[];