{"version":3,"file":"nivo-funnel.mjs","sources":["../src/props.tsx","../src/PartTooltip.tsx","../src/hooks.ts","../src/Part.tsx","../src/Parts.tsx","../src/PartLabel.tsx","../src/PartLabels.tsx","../src/Separator.tsx","../src/Separators.tsx","../src/FunnelAnnotations.tsx","../src/Funnel.tsx","../src/ResponsiveFunnel.tsx"],"sourcesContent":["import { motionDefaultProps } from '@nivo/core'\nimport { FunnelLayerId } from './types'\n\nexport const svgDefaultProps = {\n    layers: ['separators', 'parts', 'labels', 'annotations'] as FunnelLayerId[],\n\n    direction: 'vertical' as const,\n    interpolation: 'smooth' as const,\n    spacing: 0,\n    shapeBlending: 0.66,\n\n    colors: { scheme: 'nivo' as const },\n    size: undefined,\n    fillOpacity: 1,\n\n    borderWidth: 6,\n    borderColor: { from: 'color' },\n    borderOpacity: 0.66,\n\n    enableLabel: true,\n    labelColor: { theme: 'background' },\n\n    enableBeforeSeparators: true,\n    beforeSeparatorLength: 0,\n    beforeSeparatorOffset: 0,\n    enableAfterSeparators: true,\n    afterSeparatorLength: 0,\n    afterSeparatorOffset: 0,\n\n    annotations: [],\n\n    isInteractive: true,\n    currentPartSizeExtension: 0,\n\n    role: 'img',\n\n    animate: motionDefaultProps.animate,\n    motionConfig: motionDefaultProps.config,\n}\n","import { BasicTooltip } from '@nivo/tooltip'\nimport { FunnelDatum, FunnelPartWithHandlers } from './types'\n\nexport interface PartTooltipProps<D extends FunnelDatum> {\n    part: FunnelPartWithHandlers<D>\n}\n\nexport const PartTooltip = <D extends FunnelDatum>({ part }: PartTooltipProps<D>) => (\n    <BasicTooltip\n        id={part.data.label}\n        value={part.formattedValue}\n        color={part.color}\n        enableChip={true}\n    />\n)\n","import { createElement, useMemo, useState, MouseEvent } from 'react'\nimport { line, area, curveBasis, curveLinear } from 'd3-shape'\nimport { ScaleLinear, scaleLinear, scaleOrdinal } from 'd3-scale'\nimport { useInheritedColor, useOrdinalColorScale } from '@nivo/colors'\nimport { useValueFormatter } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { useAnnotations } from '@nivo/annotations'\nimport { useTooltip, TooltipActionsContextData } from '@nivo/tooltip'\nimport { svgDefaultProps as defaults } from './props'\nimport { PartTooltip, PartTooltipProps } from './PartTooltip'\nimport isPlainObject from 'lodash/isPlainObject.js'\nimport get from 'lodash/get.js'\nimport {\n    FunnelDatum,\n    FunnelCommonProps,\n    FunnelDataProps,\n    FunnelPart,\n    SeparatorProps,\n    FunnelCustomLayerProps,\n    FunnelAreaGenerator,\n    FunnelAreaPoint,\n    FunnelBorderGenerator,\n    Position,\n    SizeSpec,\n    SizeSpecDatumProperty,\n} from './types'\n\nexport const computeShapeGenerators = <D extends FunnelDatum>(\n    interpolation: FunnelCommonProps<D>['interpolation'],\n    direction: FunnelCommonProps<D>['direction']\n): [FunnelAreaGenerator, FunnelBorderGenerator] => {\n    // area generator which is used to draw funnel chart parts\n    const areaGenerator: FunnelAreaGenerator = area<FunnelAreaPoint>()\n    if (direction === 'vertical') {\n        areaGenerator\n            .curve(interpolation === 'smooth' ? curveBasis : curveLinear)\n            .x0(d => d.x0)\n            .x1(d => d.x1)\n            .y(d => d.y)\n    } else {\n        areaGenerator\n            .curve(interpolation === 'smooth' ? curveBasis : curveLinear)\n            .y0(d => d.y0)\n            .y1(d => d.y1)\n            .x(d => d.x)\n    }\n\n    return [\n        areaGenerator,\n        // we're using a different line generator to draw borders, this way\n        // we we don't have borders joining each side of the parts.\n        // it's important to have an empty point when defining the points\n        // to be used along with this, otherwise we'll get a line between both sides.\n        line<Position | null>()\n            .defined(d => d !== null)\n            .x(d => d!.x)\n            .y(d => d!.y)\n            .curve(interpolation === 'smooth' ? curveBasis : curveLinear),\n    ]\n}\n\ninterface CustomBandScale {\n    (index: number): number\n    bandwidth: number\n}\n\nexport const computeScales = <D extends FunnelDatum>({\n    data,\n    direction,\n    width,\n    height,\n    spacing,\n}: {\n    data: FunnelDataProps<D>['data']\n    direction: FunnelCommonProps<D>['direction']\n    width: number\n    height: number\n    spacing: number\n}): [CustomBandScale, ScaleLinear<number, number>] => {\n    let bandScaleSize\n    let linearScaleSize\n    if (direction === 'vertical') {\n        bandScaleSize = height\n        linearScaleSize = width\n    } else {\n        bandScaleSize = width\n        linearScaleSize = height\n    }\n\n    const bandwidth = (bandScaleSize - spacing * (data.length - 1)) / data.length\n\n    // we're not using d3 band scale here to be able to get\n    // the actual paddingInner value in pixels, required to\n    // create centered separator lines between parts\n    const bandScale = (index: number) => spacing * index + bandwidth * index\n    bandScale.bandwidth = bandwidth\n\n    const allValues = data.map(d => d.value)\n\n    const linearScale = scaleLinear()\n        .domain([0, Math.max(...allValues)])\n        .range([0, linearScaleSize])\n\n    return [bandScale, linearScale]\n}\n\nexport const computeSeparators = <D extends FunnelDatum>({\n    parts,\n    direction,\n    width,\n    height,\n    spacing,\n    enableBeforeSeparators,\n    beforeSeparatorOffset,\n    enableAfterSeparators,\n    afterSeparatorOffset,\n}: {\n    parts: FunnelPart<D>[]\n    direction: FunnelCommonProps<D>['direction']\n    width: number\n    height: number\n    spacing: number\n    enableBeforeSeparators: boolean\n    beforeSeparatorOffset: number\n    enableAfterSeparators: boolean\n    afterSeparatorOffset: number\n}) => {\n    const beforeSeparators: SeparatorProps[] = []\n    const afterSeparators: SeparatorProps[] = []\n    const lastPart = parts[parts.length - 1]\n\n    if (direction === 'vertical') {\n        parts.forEach(part => {\n            const y = part.y0 - spacing / 2\n\n            if (enableBeforeSeparators) {\n                beforeSeparators.push({\n                    partId: part.data.id,\n                    x0: 0,\n                    x1: part.x0 - beforeSeparatorOffset,\n                    y0: y,\n                    y1: y,\n                })\n            }\n            if (enableAfterSeparators) {\n                afterSeparators.push({\n                    partId: part.data.id,\n                    x0: part.x1 + afterSeparatorOffset,\n                    x1: width,\n                    y0: y,\n                    y1: y,\n                })\n            }\n        })\n\n        const y = lastPart.y1\n        if (enableBeforeSeparators) {\n            beforeSeparators.push({\n                ...beforeSeparators[beforeSeparators.length - 1],\n                partId: 'none',\n                y0: y,\n                y1: y,\n            })\n        }\n        if (enableAfterSeparators) {\n            afterSeparators.push({\n                ...afterSeparators[afterSeparators.length - 1],\n                partId: 'none',\n                y0: y,\n                y1: y,\n            })\n        }\n    } else if (direction === 'horizontal') {\n        parts.forEach(part => {\n            const x = part.x0 - spacing / 2\n\n            beforeSeparators.push({\n                partId: part.data.id,\n                x0: x,\n                x1: x,\n                y0: 0,\n                y1: part.y0 - beforeSeparatorOffset,\n            })\n            afterSeparators.push({\n                partId: part.data.id,\n                x0: x,\n                x1: x,\n                y0: part.y1 + afterSeparatorOffset,\n                y1: height,\n            })\n        })\n\n        const x = lastPart.x1\n        beforeSeparators.push({\n            ...beforeSeparators[beforeSeparators.length - 1],\n            partId: 'none',\n            x0: x,\n            x1: x,\n        })\n        afterSeparators.push({\n            ...afterSeparators[afterSeparators.length - 1],\n            partId: 'none',\n            x0: x,\n            x1: x,\n        })\n    }\n\n    return [beforeSeparators, afterSeparators]\n}\n\nexport const computePartsHandlers = <D extends FunnelDatum>({\n    parts,\n    setCurrentPartId,\n    isInteractive,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onClick,\n    showTooltipFromEvent,\n    hideTooltip,\n    tooltip = PartTooltip,\n}: {\n    parts: FunnelPart<D>[]\n    setCurrentPartId: (id: string | number | null) => void\n    isInteractive: FunnelCommonProps<D>['isInteractive']\n    onMouseEnter?: FunnelCommonProps<D>['onMouseEnter']\n    onMouseLeave?: FunnelCommonProps<D>['onMouseLeave']\n    onMouseMove?: FunnelCommonProps<D>['onMouseMove']\n    onClick?: FunnelCommonProps<D>['onClick']\n    showTooltipFromEvent: TooltipActionsContextData['showTooltipFromEvent']\n    hideTooltip: () => void\n    tooltip?: (props: PartTooltipProps<D>) => JSX.Element\n}) => {\n    if (!isInteractive) return parts\n\n    return parts.map(part => {\n        const boundOnMouseEnter = (event: MouseEvent) => {\n            setCurrentPartId(part.data.id)\n            showTooltipFromEvent(createElement(tooltip, { part }), event)\n            onMouseEnter?.(part, event)\n        }\n\n        const boundOnMouseLeave = (event: MouseEvent) => {\n            setCurrentPartId(null)\n            hideTooltip()\n            onMouseLeave?.(part, event)\n        }\n\n        const boundOnMouseMove = (event: MouseEvent) => {\n            showTooltipFromEvent(createElement(tooltip, { part }), event)\n            onMouseMove?.(part, event)\n        }\n\n        const boundOnClick =\n            onClick !== undefined\n                ? (event: MouseEvent) => {\n                      onClick(part, event)\n                  }\n                : undefined\n\n        return {\n            ...part,\n            onMouseEnter: boundOnMouseEnter,\n            onMouseLeave: boundOnMouseLeave,\n            onMouseMove: boundOnMouseMove,\n            onClick: boundOnClick,\n        }\n    })\n}\n\nconst isSizeSpecDatumProperty = <Datum>(\n    config: SizeSpec<Datum> | undefined\n): config is SizeSpecDatumProperty => {\n    return (config as SizeSpecDatumProperty).datum !== undefined\n}\n\n// Get size based on configuration\nexport const getSizeGenerator = <Datum extends FunnelDatum>(\n    config: SizeSpec<Datum> | undefined,\n    linearScale: ScaleLinear<number, number>\n): ((datum: Datum) => number) => {\n    //User defined function\n    if (typeof config === 'function') {\n        return config\n    }\n\n    // User defined sizes array\n    if (Array.isArray(config)) {\n        const scale = scaleOrdinal(config)\n        const generator = (datum: Datum) => {\n            // Ensure we're using the id property from the datum to map to the appropriate size\n            return Number(scale(String(datum.id)))\n        }\n\n        return generator\n    }\n\n    if (isPlainObject(config)) {\n        // Use size from current datum\n        if (isSizeSpecDatumProperty(config)) {\n            return (datum: Datum) => {\n                const value = get(datum, config.datum)\n                return typeof value === 'number' ? value : 0\n            }\n        }\n\n        throw new Error(`Invalid size, when using an object, you should specify a 'datum' property`)\n    }\n\n    // Default behavior: use linearScale with datum.value\n    return (datum: Datum) => linearScale(datum.value)\n}\n\n// Use size scale hook\nexport const useSize = <Datum extends FunnelDatum>(\n    config: SizeSpec<Datum> | undefined,\n    linearScale: ScaleLinear<number, number>\n): ((datum: Datum) => number) =>\n    useMemo(() => getSizeGenerator<Datum>(config, linearScale), [config, linearScale])\n\n/**\n * Creates required layout to generate a funnel chart,\n * it uses almost the same parameters as the Funnel component.\n *\n * For purpose/constrains on the parameters, please have a look\n * at the component's props.\n */\nexport const useFunnel = <D extends FunnelDatum>({\n    data,\n    width,\n    height,\n    direction = defaults.direction,\n    interpolation = defaults.interpolation,\n    spacing = defaults.spacing,\n    shapeBlending: rawShapeBlending = defaults.shapeBlending,\n    valueFormat,\n    colors = defaults.colors,\n    size = defaults.size,\n    fillOpacity = defaults.fillOpacity,\n    borderWidth = defaults.borderWidth,\n    borderColor = defaults.borderColor,\n    borderOpacity = defaults.borderOpacity,\n    labelColor = defaults.labelColor,\n    enableBeforeSeparators = defaults.enableBeforeSeparators,\n    beforeSeparatorLength = defaults.beforeSeparatorLength,\n    beforeSeparatorOffset = defaults.beforeSeparatorOffset,\n    enableAfterSeparators = defaults.enableAfterSeparators,\n    afterSeparatorLength = defaults.afterSeparatorLength,\n    afterSeparatorOffset = defaults.afterSeparatorOffset,\n    isInteractive = defaults.isInteractive,\n    currentPartSizeExtension = defaults.currentPartSizeExtension,\n    currentBorderWidth,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n}: {\n    data: FunnelDataProps<D>['data']\n    width: number\n    height: number\n    direction?: FunnelCommonProps<D>['direction']\n    interpolation?: FunnelCommonProps<D>['interpolation']\n    spacing?: FunnelCommonProps<D>['spacing']\n    shapeBlending?: FunnelCommonProps<D>['shapeBlending']\n    valueFormat?: FunnelCommonProps<D>['valueFormat']\n    colors?: FunnelCommonProps<D>['colors']\n    size?: FunnelCommonProps<D>['size']\n    fillOpacity?: FunnelCommonProps<D>['fillOpacity']\n    borderWidth?: FunnelCommonProps<D>['borderWidth']\n    borderColor?: FunnelCommonProps<D>['borderColor']\n    borderOpacity?: FunnelCommonProps<D>['borderOpacity']\n    labelColor?: FunnelCommonProps<D>['labelColor']\n    enableBeforeSeparators?: FunnelCommonProps<D>['enableBeforeSeparators']\n    beforeSeparatorLength?: FunnelCommonProps<D>['beforeSeparatorLength']\n    beforeSeparatorOffset?: FunnelCommonProps<D>['beforeSeparatorOffset']\n    enableAfterSeparators?: FunnelCommonProps<D>['enableAfterSeparators']\n    afterSeparatorLength?: FunnelCommonProps<D>['afterSeparatorLength']\n    afterSeparatorOffset?: FunnelCommonProps<D>['afterSeparatorOffset']\n    isInteractive?: FunnelCommonProps<D>['isInteractive']\n    currentPartSizeExtension?: FunnelCommonProps<D>['currentPartSizeExtension']\n    currentBorderWidth?: FunnelCommonProps<D>['currentBorderWidth']\n    onMouseEnter?: FunnelCommonProps<D>['onMouseEnter']\n    onMouseMove?: FunnelCommonProps<D>['onMouseMove']\n    onMouseLeave?: FunnelCommonProps<D>['onMouseLeave']\n    onClick?: FunnelCommonProps<D>['onClick']\n    tooltip?: (props: PartTooltipProps<D>) => JSX.Element\n}) => {\n    const theme = useTheme()\n    const getColor = useOrdinalColorScale<D>(colors, 'id')\n    const getBorderColor = useInheritedColor(borderColor, theme)\n    const getLabelColor = useInheritedColor(labelColor, theme)\n\n    const formatValue = useValueFormatter<number>(valueFormat)\n\n    const [areaGenerator, borderGenerator] = useMemo(\n        () => computeShapeGenerators<D>(interpolation, direction),\n        [interpolation, direction]\n    )\n\n    let innerWidth: number\n    let innerHeight: number\n    const paddingBefore = enableBeforeSeparators ? beforeSeparatorLength + beforeSeparatorOffset : 0\n    const paddingAfter = enableAfterSeparators ? afterSeparatorLength + afterSeparatorOffset : 0\n    if (direction === 'vertical') {\n        innerWidth = width - paddingBefore - paddingAfter\n        innerHeight = height\n    } else {\n        innerWidth = width\n        innerHeight = height - paddingBefore - paddingAfter\n    }\n\n    const [bandScale, linearScale] = useMemo(\n        () =>\n            computeScales<D>({\n                data,\n                direction,\n                width: innerWidth,\n                height: innerHeight,\n                spacing,\n            }),\n        [data, direction, innerWidth, innerHeight, spacing]\n    )\n\n    const getSize = useSize<D>(size, linearScale)\n\n    const [currentPartId, setCurrentPartId] = useState<string | number | null>(null)\n\n    const parts: FunnelPart<D>[] = useMemo(() => {\n        const enhancedParts = data.map((datum, index) => {\n            const isCurrent = datum.id === currentPartId\n            const sizeValue = getSize(datum)\n\n            let partWidth\n            let partHeight\n            let y0, x0\n\n            if (direction === 'vertical') {\n                partWidth = sizeValue\n                partHeight = bandScale.bandwidth\n                x0 = paddingBefore + (innerWidth - partWidth) * 0.5\n                y0 = bandScale(index)\n            } else {\n                partWidth = bandScale.bandwidth\n                partHeight = sizeValue\n                x0 = bandScale(index)\n                y0 = paddingBefore + (innerHeight - partHeight) * 0.5\n            }\n\n            const x1 = x0 + partWidth\n            const x = x0 + partWidth * 0.5\n            const y1 = y0 + partHeight\n            const y = y0 + partHeight * 0.5\n\n            const part: FunnelPart<D> = {\n                data: datum,\n                width: partWidth,\n                height: partHeight,\n                color: getColor(datum),\n                fillOpacity,\n                borderWidth:\n                    isCurrent && currentBorderWidth !== undefined\n                        ? currentBorderWidth\n                        : borderWidth,\n                borderOpacity,\n                formattedValue: formatValue(datum.value),\n                isCurrent,\n                x,\n                x0,\n                x1,\n                y,\n                y0,\n                y1,\n                borderColor: '',\n                labelColor: '',\n                points: [],\n                areaPoints: [],\n                borderPoints: [],\n            }\n\n            part.borderColor = getBorderColor(part)\n            part.labelColor = getLabelColor(part)\n\n            return part\n        })\n\n        const shapeBlending = rawShapeBlending / 2\n\n        enhancedParts.forEach((part, index) => {\n            const nextPart = enhancedParts[index + 1]\n\n            if (direction === 'vertical') {\n                part.points.push({ x: part.x0, y: part.y0 })\n                part.points.push({ x: part.x1, y: part.y0 })\n                if (nextPart) {\n                    part.points.push({ x: nextPart.x1, y: part.y1 })\n                    part.points.push({ x: nextPart.x0, y: part.y1 })\n                } else {\n                    part.points.push({ x: part.points[1].x, y: part.y1 })\n                    part.points.push({ x: part.points[0].x, y: part.y1 })\n                }\n                if (part.isCurrent) {\n                    part.points[0].x -= currentPartSizeExtension\n                    part.points[1].x += currentPartSizeExtension\n                    part.points[2].x += currentPartSizeExtension\n                    part.points[3].x -= currentPartSizeExtension\n                }\n\n                part.areaPoints = [\n                    {\n                        x: 0,\n                        x0: part.points[0].x,\n                        x1: part.points[1].x,\n                        y: part.y0,\n                        y0: 0,\n                        y1: 0,\n                    },\n                ]\n                part.areaPoints.push({\n                    ...part.areaPoints[0],\n                    y: part.y0 + part.height * shapeBlending,\n                })\n                const lastAreaPoint = {\n                    x: 0,\n                    x0: part.points[3].x,\n                    x1: part.points[2].x,\n                    y: part.y1,\n                    y0: 0,\n                    y1: 0,\n                }\n                part.areaPoints.push({\n                    ...lastAreaPoint,\n                    y: part.y1 - part.height * shapeBlending,\n                })\n                part.areaPoints.push(lastAreaPoint)\n                ;[0, 1, 2, 3].map(index => {\n                    part.borderPoints.push({\n                        x: part.areaPoints[index].x0,\n                        y: part.areaPoints[index].y,\n                    })\n                })\n                part.borderPoints.push(null)\n                ;[3, 2, 1, 0].map(index => {\n                    part.borderPoints.push({\n                        x: part.areaPoints[index].x1,\n                        y: part.areaPoints[index].y,\n                    })\n                })\n            } else {\n                part.points.push({ x: part.x0, y: part.y0 })\n                if (nextPart) {\n                    part.points.push({ x: part.x1, y: nextPart.y0 })\n                    part.points.push({ x: part.x1, y: nextPart.y1 })\n                } else {\n                    part.points.push({ x: part.x1, y: part.y0 })\n                    part.points.push({ x: part.x1, y: part.y1 })\n                }\n                part.points.push({ x: part.x0, y: part.y1 })\n                if (part.isCurrent) {\n                    part.points[0].y -= currentPartSizeExtension\n                    part.points[1].y -= currentPartSizeExtension\n                    part.points[2].y += currentPartSizeExtension\n                    part.points[3].y += currentPartSizeExtension\n                }\n\n                part.areaPoints = [\n                    {\n                        x: part.x0,\n                        x0: 0,\n                        x1: 0,\n                        y: 0,\n                        y0: part.points[0].y,\n                        y1: part.points[3].y,\n                    },\n                ]\n                part.areaPoints.push({\n                    ...part.areaPoints[0],\n                    x: part.x0 + part.width * shapeBlending,\n                })\n                const lastAreaPoint = {\n                    x: part.x1,\n                    x0: 0,\n                    x1: 0,\n                    y: 0,\n                    y0: part.points[1].y,\n                    y1: part.points[2].y,\n                }\n                part.areaPoints.push({\n                    ...lastAreaPoint,\n                    x: part.x1 - part.width * shapeBlending,\n                })\n                part.areaPoints.push(lastAreaPoint)\n                ;[0, 1, 2, 3].map(index => {\n                    part.borderPoints.push({\n                        x: part.areaPoints[index].x,\n                        y: part.areaPoints[index].y0,\n                    })\n                })\n                part.borderPoints.push(null)\n                ;[3, 2, 1, 0].map(index => {\n                    part.borderPoints.push({\n                        x: part.areaPoints[index].x,\n                        y: part.areaPoints[index].y1,\n                    })\n                })\n            }\n        })\n\n        return enhancedParts\n    }, [\n        data,\n        direction,\n        bandScale,\n        innerWidth,\n        innerHeight,\n        paddingBefore,\n        rawShapeBlending,\n        getColor,\n        formatValue,\n        getBorderColor,\n        getLabelColor,\n        currentPartId,\n        borderOpacity,\n        borderWidth,\n        currentBorderWidth,\n        currentPartSizeExtension,\n        fillOpacity,\n        getSize,\n    ])\n\n    const { showTooltipFromEvent, hideTooltip } = useTooltip()\n    const partsWithHandlers = useMemo(\n        () =>\n            computePartsHandlers<D>({\n                parts,\n                setCurrentPartId,\n                isInteractive,\n                onMouseEnter,\n                onMouseLeave,\n                onMouseMove,\n                onClick,\n                showTooltipFromEvent,\n                hideTooltip,\n                tooltip,\n            }),\n        [\n            parts,\n            setCurrentPartId,\n            isInteractive,\n            onMouseEnter,\n            onMouseLeave,\n            onMouseMove,\n            onClick,\n            showTooltipFromEvent,\n            hideTooltip,\n            tooltip,\n        ]\n    )\n\n    const [beforeSeparators, afterSeparators] = useMemo(\n        () =>\n            computeSeparators({\n                parts,\n                direction,\n                width,\n                height,\n                spacing,\n                enableBeforeSeparators,\n                beforeSeparatorOffset,\n                enableAfterSeparators,\n                afterSeparatorOffset,\n            }),\n        [\n            parts,\n            direction,\n            width,\n            height,\n            spacing,\n            enableBeforeSeparators,\n            beforeSeparatorOffset,\n            enableAfterSeparators,\n            afterSeparatorOffset,\n        ]\n    )\n\n    const customLayerProps: FunnelCustomLayerProps<D> = useMemo(\n        () => ({\n            width,\n            height,\n            parts: partsWithHandlers,\n            areaGenerator,\n            borderGenerator,\n            beforeSeparators,\n            afterSeparators,\n            setCurrentPartId,\n        }),\n        [\n            width,\n            height,\n            partsWithHandlers,\n            areaGenerator,\n            borderGenerator,\n            beforeSeparators,\n            afterSeparators,\n            setCurrentPartId,\n        ]\n    )\n\n    return {\n        parts: partsWithHandlers,\n        areaGenerator,\n        borderGenerator,\n        beforeSeparators,\n        afterSeparators,\n        setCurrentPartId,\n        currentPartId,\n        customLayerProps,\n    }\n}\n\nexport const useFunnelAnnotations = <D extends FunnelDatum>(\n    parts: FunnelPart<D>[],\n    annotations: FunnelCommonProps<D>['annotations']\n) =>\n    useAnnotations<FunnelPart<D>>({\n        data: parts,\n        annotations,\n        getPosition: (part: FunnelPart<D>) => ({\n            x: part.x,\n            y: part.y,\n        }),\n        getDimensions: (part: FunnelPart<D>) => {\n            const width = part.width\n            const height = part.height\n\n            return { size: Math.max(width, height), width, height }\n        },\n    })\n","import { useSpring, animated } from '@react-spring/web'\nimport { useAnimatedPath, useMotionConfig } from '@nivo/core'\nimport {\n    FunnelDatum,\n    FunnelPartWithHandlers,\n    FunnelAreaGenerator,\n    FunnelBorderGenerator,\n} from './types'\n\nexport interface PartProps<D extends FunnelDatum> {\n    part: FunnelPartWithHandlers<D>\n    areaGenerator: FunnelAreaGenerator\n    borderGenerator: FunnelBorderGenerator\n}\n\nexport const Part = <D extends FunnelDatum>({\n    part,\n    areaGenerator,\n    borderGenerator,\n}: PartProps<D>) => {\n    const { animate, config: motionConfig } = useMotionConfig()\n\n    const animatedAreaPath = useAnimatedPath(areaGenerator(part.areaPoints) as string)\n    const animatedBorderPath = useAnimatedPath(borderGenerator(part.borderPoints) as string)\n    const animatedProps = useSpring({\n        areaColor: part.color,\n        borderWidth: part.borderWidth,\n        borderColor: part.borderColor,\n        config: motionConfig,\n        immediate: !animate,\n    })\n\n    return (\n        <>\n            {part.borderWidth > 0 && (\n                <animated.path\n                    d={animatedBorderPath}\n                    stroke={animatedProps.borderColor}\n                    strokeWidth={animatedProps.borderWidth}\n                    strokeOpacity={part.borderOpacity}\n                    fill=\"none\"\n                />\n            )}\n            <animated.path\n                d={animatedAreaPath}\n                fill={animatedProps.areaColor}\n                fillOpacity={part.fillOpacity}\n                onMouseEnter={part.onMouseEnter}\n                onMouseLeave={part.onMouseLeave}\n                onMouseMove={part.onMouseMove}\n                onClick={part.onClick}\n            />\n        </>\n    )\n}\n","import { Part } from './Part'\nimport {\n    FunnelPartWithHandlers,\n    FunnelAreaGenerator,\n    FunnelBorderGenerator,\n    FunnelDatum,\n} from './types'\n\ninterface PartsProps<D extends FunnelDatum> {\n    parts: FunnelPartWithHandlers<D>[]\n    areaGenerator: FunnelAreaGenerator\n    borderGenerator: FunnelBorderGenerator\n}\n\nexport const Parts = <D extends FunnelDatum>({\n    parts,\n    areaGenerator,\n    borderGenerator,\n}: PartsProps<D>) => (\n    <>\n        {parts.map(part => (\n            <Part<D>\n                key={part.data.id}\n                part={part}\n                areaGenerator={areaGenerator}\n                borderGenerator={borderGenerator}\n            />\n        ))}\n    </>\n)\n","import { useSpring, animated } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { FunnelDatum, FunnelPart } from './types'\n\ninterface PartLabelProps<D extends FunnelDatum> {\n    part: FunnelPart<D>\n}\n\nexport const PartLabel = <D extends FunnelDatum>({ part }: PartLabelProps<D>) => {\n    const theme = useTheme()\n    const { animate, config: motionConfig } = useMotionConfig()\n\n    const animatedProps = useSpring({\n        transform: `translate(${part.x}, ${part.y})`,\n        color: part.labelColor,\n        config: motionConfig,\n        immediate: !animate,\n    })\n\n    return (\n        <animated.g transform={animatedProps.transform}>\n            <Text\n                textAnchor=\"middle\"\n                dominantBaseline=\"central\"\n                style={{\n                    ...theme.labels.text,\n                    fill: animatedProps.color,\n                    pointerEvents: 'none',\n                }}\n            >\n                {part.formattedValue}\n            </Text>\n        </animated.g>\n    )\n}\n","import { PartLabel } from './PartLabel'\nimport { FunnelDatum, FunnelPart } from './types'\n\ninterface PartLabelsProps<D extends FunnelDatum> {\n    parts: FunnelPart<D>[]\n}\n\nexport const PartLabels = <D extends FunnelDatum>({ parts }: PartLabelsProps<D>) => (\n    <>\n        {parts.map(part => (\n            <PartLabel key={part.data.id} part={part} />\n        ))}\n    </>\n)\n","import { useSpring, animated } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { SeparatorProps as SeparatorType } from './types'\n\ninterface SeparatorProps {\n    separator: SeparatorType\n}\n\nexport const Separator = ({ separator }: SeparatorProps) => {\n    const theme = useTheme()\n    const { animate, config: motionConfig } = useMotionConfig()\n\n    const animatedProps = useSpring({\n        x1: separator.x0,\n        x2: separator.x1,\n        y1: separator.y0,\n        y2: separator.y1,\n        config: motionConfig,\n        immediate: !animate,\n    })\n\n    return (\n        <animated.line\n            x1={animatedProps.x1}\n            x2={animatedProps.x2}\n            y1={animatedProps.y1}\n            y2={animatedProps.y2}\n            fill=\"none\"\n            {...(theme.grid.line as any)}\n        />\n    )\n}\n","import { Separator } from './Separator'\nimport { SeparatorProps as SeparatorType } from './types'\n\ninterface SeparatorsProps {\n    beforeSeparators: SeparatorType[]\n    afterSeparators: SeparatorType[]\n}\n\nexport const Separators = ({ beforeSeparators, afterSeparators }: SeparatorsProps) => (\n    <>\n        {beforeSeparators.map(separator => (\n            <Separator key={separator.partId} separator={separator} />\n        ))}\n        {afterSeparators.map(separator => (\n            <Separator key={separator.partId} separator={separator} />\n        ))}\n    </>\n)\n","import { Annotation } from '@nivo/annotations'\nimport { useFunnelAnnotations } from './hooks'\nimport { FunnelDatum, FunnelPart } from './types'\n\ninterface FunnelAnnotationsProps<D extends FunnelDatum> {\n    parts: FunnelPart<D>[]\n    annotations: any[]\n}\n\nexport const FunnelAnnotations = <D extends FunnelDatum>({\n    parts,\n    annotations,\n}: FunnelAnnotationsProps<D>) => {\n    const boundAnnotations = useFunnelAnnotations<D>(parts, annotations)\n\n    return (\n        <>\n            {boundAnnotations.map((annotation, i) => (\n                <Annotation key={i} {...annotation} />\n            ))}\n        </>\n    )\n}\n","import { createElement, Fragment, ReactNode, forwardRef, Ref, ReactElement } from 'react'\nimport { SvgWrapper, Container, useDimensions, WithChartRef } from '@nivo/core'\nimport { svgDefaultProps } from './props'\nimport { useFunnel } from './hooks'\nimport { Parts } from './Parts'\nimport { PartLabels } from './PartLabels'\nimport { Separators } from './Separators'\nimport { FunnelAnnotations } from './FunnelAnnotations'\nimport { FunnelDatum, FunnelLayerId, FunnelSvgProps } from './types'\n\ntype InnerFunnelProps<D extends FunnelDatum> = Omit<\n    FunnelSvgProps<D>,\n    'animate' | 'motionConfig' | 'renderWrapper' | 'theme'\n> & {\n    forwardedRef: Ref<SVGSVGElement>\n}\n\nconst InnerFunnel = <D extends FunnelDatum>({\n    data,\n    width,\n    height,\n    margin: partialMargin,\n    direction = svgDefaultProps.direction,\n    interpolation = svgDefaultProps.interpolation,\n    spacing = svgDefaultProps.spacing,\n    shapeBlending = svgDefaultProps.shapeBlending,\n    valueFormat,\n    colors = svgDefaultProps.colors,\n    size = svgDefaultProps.size,\n    fillOpacity = svgDefaultProps.fillOpacity,\n    borderWidth = svgDefaultProps.borderWidth,\n    borderColor = svgDefaultProps.borderColor,\n    borderOpacity = svgDefaultProps.borderOpacity,\n    enableLabel = svgDefaultProps.enableLabel,\n    labelColor = svgDefaultProps.labelColor,\n    enableBeforeSeparators = svgDefaultProps.enableBeforeSeparators,\n    beforeSeparatorLength = svgDefaultProps.beforeSeparatorLength,\n    beforeSeparatorOffset = svgDefaultProps.beforeSeparatorOffset,\n    enableAfterSeparators = svgDefaultProps.enableAfterSeparators,\n    afterSeparatorLength = svgDefaultProps.afterSeparatorLength,\n    afterSeparatorOffset = svgDefaultProps.afterSeparatorOffset,\n    layers = svgDefaultProps.layers,\n    annotations = svgDefaultProps.annotations,\n    isInteractive = svgDefaultProps.isInteractive,\n    currentPartSizeExtension = svgDefaultProps.currentPartSizeExtension,\n    currentBorderWidth,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    role = svgDefaultProps.role,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    forwardedRef,\n}: InnerFunnelProps<D>) => {\n    const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const {\n        areaGenerator,\n        borderGenerator,\n        parts,\n        beforeSeparators,\n        afterSeparators,\n        customLayerProps,\n    } = useFunnel<D>({\n        data,\n        width: innerWidth,\n        height: innerHeight,\n        direction,\n        interpolation,\n        spacing,\n        shapeBlending,\n        valueFormat,\n        colors,\n        size,\n        fillOpacity,\n        borderWidth,\n        borderColor,\n        borderOpacity,\n        labelColor,\n        enableBeforeSeparators,\n        beforeSeparatorLength,\n        beforeSeparatorOffset,\n        enableAfterSeparators,\n        afterSeparatorLength,\n        afterSeparatorOffset,\n        isInteractive,\n        currentPartSizeExtension,\n        currentBorderWidth,\n        onMouseEnter,\n        onMouseMove,\n        onMouseLeave,\n        onClick,\n        tooltip,\n    })\n\n    const layerById: Record<FunnelLayerId, ReactNode> = {\n        separators: null,\n        parts: null,\n        annotations: null,\n        labels: null,\n    }\n\n    if (layers.includes('separators')) {\n        layerById.separators = (\n            <Separators\n                key=\"separators\"\n                beforeSeparators={beforeSeparators}\n                afterSeparators={afterSeparators}\n            />\n        )\n    }\n\n    if (layers.includes('parts')) {\n        layerById.parts = (\n            <Parts<D>\n                key=\"parts\"\n                parts={parts}\n                areaGenerator={areaGenerator}\n                borderGenerator={borderGenerator}\n            />\n        )\n    }\n\n    if (layers?.includes('annotations')) {\n        layerById.annotations = (\n            <FunnelAnnotations<D> key=\"annotations\" parts={parts} annotations={annotations} />\n        )\n    }\n\n    if (layers.includes('labels') && enableLabel) {\n        layerById.labels = <PartLabels<D> key=\"labels\" parts={parts} />\n    }\n\n    return (\n        <SvgWrapper\n            width={outerWidth}\n            height={outerHeight}\n            margin={margin}\n            role={role}\n            ariaLabel={ariaLabel}\n            ariaLabelledBy={ariaLabelledBy}\n            ariaDescribedBy={ariaDescribedBy}\n            ref={forwardedRef}\n        >\n            {layers.map((layer, i) => {\n                if (typeof layer === 'function') {\n                    return <Fragment key={i}>{createElement(layer, customLayerProps)}</Fragment>\n                }\n\n                return layerById?.[layer] ?? null\n            })}\n        </SvgWrapper>\n    )\n}\n\nexport const Funnel = forwardRef(\n    <D extends FunnelDatum = FunnelDatum>(\n        {\n            isInteractive = svgDefaultProps.isInteractive,\n            animate = svgDefaultProps.animate,\n            motionConfig = svgDefaultProps.motionConfig,\n            theme,\n            renderWrapper,\n            ...otherProps\n        }: FunnelSvgProps<D>,\n        ref: Ref<SVGSVGElement>\n    ) => (\n        <Container\n            {...{\n                animate,\n                isInteractive,\n                motionConfig,\n                renderWrapper,\n                theme,\n            }}\n        >\n            <InnerFunnel<D> isInteractive={isInteractive} {...otherProps} forwardedRef={ref} />\n        </Container>\n    )\n) as <D extends FunnelDatum = FunnelDatum>(\n    props: WithChartRef<FunnelSvgProps<D>, SVGSVGElement>\n) => ReactElement\n","import { forwardRef, Ref, ReactElement } from 'react'\nimport { ResponsiveProps, ResponsiveWrapper, WithChartRef } from '@nivo/core'\nimport { FunnelDatum, FunnelSvgProps } from './types'\nimport { Funnel } from './Funnel'\n\nexport const ResponsiveFunnel = forwardRef(\n    <D extends FunnelDatum = FunnelDatum>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<FunnelSvgProps<D>>,\n        ref: Ref<SVGSVGElement>\n    ) => (\n        <ResponsiveWrapper\n            defaultWidth={defaultWidth}\n            defaultHeight={defaultHeight}\n            onResize={onResize}\n            debounceResize={debounceResize}\n        >\n            {({ width, height }) => (\n                <Funnel<D> width={width} height={height} {...props} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <D extends FunnelDatum = FunnelDatum>(\n    props: WithChartRef<ResponsiveProps<FunnelSvgProps<D>>, SVGSVGElement>\n) => ReactElement\n"],"names":["svgDefaultProps","layers","direction","interpolation","spacing","shapeBlending","colors","scheme","size","undefined","fillOpacity","borderWidth","borderColor","from","borderOpacity","enableLabel","labelColor","theme","enableBeforeSeparators","beforeSeparatorLength","beforeSeparatorOffset","enableAfterSeparators","afterSeparatorLength","afterSeparatorOffset","annotations","isInteractive","currentPartSizeExtension","role","animate","motionDefaultProps","motionConfig","config","PartTooltip","_ref","part","_jsx","BasicTooltip","id","data","label","value","formattedValue","color","enableChip","computeShapeGenerators","areaGenerator","area","curve","curveBasis","curveLinear","x0","d","x1","y","y0","y1","x","line","defined","computeScales","bandScaleSize","linearScaleSize","width","height","bandwidth","length","bandScale","index","allValues","map","scaleLinear","domain","Math","max","apply","range","computeSeparators","_ref2","parts","beforeSeparators","afterSeparators","lastPart","forEach","push","partId","_extends","computePartsHandlers","_ref3","setCurrentPartId","onMouseEnter","onMouseLeave","onMouseMove","onClick","showTooltipFromEvent","hideTooltip","_ref3$tooltip","tooltip","event","createElement","getSizeGenerator","linearScale","Array","isArray","scale","scaleOrdinal","datum","Number","String","isPlainObject","isSizeSpecDatumProperty","get","Error","useSize","useMemo","useFunnel","_ref4","innerWidth","innerHeight","_ref4$direction","defaults","_ref4$interpolation","_ref4$spacing","_ref4$shapeBlending","rawShapeBlending","valueFormat","_ref4$colors","_ref4$size","_ref4$fillOpacity","_ref4$borderWidth","_ref4$borderColor","_ref4$borderOpacity","_ref4$labelColor","_ref4$enableBeforeSep","_ref4$beforeSeparator","_ref4$beforeSeparator2","_ref4$enableAfterSepa","_ref4$afterSeparatorL","_ref4$afterSeparatorO","_ref4$isInteractive","_ref4$currentPartSize","currentBorderWidth","useTheme","getColor","useOrdinalColorScale","getBorderColor","useInheritedColor","getLabelColor","formatValue","useValueFormatter","_useMemo","borderGenerator","paddingBefore","paddingAfter","_useMemo2","getSize","_useState","useState","currentPartId","enhancedParts","partWidth","partHeight","isCurrent","sizeValue","points","areaPoints","borderPoints","nextPart","lastAreaPoint","_useTooltip","useTooltip","partsWithHandlers","_useMemo3","customLayerProps","useFunnelAnnotations","useAnnotations","getPosition","getDimensions","Part","_useMotionConfig","useMotionConfig","animatedAreaPath","useAnimatedPath","animatedBorderPath","animatedProps","useSpring","areaColor","immediate","_jsxs","_Fragment","children","animated","path","stroke","strokeWidth","strokeOpacity","fill","Parts","PartLabel","transform","g","Text","textAnchor","dominantBaseline","style","labels","text","pointerEvents","PartLabels","Separator","separator","x2","y2","grid","Separators","FunnelAnnotations","boundAnnotations","annotation","i","Annotation","InnerFunnel","partialMargin","margin","_ref$direction","_ref$interpolation","_ref$spacing","_ref$shapeBlending","_ref$colors","_ref$size","_ref$fillOpacity","_ref$borderWidth","_ref$borderColor","_ref$borderOpacity","_ref$enableLabel","_ref$labelColor","_ref$enableBeforeSepa","_ref$beforeSeparatorL","_ref$beforeSeparatorO","_ref$enableAfterSepar","_ref$afterSeparatorLe","_ref$afterSeparatorOf","_ref$layers","_ref$annotations","_ref$isInteractive","_ref$currentPartSizeE","_ref$role","ariaLabel","ariaLabelledBy","ariaDescribedBy","forwardedRef","_useDimensions","useDimensions","outerWidth","outerHeight","_useFunnel","layerById","separators","includes","SvgWrapper","ref","layer","_layerById$layer","Fragment","Funnel","forwardRef","_ref2$isInteractive","_ref2$animate","_ref2$motionConfig","renderWrapper","otherProps","_objectWithoutPropertiesLoose","_excluded","Container","ResponsiveFunnel","defaultWidth","defaultHeight","onResize","debounceResize","props","ResponsiveWrapper"],"mappings":"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"}