{"version":3,"file":"nivo-arcs.mjs","sources":["../src/arc_labels/ArcLabel.tsx","../src/utils.ts","../src/arcTransitionMode.ts","../src/centers.ts","../src/arc_labels/ArcLabelsLayer.tsx","../src/arc_labels/canvas.ts","../src/arc_labels/useArcLabels.ts","../src/arc_labels/index.ts","../src/arc_link_labels/ArcLinkLabel.tsx","../src/arc_link_labels/compute.ts","../src/arc_link_labels/useArcLinkLabelsTransition.ts","../src/arc_link_labels/ArcLinkLabelsLayer.tsx","../src/arc_link_labels/canvas.ts","../src/arc_link_labels/useArcLinks.ts","../src/arc_link_labels/useArcLinkLabels.ts","../src/arc_link_labels/index.ts","../src/ArcLine.tsx","../src/ArcShape.tsx","../src/interpolateArc.ts","../src/useArcsTransition.ts","../src/ArcsLayer.tsx","../src/boundingBox.ts","../src/interactivity.ts","../src/useAnimatedArc.ts","../src/useArcGenerator.ts"],"sourcesContent":["import { CSSProperties } from 'react'\nimport { SpringValue, Interpolation, animated } from '@react-spring/web'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { DatumWithArcAndColor } from '../types'\n\nconst staticStyle: CSSProperties = {\n    pointerEvents: 'none',\n}\n\nexport interface ArcLabelProps<Datum extends DatumWithArcAndColor> {\n    datum: Datum\n    label: string\n    style: {\n        progress: SpringValue<number>\n        transform: Interpolation<string>\n        textColor: string\n    }\n}\n\nexport const ArcLabel = <Datum extends DatumWithArcAndColor>({\n    label,\n    style,\n}: ArcLabelProps<Datum>) => {\n    const theme = useTheme()\n\n    return (\n        <animated.g transform={style.transform} opacity={style.progress} style={staticStyle}>\n            <Text\n                textAnchor=\"middle\"\n                dominantBaseline=\"central\"\n                style={{\n                    ...theme.labels.text,\n                    fill: style.textColor,\n                }}\n            >\n                {label}\n            </Text>\n        </animated.g>\n    )\n}\n","import { useMemo } from 'react'\nimport { radiansToDegrees, positionFromAngle, degreesToRadians } from '@nivo/core'\nimport { DatumWithArc } from './types'\n\n/**\n * Make sure an angle (expressed in radians)\n * always falls in the range 0~2*PI.\n */\nexport const getNormalizedAngle = (angle: number) => {\n    let normalizedAngle = angle % (Math.PI * 2)\n    if (normalizedAngle < 0) {\n        normalizedAngle += Math.PI * 2\n    }\n\n    return normalizedAngle\n}\n\n/**\n * Filter out arcs with a length below `skipAngle`.\n */\nexport const filterDataBySkipAngle = <Datum extends DatumWithArc>(\n    data: Datum[],\n    skipAngle: number\n) =>\n    data.filter(\n        datum => Math.abs(radiansToDegrees(datum.arc.endAngle - datum.arc.startAngle)) >= skipAngle\n    )\n\n/**\n * Memoized version of `filterDataBySkipAngle`.\n */\nexport const useFilteredDataBySkipAngle = <Datum extends DatumWithArc>(\n    data: Datum[],\n    skipAngle: number\n) => useMemo(() => filterDataBySkipAngle(data, skipAngle), [data, skipAngle])\n\nexport const svgEllipticalArcCommand = (\n    radius: number,\n    largeArcFlag: 0 | 1,\n    sweepFlag: 0 | 1,\n    x: number,\n    y: number\n) =>\n    [\n        'A',\n        radius,\n        radius,\n        0, // x-axis-rotation\n        largeArcFlag,\n        sweepFlag,\n        x,\n        y,\n    ].join(' ')\n\nexport const generateSvgArc = (\n    radius: number,\n    originalStartAngle: number,\n    originalEndAngle: number\n): string => {\n    const startAngle = Math.min(originalStartAngle, originalEndAngle)\n    const endAngle = Math.max(originalStartAngle, originalEndAngle)\n\n    const start = positionFromAngle(degreesToRadians(endAngle), radius)\n    const end = positionFromAngle(degreesToRadians(startAngle), radius)\n\n    // we have a full circle, we cannot use a single elliptical arc\n    // to draw it, so we use 2 in that case.\n    if (endAngle - startAngle >= 360) {\n        const mid = positionFromAngle(degreesToRadians(startAngle + 180), radius)\n\n        return [\n            `M ${start.x} ${start.y}`,\n            svgEllipticalArcCommand(radius, 1, 1, mid.x, mid.y),\n            `M ${start.x} ${start.y}`,\n            svgEllipticalArcCommand(radius, 1, 0, mid.x, mid.y),\n        ].join(' ')\n    }\n\n    const largeArcFlag = endAngle - startAngle <= 180 ? 0 : 1\n\n    return [\n        `M ${start.x} ${start.y}`,\n        svgEllipticalArcCommand(radius, largeArcFlag, 0, end.x, end.y),\n    ].join(' ')\n}\n","import { Arc, DatumWithArc } from './types'\nimport { useMemo } from 'react'\n\nexport interface ArcTransitionModeConfig {\n    enter: (arc: Arc) => Arc\n    update: (arc: Arc) => Arc\n    leave: (arc: Arc) => Arc\n}\n\nexport const arcTransitionModes = [\n    'startAngle',\n    'middleAngle',\n    'endAngle',\n    'innerRadius',\n    'centerRadius',\n    'outerRadius',\n    'pushIn',\n    'pushOut',\n] as const\nexport type ArcTransitionMode = (typeof arcTransitionModes)[number]\n\nexport const arcTransitionModeById: Record<ArcTransitionMode, ArcTransitionModeConfig> = {\n    startAngle: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            endAngle: arc.startAngle,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            startAngle: arc.endAngle,\n        }),\n    },\n    middleAngle: {\n        enter: (arc: Arc) => {\n            const middleAngle = arc.startAngle + (arc.endAngle - arc.startAngle) / 2\n\n            return {\n                ...arc,\n                startAngle: middleAngle,\n                endAngle: middleAngle,\n            }\n        },\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => {\n            const middleAngle = arc.startAngle + (arc.endAngle - arc.startAngle) / 2\n\n            return {\n                ...arc,\n                startAngle: middleAngle,\n                endAngle: middleAngle,\n            }\n        },\n    },\n    endAngle: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            startAngle: arc.endAngle,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            endAngle: arc.startAngle,\n        }),\n    },\n    innerRadius: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            outerRadius: arc.innerRadius,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.outerRadius,\n        }),\n    },\n    centerRadius: {\n        enter: (arc: Arc) => {\n            const centerRadius = arc.innerRadius + (arc.outerRadius - arc.innerRadius) / 2\n\n            return {\n                ...arc,\n                innerRadius: centerRadius,\n                outerRadius: centerRadius,\n            }\n        },\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => {\n            const centerRadius = arc.innerRadius + (arc.outerRadius - arc.innerRadius) / 2\n\n            return {\n                ...arc,\n                innerRadius: centerRadius,\n                outerRadius: centerRadius,\n            }\n        },\n    },\n    outerRadius: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.outerRadius,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            outerRadius: arc.innerRadius,\n        }),\n    },\n    pushIn: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.innerRadius - arc.outerRadius + arc.innerRadius,\n            outerRadius: arc.innerRadius,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.outerRadius,\n            outerRadius: arc.outerRadius + arc.outerRadius - arc.innerRadius,\n        }),\n    },\n    pushOut: {\n        enter: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.outerRadius,\n            outerRadius: arc.outerRadius + arc.outerRadius - arc.innerRadius,\n        }),\n        update: (arc: Arc) => arc,\n        leave: (arc: Arc) => ({\n            ...arc,\n            innerRadius: arc.innerRadius - arc.outerRadius + arc.innerRadius,\n            outerRadius: arc.innerRadius,\n        }),\n    },\n}\n\nexport interface TransitionExtra<\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, never>,\n> {\n    enter: (datum: Datum) => ExtraProps\n    update: (datum: Datum) => ExtraProps\n    leave: (datum: Datum) => ExtraProps\n}\n\nexport type ArcTransitionProps<ExtraProps extends Record<string, any> = Record<string, never>> =\n    Arc & {\n        progress: number\n    } & ExtraProps\n\nexport const useArcTransitionMode = <\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, never>,\n>(\n    mode: ArcTransitionMode,\n    extraTransition?: TransitionExtra<Datum, ExtraProps>\n) =>\n    useMemo(() => {\n        const transitionMode = arcTransitionModeById[mode]\n\n        return {\n            enter: (datum: Datum) =>\n                ({\n                    progress: 0,\n                    ...transitionMode.enter(datum.arc),\n                    ...(extraTransition ? extraTransition.enter(datum) : {}),\n                }) as ArcTransitionProps<ExtraProps>,\n            update: (datum: Datum) =>\n                ({\n                    progress: 1,\n                    ...transitionMode.update(datum.arc),\n                    ...(extraTransition ? extraTransition.update(datum) : {}),\n                }) as ArcTransitionProps<ExtraProps>,\n            leave: (datum: Datum) =>\n                ({\n                    progress: 0,\n                    ...transitionMode.leave(datum.arc),\n                    ...(extraTransition ? extraTransition.leave(datum) : {}),\n                }) as ArcTransitionProps<ExtraProps>,\n        }\n    }, [mode, extraTransition])\n","import { useMemo } from 'react'\nimport { useTransition, to, SpringValue, TransitionFn } from '@react-spring/web'\nimport { midAngle, positionFromAngle, useMotionConfig } from '@nivo/core'\nimport { Arc, DatumWithArc, Point } from './types'\nimport { filterDataBySkipAngle } from './utils'\nimport {\n    ArcTransitionMode,\n    ArcTransitionProps,\n    TransitionExtra,\n    useArcTransitionMode,\n} from './arcTransitionMode'\n\nexport const computeArcCenter = (arc: Arc, offset: number): Point => {\n    const angle = midAngle(arc) - Math.PI / 2\n    const radius = arc.innerRadius + (arc.outerRadius - arc.innerRadius) * offset\n\n    return positionFromAngle(angle, radius)\n}\n\nexport const interpolateArcCenter =\n    (offset: number) =>\n    (\n        startAngleValue: SpringValue<number>,\n        endAngleValue: SpringValue<number>,\n        innerRadiusValue: SpringValue<number>,\n        outerRadiusValue: SpringValue<number>\n    ) =>\n        to(\n            [startAngleValue, endAngleValue, innerRadiusValue, outerRadiusValue],\n            (startAngle, endAngle, innerRadius, outerRadius) => {\n                const centroid = computeArcCenter(\n                    { startAngle, endAngle, innerRadius, outerRadius },\n                    offset\n                )\n\n                return `translate(${centroid.x},${centroid.y})`\n            }\n        )\n\nexport const useArcCentersTransition = <\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, never>,\n>(\n    data: Datum[],\n    // define where the centers should be placed,\n    // 0.0: inner radius\n    // 0.5: center\n    // 1.0: outer radius\n    offset = 0.5,\n    mode: ArcTransitionMode = 'innerRadius',\n    extra?: TransitionExtra<Datum, ExtraProps>\n) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const phases = useArcTransitionMode<Datum, ExtraProps>(mode, extra)\n\n    const transition = useTransition<Datum, ArcTransitionProps<ExtraProps>>(data, {\n        keys: datum => datum.id,\n        initial: phases.update,\n        from: phases.enter,\n        enter: phases.update,\n        update: phases.update,\n        leave: phases.leave,\n        config: springConfig,\n        immediate: !animate,\n    }) as unknown as TransitionFn<Datum, ArcTransitionProps<ExtraProps>>\n\n    return {\n        transition,\n        interpolate: interpolateArcCenter(offset),\n    }\n}\n\nexport interface ArcCenter<Datum extends DatumWithArc> extends Point {\n    data: Datum\n}\n\n/**\n * Compute an array of arc centers from an array of data containing arcs.\n *\n * If you plan to animate those, you could use `useArcCentersTransition`\n * instead, you could use the returned array with react-spring `useTransition`,\n * but this would lead to cartesian transitions (x/y), while `useArcCentersTransition`\n * will generate proper transitions using radius/angle.\n */\nexport const useArcCenters = <\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, never>,\n>({\n    data,\n    offset = 0.5,\n    skipAngle = 0,\n    computeExtraProps = () => ({}) as ExtraProps,\n}: {\n    data: Datum[]\n    // define where the centers should be placed,\n    // 0.0: inner radius\n    // 0.5: center\n    // 1.0: outer radius\n    offset?: number\n    // arcs with a length below this (end angle - start angle in degrees)\n    // are going to be excluded, this can typically be used to avoid having\n    // overlapping labels.\n    skipAngle?: number\n    // this can be used to append extra properties to the centers,\n    // can be used to compute a color/label for example.\n    computeExtraProps?: (datum: Datum) => ExtraProps\n}): (ArcCenter<Datum> & ExtraProps)[] =>\n    useMemo(\n        () =>\n            filterDataBySkipAngle<Datum>(data, skipAngle)\n                // compute position and extra props for each eligible datum\n                .map(datum => {\n                    const position = computeArcCenter(datum.arc, offset)\n\n                    return {\n                        ...computeExtraProps(datum),\n                        x: position.x,\n                        y: position.y,\n                        data: datum,\n                    }\n                }),\n        [data, offset, skipAngle, computeExtraProps]\n    )\n","import { createElement, useMemo } from 'react'\nimport { PropertyAccessor, usePropertyAccessor, radiansToDegrees } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { useInheritedColor } from '@nivo/colors'\nimport { useArcCentersTransition } from '../centers'\nimport { ArcTransitionMode } from '../arcTransitionMode'\nimport { DatumWithArcAndColor } from '../types'\nimport { ArcLabelsProps } from './props'\nimport { ArcLabel, ArcLabelProps } from './ArcLabel'\n\nexport type ArcLabelComponent<Datum extends DatumWithArcAndColor> = (\n    props: ArcLabelProps<Datum>\n) => JSX.Element\n\ninterface ArcLabelsLayerProps<Datum extends DatumWithArcAndColor> {\n    center: [number, number]\n    data: Datum[]\n    label: PropertyAccessor<Datum, string>\n    radiusOffset: ArcLabelsProps<Datum>['arcLabelsRadiusOffset']\n    skipAngle: ArcLabelsProps<Datum>['arcLabelsSkipAngle']\n    skipRadius: ArcLabelsProps<Datum>['arcLabelsSkipRadius']\n    textColor: ArcLabelsProps<Datum>['arcLabelsTextColor']\n    transitionMode: ArcTransitionMode\n    component?: ArcLabelsProps<Datum>['arcLabelsComponent']\n}\n\nexport const ArcLabelsLayer = <Datum extends DatumWithArcAndColor>({\n    center,\n    data,\n    transitionMode,\n    label: labelAccessor,\n    radiusOffset,\n    skipAngle,\n    skipRadius,\n    textColor,\n    component = ArcLabel,\n}: ArcLabelsLayerProps<Datum>) => {\n    const getLabel = usePropertyAccessor<Datum, string>(labelAccessor)\n    const theme = useTheme()\n    const getTextColor = useInheritedColor<Datum>(textColor, theme)\n\n    const filteredData = useMemo(\n        () =>\n            data.filter(datum => {\n                const angle = Math.abs(radiansToDegrees(datum.arc.endAngle - datum.arc.startAngle))\n                const radius = Math.abs(datum.arc.outerRadius - datum.arc.innerRadius)\n\n                return angle >= skipAngle && radius >= skipRadius\n            }),\n        [data, skipAngle, skipRadius]\n    )\n\n    const { transition, interpolate } = useArcCentersTransition<Datum>(\n        filteredData,\n        radiusOffset,\n        transitionMode\n    )\n\n    const Label: ArcLabelComponent<Datum> = component\n\n    return (\n        <g transform={`translate(${center[0]},${center[1]})`}>\n            {transition((transitionProps, datum) => {\n                return createElement(Label, {\n                    key: datum.id,\n                    datum,\n                    label: getLabel(datum),\n                    style: {\n                        progress: transitionProps.progress,\n                        transform: interpolate(\n                            transitionProps.startAngle,\n                            transitionProps.endAngle,\n                            transitionProps.innerRadius,\n                            transitionProps.outerRadius\n                        ),\n                        textColor: getTextColor(datum),\n                    },\n                })\n            })}\n        </g>\n    )\n}\n","import { Theme } from '@nivo/theming'\nimport { setCanvasFont, drawCanvasText } from '@nivo/text'\nimport { DatumWithArcAndColor } from '../types'\nimport { ArcLabel } from './useArcLabels'\n\nexport const drawCanvasArcLabels = <Datum extends DatumWithArcAndColor>(\n    ctx: CanvasRenderingContext2D,\n    labels: ArcLabel<Datum>[],\n    theme: Theme\n) => {\n    setCanvasFont(ctx, theme.labels.text)\n    ctx.textAlign = 'center'\n    ctx.textBaseline = 'middle'\n\n    labels.forEach(label => {\n        drawCanvasText(\n            ctx,\n            {\n                ...theme.labels.text,\n                fill: label.textColor,\n            },\n            String(label.label),\n            label.x,\n            label.y\n        )\n    })\n}\n","import { useCallback } from 'react'\nimport { PropertyAccessor, usePropertyAccessor } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { InheritedColorConfig, useInheritedColor } from '@nivo/colors'\nimport { DatumWithArcAndColor } from '../types'\nimport { useArcCenters, ArcCenter } from '../centers'\n\nexport interface ArcLabel<Datum extends DatumWithArcAndColor> extends ArcCenter<Datum> {\n    label: string\n    textColor: string\n}\n\n/**\n * Compute arc labels, please note that the datum should\n * contain a color in order to be able to compute the label text color.\n *\n * Please see `useArcCenters` for a more detailed explanation\n * about the parameters.\n */\nexport const useArcLabels = <Datum extends DatumWithArcAndColor>({\n    data,\n    offset,\n    skipAngle,\n    label,\n    textColor,\n}: {\n    data: Datum[]\n    offset?: number\n    skipAngle?: number\n    label: PropertyAccessor<Datum, string>\n    textColor: InheritedColorConfig<Datum>\n}) => {\n    const getLabel = usePropertyAccessor<Datum, string>(label)\n\n    const theme = useTheme()\n    const getTextColor = useInheritedColor<Datum>(textColor, theme)\n\n    const computeExtraProps = useCallback(\n        (datum: Datum) => {\n            return {\n                label: getLabel(datum),\n                textColor: getTextColor(datum),\n            }\n        },\n        [getLabel, getTextColor]\n    )\n\n    return useArcCenters<Datum, Omit<ArcLabel<Datum>, keyof ArcCenter<Datum>>>({\n        data,\n        offset,\n        skipAngle,\n        computeExtraProps,\n    })\n}\n","import { ArcLabel } from './ArcLabel'\n\nexport const ArcLabelComponent = ArcLabel\nexport * from './ArcLabelsLayer'\nexport * from './canvas'\nexport * from './props'\nexport * from './useArcLabels'\n","import { SpringValue, Interpolation, animated } from '@react-spring/web'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { DatumWithArcAndColor } from '../types'\n\nexport interface ArcLinkLabelProps<Datum extends DatumWithArcAndColor> {\n    datum: Datum\n    label: string\n    style: {\n        path: Interpolation<string>\n        thickness: number\n        textPosition: Interpolation<string>\n        textAnchor: Interpolation<'start' | 'end'>\n        linkColor: SpringValue<string>\n        opacity: SpringValue<number>\n        textColor: SpringValue<string>\n    }\n}\n\nexport const ArcLinkLabel = <Datum extends DatumWithArcAndColor>({\n    label,\n    style,\n}: ArcLinkLabelProps<Datum>) => {\n    const theme = useTheme()\n\n    return (\n        <animated.g opacity={style.opacity}>\n            <animated.path\n                fill=\"none\"\n                stroke={style.linkColor}\n                strokeWidth={style.thickness}\n                d={style.path}\n            />\n            <Text\n                transform={style.textPosition}\n                textAnchor={style.textAnchor}\n                dominantBaseline=\"central\"\n                style={{\n                    ...theme.labels.text,\n                    fill: style.textColor,\n                }}\n            >\n                {label}\n            </Text>\n        </animated.g>\n    )\n}\n","import { positionFromAngle } from '@nivo/core'\nimport { Arc, Point } from '../types'\nimport { getNormalizedAngle } from '../utils'\nimport { ArcLink } from './types'\n\n/**\n * Compute text anchor for a given arc.\n *\n * `computeArcLink` already computes a `side`, but when using\n * `react-spring`, you cannot have a single interpolation\n * returning several output values, so we need to compute\n * them in separate interpolations.\n */\nexport const computeArcLinkTextAnchor = (arc: Arc): 'start' | 'end' => {\n    const centerAngle = getNormalizedAngle(\n        arc.startAngle + (arc.endAngle - arc.startAngle) / 2 - Math.PI / 2\n    )\n\n    if (centerAngle < Math.PI / 2 || centerAngle > Math.PI * 1.5) {\n        return 'start'\n    }\n\n    return 'end'\n}\n\n/**\n * Compute the link of a single arc, returning its points,\n * please note that points coordinates are relative to\n * the center of the arc.\n */\nexport const computeArcLink = (\n    arc: Arc,\n    offset: number,\n    diagonalLength: number,\n    straightLength: number\n): ArcLink => {\n    const centerAngle = getNormalizedAngle(\n        arc.startAngle + (arc.endAngle - arc.startAngle) / 2 - Math.PI / 2\n    )\n    const point0: Point = positionFromAngle(centerAngle, arc.outerRadius + offset)\n    const point1: Point = positionFromAngle(centerAngle, arc.outerRadius + offset + diagonalLength)\n\n    let side: ArcLink['side']\n    let point2: Point\n    if (centerAngle < Math.PI / 2 || centerAngle > Math.PI * 1.5) {\n        side = 'after'\n        point2 = {\n            x: point1.x + straightLength,\n            y: point1.y,\n        }\n    } else {\n        side = 'before'\n        point2 = {\n            x: point1.x - straightLength,\n            y: point1.y,\n        }\n    }\n\n    return {\n        side,\n        points: [point0, point1, point2],\n    }\n}\n","import { useMemo } from 'react'\nimport { SpringValue, useTransition, to } from '@react-spring/web'\nimport { line } from 'd3-shape'\nimport { useMotionConfig } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { InheritedColorConfig, useInheritedColor } from '@nivo/colors'\nimport { DatumWithArcAndColor, Point } from '../types'\nimport { useFilteredDataBySkipAngle } from '../utils'\nimport { computeArcLink, computeArcLinkTextAnchor } from './compute'\n\nconst lineGenerator = line<Point>()\n    .x(d => d.x)\n    .y(d => d.y)\n\ntype AnimatedProps = {\n    startAngle: number\n    endAngle: number\n    innerRadius: number\n    outerRadius: number\n    offset: number\n    diagonalLength: number\n    straightLength: number\n    textOffset: number\n    linkColor: string\n    textColor: string\n    opacity: number\n}\n\nconst useTransitionPhases = <Datum extends DatumWithArcAndColor>({\n    offset,\n    diagonalLength,\n    straightLength,\n    textOffset,\n    getLinkColor,\n    getTextColor,\n}: Pick<AnimatedProps, 'offset' | 'diagonalLength' | 'straightLength' | 'textOffset'> & {\n    getLinkColor: (datum: Datum) => string\n    getTextColor: (datum: Datum) => string\n}): Record<'enter' | 'update' | 'leave', (datum: Datum) => AnimatedProps> =>\n    useMemo(\n        () => ({\n            enter: (datum: Datum) => ({\n                startAngle: datum.arc.startAngle,\n                endAngle: datum.arc.endAngle,\n                innerRadius: datum.arc.innerRadius,\n                outerRadius: datum.arc.outerRadius,\n                offset,\n                diagonalLength: 0,\n                straightLength: 0,\n                textOffset,\n                linkColor: getLinkColor(datum),\n                textColor: getTextColor(datum),\n                opacity: 0,\n            }),\n            update: (d: Datum) => ({\n                startAngle: d.arc.startAngle,\n                endAngle: d.arc.endAngle,\n                innerRadius: d.arc.innerRadius,\n                outerRadius: d.arc.outerRadius,\n                offset,\n                diagonalLength,\n                straightLength,\n                textOffset,\n                linkColor: getLinkColor(d),\n                textColor: getTextColor(d),\n                opacity: 1,\n            }),\n            leave: (d: Datum) => ({\n                startAngle: d.arc.startAngle,\n                endAngle: d.arc.endAngle,\n                innerRadius: d.arc.innerRadius,\n                outerRadius: d.arc.outerRadius,\n                offset,\n                diagonalLength: 0,\n                straightLength: 0,\n                textOffset,\n                linkColor: getLinkColor(d),\n                textColor: getTextColor(d),\n                opacity: 0,\n            }),\n        }),\n        [diagonalLength, straightLength, textOffset, getLinkColor, getTextColor, offset]\n    )\n\nconst interpolateLink = (\n    startAngleValue: SpringValue<AnimatedProps['startAngle']>,\n    endAngleValue: SpringValue<AnimatedProps['endAngle']>,\n    innerRadiusValue: SpringValue<AnimatedProps['innerRadius']>,\n    outerRadiusValue: SpringValue<AnimatedProps['outerRadius']>,\n    offsetValue: SpringValue<AnimatedProps['offset']>,\n    diagonalLengthValue: SpringValue<AnimatedProps['diagonalLength']>,\n    straightLengthValue: SpringValue<AnimatedProps['straightLength']>\n) =>\n    to(\n        [\n            startAngleValue,\n            endAngleValue,\n            innerRadiusValue,\n            outerRadiusValue,\n            offsetValue,\n            diagonalLengthValue,\n            straightLengthValue,\n        ],\n        (\n            startAngle,\n            endAngle,\n            innerRadius,\n            outerRadius,\n            offset,\n            diagonalLengthAnimated,\n            straightLengthAnimated\n        ) => {\n            const { points } = computeArcLink(\n                {\n                    startAngle,\n                    endAngle,\n                    innerRadius,\n                    outerRadius,\n                },\n                offset,\n                diagonalLengthAnimated,\n                straightLengthAnimated\n            )\n\n            return lineGenerator(points)\n        }\n    )\n\nconst interpolateTextAnchor = (\n    startAngleValue: SpringValue<AnimatedProps['startAngle']>,\n    endAngleValue: SpringValue<AnimatedProps['endAngle']>,\n    innerRadiusValue: SpringValue<AnimatedProps['innerRadius']>,\n    outerRadiusValue: SpringValue<AnimatedProps['outerRadius']>\n) =>\n    to(\n        [startAngleValue, endAngleValue, innerRadiusValue, outerRadiusValue],\n        (startAngle, endAngle, innerRadius, outerRadius) => {\n            return computeArcLinkTextAnchor({\n                startAngle,\n                endAngle,\n                innerRadius,\n                outerRadius,\n            })\n        }\n    )\n\n/**\n * Interpolating the text position involves almost the same computation\n * as `interpolateLink`, unfortunately `react-spring` does not support\n * multiple output values from a single interpolation.\n *\n * We should revise this if `react-spring` adds this feature at some point.\n */\nconst interpolateTextPosition = (\n    startAngleValue: SpringValue<AnimatedProps['startAngle']>,\n    endAngleValue: SpringValue<AnimatedProps['endAngle']>,\n    innerRadiusValue: SpringValue<AnimatedProps['innerRadius']>,\n    outerRadiusValue: SpringValue<AnimatedProps['outerRadius']>,\n    offsetValue: SpringValue<AnimatedProps['offset']>,\n    diagonalLengthValue: SpringValue<AnimatedProps['diagonalLength']>,\n    straightLengthValue: SpringValue<AnimatedProps['straightLength']>,\n    textOffsetValue: SpringValue<AnimatedProps['textOffset']>\n) =>\n    to(\n        [\n            startAngleValue,\n            endAngleValue,\n            innerRadiusValue,\n            outerRadiusValue,\n            offsetValue,\n            diagonalLengthValue,\n            straightLengthValue,\n            textOffsetValue,\n        ],\n        (\n            startAngle,\n            endAngle,\n            innerRadius,\n            outerRadius,\n            offset,\n            diagonalLengthAnimated,\n            straightLengthAnimated,\n            textOffset\n        ) => {\n            const { points, side } = computeArcLink(\n                {\n                    startAngle,\n                    endAngle,\n                    innerRadius,\n                    outerRadius,\n                },\n                offset,\n                diagonalLengthAnimated,\n                straightLengthAnimated\n            )\n\n            const position = points[2]\n            if (side === 'before') {\n                position.x -= textOffset\n            } else {\n                position.x += textOffset\n            }\n\n            return `translate(${position.x},${position.y})`\n        }\n    )\n\n/**\n * This hook can be used to animate a group of arc link labels,\n * if you just want to compute the labels, please use `useArcLinkLabels`.\n */\nexport const useArcLinkLabelsTransition = <Datum extends DatumWithArcAndColor>({\n    data,\n    offset = 0,\n    diagonalLength,\n    straightLength,\n    skipAngle = 0,\n    textOffset,\n    linkColor,\n    textColor,\n}: {\n    data: Datum[]\n    offset?: number\n    diagonalLength: number\n    straightLength: number\n    skipAngle?: number\n    textOffset: number\n    linkColor: InheritedColorConfig<Datum>\n    textColor: InheritedColorConfig<Datum>\n}) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const theme = useTheme()\n    const getLinkColor = useInheritedColor<Datum>(linkColor, theme)\n    const getTextColor = useInheritedColor<Datum>(textColor, theme)\n\n    const filteredData = useFilteredDataBySkipAngle<Datum>(data, skipAngle)\n    const transitionPhases = useTransitionPhases<Datum>({\n        offset,\n        diagonalLength,\n        straightLength,\n        textOffset,\n        getLinkColor,\n        getTextColor,\n    })\n\n    const transition = useTransition<Datum, AnimatedProps>(filteredData, {\n        keys: datum => datum.id,\n        initial: transitionPhases.update,\n        from: transitionPhases.enter,\n        enter: transitionPhases.update,\n        update: transitionPhases.update,\n        leave: transitionPhases.leave,\n        config: springConfig,\n        immediate: !animate,\n    })\n\n    return {\n        transition,\n        interpolateLink,\n        interpolateTextAnchor,\n        interpolateTextPosition,\n    }\n}\n","import { createElement } from 'react'\nimport { usePropertyAccessor } from '@nivo/core'\nimport { DatumWithArcAndColor } from '../types'\nimport { useArcLinkLabelsTransition } from './useArcLinkLabelsTransition'\nimport { ArcLinkLabelsProps } from './props'\nimport { ArcLinkLabel, ArcLinkLabelProps } from './ArcLinkLabel'\n\nexport type ArcLinkLabelComponent<Datum extends DatumWithArcAndColor> = (\n    props: ArcLinkLabelProps<Datum>\n) => JSX.Element\n\ninterface ArcLinkLabelsLayerProps<Datum extends DatumWithArcAndColor> {\n    center: [number, number]\n    data: Datum[]\n    label: ArcLinkLabelsProps<Datum>['arcLinkLabel']\n    skipAngle: ArcLinkLabelsProps<Datum>['arcLinkLabelsSkipAngle']\n    offset: ArcLinkLabelsProps<Datum>['arcLinkLabelsOffset']\n    diagonalLength: ArcLinkLabelsProps<Datum>['arcLinkLabelsDiagonalLength']\n    straightLength: ArcLinkLabelsProps<Datum>['arcLinkLabelsStraightLength']\n    strokeWidth: ArcLinkLabelsProps<Datum>['arcLinkLabelsThickness']\n    textOffset: ArcLinkLabelsProps<Datum>['arcLinkLabelsTextOffset']\n    textColor: ArcLinkLabelsProps<Datum>['arcLinkLabelsTextColor']\n    linkColor: ArcLinkLabelsProps<Datum>['arcLinkLabelsColor']\n    component?: ArcLinkLabelComponent<Datum>\n}\n\nexport const ArcLinkLabelsLayer = <Datum extends DatumWithArcAndColor>({\n    center,\n    data,\n    label: labelAccessor,\n    skipAngle,\n    offset,\n    diagonalLength,\n    straightLength,\n    strokeWidth,\n    textOffset,\n    textColor,\n    linkColor,\n    component = ArcLinkLabel,\n}: ArcLinkLabelsLayerProps<Datum>) => {\n    const getLabel = usePropertyAccessor<Datum, string>(labelAccessor)\n\n    const { transition, interpolateLink, interpolateTextAnchor, interpolateTextPosition } =\n        useArcLinkLabelsTransition<Datum>({\n            data,\n            skipAngle,\n            offset,\n            diagonalLength,\n            straightLength,\n            textOffset,\n            linkColor,\n            textColor,\n        })\n\n    const Label: ArcLinkLabelComponent<Datum> = component\n\n    return (\n        <g transform={`translate(${center[0]},${center[1]})`}>\n            {transition((transitionProps, datum) => {\n                return createElement(Label, {\n                    key: datum.id,\n                    datum,\n                    label: getLabel(datum),\n                    style: {\n                        ...transitionProps,\n                        thickness: strokeWidth,\n                        path: interpolateLink(\n                            transitionProps.startAngle,\n                            transitionProps.endAngle,\n                            transitionProps.innerRadius,\n                            transitionProps.outerRadius,\n                            transitionProps.offset,\n                            transitionProps.diagonalLength,\n                            transitionProps.straightLength\n                        ),\n                        textAnchor: interpolateTextAnchor(\n                            transitionProps.startAngle,\n                            transitionProps.endAngle,\n                            transitionProps.innerRadius,\n                            transitionProps.outerRadius\n                        ),\n                        textPosition: interpolateTextPosition(\n                            transitionProps.startAngle,\n                            transitionProps.endAngle,\n                            transitionProps.innerRadius,\n                            transitionProps.outerRadius,\n                            transitionProps.offset,\n                            transitionProps.diagonalLength,\n                            transitionProps.straightLength,\n                            transitionProps.textOffset\n                        ),\n                    },\n                })\n            })}\n        </g>\n    )\n}\n","import {\n    // @ts-expect-error no types\n    textPropsByEngine,\n} from '@nivo/core'\nimport { Theme } from '@nivo/theming'\nimport { setCanvasFont, drawCanvasText } from '@nivo/text'\nimport { DatumWithArcAndColor } from '../types'\nimport { ArcLinkLabel } from './types'\n\nexport const drawCanvasArcLinkLabels = <Datum extends DatumWithArcAndColor>(\n    ctx: CanvasRenderingContext2D,\n    labels: ArcLinkLabel<Datum>[],\n    theme: Theme,\n    strokeWidth: number\n) => {\n    ctx.textBaseline = 'middle'\n    setCanvasFont(ctx, theme.labels.text)\n\n    labels.forEach(label => {\n        ctx.textAlign = textPropsByEngine.canvas.align[label.textAnchor]\n        drawCanvasText(\n            ctx,\n            {\n                ...theme.labels.text,\n                fill: label.textColor,\n            },\n            String(label.label),\n            label.x,\n            label.y\n        )\n\n        ctx.beginPath()\n        ctx.strokeStyle = label.linkColor\n        ctx.lineWidth = strokeWidth\n        label.points.forEach((point, index) => {\n            if (index === 0) ctx.moveTo(point.x, point.y)\n            else ctx.lineTo(point.x, point.y)\n        })\n        ctx.stroke()\n    })\n}\n","import { useMemo } from 'react'\nimport { radiansToDegrees } from '@nivo/core'\nimport { DatumWithArc } from '../types'\nimport { ArcLinkWithDatum } from './types'\nimport { computeArcLink } from './compute'\n\n/**\n * Compute links for an array of data containing arcs.\n *\n * This is typically used to create labels for arcs,\n * and it's used for the `useArcLinkLabels` hook.\n */\nexport const useArcLinks = <\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, any>,\n>({\n    data,\n    skipAngle = 0,\n    offset = 0.5,\n    diagonalLength,\n    straightLength,\n    computeExtraProps = () => ({}) as ExtraProps,\n}: {\n    data: Datum[]\n    // arcs with a length below this (end angle - start angle in degrees)\n    // are going to be excluded, this can typically be used to avoid having\n    // overlapping labels.\n    skipAngle?: number\n    // offset from arc outer radius in pixels\n    offset?: number\n    // length of the diagonal segment of the link\n    diagonalLength: number\n    // length of the straight segment of the link\n    straightLength: number\n    // this can be used to append extra properties to the links,\n    // can be used to compute a color/label for example.\n    computeExtraProps?: (datum: ArcLinkWithDatum<Datum>) => ExtraProps\n}): (ArcLinkWithDatum<Datum> & ExtraProps)[] => {\n    const links = useMemo(\n        () =>\n            data\n                // filter out arcs with a length below `skipAngle`\n                .filter(\n                    datum =>\n                        Math.abs(radiansToDegrees(datum.arc.endAngle - datum.arc.startAngle)) >=\n                        skipAngle\n                )\n                // compute the link for each eligible arc\n                .map(datum => ({\n                    ...computeArcLink(datum.arc, offset, diagonalLength, straightLength),\n                    data: datum,\n                })),\n        [data, skipAngle, offset, diagonalLength, straightLength]\n    )\n\n    // splitting memoization of links and extra props can be more efficient,\n    // this way if only `computeExtraProps` changes, we skip links computation.\n    return useMemo(\n        () =>\n            links.map(link => ({\n                ...computeExtraProps(link),\n                ...link,\n            })),\n        [links, computeExtraProps]\n    )\n}\n","import { useCallback } from 'react'\nimport { PropertyAccessor, usePropertyAccessor } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { InheritedColorConfig, useInheritedColor } from '@nivo/colors'\nimport { DatumWithArcAndColor } from '../types'\nimport { ArcLinkWithDatum, ArcLinkLabel } from './types'\nimport { useArcLinks } from './useArcLinks'\n\n/**\n * Compute arc link labels, please note that the datum should\n * contain a color in order to be able to compute the link/label text color.\n *\n * Please see `useArcLinks` for a more detailed explanation\n * about the parameters.\n */\nexport const useArcLinkLabels = <Datum extends DatumWithArcAndColor>({\n    data,\n    skipAngle,\n    offset,\n    diagonalLength,\n    straightLength,\n    textOffset = 0,\n    label,\n    linkColor,\n    textColor,\n}: {\n    data: Datum[]\n    skipAngle?: number\n    offset?: number\n    diagonalLength: number\n    straightLength: number\n    textOffset: number\n    label: PropertyAccessor<Datum, string>\n    linkColor: InheritedColorConfig<Datum>\n    textColor: InheritedColorConfig<Datum>\n}) => {\n    const getLabel = usePropertyAccessor<Datum, string>(label)\n\n    const theme = useTheme()\n    const getLinkColor = useInheritedColor<Datum>(linkColor, theme)\n    const getTextColor = useInheritedColor<Datum>(textColor, theme)\n\n    const computeExtraProps = useCallback(\n        (link: ArcLinkWithDatum<Datum>) => {\n            const position = {\n                x: link.points[2].x,\n                y: link.points[2].y,\n            }\n            let textAnchor: ArcLinkLabel<Datum>['textAnchor']\n            if (link.side === 'before') {\n                position.x -= textOffset\n                textAnchor = 'end'\n            } else {\n                position.x += textOffset\n                textAnchor = 'start'\n            }\n\n            return {\n                ...position,\n                label: getLabel(link.data),\n                linkColor: getLinkColor(link.data),\n                textAnchor,\n                textColor: getTextColor(link.data),\n            }\n        },\n        [getLabel, getLinkColor, getTextColor, textOffset]\n    )\n\n    return useArcLinks<Datum, Omit<ArcLinkLabel<Datum>, keyof ArcLinkWithDatum<Datum>>>({\n        data,\n        skipAngle,\n        offset,\n        diagonalLength,\n        straightLength,\n        computeExtraProps,\n    })\n}\n","import { ArcLinkLabel } from './ArcLinkLabel'\n\nexport const ArcLinkLabelComponent = ArcLinkLabel\nexport * from './ArcLinkLabelsLayer'\nexport * from './canvas'\nexport * from './compute'\nexport * from './props'\nexport * from './types'\nexport * from './useArcLinkLabels'\nexport * from './useArcLinkLabelsTransition'\nexport * from './useArcLinks'\n","import { animated, to, AnimatedProps } from '@react-spring/web'\nimport { ExtractProps } from '@nivo/core'\nimport { generateSvgArc } from './utils'\n\ntype ArcLineProps = {\n    animated: AnimatedProps<{\n        radius: number\n        startAngle: number\n        endAngle: number\n        opacity: number\n    }>\n} & ExtractProps<typeof animated.path>\n\nexport const ArcLine = ({ animated: animatedProps, ...rest }: ArcLineProps) => (\n    <animated.path\n        d={to(\n            [animatedProps.radius, animatedProps.startAngle, animatedProps.endAngle],\n            (radius, start, end) => generateSvgArc(radius, start, end)\n        )}\n        {...rest}\n    />\n)\n","import { useCallback, MouseEvent } from 'react'\nimport { SpringValue, Interpolation, animated } from '@react-spring/web'\nimport { DatumWithArcAndColor } from './types'\n\nexport type ArcMouseHandler<Datum extends DatumWithArcAndColor> = (\n    datum: Datum,\n    event: MouseEvent<SVGPathElement>\n) => void\n\nexport interface ArcShapeProps<Datum extends DatumWithArcAndColor> {\n    datum: Datum\n    style: {\n        opacity: SpringValue<number>\n        color: SpringValue<string>\n        borderWidth: number\n        borderColor: SpringValue<string>\n        path: Interpolation<string>\n    }\n    onClick?: ArcMouseHandler<Datum>\n    onMouseEnter?: ArcMouseHandler<Datum>\n    onMouseMove?: ArcMouseHandler<Datum>\n    onMouseLeave?: ArcMouseHandler<Datum>\n}\n\n/**\n * A simple arc component to be used typically with an `ArcsLayer`.\n *\n * Please note that the component accepts `SpringValue`s instead of\n * regular values to support animations.\n */\nexport const ArcShape = <Datum extends DatumWithArcAndColor>({\n    datum,\n    style,\n    onClick,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n}: ArcShapeProps<Datum>) => {\n    const handleClick = useCallback(\n        (event: MouseEvent<SVGPathElement>) => onClick?.(datum, event),\n        [onClick, datum]\n    )\n\n    const handleMouseEnter = useCallback(\n        (event: MouseEvent<SVGPathElement>) => onMouseEnter?.(datum, event),\n        [onMouseEnter, datum]\n    )\n\n    const handleMouseMove = useCallback(\n        (event: MouseEvent<SVGPathElement>) => onMouseMove?.(datum, event),\n        [onMouseMove, datum]\n    )\n\n    const handleMouseLeave = useCallback(\n        (event: MouseEvent<SVGPathElement>) => onMouseLeave?.(datum, event),\n        [onMouseLeave, datum]\n    )\n\n    return (\n        <animated.path\n            d={style.path}\n            opacity={style.opacity}\n            fill={datum.fill || style.color}\n            stroke={style.borderColor}\n            strokeWidth={style.borderWidth}\n            onClick={onClick ? handleClick : undefined}\n            onMouseEnter={onMouseEnter ? handleMouseEnter : undefined}\n            onMouseMove={onMouseMove ? handleMouseMove : undefined}\n            onMouseLeave={onMouseLeave ? handleMouseLeave : undefined}\n            data-testid={`arc.${datum.id}`}\n        />\n    )\n}\n","import { to, SpringValue } from '@react-spring/web'\nimport { ArcGenerator } from './types'\n\n/**\n * Directly animating paths for arcs leads to sub-optimal results\n * as the interpolation is going to be linear while we deal with polar coordinates,\n * this interpolator is going to generate proper arc transitions.\n * It should be used with the `useAnimatedArc` or `useArcsTransition` hooks.\n */\nexport const interpolateArc = (\n    startAngleValue: SpringValue<number>,\n    endAngleValue: SpringValue<number>,\n    innerRadiusValue: SpringValue<number>,\n    outerRadiusValue: SpringValue<number>,\n    arcGenerator: ArcGenerator\n) =>\n    to(\n        [startAngleValue, endAngleValue, innerRadiusValue, outerRadiusValue],\n        (startAngle, endAngle, innerRadius, outerRadius) => {\n            return arcGenerator({\n                startAngle,\n                endAngle,\n                innerRadius: Math.max(0, innerRadius),\n                outerRadius: Math.max(0, outerRadius),\n            })\n        }\n    )\n","import { TransitionFn, useTransition } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { DatumWithArc } from './types'\nimport {\n    ArcTransitionMode,\n    useArcTransitionMode,\n    TransitionExtra,\n    ArcTransitionProps,\n} from './arcTransitionMode'\nimport { interpolateArc } from './interpolateArc'\n\n/**\n * This hook can be used to animate a group of arcs,\n * if you want to animate a single arc,\n * please have a look at the `useAnimatedArc` hook.\n */\nexport const useArcsTransition = <\n    Datum extends DatumWithArc,\n    ExtraProps extends Record<string, any> = Record<string, never>,\n>(\n    data: Datum[],\n    mode: ArcTransitionMode = 'innerRadius',\n    extra?: TransitionExtra<Datum, ExtraProps>\n) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const phases = useArcTransitionMode<Datum, ExtraProps>(mode, extra)\n\n    const transition = useTransition<Datum, ArcTransitionProps<ExtraProps>>(data, {\n        keys: datum => datum.id,\n        initial: phases.update,\n        from: phases.enter,\n        enter: phases.update,\n        update: phases.update,\n        leave: phases.leave,\n        config: springConfig,\n        immediate: !animate,\n    }) as unknown as TransitionFn<Datum, ArcTransitionProps<ExtraProps>>\n\n    return {\n        transition,\n        interpolate: interpolateArc,\n    }\n}\n","import { createElement } from 'react'\nimport { useTheme } from '@nivo/theming'\nimport { InheritedColorConfig, useInheritedColor } from '@nivo/colors'\nimport { DatumWithArcAndColor, ArcGenerator } from './types'\nimport { useArcsTransition } from './useArcsTransition'\nimport { ArcTransitionMode } from './arcTransitionMode'\nimport { ArcMouseHandler, ArcShape, ArcShapeProps } from './ArcShape'\n\nexport type ArcComponent<Datum extends DatumWithArcAndColor> = (\n    props: ArcShapeProps<Datum>\n) => JSX.Element\n\ninterface ArcsLayerProps<Datum extends DatumWithArcAndColor> {\n    center: [number, number]\n    data: Datum[]\n    arcGenerator: ArcGenerator\n    borderWidth: number\n    borderColor: InheritedColorConfig<Datum>\n    onClick?: ArcMouseHandler<Datum>\n    onMouseEnter?: ArcMouseHandler<Datum>\n    onMouseMove?: ArcMouseHandler<Datum>\n    onMouseLeave?: ArcMouseHandler<Datum>\n    transitionMode: ArcTransitionMode\n    component?: ArcComponent<Datum>\n}\n\nexport const ArcsLayer = <Datum extends DatumWithArcAndColor>({\n    center,\n    data,\n    arcGenerator,\n    borderWidth,\n    borderColor,\n    onClick,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    transitionMode,\n    component = ArcShape,\n}: ArcsLayerProps<Datum>) => {\n    const theme = useTheme()\n    const getBorderColor = useInheritedColor<Datum>(borderColor, theme)\n\n    const { transition, interpolate } = useArcsTransition<\n        Datum,\n        {\n            opacity: number\n            color: string\n            borderColor: string\n        }\n    >(data, transitionMode, {\n        enter: datum => ({\n            opacity: 0,\n            color: datum.color,\n            borderColor: getBorderColor(datum),\n        }),\n        update: datum => ({\n            opacity: 1,\n            color: datum.color,\n            borderColor: getBorderColor(datum),\n        }),\n        leave: datum => ({\n            opacity: 0,\n            color: datum.color,\n            borderColor: getBorderColor(datum),\n        }),\n    })\n\n    const Arc: ArcComponent<Datum> = component\n\n    return (\n        <g transform={`translate(${center[0]},${center[1]})`}>\n            {transition((transitionProps, datum) => {\n                return createElement(Arc, {\n                    key: datum.id,\n                    datum,\n                    style: {\n                        ...transitionProps,\n                        borderWidth,\n                        path: interpolate(\n                            transitionProps.startAngle,\n                            transitionProps.endAngle,\n                            transitionProps.innerRadius,\n                            transitionProps.outerRadius,\n                            arcGenerator\n                        ),\n                    },\n                    onClick,\n                    onMouseEnter,\n                    onMouseMove,\n                    onMouseLeave,\n                })\n            })}\n        </g>\n    )\n}\n","import { positionFromAngle, degreesToRadians } from '@nivo/core'\n\n/**\n * Computes the bounding box for a circle arc.\n *\n * Assumptions:\n *   - Anywhere the arc intersects an axis will be a max or a min.\n *   - If the arc doesn't intersect an axis, then the center\n *     will be one corner of the bounding rectangle,\n *     and this is the only case when it will be.\n *   - The only other possible extreme points of the sector to consider\n *     are the endpoints of the radii.\n *\n * This script was built within the help of this answer on stackoverflow:\n *   https://stackoverflow.com/questions/1336663/2d-bounding-box-of-a-sector\n */\nexport const computeArcBoundingBox = (\n    centerX: number,\n    centerY: number,\n    radius: number,\n    // in degrees\n    startAngle: number,\n    // in degrees\n    endAngle: number,\n    includeCenter = true\n) => {\n    let points: [number, number][] = []\n\n    const p0 = positionFromAngle(degreesToRadians(startAngle), radius)\n    points.push([p0.x, p0.y])\n\n    const p1 = positionFromAngle(degreesToRadians(endAngle), radius)\n    points.push([p1.x, p1.y])\n\n    for (\n        let angle = Math.round(Math.min(startAngle, endAngle));\n        angle <= Math.round(Math.max(startAngle, endAngle));\n        angle++\n    ) {\n        if (angle % 90 === 0) {\n            const p = positionFromAngle(degreesToRadians(angle), radius)\n            points.push([p.x, p.y])\n        }\n    }\n\n    points = points.map(([x, y]) => [centerX + x, centerY + y])\n    if (includeCenter) {\n        points.push([centerX, centerY])\n    }\n\n    const xs = points.map(([x]) => x)\n    const ys = points.map(([, y]) => y)\n\n    const x0 = Math.min(...xs)\n    const x1 = Math.max(...xs)\n\n    const y0 = Math.min(...ys)\n    const y1 = Math.max(...ys)\n\n    return {\n        points,\n        x: x0,\n        y: y0,\n        width: x1 - x0,\n        height: y1 - y0,\n    }\n}\n","import { getDistance, getAngle } from '@nivo/core'\nimport { Arc } from './types'\n\n/**\n * Check if cursor is in given ring.\n */\nexport const isCursorInRing = (\n    centerX: number,\n    centerY: number,\n    radius: number,\n    innerRadius: number,\n    cursorX: number,\n    cursorY: number\n) => {\n    const distance = getDistance(cursorX, cursorY, centerX, centerY)\n\n    return distance < radius && distance > innerRadius\n}\n\n/**\n * Search for an arc being under cursor.\n */\nexport const findArcUnderCursor = <A extends Arc = Arc>(\n    centerX: number,\n    centerY: number,\n    radius: number,\n    innerRadius: number,\n    arcs: A[],\n    cursorX: number,\n    cursorY: number\n): A | undefined => {\n    if (!isCursorInRing(centerX, centerY, radius, innerRadius, cursorX, cursorY)) {\n        return undefined\n    }\n\n    const cursorAngle = getAngle(cursorX, cursorY, centerX, centerY)\n\n    return arcs.find(\n        ({ startAngle, endAngle }) => cursorAngle >= startAngle && cursorAngle < endAngle\n    )\n}\n","import { useSpring } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { Arc, ArcGenerator } from './types'\nimport { interpolateArc } from './interpolateArc'\n\n/**\n * This hook can be used to animate a single arc,\n * if you want to animate a group of arcs,\n * please have a look at the `useArcsTransition` hook.\n */\nexport const useAnimatedArc = (datumWithArc: { arc: Arc }, arcGenerator: ArcGenerator) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const animatedValues = useSpring({\n        startAngle: datumWithArc.arc.startAngle,\n        endAngle: datumWithArc.arc.endAngle,\n        innerRadius: datumWithArc.arc.innerRadius,\n        outerRadius: datumWithArc.arc.outerRadius,\n        config: springConfig,\n        immediate: !animate,\n    })\n\n    return {\n        ...animatedValues,\n        path: interpolateArc(\n            animatedValues.startAngle,\n            animatedValues.endAngle,\n            animatedValues.innerRadius,\n            animatedValues.outerRadius,\n            arcGenerator\n        ),\n    }\n}\n","import { useMemo } from 'react'\nimport { arc as d3Arc } from 'd3-shape'\nimport { ArcGenerator, Arc } from './types'\n\n/**\n * Memoize a d3 arc generator.\n *\n * Please note that both inner/outer radius aren't static\n * and should come from the arc itself, while it requires\n * more props on the arcs, it provides more flexibility\n * because it's not limited to pie then but can also work\n * with charts such as sunbursts.\n */\nexport const useArcGenerator = ({\n    cornerRadius = 0,\n    padAngle = 0,\n}: {\n    cornerRadius?: number\n    padAngle?: number\n} = {}): ArcGenerator =>\n    useMemo(\n        () =>\n            d3Arc<Arc>()\n                .innerRadius(arc => arc.innerRadius)\n                .outerRadius(arc => arc.outerRadius)\n                .cornerRadius(cornerRadius)\n                .padAngle(padAngle),\n        [cornerRadius, padAngle]\n    )\n"],"names":["staticStyle","pointerEvents","ArcLabel","_ref","label","style","theme","useTheme","_jsx","animated","g","transform","opacity","progress","children","Text","textAnchor","dominantBaseline","_extends","labels","text","fill","textColor","getNormalizedAngle","angle","normalizedAngle","Math","PI","filterDataBySkipAngle","data","skipAngle","filter","datum","abs","radiansToDegrees","arc","endAngle","startAngle","svgEllipticalArcCommand","radius","largeArcFlag","sweepFlag","x","y","join","arcTransitionModes","arcTransitionModeById","enter","update","leave","middleAngle","innerRadius","outerRadius","centerRadius","pushIn","pushOut","useArcTransitionMode","mode","extraTransition","useMemo","transitionMode","computeArcCenter","offset","midAngle","positionFromAngle","interpolateArcCenter","startAngleValue","endAngleValue","innerRadiusValue","outerRadiusValue","to","centroid","useArcCentersTransition","extra","_useMotionConfig","useMotionConfig","animate","springConfig","config","phases","transition","useTransition","keys","id","initial","from","immediate","interpolate","useArcCenters","_ref$offset","_ref$skipAngle","_ref$computeExtraProp","computeExtraProps","map","position","ArcLabelsLayer","center","labelAccessor","radiusOffset","skipRadius","_ref$component","component","getLabel","usePropertyAccessor","getTextColor","useInheritedColor","filteredData","_useArcCentersTransit","Label","transitionProps","createElement","key","drawCanvasArcLabels","ctx","setCanvasFont","textAlign","textBaseline","forEach","drawCanvasText","String","useArcLabels","useCallback","ArcLabelComponent","ArcLinkLabel","_jsxs","path","stroke","linkColor","strokeWidth","thickness","d","textPosition","computeArcLinkTextAnchor","centerAngle","computeArcLink","diagonalLength","straightLength","side","point2","point0","point1","points","lineGenerator","line","interpolateLink","offsetValue","diagonalLengthValue","straightLengthValue","diagonalLengthAnimated","straightLengthAnimated","interpolateTextAnchor","interpolateTextPosition","textOffsetValue","textOffset","_computeArcLink2","useArcLinkLabelsTransition","_ref2","_ref2$offset","_ref2$skipAngle","getLinkColor","useFilteredDataBySkipAngle","transitionPhases","useTransitionPhases","ArcLinkLabelsLayer","_useArcLinkLabelsTran","drawCanvasArcLinkLabels","textPropsByEngine","canvas","align","beginPath","strokeStyle","lineWidth","point","index","moveTo","lineTo","useArcLinks","links","link","useArcLinkLabels","_ref$textOffset","ArcLinkLabelComponent","ArcLine","animatedProps","rest","_objectWithoutPropertiesLoose","_excluded","start","end","originalStartAngle","originalEndAngle","min","max","degreesToRadians","mid","generateSvgArc","ArcShape","onClick","onMouseEnter","onMouseMove","onMouseLeave","handleClick","event","handleMouseEnter","handleMouseMove","handleMouseLeave","color","borderColor","borderWidth","undefined","interpolateArc","arcGenerator","useArcsTransition","ArcsLayer","getBorderColor","_useArcsTransition","Arc","computeArcBoundingBox","centerX","centerY","includeCenter","p0","push","p1","round","p","xs","ys","_ref3","x0","apply","x1","y0","width","height","isCursorInRing","cursorX","cursorY","distance","getDistance","findArcUnderCursor","arcs","cursorAngle","getAngle","find","useAnimatedArc","datumWithArc","animatedValues","useSpring","useArcGenerator","_temp","_ref$cornerRadius","cornerRadius","_ref$padAngle","padAngle","d3Arc"],"mappings":"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"}