@nivo/legends
Version:
legend components for nivo dataviz library
1 lines • 63.7 kB
Source Map (JSON)
{"version":3,"file":"nivo-legends.cjs.js","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/LegendSvgItem.tsx","../src/svg/LegendSvg.tsx","../src/canvas.ts","../src/svg/AnchoredContinuousColorsLegendSvg.tsx","../src/svg/BoxLegendSvg.tsx","../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 { 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 { 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 { 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 { 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 { 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","jsx","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","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","textAlignMapping","start","middle","end","_ref$translateX","_ref$translateY","legendProps","_objectWithoutPropertiesLoose","_excluded","_computePositionFromA","_computeDimensions","ctx","_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","textAlign","textBaseline","save","translate","gradient","createLinearGradient","addColorStop","fillStyle","fillRect","setCanvasFont","tickLineWidth","shouldRenderTickLine","lineWidth","axis","strokeStyle","lineCap","beginPath","moveTo","lineTo","drawCanvasText","rotate","degreesToRadians","restore","_d$color","itemX","itemY","String","overriddenDomain","_ref$reverse","_ref$valueFormat","valueFormat","v","_ref$separator","separator","useMemo","items","domainValue","_scale$invertExtent","invertExtent","extent"],"mappings":"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"}