UNPKG

@nivo/axes

Version:
1 lines 40.4 kB
{"version":3,"file":"nivo-axes.mjs","sources":["../src/compute.ts","../src/components/AxisTick.tsx","../src/defaults.ts","../src/components/Axis.tsx","../src/props.ts","../src/components/Axes.tsx","../src/components/GridLine.tsx","../src/components/GridLines.tsx","../src/components/Grid.tsx","../src/canvas.ts"],"sourcesContent":["import { timeFormat } from 'd3-time-format'\nimport { format as d3Format } from 'd3-format'\n// @ts-expect-error no types\nimport { textPropsByEngine } from '@nivo/core'\nimport { ScaleValue, AnyScale, TicksSpec, getScaleTicks, centerScale } from '@nivo/scales'\nimport { Point, ValueFormatter, Line } from './types'\n\nconst isArray = <T>(value: unknown): value is T[] => Array.isArray(value)\n\nexport const computeCartesianTicks = <Value extends ScaleValue>({\n axis,\n scale,\n ticksPosition,\n tickValues,\n tickSize,\n tickPadding,\n tickRotation,\n truncateTickAt,\n engine = 'svg',\n}: {\n axis: 'x' | 'y'\n scale: AnyScale\n ticksPosition?: 'after' | 'before'\n tickValues?: TicksSpec<Value>\n tickSize: number\n tickPadding: number\n tickRotation: number\n truncateTickAt?: number\n engine?: 'svg' | 'canvas'\n}) => {\n const values = getScaleTicks<Value>(scale, tickValues)\n\n const textProps = textPropsByEngine[engine]\n\n const position = 'bandwidth' in scale ? centerScale(scale) : scale\n const line = { lineX: 0, lineY: 0 }\n const text = { textX: 0, textY: 0 }\n\n const isRTL = typeof document === 'object' ? document.dir === 'rtl' : false\n let translate: (value: Value) => Point\n let textAlign: CanvasTextAlign = textProps.align.center\n let textBaseline: CanvasTextBaseline = textProps.baseline.center\n\n if (axis === 'x') {\n translate = d => ({ x: position(d) ?? 0, y: 0 })\n\n line.lineY = tickSize * (ticksPosition === 'after' ? 1 : -1)\n text.textY = (tickSize + tickPadding) * (ticksPosition === 'after' ? 1 : -1)\n\n if (ticksPosition === 'after') {\n textBaseline = textProps.baseline.top\n } else {\n textBaseline = textProps.baseline.bottom\n }\n\n if (tickRotation === 0) {\n textAlign = textProps.align.center\n } else if (\n (ticksPosition === 'after' && tickRotation < 0) ||\n (ticksPosition === 'before' && tickRotation > 0)\n ) {\n textAlign = textProps.align[isRTL ? 'left' : 'right']\n textBaseline = textProps.baseline.center\n } else if (\n (ticksPosition === 'after' && tickRotation > 0) ||\n (ticksPosition === 'before' && tickRotation < 0)\n ) {\n textAlign = textProps.align[isRTL ? 'right' : 'left']\n textBaseline = textProps.baseline.center\n }\n } else {\n translate = d => ({ x: 0, y: position(d) ?? 0 })\n\n line.lineX = tickSize * (ticksPosition === 'after' ? 1 : -1)\n text.textX = (tickSize + tickPadding) * (ticksPosition === 'after' ? 1 : -1)\n\n if (ticksPosition === 'after') {\n textAlign = textProps.align.left\n } else {\n textAlign = textProps.align.right\n }\n }\n\n const truncateTick = (value: string) => {\n const valueLength = String(value).length\n\n if (truncateTickAt && truncateTickAt > 0 && valueLength > truncateTickAt) {\n return `${String(value).slice(0, truncateTickAt).concat('...')}`\n }\n return `${value}`\n }\n\n const ticks = values.map((value: Value) => {\n const processedValue =\n typeof value === 'string' ? (truncateTick(value) as unknown as Value) : value\n return {\n key: value instanceof Date ? `${value.valueOf()}` : `${value}`,\n value: processedValue,\n ...translate(value),\n ...line,\n ...text,\n }\n })\n\n return {\n ticks,\n textAlign,\n textBaseline,\n }\n}\n\nexport const getFormatter = <Value extends ScaleValue>(\n format: string | ValueFormatter<Value> | undefined,\n scale: AnyScale\n): ValueFormatter<Value> | undefined => {\n if (typeof format === 'undefined' || typeof format === 'function') return format\n\n if (scale.type === 'time') {\n const formatter = timeFormat(format)\n\n return ((d: any) => formatter(d instanceof Date ? d : new Date(d))) as ValueFormatter<Value>\n }\n\n return d3Format(format) as unknown as ValueFormatter<Value>\n}\n\nexport const computeGridLines = <Value extends ScaleValue>({\n width,\n height,\n scale,\n axis,\n values: _values,\n}: {\n width: number\n height: number\n scale: AnyScale\n axis: 'x' | 'y'\n values?: TicksSpec<Value>\n}) => {\n const lineValues = isArray<number>(_values) ? _values : undefined\n const values = lineValues || getScaleTicks<Value>(scale, _values)\n const position = 'bandwidth' in scale ? centerScale(scale) : scale\n\n const lines: Line[] =\n axis === 'x'\n ? values.map((value: Value) => ({\n key: value instanceof Date ? `${value.valueOf()}` : `${value}`,\n x1: position(value) ?? 0,\n x2: position(value) ?? 0,\n y1: 0,\n y2: height,\n }))\n : values.map((value: Value) => ({\n key: value instanceof Date ? `${value.valueOf()}` : `${value}`,\n x1: 0,\n x2: width,\n y1: position(value) ?? 0,\n y2: position(value) ?? 0,\n }))\n\n return lines\n}\n","import { useMemo, memo } from 'react'\nimport * as React from 'react'\nimport { animated } from '@react-spring/web'\nimport { Text } from '@nivo/text'\nimport { ScaleValue } from '@nivo/scales'\nimport { AxisTickProps } from '../types'\n\nconst AxisTick = <Value extends ScaleValue>({\n value: _value,\n format,\n lineX,\n lineY,\n onClick,\n textBaseline,\n textAnchor,\n theme,\n animatedProps,\n}: AxisTickProps<Value>) => {\n const value = format?.(_value) ?? _value\n\n const props = useMemo(() => {\n const style = { opacity: animatedProps.opacity }\n\n if (!onClick) {\n return { style }\n }\n\n return {\n style: { ...style, cursor: 'pointer' },\n onClick: (event: React.MouseEvent<SVGGElement, MouseEvent>) => onClick(event, value),\n }\n }, [animatedProps.opacity, onClick, value])\n\n return (\n <animated.g transform={animatedProps.transform} {...props}>\n <line x1={0} x2={lineX} y1={0} y2={lineY} style={theme.line} />\n <Text\n dominantBaseline={textBaseline}\n textAnchor={textAnchor}\n transform={animatedProps.textTransform}\n style={theme.text}\n >\n {`${value}`}\n </Text>\n </animated.g>\n )\n}\n\nconst memoizedAxisTick = memo(AxisTick) as typeof AxisTick\n\nexport { memoizedAxisTick as AxisTick }\n","import { AxisProps } from './types'\n\nexport const defaultAxisProps: Pick<\n Required<AxisProps>,\n 'tickSize' | 'tickPadding' | 'tickRotation' | 'legendPosition' | 'legendOffset'\n> = {\n tickSize: 5,\n tickPadding: 5,\n tickRotation: 0,\n legendPosition: 'middle',\n legendOffset: 0,\n}\n","import { useMotionConfig } from '@nivo/core'\nimport { useTheme, useExtendedAxisTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { AnyScale, ScaleValue } from '@nivo/scales'\nimport { animated, useSpring, useTransition } from '@react-spring/web'\nimport * as React from 'react'\nimport { memo, useCallback, useMemo } from 'react'\nimport { computeCartesianTicks, getFormatter } from '../compute'\nimport { AxisProps } from '../types'\nimport { AxisTick } from './AxisTick'\nimport { defaultAxisProps } from '../defaults'\n\nexport const NonMemoizedAxis = <Value extends ScaleValue>({\n axis,\n scale,\n x = 0,\n y = 0,\n length,\n ticksPosition,\n tickValues,\n tickSize = defaultAxisProps.tickSize,\n tickPadding = defaultAxisProps.tickPadding,\n tickRotation = defaultAxisProps.tickRotation,\n format,\n renderTick = AxisTick,\n truncateTickAt,\n legend,\n legendPosition = defaultAxisProps.legendPosition,\n legendOffset = defaultAxisProps.legendOffset,\n style,\n onClick,\n ariaHidden,\n}: AxisProps<Value> & {\n axis: 'x' | 'y'\n scale: AnyScale\n x?: number\n y?: number\n length: number\n onClick?: (event: React.MouseEvent<SVGGElement, MouseEvent>, value: Value | string) => void\n}) => {\n const theme = useTheme()\n const axisTheme = useExtendedAxisTheme(theme.axis, style)\n\n const formatValue = useMemo(() => getFormatter(format, scale), [format, scale])\n\n const { ticks, textAlign, textBaseline } = computeCartesianTicks({\n axis,\n scale,\n ticksPosition,\n tickValues,\n tickSize,\n tickPadding,\n tickRotation,\n truncateTickAt,\n })\n\n let legendNode = null\n if (legend !== undefined) {\n let legendX = 0\n let legendY = 0\n let legendRotation = 0\n let textAnchor\n\n if (axis === 'y') {\n legendRotation = -90\n legendX = legendOffset\n if (legendPosition === 'start') {\n textAnchor = 'start'\n legendY = length\n } else if (legendPosition === 'middle') {\n textAnchor = 'middle'\n legendY = length / 2\n } else if (legendPosition === 'end') {\n textAnchor = 'end'\n }\n } else {\n legendY = legendOffset\n if (legendPosition === 'start') {\n textAnchor = 'start'\n } else if (legendPosition === 'middle') {\n textAnchor = 'middle'\n legendX = length / 2\n } else if (legendPosition === 'end') {\n textAnchor = 'end'\n legendX = length\n }\n }\n\n legendNode = (\n <>\n <Text\n transform={`translate(${legendX}, ${legendY}) rotate(${legendRotation})`}\n textAnchor={textAnchor}\n style={{\n ...axisTheme.legend.text,\n dominantBaseline: 'central',\n }}\n >\n {legend}\n </Text>\n </>\n )\n }\n\n const { animate, config: springConfig } = useMotionConfig()\n\n const animatedProps = useSpring({\n transform: `translate(${x},${y})`,\n lineX2: axis === 'x' ? length : 0,\n lineY2: axis === 'x' ? 0 : length,\n config: springConfig,\n immediate: !animate,\n })\n\n const getAnimatedProps = useCallback(\n (tick: (typeof ticks)[0]) => {\n return {\n opacity: 1,\n transform: `translate(${tick.x},${tick.y})`,\n textTransform: `translate(${tick.textX},${tick.textY}) rotate(${tickRotation})`,\n }\n },\n [tickRotation]\n )\n const getFromAnimatedProps = useCallback(\n (tick: (typeof ticks)[0]) => ({\n opacity: 0,\n transform: `translate(${tick.x},${tick.y})`,\n textTransform: `translate(${tick.textX},${tick.textY}) rotate(${tickRotation})`,\n }),\n [tickRotation]\n )\n\n const transition = useTransition<\n (typeof ticks)[0],\n { opacity: number; transform: string; textTransform: string }\n >(ticks, {\n keys: tick => tick.key,\n initial: getAnimatedProps,\n from: getFromAnimatedProps,\n enter: getAnimatedProps,\n update: getAnimatedProps,\n leave: {\n opacity: 0,\n },\n config: springConfig,\n immediate: !animate,\n })\n\n return (\n <animated.g transform={animatedProps.transform} aria-hidden={ariaHidden}>\n {transition((transitionProps, tick, _state, tickIndex) => {\n return React.createElement(renderTick, {\n tickIndex,\n format: formatValue,\n rotate: tickRotation,\n textBaseline,\n textAnchor: textAlign,\n truncateTickAt: truncateTickAt,\n animatedProps: transitionProps,\n theme: axisTheme.ticks,\n ...tick,\n ...(onClick ? { onClick } : {}),\n })\n })}\n <animated.line\n style={axisTheme.domain.line}\n x1={0}\n x2={animatedProps.lineX2}\n y1={0}\n y2={animatedProps.lineY2}\n />\n {legendNode}\n </animated.g>\n )\n}\n\nexport const Axis = memo(NonMemoizedAxis) as typeof NonMemoizedAxis\n","export const positions = ['top', 'right', 'bottom', 'left'] as const\n","import { memo } from 'react'\nimport { ScaleValue, AnyScale } from '@nivo/scales'\nimport { Axis } from './Axis'\nimport { positions } from '../props'\nimport { AxisProps } from '../types'\n\nexport const Axes = memo(\n <X extends ScaleValue, Y extends ScaleValue>({\n xScale,\n yScale,\n width,\n height,\n top,\n right,\n bottom,\n left,\n }: {\n xScale: AnyScale\n yScale: AnyScale\n width: number\n height: number\n top?: AxisProps<X> | null\n right?: AxisProps<Y> | null\n bottom?: AxisProps<X> | null\n left?: AxisProps<Y> | null\n }) => {\n const axes = { top, right, bottom, left }\n\n return (\n <>\n {positions.map(position => {\n const axis = axes[position] as typeof position extends 'bottom' | 'top'\n ? AxisProps<X> | undefined\n : AxisProps<Y> | undefined\n\n if (!axis) return null\n\n const isXAxis = position === 'top' || position === 'bottom'\n const ticksPosition =\n position === 'top' || position === 'left' ? 'before' : 'after'\n\n return (\n <Axis\n key={position}\n {...axis}\n axis={isXAxis ? 'x' : 'y'}\n x={position === 'right' ? width : 0}\n y={position === 'bottom' ? height : 0}\n scale={isXAxis ? xScale : yScale}\n length={isXAxis ? width : height}\n ticksPosition={ticksPosition}\n truncateTickAt={axis.truncateTickAt}\n />\n )\n })}\n </>\n )\n }\n)\n","import { memo, SVGAttributes } from 'react'\nimport { SpringValues, animated } from '@react-spring/web'\nimport { useTheme } from '@nivo/theming'\n\nexport const GridLine = memo(\n ({\n animatedProps,\n }: {\n animatedProps: SpringValues<{\n opacity: number\n x1: number\n x2: number\n y1: number\n y2: number\n }>\n }) => {\n const theme = useTheme()\n\n return (\n <animated.line\n {...animatedProps}\n {...(theme.grid.line as SVGAttributes<SVGLineElement>)}\n />\n )\n }\n)\n","import { memo } from 'react'\nimport { useTransition } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { GridLine } from './GridLine'\nimport { Line } from '../types'\n\nexport const GridLines = memo(({ lines }: { lines: Line[] }) => {\n const { animate, config: springConfig } = useMotionConfig()\n\n const transition = useTransition<Line, Record<'opacity' | 'x1' | 'x2' | 'y1' | 'y2', number>>(\n lines,\n {\n keys: line => line.key,\n initial: line => ({\n opacity: 1,\n x1: line.x1,\n x2: line.x2,\n y1: line.y1,\n y2: line.y2,\n }),\n from: line => ({\n opacity: 0,\n x1: line.x1,\n x2: line.x2,\n y1: line.y1,\n y2: line.y2,\n }),\n enter: line => ({\n opacity: 1,\n x1: line.x1,\n x2: line.x2,\n y1: line.y1,\n y2: line.y2,\n }),\n update: line => ({\n opacity: 1,\n x1: line.x1,\n x2: line.x2,\n y1: line.y1,\n y2: line.y2,\n }),\n leave: {\n opacity: 0,\n },\n config: springConfig,\n immediate: !animate,\n }\n )\n\n return (\n <g>\n {transition((animatedProps, line) => (\n <GridLine {...line} key={line.key} animatedProps={animatedProps} />\n ))}\n </g>\n )\n})\n","import { useMemo, memo } from 'react'\nimport { ScaleValue, AnyScale, TicksSpec } from '@nivo/scales'\nimport { GridLines } from './GridLines'\nimport { computeGridLines } from '../compute'\n\nexport const Grid = memo(\n <X extends ScaleValue, Y extends ScaleValue>({\n width,\n height,\n xScale,\n yScale,\n xValues,\n yValues,\n }: {\n width: number\n height: number\n xScale?: AnyScale | null\n xValues?: TicksSpec<X>\n yScale?: AnyScale | null\n yValues?: TicksSpec<Y>\n }) => {\n const xLines = useMemo(() => {\n if (!xScale) return false\n\n return computeGridLines({\n width,\n height,\n scale: xScale,\n axis: 'x',\n values: xValues,\n })\n }, [xScale, xValues, width, height])\n\n const yLines = useMemo(() => {\n if (!yScale) return false\n\n return computeGridLines({\n width,\n height,\n scale: yScale,\n axis: 'y',\n values: yValues,\n })\n }, [height, width, yScale, yValues])\n\n return (\n <>\n {xLines && <GridLines lines={xLines} />}\n {yLines && <GridLines lines={yLines} />}\n </>\n )\n }\n)\n","import { degreesToRadians } from '@nivo/core'\nimport { Theme, PartialTheme, extendAxisTheme } from '@nivo/theming'\nimport { setCanvasFont, drawCanvasText } from '@nivo/text'\nimport { ScaleValue, AnyScale, TicksSpec } from '@nivo/scales'\nimport { defaultAxisProps } from './defaults'\nimport { computeCartesianTicks, getFormatter, computeGridLines } from './compute'\nimport { positions } from './props'\nimport { AxisLegendPosition, CanvasAxisProps, ValueFormatter } from './types'\n\nexport const renderAxisToCanvas = <Value extends ScaleValue>(\n ctx: CanvasRenderingContext2D,\n {\n axis,\n scale,\n x = 0,\n y = 0,\n length,\n ticksPosition,\n tickValues,\n tickSize = defaultAxisProps.tickSize,\n tickPadding = defaultAxisProps.tickPadding,\n tickRotation = defaultAxisProps.tickRotation,\n format: _format,\n legend,\n legendPosition = defaultAxisProps.legendPosition,\n legendOffset = defaultAxisProps.legendOffset,\n theme,\n style,\n }: {\n axis: 'x' | 'y'\n scale: AnyScale\n x?: number\n y?: number\n length: number\n ticksPosition: 'before' | 'after'\n tickValues?: TicksSpec<Value>\n tickSize?: number\n tickPadding?: number\n tickRotation?: number\n format?: string | ValueFormatter<Value>\n legend?: string\n legendPosition?: AxisLegendPosition\n legendOffset?: number\n theme: Theme\n style?: PartialTheme['axis']\n }\n) => {\n const { ticks, textAlign, textBaseline } = computeCartesianTicks({\n axis,\n scale,\n ticksPosition,\n tickValues,\n tickSize,\n tickPadding,\n tickRotation,\n engine: 'canvas',\n })\n\n ctx.save()\n ctx.translate(x, y)\n\n const axisTheme = extendAxisTheme(theme.axis, style)\n\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n setCanvasFont(ctx, axisTheme.ticks.text)\n\n const domainLineWidth = axisTheme.domain.line.strokeWidth ?? 0\n if (typeof domainLineWidth !== 'string' && domainLineWidth > 0) {\n ctx.lineWidth = domainLineWidth\n ctx.lineCap = 'square'\n\n if (axisTheme.domain.line.stroke) {\n ctx.strokeStyle = axisTheme.domain.line.stroke\n }\n\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(axis === 'x' ? length : 0, axis === 'x' ? 0 : length)\n ctx.stroke()\n }\n\n const format = typeof _format === 'function' ? _format : (value: unknown) => `${value}`\n\n const tickLineWidth = axisTheme.ticks.line.strokeWidth ?? 0\n const shouldRenderTickLine = typeof tickLineWidth !== 'string' && tickLineWidth > 0\n ticks.forEach(tick => {\n if (shouldRenderTickLine) {\n ctx.lineWidth = tickLineWidth\n ctx.lineCap = 'square'\n\n if (axisTheme.ticks.line.stroke) {\n ctx.strokeStyle = axisTheme.ticks.line.stroke\n }\n\n ctx.beginPath()\n ctx.moveTo(tick.x, tick.y)\n ctx.lineTo(tick.x + tick.lineX, tick.y + tick.lineY)\n ctx.stroke()\n }\n\n const value = format(tick.value)\n\n ctx.save()\n ctx.translate(tick.x + tick.textX, tick.y + tick.textY)\n ctx.rotate(degreesToRadians(tickRotation))\n\n drawCanvasText(ctx, axisTheme.ticks.text, `${value}`)\n\n ctx.fillText(`${value}`, 0, 0)\n ctx.restore()\n })\n\n if (legend !== undefined) {\n let legendX = 0\n let legendY = 0\n let legendRotation = 0\n let textAlign: CanvasTextAlign = 'center'\n\n if (axis === 'y') {\n legendRotation = -90\n legendX = legendOffset\n if (legendPosition === 'start') {\n textAlign = 'start'\n legendY = length\n } else if (legendPosition === 'middle') {\n textAlign = 'center'\n legendY = length / 2\n } else if (legendPosition === 'end') {\n textAlign = 'end'\n }\n } else {\n legendY = legendOffset\n if (legendPosition === 'start') {\n textAlign = 'start'\n } else if (legendPosition === 'middle') {\n textAlign = 'center'\n legendX = length / 2\n } else if (legendPosition === 'end') {\n textAlign = 'end'\n legendX = length\n }\n }\n\n ctx.translate(legendX, legendY)\n ctx.rotate(degreesToRadians(legendRotation))\n setCanvasFont(ctx, axisTheme.legend.text)\n\n if (axisTheme.legend.text.fill) {\n ctx.fillStyle = axisTheme.legend.text.fill\n }\n\n ctx.textAlign = textAlign\n ctx.textBaseline = 'middle'\n drawCanvasText(ctx, axisTheme.legend.text, legend)\n }\n\n ctx.restore()\n}\n\nexport const renderAxesToCanvas = <X extends ScaleValue, Y extends ScaleValue>(\n ctx: CanvasRenderingContext2D,\n {\n xScale,\n yScale,\n width,\n height,\n top,\n right,\n bottom,\n left,\n theme,\n }: {\n xScale: AnyScale\n yScale: AnyScale\n width: number\n height: number\n top?: CanvasAxisProps<X> | null\n right?: CanvasAxisProps<Y> | null\n bottom?: CanvasAxisProps<X> | null\n left?: CanvasAxisProps<Y> | null\n theme: Theme\n }\n) => {\n const axes = { top, right, bottom, left }\n\n positions.forEach(position => {\n const axis = axes[position] as typeof position extends 'bottom' | 'top'\n ? CanvasAxisProps<X> | undefined\n : CanvasAxisProps<Y> | undefined\n\n if (!axis) return null\n\n const isXAxis = position === 'top' || position === 'bottom'\n const ticksPosition = position === 'top' || position === 'left' ? 'before' : 'after'\n const scale = isXAxis ? xScale : yScale\n const format = getFormatter(axis.format, scale)\n\n renderAxisToCanvas(ctx, {\n ...axis,\n axis: isXAxis ? 'x' : 'y',\n x: position === 'right' ? width : 0,\n y: position === 'bottom' ? height : 0,\n scale,\n format,\n length: isXAxis ? width : height,\n ticksPosition,\n theme,\n })\n })\n}\n\nexport const renderGridLinesToCanvas = <Value extends ScaleValue>(\n ctx: CanvasRenderingContext2D,\n {\n width,\n height,\n scale,\n axis,\n values,\n }: {\n width: number\n height: number\n scale: AnyScale\n axis: 'x' | 'y'\n values?: TicksSpec<Value>\n }\n) => {\n const lines = computeGridLines({ width, height, scale, axis, values })\n\n lines.forEach(line => {\n ctx.beginPath()\n ctx.moveTo(line.x1, line.y1)\n ctx.lineTo(line.x2, line.y2)\n ctx.stroke()\n })\n}\n"],"names":["computeCartesianTicks","_ref","translate","axis","scale","ticksPosition","tickValues","tickSize","tickPadding","tickRotation","truncateTickAt","_ref$engine","engine","values","getScaleTicks","textProps","textPropsByEngine","position","centerScale","line","lineX","lineY","text","textX","textY","isRTL","document","dir","textAlign","align","center","textBaseline","baseline","d","_position","x","y","top","bottom","_position2","left","right","ticks","map","value","processedValue","valueLength","String","length","slice","concat","truncateTick","_extends","key","Date","valueOf","getFormatter","format","type","formatter","timeFormat","d3Format","computeGridLines","_ref2","width","height","_values","Array","isArray","undefined","lines","_position3","_position4","x1","x2","y1","y2","_position5","_position6","memoizedAxisTick","memo","_format","_value","onClick","textAnchor","theme","animatedProps","props","useMemo","style","opacity","cursor","event","_jsxs","animated","g","transform","children","_jsx","Text","dominantBaseline","textTransform","defaultAxisProps","legendPosition","legendOffset","NonMemoizedAxis","_ref$x","_ref$y","_ref$tickSize","_ref$tickPadding","_ref$tickRotation","_ref$renderTick","renderTick","AxisTick","legend","_ref$legendPosition","_ref$legendOffset","ariaHidden","useTheme","axisTheme","useExtendedAxisTheme","formatValue","_computeCartesianTick","legendNode","legendX","legendY","legendRotation","_Fragment","_useMotionConfig","useMotionConfig","animate","springConfig","config","useSpring","lineX2","lineY2","immediate","getAnimatedProps","useCallback","tick","getFromAnimatedProps","transition","useTransition","keys","initial","from","enter","update","leave","transitionProps","_state","tickIndex","React","createElement","rotate","domain","Axis","positions","Axes","xScale","yScale","axes","isXAxis","GridLine","grid","GridLines","_createElement","Grid","xValues","yValues","xLines","yLines","renderAxisToCanvas","ctx","_axisTheme$domain$lin","_axisTheme$ticks$line","save","extendAxisTheme","setCanvasFont","domainLineWidth","strokeWidth","lineWidth","lineCap","stroke","strokeStyle","beginPath","moveTo","lineTo","tickLineWidth","shouldRenderTickLine","forEach","degreesToRadians","drawCanvasText","fillText","restore","fill","fillStyle","renderAxesToCanvas","renderGridLinesToCanvas","_ref3"],"mappings":"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"}