@nivo/legends
Version:
legend components for nivo dataviz library
1 lines • 63.6 kB
Source Map (JSON)
{"version":3,"file":"nivo-legends.mjs","sources":["../src/svg/symbols/SymbolCircle.tsx","../src/svg/symbols/SymbolDiamond.tsx","../src/svg/symbols/SymbolSquare.tsx","../src/svg/symbols/SymbolTriangle.tsx","../src/defaults.ts","../src/compute.ts","../src/svg/ContinuousColorsLegendSvg.tsx","../src/svg/AnchoredContinuousColorsLegendSvg.tsx","../src/svg/LegendSvgItem.tsx","../src/svg/LegendSvg.tsx","../src/svg/BoxLegendSvg.tsx","../src/canvas.ts","../src/hooks.ts"],"sourcesContent":["import { SymbolProps } from './types'\n\nexport const SymbolCircle = ({\n x,\n y,\n size,\n fill,\n opacity = 1,\n borderWidth = 0,\n borderColor = 'transparent',\n}: SymbolProps) => {\n return (\n <circle\n r={size / 2}\n cx={x + size / 2}\n cy={y + size / 2}\n fill={fill}\n opacity={opacity}\n strokeWidth={borderWidth}\n stroke={borderColor}\n style={{\n pointerEvents: 'none',\n }}\n />\n )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolDiamond = ({\n x,\n y,\n size,\n fill,\n opacity = 1,\n borderWidth = 0,\n borderColor = 'transparent',\n}: SymbolProps) => {\n return (\n <g transform={`translate(${x},${y})`}>\n <path\n d={`\n M${size / 2} 0\n L${size * 0.8} ${size / 2}\n L${size / 2} ${size}\n L${size * 0.2} ${size / 2}\n L${size / 2} 0\n `}\n fill={fill}\n opacity={opacity}\n strokeWidth={borderWidth}\n stroke={borderColor}\n style={{\n pointerEvents: 'none',\n }}\n />\n </g>\n )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolSquare = ({\n x,\n y,\n size,\n fill,\n opacity = 1,\n borderWidth = 0,\n borderColor = 'transparent',\n}: SymbolProps) => {\n return (\n <rect\n x={x}\n y={y}\n fill={fill}\n opacity={opacity}\n strokeWidth={borderWidth}\n stroke={borderColor}\n width={size}\n height={size}\n style={{\n pointerEvents: 'none',\n }}\n />\n )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolTriangle = ({\n x,\n y,\n size,\n fill,\n opacity = 1,\n borderWidth = 0,\n borderColor = 'transparent',\n}: SymbolProps) => {\n return (\n <g transform={`translate(${x},${y})`}>\n <path\n d={`\n M${size / 2} 0\n L${size} ${size}\n L0 ${size}\n L${size / 2} 0\n `}\n fill={fill}\n opacity={opacity}\n strokeWidth={borderWidth}\n stroke={borderColor}\n style={{\n pointerEvents: 'none',\n }}\n />\n </g>\n )\n}\n","import { BoxLegendSvgProps, ContinuousColorsLegendProps } from './types'\n\nexport const legendDefaults: {\n translateX: NonNullable<BoxLegendSvgProps['translateX']>\n translateY: NonNullable<BoxLegendSvgProps['translateY']>\n padding: NonNullable<BoxLegendSvgProps['padding']>\n itemsSpacing: NonNullable<BoxLegendSvgProps['itemsSpacing']>\n itemDirection: NonNullable<BoxLegendSvgProps['itemDirection']>\n justify: NonNullable<BoxLegendSvgProps['justify']>\n symbolShape: NonNullable<BoxLegendSvgProps['symbolShape']>\n symbolSize: NonNullable<BoxLegendSvgProps['symbolSize']>\n symbolSpacing: NonNullable<BoxLegendSvgProps['symbolSpacing']>\n} = {\n translateX: 0,\n translateY: 0,\n padding: 0,\n itemsSpacing: 0,\n itemDirection: 'left-to-right',\n justify: false,\n symbolShape: 'square',\n symbolSize: 16,\n symbolSpacing: 8,\n}\n\nexport const continuousColorsLegendDefaults: {\n length: NonNullable<ContinuousColorsLegendProps['length']>\n thickness: NonNullable<ContinuousColorsLegendProps['thickness']>\n direction: NonNullable<ContinuousColorsLegendProps['direction']>\n tickPosition: NonNullable<ContinuousColorsLegendProps['tickPosition']>\n tickSize: NonNullable<ContinuousColorsLegendProps['tickSize']>\n tickSpacing: NonNullable<ContinuousColorsLegendProps['tickSpacing']>\n tickOverlap: NonNullable<ContinuousColorsLegendProps['tickOverlap']>\n tickFormat: NonNullable<ContinuousColorsLegendProps['tickFormat']>\n titleAlign: NonNullable<ContinuousColorsLegendProps['titleAlign']>\n titleOffset: NonNullable<ContinuousColorsLegendProps['titleOffset']>\n} = {\n length: 200,\n thickness: 16,\n direction: 'row',\n tickPosition: 'after',\n tickSize: 4,\n tickSpacing: 3,\n tickOverlap: false,\n tickFormat: (value: number) => `${value}`,\n titleAlign: 'start',\n titleOffset: 4,\n}\n","import { scaleLinear } from 'd3-scale'\nimport { getValueFormatter } from '@nivo/core'\nimport { computeContinuousColorScaleColorStops } from '@nivo/colors'\nimport {\n BoxLegendSvgProps,\n ContinuousColorsLegendProps,\n LegendAnchor,\n LegendItemDirection,\n} from './types'\nimport { continuousColorsLegendDefaults } from './defaults'\n\nconst isObject = <T>(item: unknown): item is T =>\n typeof item === 'object' && !Array.isArray(item) && item !== null\n\nconst zeroPadding = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n}\n\nexport const computeDimensions = ({\n direction,\n itemsSpacing,\n padding: _padding,\n itemCount,\n itemWidth,\n itemHeight,\n}: Pick<BoxLegendSvgProps, 'direction' | 'padding'> &\n Record<'itemsSpacing' | 'itemCount' | 'itemWidth' | 'itemHeight', number>) => {\n if (typeof _padding !== 'number' && !isObject(_padding)) {\n throw new Error('Invalid property padding, must be one of: number, object')\n }\n\n const padding =\n typeof _padding === 'number'\n ? {\n top: _padding,\n right: _padding,\n bottom: _padding,\n left: _padding,\n }\n : {\n ...zeroPadding,\n ..._padding,\n }\n\n const horizontalPadding = padding.left + padding.right\n const verticalPadding = padding.top + padding.bottom\n let width = itemWidth + horizontalPadding\n let height = itemHeight + verticalPadding\n const spacing = (itemCount - 1) * itemsSpacing\n if (direction === 'row') {\n width = itemWidth * itemCount + spacing + horizontalPadding\n } else if (direction === 'column') {\n height = itemHeight * itemCount + spacing + verticalPadding\n }\n\n return { width, height, padding }\n}\n\nexport const computePositionFromAnchor = ({\n anchor,\n translateX,\n translateY,\n containerWidth,\n containerHeight,\n width,\n height,\n}: { anchor: LegendAnchor } & Record<\n 'translateX' | 'translateY' | 'containerWidth' | 'containerHeight' | 'width' | 'height',\n number\n>) => {\n let x = translateX\n let y = translateY\n\n switch (anchor) {\n case 'top':\n x += (containerWidth - width) / 2\n break\n\n case 'top-right':\n x += containerWidth - width\n break\n\n case 'right':\n x += containerWidth - width\n y += (containerHeight - height) / 2\n break\n\n case 'bottom-right':\n x += containerWidth - width\n y += containerHeight - height\n break\n\n case 'bottom':\n x += (containerWidth - width) / 2\n y += containerHeight - height\n break\n\n case 'bottom-left':\n y += containerHeight - height\n break\n\n case 'left':\n y += (containerHeight - height) / 2\n break\n\n case 'center':\n x += (containerWidth - width) / 2\n y += (containerHeight - height) / 2\n break\n }\n\n return { x, y }\n}\n\nexport const computeItemLayout = ({\n direction,\n justify,\n symbolSize,\n symbolSpacing,\n width,\n height,\n}: {\n direction: LegendItemDirection\n justify: boolean\n} & Record<'symbolSize' | 'symbolSpacing' | 'width' | 'height', number>) => {\n let symbolX\n let symbolY\n\n let labelX\n let labelY\n let labelAnchor: 'start' | 'middle' | 'end'\n let labelAlignment: 'alphabetic' | 'central' | 'text-before-edge'\n\n switch (direction) {\n case 'left-to-right':\n symbolX = 0\n symbolY = (height - symbolSize) / 2\n\n labelY = height / 2\n labelAlignment = 'central'\n if (justify) {\n labelX = width\n labelAnchor = 'end'\n } else {\n labelX = symbolSize + symbolSpacing\n labelAnchor = 'start'\n }\n break\n\n case 'right-to-left':\n symbolX = width - symbolSize\n symbolY = (height - symbolSize) / 2\n\n labelY = height / 2\n labelAlignment = 'central'\n if (justify) {\n labelX = 0\n labelAnchor = 'start'\n } else {\n labelX = width - symbolSize - symbolSpacing\n labelAnchor = 'end'\n }\n break\n\n case 'top-to-bottom':\n symbolX = (width - symbolSize) / 2\n symbolY = 0\n\n labelX = width / 2\n\n labelAnchor = 'middle'\n if (justify) {\n labelY = height\n labelAlignment = 'alphabetic'\n } else {\n labelY = symbolSize + symbolSpacing\n labelAlignment = 'text-before-edge'\n }\n break\n\n case 'bottom-to-top':\n symbolX = (width - symbolSize) / 2\n symbolY = height - symbolSize\n\n labelX = width / 2\n labelAnchor = 'middle'\n if (justify) {\n labelY = 0\n labelAlignment = 'text-before-edge'\n } else {\n labelY = height - symbolSize - symbolSpacing\n labelAlignment = 'alphabetic'\n }\n break\n }\n\n return {\n symbolX,\n symbolY,\n labelX,\n labelY,\n labelAnchor,\n labelAlignment,\n }\n}\n\nexport const computeContinuousColorsLegend = ({\n scale,\n ticks,\n length = continuousColorsLegendDefaults.length,\n thickness = continuousColorsLegendDefaults.thickness,\n direction = continuousColorsLegendDefaults.direction,\n tickPosition = continuousColorsLegendDefaults.tickPosition,\n tickSize = continuousColorsLegendDefaults.tickSize,\n tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n tickFormat = continuousColorsLegendDefaults.tickFormat,\n title,\n titleAlign = continuousColorsLegendDefaults.titleAlign,\n titleOffset = continuousColorsLegendDefaults.titleOffset,\n}: ContinuousColorsLegendProps) => {\n // left to right for `row`, bottom to top for `column`\n const domain = direction === 'column' ? [...scale.domain()].reverse() : scale.domain()\n\n const positionScale = scaleLinear().domain(domain)\n if (domain.length === 2) {\n // sequential, quantize\n positionScale.range([0, length])\n } else if (domain.length === 3) {\n // diverging\n positionScale.range([0, length / 2, length])\n }\n\n let values: number[]\n if ('thresholds' in scale) {\n // quantize\n values = [domain[0], ...scale.thresholds(), domain[1]]\n } else {\n // sequential, diverging\n values = Array.isArray(ticks) ? ticks : (scale as any).ticks(ticks)\n }\n\n const colorStops = computeContinuousColorScaleColorStops(scale, 32)\n\n const formatValue = getValueFormatter(tickFormat)\n\n const computedTicks: {\n x1: number\n y1: number\n x2: number\n y2: number\n text: string\n textX: number\n textY: number\n textHorizontalAlign: 'start' | 'middle' | 'end'\n textVerticalAlign: 'alphabetic' | 'central' | 'hanging'\n }[] = []\n\n let width: number\n let height: number\n\n const gradientX1 = 0\n let gradientY1 = 0\n let gradientX2 = 0\n const gradientY2 = 0\n\n let titleX: number\n let titleY: number\n let titleRotation: number\n let titleVerticalAlign: 'alphabetic' | 'hanging'\n\n if (direction === 'row') {\n width = length\n height = thickness\n\n gradientX2 = 1\n\n let y1: number\n let y2: number\n\n let textY: number\n const textHorizontalAlign = 'middle'\n let textVerticalAlign: 'alphabetic' | 'hanging'\n\n titleRotation = 0\n if (titleAlign === 'start') {\n titleX = 0\n } else if (titleAlign === 'middle') {\n titleX = length / 2\n } else {\n titleX = length\n }\n\n if (tickPosition === 'before') {\n y1 = -tickSize\n y2 = tickOverlap ? thickness : 0\n\n textY = -tickSize - tickSpacing\n textVerticalAlign = 'alphabetic'\n\n titleY = thickness + titleOffset\n titleVerticalAlign = 'hanging'\n } else {\n y1 = tickOverlap ? 0 : thickness\n y2 = thickness + tickSize\n\n textY = y2 + tickSpacing\n textVerticalAlign = 'hanging'\n\n titleY = -titleOffset\n titleVerticalAlign = 'alphabetic'\n }\n\n values.forEach(value => {\n const x = positionScale(value)\n\n computedTicks.push({\n x1: x,\n y1,\n x2: x,\n y2,\n text: formatValue(value),\n textX: x,\n textY,\n textHorizontalAlign,\n textVerticalAlign,\n })\n })\n } else {\n width = thickness\n height = length\n\n gradientY1 = 1\n\n let x1: number\n let x2: number\n\n let textX: number\n let textHorizontalAlign: 'start' | 'end'\n const textVerticalAlign = 'central'\n\n titleRotation = -90\n if (titleAlign === 'start') {\n titleY = length\n } else if (titleAlign === 'middle') {\n titleY = length / 2\n } else {\n titleY = 0\n }\n\n if (tickPosition === 'before') {\n x1 = -tickSize\n x2 = tickOverlap ? thickness : 0\n\n textX = x1 - tickSpacing\n textHorizontalAlign = 'end'\n\n titleX = thickness + titleOffset\n titleVerticalAlign = 'hanging'\n } else {\n x1 = tickOverlap ? 0 : thickness\n x2 = thickness + tickSize\n\n textX = x2 + tickSpacing\n textHorizontalAlign = 'start'\n\n titleX = -titleOffset\n titleVerticalAlign = 'alphabetic'\n }\n\n values.forEach(value => {\n const y = positionScale(value)\n\n computedTicks.push({\n x1,\n y1: y,\n x2,\n y2: y,\n text: formatValue(value),\n textX,\n textY: y,\n textHorizontalAlign,\n textVerticalAlign,\n })\n })\n }\n\n return {\n width,\n height,\n gradientX1,\n gradientY1,\n gradientX2,\n gradientY2,\n colorStops,\n ticks: computedTicks,\n titleText: title,\n titleX,\n titleY,\n titleRotation,\n titleHorizontalAlign: titleAlign,\n titleVerticalAlign,\n }\n}\n","import { Fragment } from 'react'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { computeContinuousColorsLegend } from '../compute'\nimport { ContinuousColorsLegendProps } from '../types'\nimport { continuousColorsLegendDefaults } from '../defaults'\n\nexport const ContinuousColorsLegendSvg = ({\n scale,\n ticks,\n length = continuousColorsLegendDefaults.length,\n thickness = continuousColorsLegendDefaults.thickness,\n direction = continuousColorsLegendDefaults.direction,\n tickPosition = continuousColorsLegendDefaults.tickPosition,\n tickSize = continuousColorsLegendDefaults.tickSize,\n tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n tickFormat = continuousColorsLegendDefaults.tickFormat,\n title,\n titleAlign = continuousColorsLegendDefaults.titleAlign,\n titleOffset = continuousColorsLegendDefaults.titleOffset,\n}: ContinuousColorsLegendProps) => {\n const {\n width,\n height,\n gradientX1,\n gradientY1,\n gradientX2,\n gradientY2,\n ticks: computedTicks,\n colorStops,\n titleText,\n titleX,\n titleY,\n titleRotation,\n titleVerticalAlign,\n titleHorizontalAlign,\n } = computeContinuousColorsLegend({\n scale,\n ticks,\n length,\n thickness,\n direction,\n tickPosition,\n tickSize,\n tickSpacing,\n tickOverlap,\n tickFormat,\n title,\n titleAlign,\n titleOffset,\n })\n\n const theme = useTheme()\n\n // remove commas, parentheses and spaces from stop color, this will then create a unique id depending on which color scheme you use.\n // so if you have two or more heatmaps on a single page with differing color schemes the legend will be correct for each.\n const id = `ContinuousColorsLegendSvgGradient.${direction}.${colorStops\n .map(stop => `${stop.stopColor.replace(/[(),\\s]/g, '')}.${stop.offset}`)\n .join('_')}`\n\n return (\n <g>\n <defs>\n <linearGradient\n id={id}\n x1={gradientX1}\n y1={gradientY1}\n x2={gradientX2}\n y2={gradientY2}\n >\n {colorStops.map(colorStop => (\n <stop\n key={colorStop.key}\n offset={colorStop.offset}\n stopColor={colorStop.stopColor}\n />\n ))}\n </linearGradient>\n </defs>\n {titleText && (\n <text\n transform={`translate(${titleX}, ${titleY}) rotate(${titleRotation})`}\n textAnchor={titleHorizontalAlign}\n dominantBaseline={titleVerticalAlign}\n style={theme.legends.title.text}\n >\n {titleText}\n </text>\n )}\n <rect width={width} height={height} fill={`url(#${id}`} />\n {computedTicks.map((tick, index) => (\n <Fragment key={index}>\n <line\n x1={tick.x1}\n y1={tick.y1}\n x2={tick.x2}\n y2={tick.y2}\n style={theme.legends.ticks.line}\n />\n <Text\n x={tick.textX}\n y={tick.textY}\n textAnchor={tick.textHorizontalAlign}\n dominantBaseline={tick.textVerticalAlign}\n style={theme.legends.ticks.text}\n >\n {tick.text}\n </Text>\n </Fragment>\n ))}\n </g>\n )\n}\n","import { AnchoredContinuousColorsLegendProps } from '../types'\nimport { computePositionFromAnchor } from '../compute'\nimport { continuousColorsLegendDefaults } from '../defaults'\nimport { ContinuousColorsLegendSvg } from './ContinuousColorsLegendSvg'\n\nexport const AnchoredContinuousColorsLegendSvg = ({\n containerWidth,\n containerHeight,\n anchor,\n translateX = 0,\n translateY = 0,\n length = continuousColorsLegendDefaults.length,\n thickness = continuousColorsLegendDefaults.thickness,\n direction = continuousColorsLegendDefaults.direction,\n ...legendProps\n}: AnchoredContinuousColorsLegendProps) => {\n let width: number\n let height: number\n if (direction === 'row') {\n width = length\n height = thickness\n } else {\n width = thickness\n height = length\n }\n\n const { x, y } = computePositionFromAnchor({\n anchor,\n translateX,\n translateY,\n containerWidth,\n containerHeight,\n width,\n height,\n })\n\n return (\n <g transform={`translate(${x}, ${y})`}>\n <ContinuousColorsLegendSvg\n length={length}\n thickness={thickness}\n direction={direction}\n {...legendProps}\n />\n </g>\n )\n}\n","import { useState, useCallback } from 'react'\nimport * as React from 'react'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { LegendSvgItemProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeItemLayout } from '../compute'\nimport { SymbolCircle, SymbolDiamond, SymbolSquare, SymbolTriangle } from './symbols'\n\ntype Style = Partial<{\n itemBackground: string\n itemOpacity: number\n itemTextColor: string\n symbolBorderColor: string\n symbolBorderWidth: number\n symbolSize: number\n}>\n\nconst symbolByShape = {\n circle: SymbolCircle,\n diamond: SymbolDiamond,\n square: SymbolSquare,\n triangle: SymbolTriangle,\n}\n\nexport const LegendSvgItem = ({\n x,\n y,\n width,\n height,\n data,\n direction = legendDefaults.itemDirection,\n justify = legendDefaults.justify,\n textColor,\n background = 'transparent',\n opacity = 1,\n symbolShape = legendDefaults.symbolShape,\n symbolSize = legendDefaults.symbolSize,\n symbolSpacing = legendDefaults.symbolSpacing,\n symbolBorderWidth = 0,\n symbolBorderColor = 'transparent',\n onClick,\n onMouseEnter,\n onMouseLeave,\n toggleSerie,\n effects,\n}: LegendSvgItemProps) => {\n const [style, setStyle] = useState<Style>({})\n const theme = useTheme()\n\n const handleMouseEnter = useCallback(\n (event: React.MouseEvent<SVGRectElement>) => {\n if (effects) {\n const applyEffects = effects.filter(({ on }) => on === 'hover')\n const style = applyEffects.reduce(\n (acc, effect) => ({\n ...acc,\n ...effect.style,\n }),\n {}\n )\n setStyle(style)\n }\n\n onMouseEnter?.(data, event)\n },\n [onMouseEnter, data, effects]\n )\n const handleMouseLeave = useCallback(\n (event: React.MouseEvent<SVGRectElement>) => {\n if (effects) {\n const applyEffects = effects.filter(({ on }) => on !== 'hover')\n const style = applyEffects.reduce(\n (acc, effect) => ({\n ...acc,\n ...effect.style,\n }),\n {}\n )\n setStyle(style)\n }\n\n onMouseLeave?.(data, event)\n },\n [onMouseLeave, data, effects]\n )\n\n const { symbolX, symbolY, labelX, labelY, labelAnchor, labelAlignment } = computeItemLayout({\n direction,\n justify,\n symbolSize: style.symbolSize ?? symbolSize,\n symbolSpacing,\n width,\n height,\n })\n\n const isInteractive = [onClick, onMouseEnter, onMouseLeave, toggleSerie].some(\n handler => handler !== undefined\n )\n\n const SymbolShape = typeof symbolShape === 'function' ? symbolShape : symbolByShape[symbolShape]\n\n return (\n <g\n transform={`translate(${x},${y})`}\n style={{\n opacity: style.itemOpacity ?? opacity,\n }}\n >\n <rect\n width={width}\n height={height}\n fill={style.itemBackground ?? background}\n style={{\n cursor: isInteractive ? 'pointer' : 'auto',\n }}\n onClick={event => {\n onClick?.(data, event)\n toggleSerie?.(data.id)\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n {React.createElement(SymbolShape, {\n id: data.id,\n x: symbolX,\n y: symbolY,\n size: style.symbolSize ?? symbolSize,\n fill: data.fill ?? data.color ?? 'black',\n borderWidth: style.symbolBorderWidth ?? symbolBorderWidth,\n borderColor: style.symbolBorderColor ?? symbolBorderColor,\n ...(data.hidden ? theme.legends.hidden.symbol : undefined),\n })}\n <Text\n textAnchor={labelAnchor}\n style={{\n ...theme.legends.text,\n fill: style.itemTextColor ?? textColor ?? theme.legends.text.fill ?? 'black',\n dominantBaseline: labelAlignment,\n pointerEvents: 'none',\n userSelect: 'none',\n ...(data.hidden ? theme.legends.hidden.text : undefined),\n }}\n x={labelX}\n y={labelY}\n >\n {data.label}\n </Text>\n </g>\n )\n}\n","import { LegendSvgItem } from './LegendSvgItem'\nimport { LegendSvgProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeDimensions } from '../compute'\n\nexport const LegendSvg = ({\n data,\n x,\n y,\n direction,\n padding: _padding = legendDefaults.padding,\n justify,\n effects,\n itemWidth,\n itemHeight,\n itemDirection = legendDefaults.itemDirection,\n itemsSpacing = legendDefaults.itemsSpacing,\n itemTextColor,\n itemBackground = 'transparent',\n itemOpacity = 1,\n symbolShape,\n symbolSize,\n symbolSpacing,\n symbolBorderWidth,\n symbolBorderColor,\n onClick,\n onMouseEnter,\n onMouseLeave,\n toggleSerie,\n}: LegendSvgProps) => {\n const { padding } = computeDimensions({\n itemCount: data.length,\n itemWidth,\n itemHeight,\n itemsSpacing,\n direction,\n padding: _padding,\n })\n\n const xStep = direction === 'row' ? itemWidth + itemsSpacing : 0\n const yStep = direction === 'column' ? itemHeight + itemsSpacing : 0\n\n return (\n <g transform={`translate(${x},${y})`}>\n {data.map((data, i) => (\n <LegendSvgItem\n key={i}\n data={data}\n x={i * xStep + padding.left}\n y={i * yStep + padding.top}\n width={itemWidth}\n height={itemHeight}\n direction={itemDirection}\n justify={justify}\n effects={effects}\n textColor={itemTextColor}\n background={itemBackground}\n opacity={itemOpacity}\n symbolShape={symbolShape}\n symbolSize={symbolSize}\n symbolSpacing={symbolSpacing}\n symbolBorderWidth={symbolBorderWidth}\n symbolBorderColor={symbolBorderColor}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n toggleSerie={toggleSerie}\n />\n ))}\n </g>\n )\n}\n","import { LegendSvg } from './LegendSvg'\nimport { BoxLegendSvgProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeDimensions, computePositionFromAnchor } from '../compute'\n\nexport const BoxLegendSvg = ({\n data,\n containerWidth,\n containerHeight,\n translateX = legendDefaults.translateX,\n translateY = legendDefaults.translateY,\n anchor,\n direction,\n padding = legendDefaults.padding,\n justify,\n itemsSpacing = legendDefaults.itemsSpacing,\n itemWidth,\n itemHeight,\n itemDirection,\n itemTextColor,\n itemBackground,\n itemOpacity,\n symbolShape,\n symbolSize,\n symbolSpacing,\n symbolBorderWidth,\n symbolBorderColor,\n onClick,\n onMouseEnter,\n onMouseLeave,\n toggleSerie,\n effects,\n}: BoxLegendSvgProps) => {\n const { width, height } = computeDimensions({\n itemCount: data.length,\n itemsSpacing,\n itemWidth,\n itemHeight,\n direction,\n padding,\n })\n\n const { x, y } = computePositionFromAnchor({\n anchor,\n translateX,\n translateY,\n containerWidth,\n containerHeight,\n width,\n height,\n })\n\n return (\n <LegendSvg\n data={data}\n x={x}\n y={y}\n direction={direction}\n padding={padding}\n justify={justify}\n effects={effects}\n itemsSpacing={itemsSpacing}\n itemWidth={itemWidth}\n itemHeight={itemHeight}\n itemDirection={itemDirection}\n itemTextColor={itemTextColor}\n itemBackground={itemBackground}\n itemOpacity={itemOpacity}\n symbolShape={symbolShape}\n symbolSize={symbolSize}\n symbolSpacing={symbolSpacing}\n symbolBorderWidth={symbolBorderWidth}\n symbolBorderColor={symbolBorderColor}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n toggleSerie={typeof toggleSerie === 'boolean' ? undefined : toggleSerie}\n />\n )\n}\n","import { degreesToRadians } from '@nivo/core'\nimport { Theme } from '@nivo/theming'\nimport { setCanvasFont, drawCanvasText } from '@nivo/text'\nimport {\n computeDimensions,\n computePositionFromAnchor,\n computeItemLayout,\n computeContinuousColorsLegend,\n} from './compute'\nimport { AnchoredContinuousColorsLegendProps, LegendCanvasProps } from './types'\nimport { continuousColorsLegendDefaults } from './defaults'\n\nconst textAlignMapping = {\n start: 'left',\n middle: 'center',\n end: 'right',\n} as const\n\nexport const renderLegendToCanvas = (\n ctx: CanvasRenderingContext2D,\n {\n data,\n\n containerWidth,\n containerHeight,\n translateX = 0,\n translateY = 0,\n anchor,\n direction,\n padding: _padding = 0,\n justify = false,\n\n // items\n itemsSpacing = 0,\n itemWidth,\n itemHeight,\n itemDirection = 'left-to-right',\n itemTextColor,\n\n // symbol\n symbolSize = 16,\n symbolSpacing = 8,\n // @todo add support for shapes\n // symbolShape = LegendSvgItem.defaultProps.symbolShape,\n\n theme,\n }: LegendCanvasProps\n) => {\n const { width, height, padding } = computeDimensions({\n itemCount: data.length,\n itemWidth,\n itemHeight,\n itemsSpacing,\n direction,\n padding: _padding,\n })\n\n const { x, y } = computePositionFromAnchor({\n anchor,\n translateX,\n translateY,\n containerWidth,\n containerHeight,\n width,\n height,\n })\n\n const xStep = direction === 'row' ? itemWidth + itemsSpacing : 0\n const yStep = direction === 'column' ? itemHeight + itemsSpacing : 0\n\n ctx.save()\n ctx.translate(x, y)\n\n setCanvasFont(ctx, theme.legends.text)\n\n data.forEach((d, i) => {\n const itemX = i * xStep + padding.left\n const itemY = i * yStep + padding.top\n\n const { symbolX, symbolY, labelX, labelY, labelAnchor, labelAlignment } = computeItemLayout(\n {\n direction: itemDirection,\n justify,\n symbolSize,\n symbolSpacing,\n width: itemWidth,\n height: itemHeight,\n }\n )\n\n ctx.fillStyle = d.color ?? 'black'\n ctx.fillRect(itemX + symbolX, itemY + symbolY, symbolSize, symbolSize)\n\n ctx.textAlign = textAlignMapping[labelAnchor]\n if (labelAlignment === 'central') {\n ctx.textBaseline = 'middle'\n }\n\n drawCanvasText(\n ctx,\n {\n ...theme.legends.text,\n fill: itemTextColor ?? theme.legends.text.fill,\n },\n String(d.label),\n itemX + labelX,\n itemY + labelY\n )\n })\n\n ctx.restore()\n}\n\nexport const renderContinuousColorLegendToCanvas = (\n ctx: CanvasRenderingContext2D,\n {\n containerWidth,\n containerHeight,\n anchor,\n translateX = 0,\n translateY = 0,\n scale,\n length = continuousColorsLegendDefaults.length,\n thickness = continuousColorsLegendDefaults.thickness,\n direction = continuousColorsLegendDefaults.direction,\n ticks: _ticks,\n tickPosition = continuousColorsLegendDefaults.tickPosition,\n tickSize = continuousColorsLegendDefaults.tickSize,\n tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n tickFormat = continuousColorsLegendDefaults.tickFormat,\n title,\n titleAlign = continuousColorsLegendDefaults.titleAlign,\n titleOffset = continuousColorsLegendDefaults.titleOffset,\n theme,\n }: AnchoredContinuousColorsLegendProps & {\n theme: Theme\n }\n) => {\n const {\n width,\n height,\n gradientX1,\n gradientY1,\n gradientX2,\n gradientY2,\n colorStops,\n ticks,\n titleText,\n titleX,\n titleY,\n titleRotation,\n titleVerticalAlign,\n titleHorizontalAlign,\n } = computeContinuousColorsLegend({\n scale,\n ticks: _ticks,\n length,\n thickness,\n direction,\n tickPosition,\n tickSize,\n tickSpacing,\n tickOverlap,\n tickFormat,\n title,\n titleAlign,\n titleOffset,\n })\n\n const { x, y } = computePositionFromAnchor({\n anchor,\n translateX,\n translateY,\n containerWidth,\n containerHeight,\n width,\n height,\n })\n\n const initialStyles = {\n font: ctx.font,\n textAlign: ctx.textAlign,\n textBaseline: ctx.textBaseline,\n }\n ctx.save()\n\n ctx.translate(x, y)\n\n const gradient = ctx.createLinearGradient(\n gradientX1 * width,\n gradientY1 * height,\n gradientX2 * width,\n gradientY2 * height\n )\n colorStops.forEach(colorStop => {\n gradient.addColorStop(colorStop.offset, colorStop.stopColor)\n })\n\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, width, height)\n\n setCanvasFont(ctx, theme.legends.ticks.text)\n\n const tickLineWidth = theme.legends.ticks.line.strokeWidth ?? 0\n const shouldRenderTickLine = typeof tickLineWidth !== 'string' && tickLineWidth > 0\n ticks.forEach(tick => {\n if (shouldRenderTickLine) {\n ctx.lineWidth = tickLineWidth\n if (theme.axis.ticks.line.stroke) {\n ctx.strokeStyle = theme.axis.ticks.line.stroke\n }\n ctx.lineCap = 'square'\n\n ctx.beginPath()\n ctx.moveTo(tick.x1, tick.y1)\n ctx.lineTo(tick.x2, tick.y2)\n ctx.stroke()\n }\n\n ctx.textAlign = tick.textHorizontalAlign === 'middle' ? 'center' : tick.textHorizontalAlign\n ctx.textBaseline = tick.textVerticalAlign === 'central' ? 'middle' : tick.textVerticalAlign\n\n drawCanvasText(ctx, theme.legends.ticks.text, tick.text, tick.textX, tick.textY)\n })\n\n if (titleText) {\n ctx.save()\n ctx.translate(titleX, titleY)\n ctx.rotate(degreesToRadians(titleRotation))\n\n setCanvasFont(ctx, theme.legends.title.text)\n ctx.textAlign = titleHorizontalAlign === 'middle' ? 'center' : titleHorizontalAlign\n ctx.textBaseline = titleVerticalAlign\n\n drawCanvasText(ctx, theme.legends.title.text, titleText)\n\n ctx.restore()\n }\n\n ctx.restore()\n\n ctx.font = initialStyles.font\n ctx.textAlign = initialStyles.textAlign\n ctx.textBaseline = initialStyles.textBaseline\n}\n","import { useMemo } from 'react'\n\ntype Scale = {\n (value: number): number\n invertExtent: (value: number) => [number, number]\n range: () => number[]\n}\n\nexport const useQuantizeColorScaleLegendData = ({\n scale,\n domain: overriddenDomain,\n reverse = false,\n valueFormat = v => v,\n separator = ' - ',\n}: {\n scale: Scale\n domain?: number[]\n reverse?: boolean\n valueFormat?: <T, U>(value: T) => T | U\n separator?: string\n}) => {\n return useMemo(() => {\n const domain = overriddenDomain ?? scale.range()\n\n const items = domain.map((domainValue, index) => {\n const [start, end] = scale.invertExtent(domainValue)\n\n return {\n id: domainValue,\n index,\n extent: [start, end],\n label: `${valueFormat(start)}${separator}${valueFormat(end)}`,\n value: scale(start),\n color: domainValue,\n }\n })\n\n if (reverse) items.reverse()\n\n return items\n }, [overriddenDomain, scale, reverse, separator, valueFormat])\n}\n"],"names":["SymbolCircle","_ref","x","y","size","fill","_ref$opacity","opacity","_ref$borderWidth","borderWidth","_ref$borderColor","borderColor","_jsx","r","cx","cy","strokeWidth","stroke","style","pointerEvents","SymbolDiamond","transform","children","d","SymbolSquare","width","height","SymbolTriangle","legendDefaults","translateX","translateY","padding","itemsSpacing","itemDirection","justify","symbolShape","symbolSize","symbolSpacing","continuousColorsLegendDefaults","length","thickness","direction","tickPosition","tickSize","tickSpacing","tickOverlap","tickFormat","value","titleAlign","titleOffset","zeroPadding","top","right","bottom","left","computeDimensions","item","_padding","itemCount","itemWidth","itemHeight","Array","isArray","Error","_extends","horizontalPadding","verticalPadding","spacing","computePositionFromAnchor","_ref2","anchor","containerWidth","containerHeight","computeItemLayout","_ref3","symbolX","symbolY","labelX","labelY","labelAnchor","labelAlignment","computeContinuousColorsLegend","_ref4","values","scale","ticks","_ref4$length","_ref4$thickness","_ref4$direction","_ref4$tickPosition","_ref4$tickSize","_ref4$tickSpacing","_ref4$tickOverlap","_ref4$tickFormat","title","_ref4$titleAlign","_ref4$titleOffset","domain","concat","reverse","positionScale","scaleLinear","range","thresholds","titleX","titleY","titleRotation","titleVerticalAlign","colorStops","computeContinuousColorScaleColorStops","formatValue","getValueFormatter","computedTicks","gradientY1","gradientX2","y1","y2","textY","textVerticalAlign","forEach","push","x1","x2","text","textX","textHorizontalAlign","gradientX1","gradientY2","titleText","titleHorizontalAlign","ContinuousColorsLegendSvg","_ref$length","_ref$thickness","_ref$direction","_ref$tickPosition","_ref$tickSize","_ref$tickSpacing","_ref$tickOverlap","_ref$tickFormat","_ref$titleAlign","_ref$titleOffset","_computeContinuousCol","theme","useTheme","id","map","stop","stopColor","replace","offset","join","_jsxs","colorStop","key","textAnchor","dominantBaseline","legends","tick","index","Fragment","line","Text","AnchoredContinuousColorsLegendSvg","_ref$translateX","_ref$translateY","legendProps","_objectWithoutPropertiesLoose","_excluded","_computePositionFromA","symbolByShape","circle","diamond","square","triangle","LegendSvgItem","_style$symbolSize","_style$itemOpacity","_style$itemBackground","_style$symbolSize2","_data$fill","_style$symbolBorderWi","_style$symbolBorderCo","_ref5","_ref6","_style$itemTextColor","data","_ref$justify","textColor","_ref$background","background","_ref$symbolShape","_ref$symbolSize","_ref$symbolSpacing","_ref$symbolBorderWidt","symbolBorderWidth","_ref$symbolBorderColo","symbolBorderColor","onClick","onMouseEnter","onMouseLeave","toggleSerie","effects","_useState","useState","setStyle","handleMouseEnter","useCallback","event","filter","on","reduce","acc","effect","handleMouseLeave","_computeItemLayout","isInteractive","some","handler","undefined","SymbolShape","itemOpacity","itemBackground","cursor","React","createElement","color","hidden","symbol","itemTextColor","userSelect","label","LegendSvg","_ref$padding","_ref$itemDirection","_ref$itemsSpacing","_ref$itemBackground","_ref$itemOpacity","xStep","yStep","i","BoxLegendSvg","_computeDimensions","textAlignMapping","start","middle","end","renderLegendToCanvas","ctx","save","translate","setCanvasFont","_d$color","itemX","itemY","fillStyle","fillRect","textAlign","textBaseline","drawCanvasText","String","restore","renderContinuousColorLegendToCanvas","_theme$legends$ticks$","_ref2$translateX","_ref2$translateY","_ref2$length","_ref2$thickness","_ref2$direction","_ticks","_ref2$tickPosition","_ref2$tickSize","_ref2$tickSpacing","_ref2$tickOverlap","_ref2$tickFormat","_ref2$titleAlign","_ref2$titleOffset","_computePositionFromA2","initialStyles","font","gradient","createLinearGradient","addColorStop","tickLineWidth","shouldRenderTickLine","lineWidth","axis","strokeStyle","lineCap","beginPath","moveTo","lineTo","rotate","degreesToRadians","useQuantizeColorScaleLegendData","overriddenDomain","_ref$reverse","_ref$valueFormat","valueFormat","v","_ref$separator","separator","useMemo","items","domainValue","_scale$invertExtent","invertExtent","extent"],"mappings":"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"}