{"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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"}