@milaboratories/miplots4 1.0.125 → 1.0.127
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.
- package/dist/DataFrame.d.ts +7 -5
- package/dist/DataFrame.d.ts.map +1 -1
- package/dist/DataFrame.js +67 -60
- package/dist/DataFrame.js.map +1 -1
- package/dist/bubble/components/Chart.d.ts +3 -3
- package/dist/bubble/components/Chart.d.ts.map +1 -1
- package/dist/bubble/components/Chart.js +23 -23
- package/dist/bubble/components/Chart.js.map +1 -1
- package/dist/common/Tooltip.d.ts +1 -1
- package/dist/common/Tooltip.d.ts.map +1 -1
- package/dist/common/Tooltip.js +17 -17
- package/dist/common/Tooltip.js.map +1 -1
- package/dist/discrete/components/layers/BinnedDotsElement.d.ts +2 -2
- package/dist/discrete/components/layers/BinnedDotsElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/BinnedDotsElement.js +9 -9
- package/dist/discrete/components/layers/BinnedDotsElement.js.map +1 -1
- package/dist/discrete/components/layers/BoxElement.d.ts +2 -2
- package/dist/discrete/components/layers/BoxElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/BoxElement.js +19 -19
- package/dist/discrete/components/layers/BoxElement.js.map +1 -1
- package/dist/discrete/components/layers/DotsGroupElement.d.ts +3 -3
- package/dist/discrete/components/layers/DotsGroupElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/DotsGroupElement.js +10 -10
- package/dist/discrete/components/layers/DotsGroupElement.js.map +1 -1
- package/dist/discrete/components/layers/ErrorBarElement.d.ts +2 -2
- package/dist/discrete/components/layers/ErrorBarElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/ErrorBarElement.js +15 -15
- package/dist/discrete/components/layers/ErrorBarElement.js.map +1 -1
- package/dist/discrete/components/layers/LineElement.d.ts +2 -2
- package/dist/discrete/components/layers/LineElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/LineElement.js +12 -12
- package/dist/discrete/components/layers/LineElement.js.map +1 -1
- package/dist/discrete/components/layers/LogoElement.d.ts +2 -2
- package/dist/discrete/components/layers/LogoElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/LogoElement.js +19 -19
- package/dist/discrete/components/layers/LogoElement.js.map +1 -1
- package/dist/discrete/components/layers/PairedPointsElement.d.ts +2 -2
- package/dist/discrete/components/layers/PairedPointsElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/PairedPointsElement.js +37 -37
- package/dist/discrete/components/layers/PairedPointsElement.js.map +1 -1
- package/dist/discrete/components/layers/StackedBarElement.d.ts +3 -3
- package/dist/discrete/components/layers/StackedBarElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/StackedBarElement.js +18 -18
- package/dist/discrete/components/layers/StackedBarElement.js.map +1 -1
- package/dist/discrete/components/layers/ViolinElement.d.ts +4 -4
- package/dist/discrete/components/layers/ViolinElement.d.ts.map +1 -1
- package/dist/discrete/components/layers/ViolinElement.js +7 -7
- package/dist/discrete/components/layers/ViolinElement.js.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.d.ts +2 -2
- package/dist/heatmap/components/Annotations/Annotation.d.ts.map +1 -1
- package/dist/heatmap/components/Annotations/Annotation.js +16 -16
- package/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
- package/dist/heatmap/components/Chart.d.ts +1 -1
- package/dist/heatmap/components/Chart.d.ts.map +1 -1
- package/dist/heatmap/components/Chart.js +28 -28
- package/dist/heatmap/components/Chart.js.map +1 -1
- package/dist/histogram/components/Chart.d.ts +2 -2
- package/dist/histogram/components/Chart.d.ts.map +1 -1
- package/dist/histogram/components/Chart.js +22 -22
- package/dist/histogram/components/Chart.js.map +1 -1
- package/dist/node_modules/react/index.js +1 -1
- package/dist/node_modules/react-dom/index.js +1 -1
- package/dist/scatterplot/components/Chart.d.ts +6 -11
- package/dist/scatterplot/components/Chart.d.ts.map +1 -1
- package/dist/scatterplot/components/Chart.js +101 -331
- package/dist/scatterplot/components/Chart.js.map +1 -1
- package/dist/scatterplot/components/ChartAxis.d.ts +20 -0
- package/dist/scatterplot/components/ChartAxis.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartAxis.js +52 -0
- package/dist/scatterplot/components/ChartAxis.js.map +1 -0
- package/dist/scatterplot/components/ChartAxisTitles.d.ts +15 -0
- package/dist/scatterplot/components/ChartAxisTitles.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartAxisTitles.js +56 -0
- package/dist/scatterplot/components/ChartAxisTitles.js.map +1 -0
- package/dist/scatterplot/components/ChartFacetTitle.d.ts +11 -0
- package/dist/scatterplot/components/ChartFacetTitle.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartFacetTitle.js +37 -0
- package/dist/scatterplot/components/ChartFacetTitle.js.map +1 -0
- package/dist/scatterplot/components/ChartLayersData.d.ts +39 -0
- package/dist/scatterplot/components/ChartLayersData.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartLayersData.js +250 -0
- package/dist/scatterplot/components/ChartLayersData.js.map +1 -0
- package/dist/scatterplot/components/ChartTooltip.d.ts +18 -0
- package/dist/scatterplot/components/ChartTooltip.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartTooltip.js +58 -0
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -0
- package/dist/scatterplot/components/ChartTrendsData.d.ts +11 -0
- package/dist/scatterplot/components/ChartTrendsData.d.ts.map +1 -0
- package/dist/scatterplot/components/ChartTrendsData.js +65 -0
- package/dist/scatterplot/components/ChartTrendsData.js.map +1 -0
- package/dist/scatterplot/components/ChartsGroup.d.ts +3 -3
- package/dist/scatterplot/components/ChartsGroup.d.ts.map +1 -1
- package/dist/scatterplot/components/ChartsGroup.js +81 -73
- package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/scatterplot/dots.d.ts +0 -2
- package/dist/scatterplot/dots.d.ts.map +1 -1
- package/dist/scatterplot/dots.js +26 -22
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +3 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +159 -158
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.js +32 -32
- package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.js +18 -18
- package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts +2 -2
- package/dist/scatterplot-umap/index.d.ts.map +1 -1
- package/dist/scatterplot-umap/index.js +26 -25
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/utils/hooks/useFunction.d.ts +2 -0
- package/dist/utils/hooks/useFunction.d.ts.map +1 -0
- package/dist/utils/hooks/useFunction.js +9 -0
- package/dist/utils/hooks/useFunction.js.map +1 -0
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sources":["../../src/common/Tooltip.tsx"],"sourcesContent":["import {BLACK} from '../constants';\nimport {exhaustive} from '../utils';\nimport {TextMeasurer} from '../utils/TextMeasurer';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {createPortal} from 'react-dom';\n\ntype Direction = 'left'|'right'|'top'|'bottom';\ntype SideDistances = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n};\n\nconst OFFSET_V = 8;\nconst OFFSET_H = 12;\nconst LINE_HEIGHT = 20;\nconst R = 6;\nconst TAIL_OFFSET = 5;\nconst POSITION_OFFSET = 8;\n\nconst ICON_W = 16;\nconst ICON_OFFSET = 8;\nconst ICONS_WIDTH = ICON_W * 2 + ICON_OFFSET + 16;\n\nconst GREY = '#CFD1DB';\nconst WHITE = '#fff';\n\nconst TOOLTIP_CLASS = 'miplots-tooltip';\n\nexport function getTooltipHeight(content: string[]) {\n return content.length * LINE_HEIGHT + 2 * OFFSET_V;\n}\nexport function getTooltipWidth(content: string[], hasIcons = false) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n return Math.max(...content.map((str, idx) => textMeasurer.getTextWidth(str) + (idx === 0 && hasIcons ? ICONS_WIDTH : 0))) + 2 * OFFSET_H;\n}\n\nfunction rightTooltipPath(width: number, height: number, shiftY: number) {\n const left = -TAIL_OFFSET - width;\n const right = -TAIL_OFFSET;\n const top = -height / 2 + shiftY;\n const bottom = height / 2 + shiftY;\n return `M 0,0 \n L ${right},${-TAIL_OFFSET} \n V ${top + R}\n Q ${right},${top} ${right - R},${top} \n H ${left + R} \n Q ${left},${top} ${left},${top + R}\n V ${bottom - R}\n Q ${left},${bottom} ${left + R},${bottom}\n H ${right - R}\n Q ${right},${bottom} ${right},${bottom - R}\n V ${TAIL_OFFSET} \n L 0,0 z`;\n}\nfunction leftTooltipPath(width: number, height: number, shiftY: number) {\n const left = TAIL_OFFSET;\n const right = TAIL_OFFSET + width;\n const top = -height / 2 + shiftY;\n const bottom = height / 2 + shiftY;\n return `M 0,0 \n L ${left},${-TAIL_OFFSET} \n V ${top + R}\n Q ${left},${top} ${left + R},${top} \n H ${right - R} \n Q ${right},${top} ${right},${top + R}\n V ${bottom - R}\n Q ${right},${bottom} ${right - R},${bottom}\n H ${left + R}\n Q ${left},${bottom} ${left},${bottom - R}\n V ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction topTooltipPath(width: number, height: number, shiftX: number) {\n const left = -width / 2 + shiftX;\n const right = width / 2 + shiftX;\n const top = -TAIL_OFFSET - height;\n const bottom = -TAIL_OFFSET;\n return `M 0,0 \n L ${-TAIL_OFFSET},${bottom} \n H ${left + R}\n Q ${left},${bottom} ${left},${bottom - R} \n V ${top + R} \n Q ${left},${top} ${left + R},${top}\n H ${right - R}\n Q ${right},${top} ${right},${top + R}\n V ${bottom - R}\n Q ${right},${bottom} ${right - R},${bottom}\n H ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction bottomTooltipPath(width: number, height: number, shiftX: number) {\n const left = -width / 2 + shiftX;\n const right = width / 2 + shiftX;\n const bottom = TAIL_OFFSET + height;\n const top = TAIL_OFFSET;\n return `M 0,0 \n L ${-TAIL_OFFSET},${top} \n H ${left + R}\n Q ${left},${top} ${left},${top + R} \n V ${bottom - R} \n Q ${left},${bottom} ${left + R},${bottom}\n H ${right - R}\n Q ${right},${bottom} ${right},${bottom - R}\n V ${top + R}\n Q ${right},${top} ${right - R},${top}\n H ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction getPath(width: number, height: number, direction: Direction, shiftX: number, shiftY: number):string {\n switch (direction) {\n case 'left': return rightTooltipPath(width, height, shiftY);\n case 'right': return leftTooltipPath(width, height, shiftY);\n case 'top': return topTooltipPath(width, height, shiftX);\n case 'bottom': return bottomTooltipPath(width, height, shiftX);\n default: exhaustive(direction, 'Unknown tooltip direction');\n }\n}\n\nfunction getDirection(width: number, height: number, x: number, y: number, offset:number, sideDistances:SideDistances , horizontal: boolean):Direction {\n if (horizontal) {\n return sideDistances.right - x - offset - TAIL_OFFSET > width ? 'right' : 'left';\n }\n return sideDistances.top + y - offset - TAIL_OFFSET > height ? 'top' : 'bottom';\n}\n\nfunction getContentTransform (direction:Direction, width: number, height: number, offset:number, shiftX: number, shiftY: number) {\n if (direction === 'left' || direction === 'right') {\n return `translate(${(direction === 'left' ? -(offset + TAIL_OFFSET + width) : (offset + TAIL_OFFSET))},${-height / 2 + shiftY})`;\n }\n return `translate(${-width / 2 + shiftX},${direction === 'top' ? -(height + offset + TAIL_OFFSET) : offset + TAIL_OFFSET})`;\n\n}\nfunction getPathTransform (direction:Direction, offset:number) {\n if (direction === 'left' || direction === 'right') {\n return `translate(${direction === 'left' ? -offset : offset},0)`;\n }\n return `translate(0,${direction === 'top' ? -offset : offset})`;\n}\n\nfunction getShiftX (direction:Direction, sideDistances:SideDistances, x: number, width: number) {\n if (direction === 'left' || direction === 'right') {\n return 0;\n }\n const rightFreeSpace = sideDistances.right - x;\n const leftFreeSpace = sideDistances.left + x;\n if (rightFreeSpace < width / 2) {\n return rightFreeSpace - width / 2;\n }\n if (leftFreeSpace < width / 2) {\n return width / 2 - leftFreeSpace;\n }\n return 0;\n}\nfunction getShiftY (direction:Direction, sideDistances:SideDistances, y: number, height: number) {\n if (direction === 'top' || direction === 'bottom') {\n return 0;\n }\n const topFreeSpace = sideDistances.top + y;\n const bottomFreeSpace = sideDistances.bottom - y;\n if (topFreeSpace < height / 2) {\n return height / 2 - topFreeSpace;\n }\n if (bottomFreeSpace < height / 2) {\n return bottomFreeSpace - height / 2;\n }\n return 0;\n}\n\nexport type TooltipsData<T> = {\n active: boolean,\n fixed: boolean,\n selectedData: T | null,\n currentFacet: string,\n onMouseOver: (elementData:T, facetKey?:string) => void,\n onMouseLeave: () => void,\n onClose: () => void\n}\nexport function useTooltip<T = unknown>(onTooltipHintSwitchOuterCallback: (v:boolean) => void = () => undefined):TooltipsData<T> {\n const [selectedData, setSelectedData] = useState<T | null>(null);\n const [fixed, setFixed] = useState(false);\n const openRef = useRef(false);\n const fixedRef = useRef(false);\n const currentFacet = useRef('null');\n const hintTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const close = () => {\n setSelectedData(null);\n openRef.current = false;\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n hintTimer.current = null;\n }\n onTooltipHintSwitchOuterCallback(false);\n };\n const closeFixed = () => {\n fixedRef.current = false;\n setFixed(false);\n close();\n };\n const onMouseOver = useCallback((newElementData:T, facetKey?: string) => {\n if (fixedRef.current) {\n return;\n }\n setSelectedData(newElementData);\n openRef.current = true;\n currentFacet.current = facetKey ?? 'null';\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n }\n hintTimer.current = setTimeout(() => {\n onTooltipHintSwitchOuterCallback(true);\n }, 2000);\n }, []);\n const onMouseLeave = useCallback(() => {\n if (fixedRef.current) {\n return;\n }\n close();\n }, []);\n\n const onClose = useCallback(closeFixed, []);\n\n useEffect(() => {\n function handleEnter(e:KeyboardEvent) {\n if (openRef.current && e.key === 'Enter') {\n fixedRef.current = true;\n setFixed(true);\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n hintTimer.current = null;\n }\n onTooltipHintSwitchOuterCallback(false);\n }\n }\n function handleClickOutside(e:MouseEvent) {\n if (!fixedRef.current) {\n return;\n }\n //const tooltipNodes = Array.from(document.getElementsByClassName(TOOLTIP_CLASS));\n const tooltipNode = document.querySelector(`.${TOOLTIP_CLASS}`);\n const clickedNode = e.target;\n if (tooltipNode && clickedNode && tooltipNode.contains(clickedNode as Node)) {\n return;\n }\n closeFixed();\n }\n document.addEventListener('keydown', handleEnter);\n document.addEventListener('click', handleClickOutside);\n return () => {\n document.removeEventListener('keydown', handleEnter);\n document.removeEventListener('click', handleClickOutside);\n };\n }, []);\n\n return {\n active: selectedData !== null,\n currentFacet: currentFacet.current,\n fixed,\n selectedData,\n onMouseOver,\n onMouseLeave,\n onClose\n };\n}\n\nexport function Tooltip({\n content,\n x,\n y,\n active,\n fixed,\n container,\n sideDistances,\n onClose = () => undefined,\n offset = POSITION_OFFSET,\n horizontal = true,\n}: {\n content: string[];\n x: number;\n y: number;\n active: boolean;\n fixed: boolean;\n sideDistances: SideDistances;\n onClose?: () => void;\n offset?: number;\n horizontal?: boolean;\n container?: Element | null;\n}) {\n if (!active || (!container && container !== null)) {\n return null;\n }\n const width = getTooltipWidth(content, fixed);\n const height = getTooltipHeight(content);\n const direction = getDirection(width, height, x, y, offset, sideDistances, horizontal);\n // shifts for tooltip positioning not in center if it is close to chart edges\n const shiftX = getShiftX(direction, sideDistances, x, width);\n const shiftY = getShiftY(direction, sideDistances, y, height);\n\n const firstIconPosition = `translate(${width - ICON_W - OFFSET_H},${OFFSET_V})`;\n const secondIconPosition = `translate(${width - ICON_W * 2 - ICON_OFFSET - OFFSET_H},${OFFSET_V})`;\n\n const [copied, setCopied] = useState(false);\n const [hoveredClose, setHoveredClose] = useState(false);\n const [hoveredCopy, setHoveredCopy] = useState(false);\n\n function copyToClipboard () {\n window?.navigator?.clipboard.writeText(content.join('\\n'));\n setCopied(true);\n }\n\n const tooltip = (\n <g\n className={TOOLTIP_CLASS}\n transform={`translate(${sideDistances.left + x},${sideDistances.top + y})`}\n opacity={active ? 1 : 0}\n stroke=\"none\"\n fill=\"none\"\n style={{pointerEvents: fixed ? 'all' : 'none'}}\n >\n <path\n transform={getPathTransform(direction, offset)}\n d={getPath(width, height, direction, shiftX, shiftY)}\n fill={BLACK}\n />\n <g\n fontSize=\"14px\"\n fontFamily=\"Manrope\"\n fill=\"white\"\n transform={getContentTransform(direction, width, height, offset, shiftX, shiftY)}\n >\n {content.map((str, idx) => (\n <text\n key={idx}\n x={OFFSET_H}\n y={OFFSET_V + LINE_HEIGHT * idx + LINE_HEIGHT / 2}\n dominantBaseline=\"central\"\n >\n {str}\n </text>\n ))}\n {fixed && (\n <g transform={firstIconPosition}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.0006 2.93945L8.0006 6.93945L12.0006 2.93945L13.0613 4.00011L9.06126 8.00011L13.0613 12.0001L12.0006 13.0608L8.0006 9.06077L4.0006 13.0608L2.93994 12.0001L6.93994 8.00011L2.93994 4.00011L4.0006 2.93945Z\"\n fill={hoveredClose ? GREY : WHITE}\n />\n <rect\n x=\"-8\"\n y=\"-8\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n onClick={onClose}\n onMouseOver={() => setHoveredClose(true)}\n onMouseLeave={() => setHoveredClose(false)}\n style={{cursor: 'pointer'}}\n />\n </g>\n )}\n {fixed && (\n <g transform={secondIconPosition}>\n {copied\n ? (\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.0601 4.43439L6.33313 12.5477L1.93945 7.93439L3.02566 6.8999L6.33313 10.3727L12.9739 3.3999L14.0601 4.43439Z\" fill=\"#07AD3E\"/>\n )\n : (\n <g>\n <g clipPath=\"url(#clip0_16418_6183)\">\n <path d=\"M16.0005 13H14.5005V1.5H3.00049V0H14.5005C15.3289 2.86102e-06 16.0005 0.671575 16.0005 1.5V13ZM1.34717 15.9922C0.641178 15.9205 0.0799799 15.3593 0.00830078 14.6533L0.000488281 14.5V4.5C0.000488281 3.72334 0.590765 3.08461 1.34717 3.00781L1.50049 3H11.5005L11.6538 3.00781C12.4102 3.08461 13.0005 3.72334 13.0005 4.5V14.5L12.9927 14.6533C12.921 15.3593 12.3598 15.9205 11.6538 15.9922L11.5005 16H1.50049L1.34717 15.9922ZM11.5005 4.5H1.50049V14.5H11.5005V4.5Z\"\n fill={hoveredCopy ? GREY : WHITE}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_16418_6183\">\n <rect width=\"16\" height=\"16\" transform=\"translate(0.000488281)\" fill=\"white\" />\n </clipPath>\n </defs>\n </g>\n )}\n <rect\n x=\"-8\"\n y=\"-8\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n onClick={copyToClipboard}\n onMouseOver={() => setHoveredCopy(true)}\n onMouseLeave={() => setHoveredCopy(false)}\n style={{cursor: 'pointer'}}\n />\n </g>\n )}\n </g>\n </g>\n );\n return container === null ? tooltip : createPortal(\n tooltip,\n container\n );\n}\n"],"names":["OFFSET_V","OFFSET_H","LINE_HEIGHT","R","TAIL_OFFSET","POSITION_OFFSET","ICON_W","ICON_OFFSET","ICONS_WIDTH","GREY","WHITE","TOOLTIP_CLASS","getTooltipHeight","content","getTooltipWidth","hasIcons","textMeasurer","TextMeasurer","str","idx","rightTooltipPath","width","height","shiftY","left","right","top","bottom","leftTooltipPath","topTooltipPath","shiftX","bottomTooltipPath","getPath","direction","exhaustive","getDirection","x","y","offset","sideDistances","horizontal","getContentTransform","getPathTransform","getShiftX","rightFreeSpace","leftFreeSpace","getShiftY","topFreeSpace","bottomFreeSpace","useTooltip","onTooltipHintSwitchOuterCallback","selectedData","setSelectedData","useState","fixed","setFixed","openRef","useRef","fixedRef","currentFacet","hintTimer","close","closeFixed","onMouseOver","useCallback","newElementData","facetKey","onMouseLeave","onClose","useEffect","handleEnter","e","handleClickOutside","tooltipNode","clickedNode","Tooltip","active","container","firstIconPosition","secondIconPosition","copied","setCopied","hoveredClose","setHoveredClose","hoveredCopy","setHoveredCopy","copyToClipboard","_a","tooltip","jsxs","jsx","BLACK","createPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../src/common/Tooltip.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { BLACK } from '../constants';\nimport { exhaustive } from '../utils';\nimport { TextMeasurer } from '../utils/TextMeasurer';\n\ntype Direction = 'left'|'right'|'top'|'bottom';\ntype SideDistances = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n};\n\nconst OFFSET_V = 8;\nconst OFFSET_H = 12;\nconst LINE_HEIGHT = 20;\nconst R = 6;\nconst TAIL_OFFSET = 5;\nconst POSITION_OFFSET = 8;\n\nconst ICON_W = 16;\nconst ICON_OFFSET = 8;\nconst ICONS_WIDTH = ICON_W * 2 + ICON_OFFSET + 16;\n\nconst GREY = '#CFD1DB';\nconst WHITE = '#fff';\n\nconst TOOLTIP_CLASS = 'miplots-tooltip';\n\nexport function getTooltipHeight(content: string[]) {\n return content.length * LINE_HEIGHT + 2 * OFFSET_V;\n}\nexport function getTooltipWidth(content: string[], hasIcons = false) {\n const textMeasurer = new TextMeasurer('600 14px Arial');\n return Math.max(...content.map((str, idx) => textMeasurer.getTextWidth(str) + (idx === 0 && hasIcons ? ICONS_WIDTH : 0))) + 2 * OFFSET_H;\n}\n\nfunction rightTooltipPath(width: number, height: number, shiftY: number) {\n const left = -TAIL_OFFSET - width;\n const right = -TAIL_OFFSET;\n const top = -height / 2 + shiftY;\n const bottom = height / 2 + shiftY;\n return `M 0,0 \n L ${right},${-TAIL_OFFSET} \n V ${top + R}\n Q ${right},${top} ${right - R},${top} \n H ${left + R} \n Q ${left},${top} ${left},${top + R}\n V ${bottom - R}\n Q ${left},${bottom} ${left + R},${bottom}\n H ${right - R}\n Q ${right},${bottom} ${right},${bottom - R}\n V ${TAIL_OFFSET} \n L 0,0 z`;\n}\nfunction leftTooltipPath(width: number, height: number, shiftY: number) {\n const left = TAIL_OFFSET;\n const right = TAIL_OFFSET + width;\n const top = -height / 2 + shiftY;\n const bottom = height / 2 + shiftY;\n return `M 0,0 \n L ${left},${-TAIL_OFFSET} \n V ${top + R}\n Q ${left},${top} ${left + R},${top} \n H ${right - R} \n Q ${right},${top} ${right},${top + R}\n V ${bottom - R}\n Q ${right},${bottom} ${right - R},${bottom}\n H ${left + R}\n Q ${left},${bottom} ${left},${bottom - R}\n V ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction topTooltipPath(width: number, height: number, shiftX: number) {\n const left = -width / 2 + shiftX;\n const right = width / 2 + shiftX;\n const top = -TAIL_OFFSET - height;\n const bottom = -TAIL_OFFSET;\n return `M 0,0 \n L ${-TAIL_OFFSET},${bottom} \n H ${left + R}\n Q ${left},${bottom} ${left},${bottom - R} \n V ${top + R} \n Q ${left},${top} ${left + R},${top}\n H ${right - R}\n Q ${right},${top} ${right},${top + R}\n V ${bottom - R}\n Q ${right},${bottom} ${right - R},${bottom}\n H ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction bottomTooltipPath(width: number, height: number, shiftX: number) {\n const left = -width / 2 + shiftX;\n const right = width / 2 + shiftX;\n const bottom = TAIL_OFFSET + height;\n const top = TAIL_OFFSET;\n return `M 0,0 \n L ${-TAIL_OFFSET},${top} \n H ${left + R}\n Q ${left},${top} ${left},${top + R} \n V ${bottom - R} \n Q ${left},${bottom} ${left + R},${bottom}\n H ${right - R}\n Q ${right},${bottom} ${right},${bottom - R}\n V ${top + R}\n Q ${right},${top} ${right - R},${top}\n H ${TAIL_OFFSET} \n L 0,0 z`;\n}\n\nfunction getPath(width: number, height: number, direction: Direction, shiftX: number, shiftY: number):string {\n switch (direction) {\n case 'left': return rightTooltipPath(width, height, shiftY);\n case 'right': return leftTooltipPath(width, height, shiftY);\n case 'top': return topTooltipPath(width, height, shiftX);\n case 'bottom': return bottomTooltipPath(width, height, shiftX);\n default: exhaustive(direction, 'Unknown tooltip direction');\n }\n}\n\nfunction getDirection(width: number, height: number, x: number, y: number, offset:number, sideDistances:SideDistances , horizontal: boolean):Direction {\n if (horizontal) {\n return sideDistances.right - x - offset - TAIL_OFFSET > width ? 'right' : 'left';\n }\n return sideDistances.top + y - offset - TAIL_OFFSET > height ? 'top' : 'bottom';\n}\n\nfunction getContentTransform (direction:Direction, width: number, height: number, offset:number, shiftX: number, shiftY: number) {\n if (direction === 'left' || direction === 'right') {\n return `translate(${(direction === 'left' ? -(offset + TAIL_OFFSET + width) : (offset + TAIL_OFFSET))},${-height / 2 + shiftY})`;\n }\n return `translate(${-width / 2 + shiftX},${direction === 'top' ? -(height + offset + TAIL_OFFSET) : offset + TAIL_OFFSET})`;\n\n}\nfunction getPathTransform (direction:Direction, offset:number) {\n if (direction === 'left' || direction === 'right') {\n return `translate(${direction === 'left' ? -offset : offset},0)`;\n }\n return `translate(0,${direction === 'top' ? -offset : offset})`;\n}\n\nfunction getShiftX (direction:Direction, sideDistances: SideDistances, x: number, width: number) {\n if (direction === 'left' || direction === 'right') {\n return 0;\n }\n const rightFreeSpace = sideDistances.right - x;\n const leftFreeSpace = sideDistances.left + x;\n if (rightFreeSpace < width / 2) {\n return rightFreeSpace - width / 2;\n }\n if (leftFreeSpace < width / 2) {\n return width / 2 - leftFreeSpace;\n }\n return 0;\n}\nfunction getShiftY (direction:Direction, sideDistances: SideDistances, y: number, height: number) {\n if (direction === 'top' || direction === 'bottom') {\n return 0;\n }\n const topFreeSpace = sideDistances.top + y;\n const bottomFreeSpace = sideDistances.bottom - y;\n if (topFreeSpace < height / 2) {\n return height / 2 - topFreeSpace;\n }\n if (bottomFreeSpace < height / 2) {\n return bottomFreeSpace - height / 2;\n }\n return 0;\n}\n\nexport type TooltipsData<T> = {\n active: boolean,\n fixed: boolean,\n selectedData: T | null,\n currentFacet: string,\n onMouseEnter: (elementData:T, facetKey?:string) => void,\n onMouseLeave: () => void,\n onClose: () => void\n}\n\nexport function useTooltip<T = unknown>(onTooltipHintSwitchOuterCallback: (v:boolean) => void = () => undefined): TooltipsData<T> {\n const [selectedData, setSelectedData] = useState<T | null>(null);\n const [fixed, setFixed] = useState(false);\n const openRef = useRef(false);\n const fixedRef = useRef(false);\n const currentFacet = useRef('null');\n const hintTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const close = () => {\n setSelectedData(null);\n openRef.current = false;\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n hintTimer.current = null;\n }\n onTooltipHintSwitchOuterCallback(false);\n };\n const closeFixed = () => {\n fixedRef.current = false;\n setFixed(false);\n close();\n };\n const onMouseEnter = useCallback((newElementData:T, facetKey?: string) => {\n if (fixedRef.current) {\n return;\n }\n setSelectedData(newElementData);\n openRef.current = true;\n currentFacet.current = facetKey ?? 'null';\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n }\n hintTimer.current = setTimeout(() => {\n onTooltipHintSwitchOuterCallback(true);\n }, 2000);\n }, []);\n const onMouseLeave = useCallback(() => {\n if (fixedRef.current) {\n return;\n }\n close();\n }, []);\n\n const onClose = useCallback(closeFixed, []);\n\n useEffect(() => {\n function handleEnter(e:KeyboardEvent) {\n if (openRef.current && e.key === 'Enter') {\n fixedRef.current = true;\n setFixed(true);\n if (hintTimer.current) {\n clearTimeout(hintTimer.current);\n hintTimer.current = null;\n }\n onTooltipHintSwitchOuterCallback(false);\n }\n }\n function handleClickOutside(e:MouseEvent) {\n if (!fixedRef.current) {\n return;\n }\n //const tooltipNodes = Array.from(document.getElementsByClassName(TOOLTIP_CLASS));\n const tooltipNode = document.querySelector(`.${TOOLTIP_CLASS}`);\n const clickedNode = e.target;\n if (tooltipNode && clickedNode && tooltipNode.contains(clickedNode as Node)) {\n return;\n }\n closeFixed();\n }\n document.addEventListener('keydown', handleEnter);\n document.addEventListener('click', handleClickOutside);\n return () => {\n document.removeEventListener('keydown', handleEnter);\n document.removeEventListener('click', handleClickOutside);\n };\n }, []);\n\n return {\n active: selectedData !== null,\n currentFacet: currentFacet.current,\n fixed,\n selectedData,\n onMouseEnter,\n onMouseLeave,\n onClose\n };\n}\n\nexport function Tooltip({\n content,\n x,\n y,\n active,\n fixed,\n container,\n sideDistances,\n onClose = () => undefined,\n offset = POSITION_OFFSET,\n horizontal = true,\n}: {\n content: string[];\n x: number;\n y: number;\n active: boolean;\n fixed: boolean;\n sideDistances: SideDistances;\n onClose?: () => void;\n offset?: number;\n horizontal?: boolean;\n container?: Element | null;\n}) {\n const width = getTooltipWidth(content, fixed);\n const height = getTooltipHeight(content);\n const direction = getDirection(width, height, x, y, offset, sideDistances, horizontal);\n // shifts for tooltip positioning not in center if it is close to chart edges\n const shiftX = getShiftX(direction, sideDistances, x, width);\n const shiftY = getShiftY(direction, sideDistances, y, height);\n\n const firstIconPosition = `translate(${width - ICON_W - OFFSET_H},${OFFSET_V})`;\n const secondIconPosition = `translate(${width - ICON_W * 2 - ICON_OFFSET - OFFSET_H},${OFFSET_V})`;\n\n const [copied, setCopied] = useState(false);\n const [hoveredClose, setHoveredClose] = useState(false);\n const [hoveredCopy, setHoveredCopy] = useState(false);\n\n function copyToClipboard () {\n window?.navigator?.clipboard.writeText(content.join('\\n'));\n setCopied(true);\n }\n \n if (!active || (!container && container !== null)) {\n return null;\n }\n\n const tooltip = (\n <g\n className={TOOLTIP_CLASS}\n transform={`translate(${sideDistances.left + x},${sideDistances.top + y})`}\n opacity={active ? 1 : 0}\n stroke=\"none\"\n fill=\"none\"\n style={{pointerEvents: fixed ? 'all' : 'none'}}\n >\n <path\n transform={getPathTransform(direction, offset)}\n d={getPath(width, height, direction, shiftX, shiftY)}\n fill={BLACK}\n />\n <g\n fontSize=\"14px\"\n fontFamily=\"Manrope\"\n fill=\"white\"\n transform={getContentTransform(direction, width, height, offset, shiftX, shiftY)}\n >\n {content.map((str, idx) => (\n <text\n key={idx}\n x={OFFSET_H}\n y={OFFSET_V + LINE_HEIGHT * idx + LINE_HEIGHT / 2}\n dominantBaseline=\"central\"\n >\n {str}\n </text>\n ))}\n {fixed && (\n <g transform={firstIconPosition}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.0006 2.93945L8.0006 6.93945L12.0006 2.93945L13.0613 4.00011L9.06126 8.00011L13.0613 12.0001L12.0006 13.0608L8.0006 9.06077L4.0006 13.0608L2.93994 12.0001L6.93994 8.00011L2.93994 4.00011L4.0006 2.93945Z\"\n fill={hoveredClose ? GREY : WHITE}\n />\n <rect\n x=\"-8\"\n y=\"-8\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n onClick={onClose}\n onMouseOver={() => setHoveredClose(true)}\n onMouseLeave={() => setHoveredClose(false)}\n style={{cursor: 'pointer'}}\n />\n </g>\n )}\n {fixed && (\n <g transform={secondIconPosition}>\n {copied\n ? (\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.0601 4.43439L6.33313 12.5477L1.93945 7.93439L3.02566 6.8999L6.33313 10.3727L12.9739 3.3999L14.0601 4.43439Z\" fill=\"#07AD3E\"/>\n )\n : (\n <g>\n <g clipPath=\"url(#clip0_16418_6183)\">\n <path d=\"M16.0005 13H14.5005V1.5H3.00049V0H14.5005C15.3289 2.86102e-06 16.0005 0.671575 16.0005 1.5V13ZM1.34717 15.9922C0.641178 15.9205 0.0799799 15.3593 0.00830078 14.6533L0.000488281 14.5V4.5C0.000488281 3.72334 0.590765 3.08461 1.34717 3.00781L1.50049 3H11.5005L11.6538 3.00781C12.4102 3.08461 13.0005 3.72334 13.0005 4.5V14.5L12.9927 14.6533C12.921 15.3593 12.3598 15.9205 11.6538 15.9922L11.5005 16H1.50049L1.34717 15.9922ZM11.5005 4.5H1.50049V14.5H11.5005V4.5Z\"\n fill={hoveredCopy ? GREY : WHITE}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_16418_6183\">\n <rect width=\"16\" height=\"16\" transform=\"translate(0.000488281)\" fill=\"white\" />\n </clipPath>\n </defs>\n </g>\n )}\n <rect\n x=\"-8\"\n y=\"-8\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n onClick={copyToClipboard}\n onMouseOver={() => setHoveredCopy(true)}\n onMouseLeave={() => setHoveredCopy(false)}\n style={{cursor: 'pointer'}}\n />\n </g>\n )}\n </g>\n </g>\n );\n\n return container === null ? tooltip : createPortal(\n tooltip,\n container\n );\n}\n"],"names":["OFFSET_V","OFFSET_H","LINE_HEIGHT","R","TAIL_OFFSET","POSITION_OFFSET","ICON_W","ICON_OFFSET","ICONS_WIDTH","GREY","WHITE","TOOLTIP_CLASS","getTooltipHeight","content","getTooltipWidth","hasIcons","textMeasurer","TextMeasurer","str","idx","rightTooltipPath","width","height","shiftY","left","right","top","bottom","leftTooltipPath","topTooltipPath","shiftX","bottomTooltipPath","getPath","direction","exhaustive","getDirection","x","y","offset","sideDistances","horizontal","getContentTransform","getPathTransform","getShiftX","rightFreeSpace","leftFreeSpace","getShiftY","topFreeSpace","bottomFreeSpace","useTooltip","onTooltipHintSwitchOuterCallback","selectedData","setSelectedData","useState","fixed","setFixed","openRef","useRef","fixedRef","currentFacet","hintTimer","close","closeFixed","onMouseEnter","useCallback","newElementData","facetKey","onMouseLeave","onClose","useEffect","handleEnter","e","handleClickOutside","tooltipNode","clickedNode","Tooltip","active","container","firstIconPosition","secondIconPosition","copied","setCopied","hoveredClose","setHoveredClose","hoveredCopy","setHoveredCopy","copyToClipboard","_a","tooltip","jsxs","jsx","BLACK","createPortal"],"mappings":";;;;;;AAcA,MAAMA,IAAW,GACXC,IAAW,IACXC,IAAc,IACdC,IAAI,GACJC,IAAc,GACdC,IAAkB,GAElBC,IAAS,IACTC,IAAc,GACdC,IAAcF,IAAS,IAAIC,IAAc,IAEzCE,IAAO,WACPC,IAAQ,QAERC,IAAgB;AAEf,SAASC,EAAiBC,GAAmB;AAChD,SAAOA,EAAQ,SAASX,IAAc,IAAIF;AAC9C;AACO,SAASc,EAAgBD,GAAmBE,IAAW,IAAO;AACjE,QAAMC,IAAe,IAAIC,EAAa,gBAAgB;AACtD,SAAO,KAAK,IAAI,GAAGJ,EAAQ,IAAI,CAACK,GAAKC,MAAQH,EAAa,aAAaE,CAAG,KAAKC,MAAQ,KAAKJ,IAAWP,IAAc,EAAE,CAAC,IAAI,IAAIP;AACpI;AAEA,SAASmB,EAAiBC,GAAeC,GAAgBC,GAAgB;AACrE,QAAMC,IAAO,CAACpB,IAAciB,GACtBI,IAAQ,CAACrB,GACTsB,IAAM,CAACJ,IAAS,IAAIC,GACpBI,IAASL,IAAS,IAAIC;AAC5B,SAAO;AAAA,QACHE,CAAK,IAAI,CAACrB,CAAW;AAAA,QACrBsB,IAAMvB,CAAC;AAAA,QACPsB,CAAK,IAAIC,CAAG,IAAID,IAAQtB,CAAC,IAAIuB,CAAG;AAAA,QAChCF,IAAOrB,CAAC;AAAA,QACRqB,CAAI,IAAIE,CAAG,IAAIF,CAAI,IAAIE,IAAMvB,CAAC;AAAA,QAC9BwB,IAASxB,CAAC;AAAA,QACVqB,CAAI,IAAIG,CAAM,IAAIH,IAAOrB,CAAC,IAAIwB,CAAM;AAAA,QACpCF,IAAQtB,CAAC;AAAA,QACTsB,CAAK,IAAIE,CAAM,IAAIF,CAAK,IAAIE,IAASxB,CAAC;AAAA,QACtCC,CAAW;AAAA;AAEnB;AACA,SAASwB,EAAgBP,GAAeC,GAAgBC,GAAgB;AACpE,QAAMC,IAAOpB,GACPqB,IAAQrB,IAAciB,GACtBK,IAAM,CAACJ,IAAS,IAAIC,GACpBI,IAASL,IAAS,IAAIC;AAC5B,SAAO;AAAA,QACHC,CAAI,IAAI,CAACpB,CAAW;AAAA,QACpBsB,IAAMvB,CAAC;AAAA,QACPqB,CAAI,IAAIE,CAAG,IAAIF,IAAOrB,CAAC,IAAIuB,CAAG;AAAA,QAC9BD,IAAQtB,CAAC;AAAA,QACTsB,CAAK,IAAIC,CAAG,IAAID,CAAK,IAAIC,IAAMvB,CAAC;AAAA,QAChCwB,IAASxB,CAAC;AAAA,QACVsB,CAAK,IAAIE,CAAM,IAAIF,IAAQtB,CAAC,IAAIwB,CAAM;AAAA,QACtCH,IAAOrB,CAAC;AAAA,QACRqB,CAAI,IAAIG,CAAM,IAAIH,CAAI,IAAIG,IAASxB,CAAC;AAAA,QACpCC,CAAW;AAAA;AAEnB;AAEA,SAASyB,EAAeR,GAAeC,GAAgBQ,GAAgB;AACnE,QAAMN,IAAO,CAACH,IAAQ,IAAIS,GACpBL,IAAQJ,IAAQ,IAAIS,GACpBJ,IAAM,CAACtB,IAAckB,GACrBK,IAAS,CAACvB;AAChB,SAAO;AAAA,QACH,CAACA,CAAW,IAAIuB,CAAM;AAAA,QACtBH,IAAOrB,CAAC;AAAA,QACRqB,CAAI,IAAIG,CAAM,IAAIH,CAAI,IAAIG,IAASxB,CAAC;AAAA,QACpCuB,IAAMvB,CAAC;AAAA,QACPqB,CAAI,IAAIE,CAAG,IAAIF,IAAOrB,CAAC,IAAIuB,CAAG;AAAA,QAC9BD,IAAQtB,CAAC;AAAA,QACTsB,CAAK,IAAIC,CAAG,IAAID,CAAK,IAAIC,IAAMvB,CAAC;AAAA,QAChCwB,IAASxB,CAAC;AAAA,QACVsB,CAAK,IAAIE,CAAM,IAAIF,IAAQtB,CAAC,IAAIwB,CAAM;AAAA,QACtCvB,CAAW;AAAA;AAEnB;AAEA,SAAS2B,EAAkBV,GAAeC,GAAgBQ,GAAgB;AACtE,QAAMN,IAAO,CAACH,IAAQ,IAAIS,GACpBL,IAAQJ,IAAQ,IAAIS,GACpBH,IAASvB,IAAckB,GACvBI,IAAMtB;AACZ,SAAO;AAAA,QACH,CAACA,CAAW,IAAIsB,CAAG;AAAA,QACnBF,IAAOrB,CAAC;AAAA,QACRqB,CAAI,IAAIE,CAAG,IAAIF,CAAI,IAAIE,IAAMvB,CAAC;AAAA,QAC9BwB,IAASxB,CAAC;AAAA,QACVqB,CAAI,IAAIG,CAAM,IAAIH,IAAOrB,CAAC,IAAIwB,CAAM;AAAA,QACpCF,IAAQtB,CAAC;AAAA,QACTsB,CAAK,IAAIE,CAAM,IAAIF,CAAK,IAAIE,IAASxB,CAAC;AAAA,QACtCuB,IAAMvB,CAAC;AAAA,QACPsB,CAAK,IAAIC,CAAG,IAAID,IAAQtB,CAAC,IAAIuB,CAAG;AAAA,QAChCtB,CAAW;AAAA;AAEnB;AAEA,SAAS4B,EAAQX,GAAeC,GAAgBW,GAAsBH,GAAgBP,GAAuB;AACzG,UAAQU,GAAA;AAAA,IACJ,KAAK;AAAQ,aAAOb,EAAiBC,GAAOC,GAAQC,CAAM;AAAA,IAC1D,KAAK;AAAS,aAAOK,EAAgBP,GAAOC,GAAQC,CAAM;AAAA,IAC1D,KAAK;AAAO,aAAOM,EAAeR,GAAOC,GAAQQ,CAAM;AAAA,IACvD,KAAK;AAAU,aAAOC,EAAkBV,GAAOC,GAAQQ,CAAM;AAAA,IAC7D;AAAS,MAAAI,EAAWD,GAAW,2BAA2B;AAAA,EAAA;AAElE;AAEA,SAASE,EAAad,GAAeC,GAAgBc,GAAWC,GAAWC,GAAeC,GAA8BC,GAA+B;AACnJ,SAAIA,IACOD,EAAc,QAAQH,IAAIE,IAASlC,IAAciB,IAAQ,UAAU,SAEvEkB,EAAc,MAAMF,IAAIC,IAASlC,IAAckB,IAAS,QAAQ;AAC3E;AAEA,SAASmB,EAAqBR,GAAqBZ,GAAeC,GAAgBgB,GAAeR,GAAgBP,GAAgB;AAC7H,SAAIU,MAAc,UAAUA,MAAc,UAC/B,aAAcA,MAAc,SAAS,EAAEK,IAASlC,IAAciB,KAAUiB,IAASlC,CAAa,IAAI,CAACkB,IAAS,IAAIC,CAAM,MAE1H,aAAa,CAACF,IAAQ,IAAIS,CAAM,IAAIG,MAAc,QAAQ,EAAEX,IAASgB,IAASlC,KAAekC,IAASlC,CAAW;AAE5H;AACA,SAASsC,GAAkBT,GAAqBK,GAAe;AAC3D,SAAIL,MAAc,UAAUA,MAAc,UAC/B,aAAaA,MAAc,SAAS,CAACK,IAASA,CAAM,QAExD,eAAeL,MAAc,QAAQ,CAACK,IAASA,CAAM;AAChE;AAEA,SAASK,GAAWV,GAAqBM,GAA8BH,GAAWf,GAAe;AAC7F,MAAIY,MAAc,UAAUA,MAAc;AACtC,WAAO;AAEX,QAAMW,IAAiBL,EAAc,QAAQH,GACvCS,IAAgBN,EAAc,OAAOH;AAC3C,SAAIQ,IAAiBvB,IAAQ,IAClBuB,IAAiBvB,IAAQ,IAEhCwB,IAAgBxB,IAAQ,IACjBA,IAAQ,IAAIwB,IAEhB;AACX;AACA,SAASC,GAAWb,GAAqBM,GAA8BF,GAAWf,GAAgB;AAC9F,MAAIW,MAAc,SAASA,MAAc;AACrC,WAAO;AAEX,QAAMc,IAAeR,EAAc,MAAMF,GACnCW,IAAkBT,EAAc,SAASF;AAC/C,SAAIU,IAAezB,IAAS,IACjBA,IAAS,IAAIyB,IAEpBC,IAAkB1B,IAAS,IACpB0B,IAAkB1B,IAAS,IAE/B;AACX;AAYO,SAAS2B,GAAwBC,IAAwD,MAAA;AAAA,GAAkC;AAC9H,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAAA,SAAmB,IAAI,GACzD,CAACC,GAAOC,CAAQ,IAAIF,EAAAA,SAAS,EAAK,GAClCG,IAAUC,EAAAA,OAAO,EAAK,GACtBC,IAAWD,EAAAA,OAAO,EAAK,GACvBE,IAAeF,EAAAA,OAAO,MAAM,GAC5BG,IAAYH,EAAAA,OAA6C,IAAI,GAE7DI,IAAQ,MAAM;AAChB,IAAAT,EAAgB,IAAI,GACpBI,EAAQ,UAAU,IACdI,EAAU,YACV,aAAaA,EAAU,OAAO,GAC9BA,EAAU,UAAU,OAExBV,EAAiC,EAAK;AAAA,EAC1C,GACMY,IAAa,MAAM;AACrB,IAAAJ,EAAS,UAAU,IACnBH,EAAS,EAAK,GACdM,EAAA;AAAA,EACJ,GACME,IAAeC,EAAAA,YAAY,CAACC,GAAkBC,MAAsB;AACtE,IAAIR,EAAS,YAGbN,EAAgBa,CAAc,GAC9BT,EAAQ,UAAU,IAClBG,EAAa,UAAUO,KAAY,QAC/BN,EAAU,WACV,aAAaA,EAAU,OAAO,GAElCA,EAAU,UAAU,WAAW,MAAM;AACjC,MAAAV,EAAiC,EAAI;AAAA,IACzC,GAAG,GAAI;AAAA,EACX,GAAG,CAAA,CAAE,GACCiB,IAAeH,EAAAA,YAAY,MAAM;AACnC,IAAIN,EAAS,WAGbG,EAAA;AAAA,EACJ,GAAG,CAAA,CAAE,GAECO,IAAUJ,EAAAA,YAAYF,GAAY,EAAE;AAE1CO,SAAAA,EAAAA,UAAU,MAAM;AACZ,aAASC,EAAYC,GAAiB;AAClC,MAAIf,EAAQ,WAAWe,EAAE,QAAQ,YAC7Bb,EAAS,UAAU,IACnBH,EAAS,EAAI,GACTK,EAAU,YACV,aAAaA,EAAU,OAAO,GAC9BA,EAAU,UAAU,OAExBV,EAAiC,EAAK;AAAA,IAE9C;AACA,aAASsB,EAAmBD,GAAc;AACtC,UAAI,CAACb,EAAS;AACV;AAGJ,YAAMe,IAAc,SAAS,cAAc,IAAI9D,CAAa,EAAE,GACxD+D,IAAcH,EAAE;AACtB,MAAIE,KAAeC,KAAeD,EAAY,SAASC,CAAmB,KAG1EZ,EAAA;AAAA,IACJ;AACA,oBAAS,iBAAiB,WAAWQ,CAAW,GAChD,SAAS,iBAAiB,SAASE,CAAkB,GAC9C,MAAM;AACT,eAAS,oBAAoB,WAAWF,CAAW,GACnD,SAAS,oBAAoB,SAASE,CAAkB;AAAA,IAC5D;AAAA,EACJ,GAAG,CAAA,CAAE,GAEE;AAAA,IACH,QAAQrB,MAAiB;AAAA,IACzB,cAAcQ,EAAa;AAAA,IAC3B,OAAAL;AAAA,IACA,cAAAH;AAAA,IACA,cAAAY;AAAA,IACA,cAAAI;AAAA,IACA,SAAAC;AAAA,EAAA;AAER;AAEO,SAASO,GAAQ;AAAA,EACpB,SAAA9D;AAAA,EACA,GAAAuB;AAAA,EACA,GAAAC;AAAA,EACA,QAAAuC;AAAA,EACA,OAAAtB;AAAA,EACA,WAAAuB;AAAA,EACA,eAAAtC;AAAA,EACA,SAAA6B,IAAU,MAAA;AAAA;AAAA,EACV,QAAA9B,IAASjC;AAAA,EACT,YAAAmC,IAAa;AACjB,GAWG;AACC,QAAMnB,IAAQP,EAAgBD,GAASyC,CAAK,GACtChC,IAASV,EAAiBC,CAAO,GACjCoB,IAAYE,EAAad,GAAOC,GAAQc,GAAGC,GAAGC,GAAQC,GAAeC,CAAU,GAE/EV,IAASa,GAAUV,GAAWM,GAAeH,GAAGf,CAAK,GACrDE,IAASuB,GAAUb,GAAWM,GAAeF,GAAGf,CAAM,GAEtDwD,IAAoB,aAAazD,IAAQf,IAASL,CAAQ,IAAID,CAAQ,KACtE+E,IAAqB,aAAa1D,IAAQf,IAAS,IAAIC,IAAcN,CAAQ,IAAID,CAAQ,KAEzF,CAACgF,GAAQC,CAAS,IAAI5B,EAAAA,SAAS,EAAK,GACpC,CAAC6B,GAAcC,CAAe,IAAI9B,EAAAA,SAAS,EAAK,GAChD,CAAC+B,GAAaC,CAAc,IAAIhC,EAAAA,SAAS,EAAK;AAEpD,WAASiC,IAAmB;;AACxB,KAAAC,IAAA,iCAAQ,cAAR,QAAAA,EAAmB,UAAU,UAAU1E,EAAQ,KAAK;AAAA,CAAI,IACxDoE,EAAU,EAAI;AAAA,EAClB;AAEA,MAAI,CAACL,KAAW,CAACC,KAAaA,MAAc;AACxC,WAAO;AAGX,QAAMW,IACFC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAW9E;AAAA,MACX,WAAW,aAAa4B,EAAc,OAAOH,CAAC,IAAIG,EAAc,MAAMF,CAAC;AAAA,MACvE,SAASuC,IAAS,IAAI;AAAA,MACtB,QAAO;AAAA,MACP,MAAK;AAAA,MACL,OAAO,EAAC,eAAetB,IAAQ,QAAQ,OAAA;AAAA,MAEvC,UAAA;AAAA,QAAAoC,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWhD,GAAiBT,GAAWK,CAAM;AAAA,YAC7C,GAAGN,EAAQX,GAAOC,GAAQW,GAAWH,GAAQP,CAAM;AAAA,YACnD,MAAMoE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEVF,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,UAAS;AAAA,YACT,YAAW;AAAA,YACX,MAAK;AAAA,YACL,WAAWhD,EAAoBR,GAAWZ,GAAOC,GAAQgB,GAAQR,GAAQP,CAAM;AAAA,YAE9E,UAAA;AAAA,cAAAV,EAAQ,IAAI,CAACK,GAAKC,MACfuE,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEG,GAAGzF;AAAA,kBACH,GAAGD,IAAWE,IAAciB,IAAMjB,IAAc;AAAA,kBAChD,kBAAiB;AAAA,kBAEhB,UAAAgB;AAAA,gBAAA;AAAA,gBALIC;AAAA,cAAA,CAOZ;AAAA,cACAmC,KACGmC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAWX,GACV,UAAA;AAAA,gBAAAY,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,UAAS;AAAA,oBACT,UAAS;AAAA,oBACT,GAAE;AAAA,oBACF,MAAMR,IAAezE,IAAOC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEhCgF,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,GAAE;AAAA,oBACF,GAAE;AAAA,oBACF,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,MAAK;AAAA,oBACL,SAAStB;AAAA,oBACT,aAAa,MAAMe,EAAgB,EAAI;AAAA,oBACvC,cAAc,MAAMA,EAAgB,EAAK;AAAA,oBACzC,OAAO,EAAC,QAAQ,UAAA;AAAA,kBAAS;AAAA,gBAAA;AAAA,cAC7B,GACJ;AAAA,cAEH7B,KACGmC,gBAAAA,EAAAA,KAAC,KAAA,EAAE,WAAWV,GACT,UAAA;AAAA,gBAAAC,IAEGU,gBAAAA,EAAAA,IAAC,QAAA,EAAK,UAAS,WAAU,UAAS,WAAU,GAAE,mHAAkH,MAAK,UAAA,CAAS,IAG1KD,gBAAAA,EAAAA,KAAC,KAAA,EACD,UAAA;AAAA,kBAAAC,gBAAAA,EAAAA,IAAC,KAAA,EAAE,UAAS,0BACR,UAAAA,gBAAAA,EAAAA;AAAAA,oBAAC;AAAA,oBAAA;AAAA,sBAAK,GAAE;AAAA,sBACF,MAAMN,IAAc3E,IAAOC;AAAA,oBAAA;AAAA,kBAAA,GAErC;AAAA,wCACK,QAAA,EACD,UAAAgF,gBAAAA,EAAAA,IAAC,YAAA,EAAS,IAAG,oBACb,UAAAA,gBAAAA,MAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,WAAU,0BAAyB,MAAK,SAAQ,GAC7E,EAAA,CACA;AAAA,gBAAA,GACJ;AAAA,gBAERA,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,GAAE;AAAA,oBACF,GAAE;AAAA,oBACF,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,MAAK;AAAA,oBACL,SAASJ;AAAA,oBACT,aAAa,MAAMD,EAAe,EAAI;AAAA,oBACtC,cAAc,MAAMA,EAAe,EAAK;AAAA,oBACxC,OAAO,EAAC,QAAQ,UAAA;AAAA,kBAAS;AAAA,gBAAA;AAAA,cAC7B,EAAA,CACJ;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,EAAA;AAIR,SAAOR,MAAc,OAAOW,IAAUI,EAAAA;AAAAA,IAClCJ;AAAA,IACAX;AAAA,EAAA;AAER;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
|
-
import {
|
|
2
|
+
import { Orientation } from '../../../types';
|
|
3
3
|
import { BinnedDotsLayer } from '../../DiscreteSettingsImpl';
|
|
4
4
|
import { BinnedDots } from '../../layers';
|
|
5
|
-
import {
|
|
5
|
+
import { ChartScales } from '../types';
|
|
6
6
|
interface BinnedDotsProps {
|
|
7
7
|
facetKey: string;
|
|
8
8
|
scales: ChartScales;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinnedDotsElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/BinnedDotsElement.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BinnedDotsElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/BinnedDotsElement.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAA+B,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,eAAe;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAmBD,wBAAgB,iBAAiB,CAAC,EAC9B,QAAQ,EACR,MAAM,EACN,WAAW,EACX,IAAI,EACJ,GAAG,EACH,GAAG,EACH,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,GACf,EAAE,eAAe,2CAgEjB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { j as u } from "../../../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import {
|
|
2
|
+
import { r as W } from "../../../node_modules/react-dom/index.js";
|
|
3
|
+
import { Tooltip as _ } from "../../../common/Tooltip.js";
|
|
3
4
|
import { numberFormat as b } from "../../../utils/numberFormat.js";
|
|
4
|
-
import { r as V } from "../../../node_modules/react-dom/index.js";
|
|
5
5
|
function j(i, r, e, n) {
|
|
6
6
|
if (e && typeof e == "object" && "type" in e) {
|
|
7
7
|
if (e.type === "primaryGrouping")
|
|
@@ -27,14 +27,14 @@ function T({
|
|
|
27
27
|
tooltipsContainer: P,
|
|
28
28
|
tooltipsData: o
|
|
29
29
|
}) {
|
|
30
|
-
const c = e === "vertical", p = (r.xPrimary(n.primaryGrouping) ?? 0) + (r.xSecondary(n.secondaryGrouping) ?? 0) + r.xSecondary.bandwidth() / 2, S = j(r, "lineColor", t.lineColor, n),
|
|
31
|
-
return /* @__PURE__ */ u.jsx("g", { children:
|
|
32
|
-
const x = (
|
|
30
|
+
const c = e === "vertical", p = (r.xPrimary(n.primaryGrouping) ?? 0) + (r.xSecondary(n.secondaryGrouping) ?? 0) + r.xSecondary.bandwidth() / 2, S = j(r, "lineColor", t.lineColor, n), E = j(r, "fillColor", t.fillColor, n), z = n.bins, f = t.dotSize ? t.dotSize : Math.abs(r.y(C) - r.y(k)) / a / 2, A = s && o.fixed;
|
|
31
|
+
return /* @__PURE__ */ u.jsx("g", { children: z.map(({ x: y, count: F, dots: B }) => /* @__PURE__ */ u.jsx("g", { children: B.map((d, L) => {
|
|
32
|
+
const x = (L - F / 2) * 2 * f + f, l = c ? x : 0, h = c ? 0 : x, m = `binnedDot_${n.key}_${d.key}`, V = o.selectedData === m && o.currentFacet === i && A, g = /* @__PURE__ */ u.jsxs(
|
|
33
33
|
"g",
|
|
34
34
|
{
|
|
35
35
|
transform: c ? `translate(${p},${r.y(y)})` : `translate(${r.y(y)},${p})`,
|
|
36
36
|
stroke: S,
|
|
37
|
-
fill:
|
|
37
|
+
fill: E,
|
|
38
38
|
strokeWidth: t.lineWidth,
|
|
39
39
|
children: [
|
|
40
40
|
/* @__PURE__ */ u.jsx(
|
|
@@ -44,12 +44,12 @@ function T({
|
|
|
44
44
|
cx: l,
|
|
45
45
|
cy: h,
|
|
46
46
|
r: f,
|
|
47
|
-
onMouseOver: () => o.
|
|
47
|
+
onMouseOver: () => o.onMouseEnter(m, i),
|
|
48
48
|
onMouseLeave: () => o.onMouseLeave()
|
|
49
49
|
}
|
|
50
50
|
),
|
|
51
51
|
M && /* @__PURE__ */ u.jsx(
|
|
52
|
-
|
|
52
|
+
_,
|
|
53
53
|
{
|
|
54
54
|
content: G ? [d.key, b(d.value)] : [b(d.value)],
|
|
55
55
|
x: (c ? p : r.y(y)) + l,
|
|
@@ -67,7 +67,7 @@ function T({
|
|
|
67
67
|
},
|
|
68
68
|
d.key
|
|
69
69
|
);
|
|
70
|
-
return
|
|
70
|
+
return V ? W.createPortal(g, s) : g;
|
|
71
71
|
}) }, y)) });
|
|
72
72
|
}
|
|
73
73
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinnedDotsElement.js","sources":["../../../../src/discrete/components/layers/BinnedDotsElement.tsx"],"sourcesContent":["import type { TooltipsData} from '../../../common/Tooltip';\nimport {Tooltip} from '../../../common/Tooltip';\nimport type {
|
|
1
|
+
{"version":3,"file":"BinnedDotsElement.js","sources":["../../../../src/discrete/components/layers/BinnedDotsElement.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport { Tooltip } from '../../../common/Tooltip';\nimport type { AesItem, InheritAesDiscrete, Orientation } from '../../../types';\nimport { numberFormat } from '../../../utils/numberFormat';\nimport type { BinnedDotsLayer } from '../../DiscreteSettingsImpl';\nimport type { BinnedDots } from '../../layers';\nimport type { ChartScales } from '../types';\n\ninterface BinnedDotsProps {\n facetKey: string;\n scales: ChartScales;\n geom: BinnedDots;\n orientation: Orientation;\n aes: BinnedDotsLayer['aes'];\n binsCount: number;\n min: number;\n max: number;\n hasKeyFromColumn: boolean;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n geom: BinnedDots\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return scales.xPrimaryAes(geom.primaryGrouping)[field] as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return scales.xSecondaryAes(geom.secondaryGrouping)[field] as ValueType;\n }\n }\n return value as ValueType;\n}\n\nexport function BinnedDotsElement({\n facetKey,\n scales,\n orientation,\n geom,\n aes,\n min,\n max,\n binsCount,\n hasKeyFromColumn,\n sideDistances,\n showTooltips,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: BinnedDotsProps) {\n const isVertical = orientation === 'vertical';\n const groupXPosition =\n (scales.xPrimary(geom.primaryGrouping) ?? 0) +\n (scales.xSecondary(geom.secondaryGrouping) ?? 0) +\n scales.xSecondary.bandwidth() / 2;\n const lineColor = getAesValue(scales, 'lineColor', aes.lineColor, geom);\n const fillColor = getAesValue(scales, 'fillColor', aes.fillColor, geom);\n const bins = geom.bins;\n const r = aes.dotSize ? aes.dotSize : Math.abs(scales.y(max) - scales.y(min)) / binsCount / 2;\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n\n return (\n <g>\n {bins.map(({x, count, dots}) => {\n return (\n <g key={x}>\n {dots.map((dot, idx) => {\n const xPos = (idx - count / 2) * 2 * r + r;\n const cx = isVertical ? xPos : 0;\n const cy = isVertical ? 0 : xPos;\n const globalKey = `binnedDot_${geom.key}_${dot.key}`;\n const highlightedDot = tooltipsData.selectedData === globalKey && tooltipsData.currentFacet === facetKey && dimmedBackground;\n const dotElement = (\n <g key={dot.key}\n transform={isVertical ? `translate(${groupXPosition},${scales.y(x)})` : `translate(${scales.y(x)},${groupXPosition})`}\n stroke={lineColor}\n fill={fillColor}\n strokeWidth={aes.lineWidth}\n >\n <circle\n opacity={aes.opacity}\n cx={cx}\n cy={cy}\n r={r}\n onMouseOver={() => tooltipsData.onMouseEnter(globalKey, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n />\n {showTooltips && (\n <Tooltip\n content={\n hasKeyFromColumn ? [dot.key, numberFormat(dot.value)] : [numberFormat(dot.value)]\n }\n x={(isVertical ? groupXPosition : scales.y(x)) + cx}\n y={(isVertical ? scales.y(x) : groupXPosition) + cy}\n sideDistances={sideDistances}\n horizontal={isVertical}\n offset={r}\n active={globalKey === tooltipsData.selectedData && tooltipsData.currentFacet === facetKey}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedDot ? createPortal(dotElement, activeElementContainer) : dotElement;\n })}\n </g>\n );\n })}\n </g>\n );\n}\n"],"names":["getAesValue","scales","field","value","geom","BinnedDotsElement","facetKey","orientation","aes","min","max","binsCount","hasKeyFromColumn","sideDistances","showTooltips","activeElementContainer","tooltipsContainer","tooltipsData","isVertical","groupXPosition","lineColor","fillColor","bins","r","dimmedBackground","jsx","x","count","dots","dot","idx","xPos","cx","cy","globalKey","highlightedDot","dotElement","jsxs","Tooltip","numberFormat","createPortal"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
|
-
import {
|
|
2
|
+
import { Orientation } from '../../../types';
|
|
3
3
|
import { BoxLayer } from '../../DiscreteSettingsImpl';
|
|
4
4
|
import { Box } from '../../layers';
|
|
5
|
-
import {
|
|
5
|
+
import { ChartScales } from '../types';
|
|
6
6
|
interface BoxProps {
|
|
7
7
|
facetKey: string;
|
|
8
8
|
scales: ChartScales;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/BoxElement.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BoxElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/BoxElement.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,KAAK,EAA+B,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,QAAQ;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC;IACT,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA8BD,wBAAgB,UAAU,CAAC,EACvB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,GACf,EAAE,QAAQ,2CA8HV"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { j as d } from "../../../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { r as C } from "../../../node_modules/react-dom/index.js";
|
|
3
|
+
import { Tooltip as L } from "../../../common/Tooltip.js";
|
|
4
|
+
import { NO_GROUPED as W } from "../../../DataFrame.js";
|
|
4
5
|
import { getLineShape as V } from "../../../utils/getLineShape.js";
|
|
5
6
|
import { getPointShape as H } from "../../../utils/getPointShape.js";
|
|
6
7
|
import { numberFormat as f } from "../../../utils/numberFormat.js";
|
|
7
|
-
import { r as L } from "../../../node_modules/react-dom/index.js";
|
|
8
8
|
function x(t, n, m, r) {
|
|
9
9
|
if (m && typeof m == "object" && "type" in m) {
|
|
10
10
|
if (m.type === "primaryGrouping")
|
|
11
|
-
return r.primaryGrouping !==
|
|
11
|
+
return r.primaryGrouping !== W ? t.xPrimaryAes(r.primaryGrouping)[n] : void 0;
|
|
12
12
|
if (m.type === "secondaryGrouping")
|
|
13
|
-
return r.secondaryGrouping !==
|
|
13
|
+
return r.secondaryGrouping !== W ? t.xSecondaryAes(r.secondaryGrouping)[n] : void 0;
|
|
14
14
|
}
|
|
15
15
|
return m;
|
|
16
16
|
}
|
|
@@ -23,7 +23,7 @@ function Z({
|
|
|
23
23
|
orientation: m,
|
|
24
24
|
box: r,
|
|
25
25
|
aes: y,
|
|
26
|
-
hasKeyFromColumn:
|
|
26
|
+
hasKeyFromColumn: v,
|
|
27
27
|
sideDistances: S,
|
|
28
28
|
showTooltips: c,
|
|
29
29
|
elementsAmount: z,
|
|
@@ -31,7 +31,7 @@ function Z({
|
|
|
31
31
|
tooltipsContainer: g,
|
|
32
32
|
tooltipsData: i
|
|
33
33
|
}) {
|
|
34
|
-
const e = m === "vertical", h = (n.xPrimary(r.primaryGrouping) ?? 0) + (n.xSecondary(r.secondaryGrouping) ?? 0) + n.xSecondary.bandwidth() / 2, u = n.xSecondary.bandwidth(), p = y.boxWidth === "auto" ? u * 0.8 : Math.min(u, y.boxWidth), $ = Math.abs(n.y(r.lower) - n.y(r.upper)), G = x(n, "lineColor", y.lineColor, r),
|
|
34
|
+
const e = m === "vertical", h = (n.xPrimary(r.primaryGrouping) ?? 0) + (n.xSecondary(r.secondaryGrouping) ?? 0) + n.xSecondary.bandwidth() / 2, u = n.xSecondary.bandwidth(), p = y.boxWidth === "auto" ? u * 0.8 : Math.min(u, y.boxWidth), $ = Math.abs(n.y(r.lower) - n.y(r.upper)), G = x(n, "lineColor", y.lineColor, r), E = x(n, "fillColor", y.fillColor, r), F = x(n, "dotShape", y.dotShape, r), A = x(n, "dotSize", y.dotSize, r), B = H(F, A, G), w = Math.abs(n.y.range()[0] - n.y.range()[1]), k = M && i.fixed, R = i.selectedData === r && k, O = /* @__PURE__ */ d.jsxs(
|
|
35
35
|
"g",
|
|
36
36
|
{
|
|
37
37
|
transform: e ? `translate(${h},0)` : `translate(0, ${h})`,
|
|
@@ -65,7 +65,7 @@ function Z({
|
|
|
65
65
|
height: e ? $ : p,
|
|
66
66
|
x: e ? -p / 2 : n.y(r.lower),
|
|
67
67
|
y: e ? n.y(r.upper) : -p / 2,
|
|
68
|
-
fill:
|
|
68
|
+
fill: E
|
|
69
69
|
}
|
|
70
70
|
),
|
|
71
71
|
/* @__PURE__ */ d.jsx(
|
|
@@ -80,28 +80,28 @@ function Z({
|
|
|
80
80
|
c && g && /* @__PURE__ */ d.jsx(
|
|
81
81
|
"rect",
|
|
82
82
|
{
|
|
83
|
-
onMouseOver: () => i.
|
|
83
|
+
onMouseOver: () => i.onMouseEnter(r, t),
|
|
84
84
|
onMouseLeave: i.onMouseLeave,
|
|
85
|
-
width: e ? u :
|
|
85
|
+
width: e ? u : w,
|
|
86
86
|
x: e ? -u / 2 : 0,
|
|
87
87
|
y: e ? 0 : -u / 2,
|
|
88
|
-
height: e ?
|
|
88
|
+
height: e ? w : u,
|
|
89
89
|
fill: "transparent",
|
|
90
90
|
stroke: "none"
|
|
91
91
|
}
|
|
92
92
|
),
|
|
93
93
|
y.showOutliers && r.outliers.map((o) => {
|
|
94
|
-
const j = i.selectedData === o && i.currentFacet === t &&
|
|
94
|
+
const j = i.selectedData === o && i.currentFacet === t && k, a = e ? j ? h : 0 : n.y(o.y), U = e ? n.y(o.y) : j ? h : 0, P = /* @__PURE__ */ d.jsxs(
|
|
95
95
|
"g",
|
|
96
96
|
{
|
|
97
97
|
transform: `translate(${a},${U})`,
|
|
98
98
|
strokeDasharray: "0",
|
|
99
99
|
children: [
|
|
100
|
-
|
|
100
|
+
B,
|
|
101
101
|
c && g && /* @__PURE__ */ d.jsx(
|
|
102
102
|
"circle",
|
|
103
103
|
{
|
|
104
|
-
onMouseOver: () => i.
|
|
104
|
+
onMouseOver: () => i.onMouseEnter(o, t),
|
|
105
105
|
onMouseLeave: i.onMouseLeave,
|
|
106
106
|
r: "15",
|
|
107
107
|
fill: "transparent",
|
|
@@ -109,9 +109,9 @@ function Z({
|
|
|
109
109
|
}
|
|
110
110
|
),
|
|
111
111
|
c && /* @__PURE__ */ d.jsx(
|
|
112
|
-
|
|
112
|
+
L,
|
|
113
113
|
{
|
|
114
|
-
content: N(o,
|
|
114
|
+
content: N(o, v),
|
|
115
115
|
x: e ? h : n.y(o.y),
|
|
116
116
|
y: e ? n.y(o.y) : h,
|
|
117
117
|
sideDistances: S,
|
|
@@ -126,10 +126,10 @@ function Z({
|
|
|
126
126
|
},
|
|
127
127
|
o.id
|
|
128
128
|
);
|
|
129
|
-
return j ?
|
|
129
|
+
return j ? C.createPortal(P, M) : P;
|
|
130
130
|
}),
|
|
131
131
|
c && /* @__PURE__ */ d.jsx(
|
|
132
|
-
|
|
132
|
+
L,
|
|
133
133
|
{
|
|
134
134
|
content: [
|
|
135
135
|
`Max = ${f(r.max)}`,
|
|
@@ -152,7 +152,7 @@ function Z({
|
|
|
152
152
|
]
|
|
153
153
|
}
|
|
154
154
|
);
|
|
155
|
-
return R ?
|
|
155
|
+
return R ? C.createPortal(O, M) : O;
|
|
156
156
|
}
|
|
157
157
|
export {
|
|
158
158
|
Z as BoxElement
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxElement.js","sources":["../../../../src/discrete/components/layers/BoxElement.tsx"],"sourcesContent":["import type { TooltipsData } from '../../../common/Tooltip';\nimport { Tooltip } from '../../../common/Tooltip';\nimport { NO_GROUPED } from '../../../DataFrame';\nimport type { ChartScales } from '../types';\nimport type { BoxLayer } from '../../DiscreteSettingsImpl';\nimport type { Box } from '../../layers';\nimport type { AesItem, InheritAesDiscrete, Orientation } from '../../../types';\nimport { getLineShape } from '../../../utils/getLineShape';\nimport { getPointShape } from '../../../utils/getPointShape';\nimport { numberFormat } from '../../../utils/numberFormat';\nimport { createPortal } from 'react-dom';\n\ninterface BoxProps {\n facetKey: string;\n scales: ChartScales;\n box: Box;\n orientation: Orientation;\n aes: BoxLayer['aes'];\n hasKeyFromColumn: boolean;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n elementsAmount: number;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n geom: Box\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return geom.primaryGrouping !== NO_GROUPED\n ? scales.xPrimaryAes(geom.primaryGrouping)[field] as ValueType\n : undefined as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return geom.secondaryGrouping !== NO_GROUPED\n ? scales.xSecondaryAes(geom.secondaryGrouping)[field] as ValueType\n : undefined as ValueType;\n }\n }\n return value as ValueType;\n}\n\nfunction getTooltipContent(outlier: Box['outliers'][0], hasKeyFromColumn: boolean) {\n if (hasKeyFromColumn) {\n return [outlier.id, `${numberFormat(outlier.y)}`];\n }\n return [`${numberFormat(outlier.y)}`];\n}\n\nexport function BoxElement({\n facetKey,\n scales,\n orientation,\n box,\n aes,\n hasKeyFromColumn,\n sideDistances,\n showTooltips,\n elementsAmount,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: BoxProps) {\n const isVertical = orientation === 'vertical';\n const boxXPosition =\n (scales.xPrimary(box.primaryGrouping as string) ?? 0) +\n (scales.xSecondary(box.secondaryGrouping as string) ?? 0) +\n scales.xSecondary.bandwidth() / 2;\n const boxOuterWidth = scales.xSecondary.bandwidth();\n const boxWidth = aes.boxWidth === 'auto' ? boxOuterWidth * 0.8 : Math.min(boxOuterWidth, aes.boxWidth);\n const boxHeight = Math.abs(scales.y(box.lower) - scales.y(box.upper));\n const lineColor = getAesValue(scales, 'lineColor', aes.lineColor, box);\n const fillColor = getAesValue(scales, 'fillColor', aes.fillColor, box);\n const outliersShape = getAesValue(scales, 'dotShape', aes.dotShape, box);\n const outliersSize = getAesValue(scales, 'dotSize', aes.dotSize, box);\n const shape = getPointShape(outliersShape, outliersSize, lineColor);\n\n const yRange = Math.abs(scales.y.range()[0] - scales.y.range()[1]);\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n const highlightedBox = tooltipsData.selectedData === box && dimmedBackground;\n\n const boxElement = (\n <g\n transform={isVertical ? `translate(${boxXPosition},0)` : `translate(0, ${boxXPosition})`}\n opacity={aes.opacity}\n stroke={lineColor}\n strokeWidth={aes.lineWidth}\n strokeDasharray={getLineShape(aes.lineShape)}\n >\n <line\n x1={isVertical ? 0 : scales.y(box.min)}\n x2={isVertical ? 0 : scales.y(box.lower)}\n y1={isVertical ? scales.y(box.min) : 0}\n y2={isVertical ? scales.y(box.lower) : 0}\n />\n <line\n x1={isVertical ? 0 : scales.y(box.upper)}\n x2={isVertical ? 0 : scales.y(box.max)}\n y1={isVertical ? scales.y(box.upper) : 0}\n y2={isVertical ? scales.y(box.max) : 0}\n />\n <rect\n width={isVertical ? boxWidth : boxHeight}\n height={isVertical ? boxHeight : boxWidth}\n x={isVertical ? -boxWidth / 2 : scales.y(box.lower)}\n y={isVertical ? scales.y(box.upper) : -boxWidth / 2}\n fill={fillColor}\n />\n <line\n x1={isVertical ? -boxWidth / 2 : scales.y(box.middle)}\n x2={isVertical ? boxWidth / 2 : scales.y(box.middle)}\n y1={isVertical ? scales.y(box.middle) : -boxWidth / 2}\n y2={isVertical ? scales.y(box.middle) : boxWidth / 2}\n />\n {showTooltips && tooltipsContainer && (\n <rect\n onMouseOver={() => tooltipsData.onMouseOver(box, facetKey)}\n onMouseLeave={tooltipsData.onMouseLeave}\n width={isVertical ? boxOuterWidth : yRange}\n x={isVertical ? -boxOuterWidth / 2 : 0}\n y={isVertical ? 0 : -boxOuterWidth / 2}\n height={isVertical ? yRange : boxOuterWidth}\n fill=\"transparent\"\n stroke=\"none\"\n />\n )}\n {aes.showOutliers &&\n box.outliers.map(outlier => {\n const highlightedOutlier = tooltipsData.selectedData === outlier && tooltipsData.currentFacet === facetKey && dimmedBackground;\n const x = isVertical ? (highlightedOutlier ? boxXPosition : 0) : scales.y(outlier.y);\n const y = isVertical ? scales.y(outlier.y) : (highlightedOutlier ? boxXPosition : 0);\n const el = (\n <g\n key={outlier.id}\n transform={`translate(${x},${y})`}\n strokeDasharray=\"0\"\n >\n {shape}\n {showTooltips && tooltipsContainer && (\n <circle\n onMouseOver={() => tooltipsData.onMouseOver(outlier, facetKey)}\n onMouseLeave={tooltipsData.onMouseLeave}\n r=\"15\"\n fill=\"transparent\"\n stroke=\"none\"\n />\n )}\n {showTooltips && (\n <Tooltip\n content={getTooltipContent(outlier, hasKeyFromColumn)}\n x={isVertical ? boxXPosition : scales.y(outlier.y)}\n y={isVertical ? scales.y(outlier.y) : boxXPosition}\n sideDistances={sideDistances}\n horizontal\n active={tooltipsData.selectedData === outlier && tooltipsData.currentFacet === facetKey}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedOutlier ? createPortal(el, activeElementContainer) : el;\n })}\n {showTooltips && (\n <Tooltip\n content={[\n `Max = ${numberFormat(box.max)}`,\n `Upper = ${numberFormat(box.upper)}`,\n `Median = ${numberFormat(box.middle)}`,\n `Lower = ${numberFormat(box.lower)}`,\n `Min = ${numberFormat(box.min)}`,\n ]}\n x={isVertical ? boxXPosition : scales.y(box.middle)}\n y={isVertical ? scales.y(box.middle) : boxXPosition}\n sideDistances={sideDistances}\n horizontal={isVertical}\n active={tooltipsData.active && tooltipsData.selectedData === box && tooltipsData.currentFacet === facetKey}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n offset={elementsAmount > 1 ? boxOuterWidth / 2 : boxOuterWidth / 4}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedBox ? createPortal(boxElement, activeElementContainer) : boxElement;\n}\n"],"names":["getAesValue","scales","field","value","geom","NO_GROUPED","getTooltipContent","outlier","hasKeyFromColumn","numberFormat","BoxElement","facetKey","orientation","box","aes","sideDistances","showTooltips","elementsAmount","activeElementContainer","tooltipsContainer","tooltipsData","isVertical","boxXPosition","boxOuterWidth","boxWidth","boxHeight","lineColor","fillColor","outliersShape","outliersSize","shape","getPointShape","yRange","dimmedBackground","highlightedBox","boxElement","jsxs","getLineShape","jsx","highlightedOutlier","x","y","el","Tooltip","createPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BoxElement.js","sources":["../../../../src/discrete/components/layers/BoxElement.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport { Tooltip } from '../../../common/Tooltip';\nimport { NO_GROUPED } from '../../../DataFrame';\nimport type { AesItem, InheritAesDiscrete, Orientation } from '../../../types';\nimport { getLineShape } from '../../../utils/getLineShape';\nimport { getPointShape } from '../../../utils/getPointShape';\nimport { numberFormat } from '../../../utils/numberFormat';\nimport type { BoxLayer } from '../../DiscreteSettingsImpl';\nimport type { Box } from '../../layers';\nimport type { ChartScales } from '../types';\n\ninterface BoxProps {\n facetKey: string;\n scales: ChartScales;\n box: Box;\n orientation: Orientation;\n aes: BoxLayer['aes'];\n hasKeyFromColumn: boolean;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n elementsAmount: number;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n geom: Box\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return geom.primaryGrouping !== NO_GROUPED\n ? scales.xPrimaryAes(geom.primaryGrouping)[field] as ValueType\n : undefined as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return geom.secondaryGrouping !== NO_GROUPED\n ? scales.xSecondaryAes(geom.secondaryGrouping)[field] as ValueType\n : undefined as ValueType;\n }\n }\n return value as ValueType;\n}\n\nfunction getTooltipContent(outlier: Box['outliers'][0], hasKeyFromColumn: boolean) {\n if (hasKeyFromColumn) {\n return [outlier.id, `${numberFormat(outlier.y)}`];\n }\n return [`${numberFormat(outlier.y)}`];\n}\n\nexport function BoxElement({\n facetKey,\n scales,\n orientation,\n box,\n aes,\n hasKeyFromColumn,\n sideDistances,\n showTooltips,\n elementsAmount,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: BoxProps) {\n const isVertical = orientation === 'vertical';\n const boxXPosition =\n (scales.xPrimary(box.primaryGrouping as string) ?? 0) +\n (scales.xSecondary(box.secondaryGrouping as string) ?? 0) +\n scales.xSecondary.bandwidth() / 2;\n const boxOuterWidth = scales.xSecondary.bandwidth();\n const boxWidth = aes.boxWidth === 'auto' ? boxOuterWidth * 0.8 : Math.min(boxOuterWidth, aes.boxWidth);\n const boxHeight = Math.abs(scales.y(box.lower) - scales.y(box.upper));\n const lineColor = getAesValue(scales, 'lineColor', aes.lineColor, box);\n const fillColor = getAesValue(scales, 'fillColor', aes.fillColor, box);\n const outliersShape = getAesValue(scales, 'dotShape', aes.dotShape, box);\n const outliersSize = getAesValue(scales, 'dotSize', aes.dotSize, box);\n const shape = getPointShape(outliersShape, outliersSize, lineColor);\n\n const yRange = Math.abs(scales.y.range()[0] - scales.y.range()[1]);\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n const highlightedBox = tooltipsData.selectedData === box && dimmedBackground;\n\n const boxElement = (\n <g\n transform={isVertical ? `translate(${boxXPosition},0)` : `translate(0, ${boxXPosition})`}\n opacity={aes.opacity}\n stroke={lineColor}\n strokeWidth={aes.lineWidth}\n strokeDasharray={getLineShape(aes.lineShape)}\n >\n <line\n x1={isVertical ? 0 : scales.y(box.min)}\n x2={isVertical ? 0 : scales.y(box.lower)}\n y1={isVertical ? scales.y(box.min) : 0}\n y2={isVertical ? scales.y(box.lower) : 0}\n />\n <line\n x1={isVertical ? 0 : scales.y(box.upper)}\n x2={isVertical ? 0 : scales.y(box.max)}\n y1={isVertical ? scales.y(box.upper) : 0}\n y2={isVertical ? scales.y(box.max) : 0}\n />\n <rect\n width={isVertical ? boxWidth : boxHeight}\n height={isVertical ? boxHeight : boxWidth}\n x={isVertical ? -boxWidth / 2 : scales.y(box.lower)}\n y={isVertical ? scales.y(box.upper) : -boxWidth / 2}\n fill={fillColor}\n />\n <line\n x1={isVertical ? -boxWidth / 2 : scales.y(box.middle)}\n x2={isVertical ? boxWidth / 2 : scales.y(box.middle)}\n y1={isVertical ? scales.y(box.middle) : -boxWidth / 2}\n y2={isVertical ? scales.y(box.middle) : boxWidth / 2}\n />\n {showTooltips && tooltipsContainer && (\n <rect\n onMouseOver={() => tooltipsData.onMouseEnter(box, facetKey)}\n onMouseLeave={tooltipsData.onMouseLeave}\n width={isVertical ? boxOuterWidth : yRange}\n x={isVertical ? -boxOuterWidth / 2 : 0}\n y={isVertical ? 0 : -boxOuterWidth / 2}\n height={isVertical ? yRange : boxOuterWidth}\n fill=\"transparent\"\n stroke=\"none\"\n />\n )}\n {aes.showOutliers &&\n box.outliers.map(outlier => {\n const highlightedOutlier = tooltipsData.selectedData === outlier && tooltipsData.currentFacet === facetKey && dimmedBackground;\n const x = isVertical ? (highlightedOutlier ? boxXPosition : 0) : scales.y(outlier.y);\n const y = isVertical ? scales.y(outlier.y) : (highlightedOutlier ? boxXPosition : 0);\n const el = (\n <g\n key={outlier.id}\n transform={`translate(${x},${y})`}\n strokeDasharray=\"0\"\n >\n {shape}\n {showTooltips && tooltipsContainer && (\n <circle\n onMouseOver={() => tooltipsData.onMouseEnter(outlier, facetKey)}\n onMouseLeave={tooltipsData.onMouseLeave}\n r=\"15\"\n fill=\"transparent\"\n stroke=\"none\"\n />\n )}\n {showTooltips && (\n <Tooltip\n content={getTooltipContent(outlier, hasKeyFromColumn)}\n x={isVertical ? boxXPosition : scales.y(outlier.y)}\n y={isVertical ? scales.y(outlier.y) : boxXPosition}\n sideDistances={sideDistances}\n horizontal\n active={tooltipsData.selectedData === outlier && tooltipsData.currentFacet === facetKey}\n onClose={tooltipsData.onClose}\n fixed={tooltipsData.fixed}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedOutlier ? createPortal(el, activeElementContainer) : el;\n })}\n {showTooltips && (\n <Tooltip\n content={[\n `Max = ${numberFormat(box.max)}`,\n `Upper = ${numberFormat(box.upper)}`,\n `Median = ${numberFormat(box.middle)}`,\n `Lower = ${numberFormat(box.lower)}`,\n `Min = ${numberFormat(box.min)}`,\n ]}\n x={isVertical ? boxXPosition : scales.y(box.middle)}\n y={isVertical ? scales.y(box.middle) : boxXPosition}\n sideDistances={sideDistances}\n horizontal={isVertical}\n active={tooltipsData.active && tooltipsData.selectedData === box && tooltipsData.currentFacet === facetKey}\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n offset={elementsAmount > 1 ? boxOuterWidth / 2 : boxOuterWidth / 4}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedBox ? createPortal(boxElement, activeElementContainer) : boxElement;\n}\n"],"names":["getAesValue","scales","field","value","geom","NO_GROUPED","getTooltipContent","outlier","hasKeyFromColumn","numberFormat","BoxElement","facetKey","orientation","box","aes","sideDistances","showTooltips","elementsAmount","activeElementContainer","tooltipsContainer","tooltipsData","isVertical","boxXPosition","boxOuterWidth","boxWidth","boxHeight","lineColor","fillColor","outliersShape","outliersSize","shape","getPointShape","yRange","dimmedBackground","highlightedBox","boxElement","jsxs","getLineShape","jsx","highlightedOutlier","x","y","el","Tooltip","createPortal"],"mappings":";;;;;;;AAgCA,SAASA,EACLC,GACAC,GACAC,GACAC,GACS;AACT,MAAID,KAAS,OAAOA,KAAU,YAAY,UAAUA,GAAO;AACvD,QAAIA,EAAM,SAAS;AACf,aAAOC,EAAK,oBAAoBC,IAC1BJ,EAAO,YAAYG,EAAK,eAAe,EAAEF,CAAK,IAC9C;AAEV,QAAIC,EAAM,SAAS;AACf,aAAOC,EAAK,sBAAsBC,IAC5BJ,EAAO,cAAcG,EAAK,iBAAiB,EAAEF,CAAK,IAClD;AAAA,EAEd;AACA,SAAOC;AACX;AAEA,SAASG,EAAkBC,GAA6BC,GAA2B;AAC/E,SAAIA,IACO,CAACD,EAAQ,IAAI,GAAGE,EAAaF,EAAQ,CAAC,CAAC,EAAE,IAE7C,CAAC,GAAGE,EAAaF,EAAQ,CAAC,CAAC,EAAE;AACxC;AAEO,SAASG,EAAW;AAAA,EACvB,UAAAC;AAAA,EACA,QAAAV;AAAA,EACA,aAAAW;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,kBAAAN;AAAA,EACA,eAAAO;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,cAAAC;AACJ,GAAa;AACT,QAAMC,IAAaT,MAAgB,YAC7BU,KACDrB,EAAO,SAASY,EAAI,eAAyB,KAAK,MAClDZ,EAAO,WAAWY,EAAI,iBAA2B,KAAK,KACvDZ,EAAO,WAAW,cAAc,GAC9BsB,IAAgBtB,EAAO,WAAW,UAAA,GAClCuB,IAAWV,EAAI,aAAa,SAASS,IAAgB,MAAM,KAAK,IAAIA,GAAeT,EAAI,QAAQ,GAC/FW,IAAY,KAAK,IAAIxB,EAAO,EAAEY,EAAI,KAAK,IAAIZ,EAAO,EAAEY,EAAI,KAAK,CAAC,GAC9Da,IAAY1B,EAAYC,GAAQ,aAAaa,EAAI,WAAWD,CAAG,GAC/Dc,IAAY3B,EAAYC,GAAQ,aAAaa,EAAI,WAAWD,CAAG,GAC/De,IAAgB5B,EAAYC,GAAQ,YAAYa,EAAI,UAAUD,CAAG,GACjEgB,IAAe7B,EAAYC,GAAQ,WAAWa,EAAI,SAASD,CAAG,GAC9DiB,IAAQC,EAAcH,GAAeC,GAAcH,CAAS,GAE5DM,IAAS,KAAK,IAAI/B,EAAO,EAAE,MAAA,EAAQ,CAAC,IAAIA,EAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,GAE3DgC,IAAmBf,KAA0BE,EAAa,OAC1Dc,IAAiBd,EAAa,iBAAiBP,KAAOoB,GAEtDE,IACFC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWf,IAAa,aAAaC,CAAY,QAAQ,gBAAgBA,CAAY;AAAA,MACrF,SAASR,EAAI;AAAA,MACb,QAAQY;AAAA,MACR,aAAaZ,EAAI;AAAA,MACjB,iBAAiBuB,EAAavB,EAAI,SAAS;AAAA,MAE3C,UAAA;AAAA,QAAAwB,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAIjB,IAAa,IAAIpB,EAAO,EAAEY,EAAI,GAAG;AAAA,YACrC,IAAIQ,IAAa,IAAIpB,EAAO,EAAEY,EAAI,KAAK;AAAA,YACvC,IAAIQ,IAAapB,EAAO,EAAEY,EAAI,GAAG,IAAI;AAAA,YACrC,IAAIQ,IAAapB,EAAO,EAAEY,EAAI,KAAK,IAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAE3CyB,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAIjB,IAAa,IAAIpB,EAAO,EAAEY,EAAI,KAAK;AAAA,YACvC,IAAIQ,IAAa,IAAIpB,EAAO,EAAEY,EAAI,GAAG;AAAA,YACrC,IAAIQ,IAAapB,EAAO,EAAEY,EAAI,KAAK,IAAI;AAAA,YACvC,IAAIQ,IAAapB,EAAO,EAAEY,EAAI,GAAG,IAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzCyB,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,OAAOjB,IAAaG,IAAWC;AAAA,YAC/B,QAAQJ,IAAaI,IAAYD;AAAA,YACjC,GAAGH,IAAa,CAACG,IAAW,IAAIvB,EAAO,EAAEY,EAAI,KAAK;AAAA,YAClD,GAAGQ,IAAapB,EAAO,EAAEY,EAAI,KAAK,IAAI,CAACW,IAAW;AAAA,YAClD,MAAMG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEVW,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAIjB,IAAa,CAACG,IAAW,IAAIvB,EAAO,EAAEY,EAAI,MAAM;AAAA,YACpD,IAAIQ,IAAaG,IAAW,IAAIvB,EAAO,EAAEY,EAAI,MAAM;AAAA,YACnD,IAAIQ,IAAapB,EAAO,EAAEY,EAAI,MAAM,IAAI,CAACW,IAAW;AAAA,YACpD,IAAIH,IAAapB,EAAO,EAAEY,EAAI,MAAM,IAAIW,IAAW;AAAA,UAAA;AAAA,QAAA;AAAA,QAEtDR,KAAgBG,KACbmB,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,aAAa,MAAMlB,EAAa,aAAaP,GAAKF,CAAQ;AAAA,YAC1D,cAAcS,EAAa;AAAA,YAC3B,OAAOC,IAAaE,IAAgBS;AAAA,YACpC,GAAGX,IAAa,CAACE,IAAgB,IAAI;AAAA,YACrC,GAAGF,IAAa,IAAI,CAACE,IAAgB;AAAA,YACrC,QAAQF,IAAaW,IAAST;AAAA,YAC9B,MAAK;AAAA,YACL,QAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAGdT,EAAI,gBACDD,EAAI,SAAS,IAAI,CAAAN,MAAW;AACxB,gBAAMgC,IAAqBnB,EAAa,iBAAkBb,KAAWa,EAAa,iBAAiBT,KAAYsB,GACzGO,IAAInB,IAAckB,IAAqBjB,IAAe,IAAKrB,EAAO,EAAEM,EAAQ,CAAC,GAC7EkC,IAAIpB,IAAapB,EAAO,EAAEM,EAAQ,CAAC,IAAKgC,IAAqBjB,IAAe,GAC5EoB,IACFN,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cAEG,WAAW,aAAaI,CAAC,IAAIC,CAAC;AAAA,cAC9B,iBAAgB;AAAA,cAEf,UAAA;AAAA,gBAAAX;AAAA,gBACAd,KAAgBG,KACbmB,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,aAAa,MAAMlB,EAAa,aAAab,GAASI,CAAQ;AAAA,oBAC9D,cAAcS,EAAa;AAAA,oBAC3B,GAAE;AAAA,oBACF,MAAK;AAAA,oBACL,QAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGdJ,KACGsB,gBAAAA,EAAAA;AAAAA,kBAACK;AAAA,kBAAA;AAAA,oBACG,SAASrC,EAAkBC,GAASC,CAAgB;AAAA,oBACpD,GAAGa,IAAaC,IAAerB,EAAO,EAAEM,EAAQ,CAAC;AAAA,oBACjD,GAAGc,IAAapB,EAAO,EAAEM,EAAQ,CAAC,IAAIe;AAAA,oBACtC,eAAAP;AAAA,oBACA,YAAU;AAAA,oBACV,QAAQK,EAAa,iBAAiBb,KAAWa,EAAa,iBAAiBT;AAAA,oBAC/E,SAASS,EAAa;AAAA,oBACtB,OAAOA,EAAa;AAAA,oBACpB,WAAWD;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACf;AAAA,YAAA;AAAA,YAzBCZ,EAAQ;AAAA,UAAA;AA6BrB,iBAAOgC,IAAqBK,EAAAA,aAAaF,GAAIxB,CAAsB,IAAIwB;AAAA,QAC3E,CAAC;AAAA,QACJ1B,KACGsB,gBAAAA,EAAAA;AAAAA,UAACK;AAAA,UAAA;AAAA,YACG,SAAS;AAAA,cACL,SAASlC,EAAaI,EAAI,GAAG,CAAC;AAAA,cAC9B,WAAWJ,EAAaI,EAAI,KAAK,CAAC;AAAA,cAClC,YAAYJ,EAAaI,EAAI,MAAM,CAAC;AAAA,cACpC,WAAWJ,EAAaI,EAAI,KAAK,CAAC;AAAA,cAClC,SAASJ,EAAaI,EAAI,GAAG,CAAC;AAAA,YAAA;AAAA,YAElC,GAAGQ,IAAaC,IAAerB,EAAO,EAAEY,EAAI,MAAM;AAAA,YAClD,GAAGQ,IAAapB,EAAO,EAAEY,EAAI,MAAM,IAAIS;AAAA,YACvC,eAAAP;AAAA,YACA,YAAYM;AAAA,YACZ,QAAQD,EAAa,UAAUA,EAAa,iBAAiBP,KAAOO,EAAa,iBAAiBT;AAAA,YAClG,OAAOS,EAAa;AAAA,YACpB,SAASA,EAAa;AAAA,YACtB,QAAQH,IAAiB,IAAIM,IAAgB,IAAIA,IAAgB;AAAA,YACjE,WAAWJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACf;AAAA,IAAA;AAAA,EAAA;AAIZ,SAAOe,IAAiBU,EAAAA,aAAaT,GAAYjB,CAAsB,IAAIiB;AAC/E;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
|
-
import { ChartScales } from '../types';
|
|
3
|
-
import { DotsGroup } from '../../layers';
|
|
4
|
-
import { DotLayer } from '../../DiscreteSettingsImpl';
|
|
5
2
|
import { Orientation } from '../../../types';
|
|
3
|
+
import { DotLayer } from '../../DiscreteSettingsImpl';
|
|
4
|
+
import { DotsGroup } from '../../layers';
|
|
5
|
+
import { ChartScales } from '../types';
|
|
6
6
|
interface DotsProps {
|
|
7
7
|
facetKey: string;
|
|
8
8
|
scales: ChartScales;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DotsGroupElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/DotsGroupElement.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DotsGroupElement.d.ts","sourceRoot":"","sources":["../../../../src/discrete/components/layers/DotsGroupElement.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAA+B,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,SAAS;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA0BD,wBAAgB,gBAAgB,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,WAAW,EACX,IAAI,EACJ,GAAG,EACH,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,GACf,EAAE,SAAS,2CAwDX"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { j as x } from "../../../node_modules/react/jsx-runtime.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { r as J } from "../../../node_modules/react-dom/index.js";
|
|
3
|
+
import { Tooltip as L } from "../../../common/Tooltip.js";
|
|
4
|
+
import { getPointShape as v } from "../../../utils/getPointShape.js";
|
|
4
5
|
import { numberFormat as b } from "../../../utils/numberFormat.js";
|
|
5
|
-
import { r as L } from "../../../node_modules/react-dom/index.js";
|
|
6
6
|
function s(e, r, n, t) {
|
|
7
7
|
if (n && typeof n == "object" && "type" in n) {
|
|
8
8
|
if (n.type === "primaryGrouping")
|
|
@@ -12,7 +12,7 @@ function s(e, r, n, t) {
|
|
|
12
12
|
}
|
|
13
13
|
return n;
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function w(e, r, n) {
|
|
16
16
|
return n ? [r, `${b(e)}`] : [`${b(e)}`];
|
|
17
17
|
}
|
|
18
18
|
function W({
|
|
@@ -28,14 +28,14 @@ function W({
|
|
|
28
28
|
tooltipsContainer: m,
|
|
29
29
|
tooltipsData: o
|
|
30
30
|
}) {
|
|
31
|
-
const y = n === "vertical", d = (r.xPrimary(t.primaryGrouping) ?? 0) + (r.xSecondary(t.secondaryGrouping) ?? 0) + r.xSecondary.bandwidth() / 2, F = r.xSecondary.bandwidth() * c.jitter, j = (i) => (1 - i * 2) * (F / 2), M = s(r, "lineColor", c.lineColor, t), g = s(r, "dotFill", c.dotFill, t), k = s(r, "dotShape", c.dotShape, t), A =
|
|
31
|
+
const y = n === "vertical", d = (r.xPrimary(t.primaryGrouping) ?? 0) + (r.xSecondary(t.secondaryGrouping) ?? 0) + r.xSecondary.bandwidth() / 2, F = r.xSecondary.bandwidth() * c.jitter, j = (i) => (1 - i * 2) * (F / 2), M = s(r, "lineColor", c.lineColor, t), g = s(r, "dotFill", c.dotFill, t), k = s(r, "dotShape", c.dotShape, t), A = v(k, c.dotSize, g), E = h && o.fixed;
|
|
32
32
|
return /* @__PURE__ */ x.jsx("g", { transform: y ? `translate(${d},0)` : `translate(0, ${d})`, stroke: M, children: t.values.map((i) => {
|
|
33
|
-
const { jitter: S, id: a } = i, f = o.selectedData === i &&
|
|
33
|
+
const { jitter: S, id: a } = i, f = o.selectedData === i && E, p = j(S), l = y ? f ? d + p : p : r.y(i.y), G = y ? r.y(i.y) : f ? d + p : p, $ = /* @__PURE__ */ x.jsxs("g", { opacity: c.opacity, transform: `translate(${l},${G})`, children: [
|
|
34
34
|
A,
|
|
35
35
|
u && m && /* @__PURE__ */ x.jsx(
|
|
36
36
|
"circle",
|
|
37
37
|
{
|
|
38
|
-
onMouseOver: () => o.
|
|
38
|
+
onMouseOver: () => o.onMouseEnter(i, e),
|
|
39
39
|
onMouseLeave: () => o.onMouseLeave(),
|
|
40
40
|
r: "4",
|
|
41
41
|
fill: "transparent",
|
|
@@ -43,9 +43,9 @@ function W({
|
|
|
43
43
|
}
|
|
44
44
|
),
|
|
45
45
|
u && /* @__PURE__ */ x.jsx(
|
|
46
|
-
|
|
46
|
+
L,
|
|
47
47
|
{
|
|
48
|
-
content:
|
|
48
|
+
content: w(i.y, a, C),
|
|
49
49
|
x: d + j(S),
|
|
50
50
|
y: G,
|
|
51
51
|
active: o.active && o.selectedData === i && o.currentFacet === e,
|
|
@@ -56,7 +56,7 @@ function W({
|
|
|
56
56
|
}
|
|
57
57
|
)
|
|
58
58
|
] }, a);
|
|
59
|
-
return f ?
|
|
59
|
+
return f ? J.createPortal($, h) : $;
|
|
60
60
|
}) });
|
|
61
61
|
}
|
|
62
62
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DotsGroupElement.js","sources":["../../../../src/discrete/components/layers/DotsGroupElement.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DotsGroupElement.js","sources":["../../../../src/discrete/components/layers/DotsGroupElement.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport type { TooltipsData } from '../../../common/Tooltip';\nimport { Tooltip } from '../../../common/Tooltip';\nimport type { AesItem, InheritAesDiscrete, Orientation } from '../../../types';\nimport { getPointShape } from '../../../utils/getPointShape';\nimport { numberFormat } from '../../../utils/numberFormat';\nimport type { DotLayer } from '../../DiscreteSettingsImpl';\nimport type { DotsGroup } from '../../layers';\nimport type { ChartScales } from '../types';\n\ninterface DotsProps {\n facetKey: string;\n scales: ChartScales;\n geom: DotsGroup;\n orientation: Orientation;\n aes: DotLayer['aes'];\n hasKeyFromColumn: boolean;\n sideDistances: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n showTooltips: boolean;\n tooltipsData: TooltipsData<unknown>;\n activeElementContainer?: Element;\n tooltipsContainer?: Element;\n}\n\nfunction getAesValue<ValueType>(\n scales: ChartScales,\n field: keyof AesItem,\n value: ValueType | InheritAesDiscrete,\n geom: DotsGroup\n): ValueType {\n if (value && typeof value === 'object' && 'type' in value) {\n if (value.type === 'primaryGrouping') {\n return scales.xPrimaryAes(geom.primaryGrouping)[field] as ValueType;\n }\n if (value.type === 'secondaryGrouping') {\n return scales.xSecondaryAes(geom.secondaryGrouping)[field] as ValueType;\n }\n }\n return value as ValueType;\n}\n\nfunction getTooltipContent(y: number, id: string, hasKeyFromColumn: boolean) {\n if (hasKeyFromColumn) {\n return [id, `${numberFormat(y)}`];\n }\n return [`${numberFormat(y)}`];\n}\n\nexport function DotsGroupElement({\n facetKey,\n scales,\n orientation,\n geom,\n aes,\n hasKeyFromColumn,\n sideDistances,\n showTooltips,\n activeElementContainer,\n tooltipsContainer,\n tooltipsData,\n}: DotsProps) {\n const isVertical = orientation === 'vertical';\n const xPosition =\n (scales.xPrimary(geom.primaryGrouping) ?? 0) +\n (scales.xSecondary(geom.secondaryGrouping) ?? 0) +\n scales.xSecondary.bandwidth() / 2;\n const boxWidth = scales.xSecondary.bandwidth() * aes.jitter;\n const getJitterX = (v: number) => (1 - v * 2) * (boxWidth / 2);\n const lineColor = getAesValue(scales, 'lineColor', aes.lineColor, geom);\n const fillColor = getAesValue(scales, 'dotFill', aes.dotFill, geom);\n const dotShape = getAesValue(scales, 'dotShape', aes.dotShape, geom);\n const shape = getPointShape(dotShape, aes.dotSize, fillColor);\n\n const dimmedBackground = activeElementContainer && tooltipsData.fixed;\n return (\n <g transform={isVertical ? `translate(${xPosition},0)` : `translate(0, ${xPosition})`} stroke={lineColor}>\n {geom.values.map(geomValue => {\n const {jitter, id} = geomValue;\n const highlightedDot = tooltipsData.selectedData === geomValue && dimmedBackground;\n const xJitter = getJitterX(jitter);\n const x = isVertical ? (highlightedDot ? xPosition + xJitter : xJitter) : scales.y(geomValue.y);\n const y = isVertical ? scales.y(geomValue.y) : highlightedDot ? xPosition + xJitter : xJitter;\n const dot = (\n <g key={id} opacity={aes.opacity} transform={`translate(${x},${y})`}>\n {shape}\n {showTooltips && tooltipsContainer && (\n <circle\n onMouseOver={() => tooltipsData.onMouseEnter(geomValue, facetKey)}\n onMouseLeave={() => tooltipsData.onMouseLeave()}\n r=\"4\"\n fill=\"transparent\"\n stroke=\"none\"\n />\n )}\n {showTooltips && (\n <Tooltip\n content={getTooltipContent(geomValue.y, id, hasKeyFromColumn)}\n x={xPosition + getJitterX(jitter)}\n y={y}\n active={\n tooltipsData.active &&\n tooltipsData.selectedData === geomValue &&\n tooltipsData.currentFacet === facetKey\n }\n fixed={tooltipsData.fixed}\n onClose={tooltipsData.onClose}\n sideDistances={sideDistances}\n container={tooltipsContainer}\n />\n )}\n </g>\n );\n return highlightedDot ? createPortal(dot, activeElementContainer) : dot;\n })}\n </g>\n );\n}\n"],"names":["getAesValue","scales","field","value","geom","getTooltipContent","y","id","hasKeyFromColumn","numberFormat","DotsGroupElement","facetKey","orientation","aes","sideDistances","showTooltips","activeElementContainer","tooltipsContainer","tooltipsData","isVertical","xPosition","boxWidth","getJitterX","v","lineColor","fillColor","dotShape","shape","getPointShape","dimmedBackground","jsx","geomValue","jitter","highlightedDot","xJitter","x","dot","jsxs","Tooltip","createPortal"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TooltipsData } from '../../../common/Tooltip';
|
|
2
|
-
import {
|
|
2
|
+
import { Orientation } from '../../../types';
|
|
3
3
|
import { ErrorBar } from '../../layers';
|
|
4
4
|
import { ErrorBarsData } from '../../layers/types';
|
|
5
|
-
import {
|
|
5
|
+
import { ChartScales } from '../types';
|
|
6
6
|
interface ErrorBarProps {
|
|
7
7
|
facetKey: string;
|
|
8
8
|
scales: ChartScales;
|