{"version":3,"file":"nivo-waffle.mjs","sources":["../src/WaffleCell.tsx","../src/defaults.ts","../src/WaffleTooltip.tsx","../src/WaffleCellHtml.tsx","../src/types.ts","../src/hooks.ts","../src/WaffleCells.tsx","../src/WaffleArea.tsx","../src/WaffleAreas.tsx","../src/Waffle.tsx","../src/ResponsiveWaffle.tsx","../src/WaffleCellsHtml.tsx","../src/WaffleAreaHtml.tsx","../src/WaffleAreasHtml.tsx","../src/WaffleHtml.tsx","../src/ResponsiveWaffleHtml.tsx","../src/WaffleCanvas.tsx","../src/ResponsiveWaffleCanvas.tsx"],"sourcesContent":["import { animated } from '@react-spring/web'\nimport { Datum, CellComponentProps } from './types'\n\nexport const WaffleCell = <D extends Datum>({\n    cell,\n    animatedProps,\n    borderRadius,\n    borderWidth,\n    testIdPrefix,\n}: CellComponentProps<D>) => (\n    <animated.rect\n        x={animatedProps.x}\n        y={animatedProps.y}\n        width={animatedProps.size}\n        height={animatedProps.size}\n        rx={borderRadius}\n        ry={borderRadius}\n        opacity={animatedProps.opacity}\n        fill={cell.fill || animatedProps.color}\n        stroke={animatedProps.borderColor}\n        strokeWidth={borderWidth}\n        data-test-id={testIdPrefix ? `${testIdPrefix}.cell_${cell.key}` : undefined}\n    />\n)\n","import { CommonProps, Datum, WaffleHtmlLayer, WaffleSvgLayer } from './types'\nimport { WaffleCell } from './WaffleCell'\nimport { WaffleCellHtml } from './WaffleCellHtml'\nimport { WaffleTooltip } from './WaffleTooltip'\n\nexport const commonDefaultProps: Omit<\n    CommonProps<Datum>,\n    | 'valueFormat'\n    | 'margin'\n    | 'theme'\n    | 'labelFormat'\n    | 'onMouseEnter'\n    | 'onMouseMove'\n    | 'onMouseLeave'\n    | 'onClick'\n    | 'forwardLegendData'\n    | 'renderWrapper'\n    | 'ariaLabel'\n    | 'ariaLabelledBy'\n    | 'ariaDescribedBy'\n> = {\n    hiddenIds: [],\n    fillDirection: 'top',\n    padding: 1,\n    colors: { scheme: 'nivo' },\n    emptyColor: '#cccccc',\n    emptyOpacity: 1,\n    borderRadius: 0,\n    borderWidth: 0,\n    borderColor: { from: 'color', modifiers: [['darker', 1]] },\n    isInteractive: true,\n    tooltip: WaffleTooltip,\n    role: 'img',\n    animate: true,\n    motionConfig: 'gentle',\n}\n\nexport const svgDefaultProps = {\n    ...commonDefaultProps,\n    layers: ['cells', 'areas', 'legends'] as WaffleSvgLayer<Datum>[],\n    cellComponent: WaffleCell,\n    defs: [],\n    fill: [],\n    legends: [],\n    motionStagger: 0,\n}\n\nexport const htmlDefaultProps = {\n    ...commonDefaultProps,\n    layers: ['cells', 'areas'] as WaffleHtmlLayer<Datum>[],\n    cellComponent: WaffleCellHtml,\n    defs: [],\n    fill: [],\n    legends: [],\n    motionStagger: 0,\n}\n\nexport const canvasDefaultProps = {\n    ...commonDefaultProps,\n    legends: [],\n    pixelRatio: typeof window !== 'undefined' ? (window.devicePixelRatio ?? 1) : 1,\n}\n","import { BasicTooltip } from '@nivo/tooltip'\nimport { Datum, TooltipProps } from './types'\n\nexport const WaffleTooltip = <RawDatum extends Datum>({ data }: TooltipProps<RawDatum>) => (\n    <BasicTooltip\n        id={data.label}\n        value={data.formattedValue}\n        enableChip={true}\n        color={data.color}\n    />\n)\n","import { animated } from '@react-spring/web'\nimport { Datum, CellComponentProps } from './types'\n\nexport const WaffleCellHtml = <D extends Datum>({\n    cell,\n    animatedProps,\n    borderRadius,\n    borderWidth,\n    testIdPrefix,\n}: CellComponentProps<D>) => (\n    <animated.div\n        style={{\n            position: 'absolute',\n            top: animatedProps.y,\n            left: animatedProps.x,\n            width: animatedProps.size,\n            height: animatedProps.size,\n            background: animatedProps.color,\n            opacity: animatedProps.opacity,\n            boxSizing: 'content-box',\n            borderStyle: 'solid',\n            borderRadius: `${borderRadius}px`,\n            borderWidth: `${borderWidth}px`,\n            borderColor: animatedProps.borderColor,\n        }}\n        data-test-id={testIdPrefix ? `${testIdPrefix}${cell.key}` : undefined}\n    />\n)\n","import { AriaAttributes, FunctionComponent, MouseEvent } from 'react'\nimport { SpringValues } from '@react-spring/web'\nimport { Box, Dimensions, SvgDefsAndFill, MotionProps, ValueFormat } from '@nivo/core'\nimport { PartialTheme } from '@nivo/theming'\nimport { InheritedColorConfig, OrdinalColorScaleConfig } from '@nivo/colors'\nimport { LegendProps } from '@nivo/legends'\nimport { Vertex, GridCell, GridFillDirection } from '@nivo/grid'\n\nexport type DatumId = string | number\n\nexport interface Datum {\n    id: string\n    label: string\n    value: number\n}\n\nexport interface ComputedDatum<D extends Datum> extends Datum {\n    data: D\n    isHidden: boolean\n    formattedValue: string\n    groupIndex: number\n    // Index of the starting cell\n    startAt: number\n    // Index of the ending cell\n    endAt: number\n    polygons: readonly Vertex[][]\n    color: string\n    // Used for patterns & gradients\n    fill?: string\n    borderColor: string\n}\n\n// Used for cells without data, considered empty.\nexport interface EmptyCell extends GridCell {\n    color: string\n    // Used for patterns & gradients\n    fill?: string\n    opacity: number\n    borderColor: string\n}\n\n// Used for cells having data.\nexport interface DataCell<D extends Datum> extends EmptyCell {\n    data: ComputedDatum<D>\n}\n\nexport type Cell<D extends Datum> = EmptyCell | DataCell<D>\n\nexport const isDataCell = <D extends Datum>(cell: Cell<D>): cell is DataCell<D> => {\n    return (cell as DataCell<D>).data !== undefined\n}\n\nexport type CellAnimatedProps = {\n    x: number\n    y: number\n    size: number\n    color: string\n    opacity: number\n    borderColor: string\n}\n\nexport interface LegendDatum<D extends Datum = Datum> {\n    id: D['id']\n    label: D['label']\n    color: string\n    data: ComputedDatum<D>\n}\n\n/**\n * When using a custom cell component, if you want to preserve transitions,\n * you should use an SVG element from `@react-spring/web`, for example\n * `animated.rect`.\n */\nexport interface CellComponentProps<D extends Datum> {\n    cell: Cell<D>\n    padding: number\n    animatedProps: SpringValues<CellAnimatedProps>\n    borderRadius: number\n    borderWidth: number\n    testIdPrefix?: string\n}\nexport type CellComponent<D extends Datum> = FunctionComponent<CellComponentProps<D>>\n\n// All those props are required\nexport interface DataProps<D extends Datum> {\n    data: readonly D[]\n    total: number\n    rows: number\n    columns: number\n}\n\nexport interface TooltipProps<D extends Datum> {\n    data: ComputedDatum<D>\n}\nexport type TooltipComponent<D extends Datum> = FunctionComponent<TooltipProps<D>>\n\n// Most of those props are optional for the public API,\n// but required internally, using defaults.\nexport interface CommonProps<D extends Datum> extends MotionProps {\n    hiddenIds: readonly D['id'][]\n    margin: Box\n    valueFormat?: ValueFormat<D['value']>\n    fillDirection: GridFillDirection\n    padding: number\n    theme: PartialTheme\n    colors: OrdinalColorScaleConfig<D>\n    emptyColor: string\n    emptyOpacity: number\n    borderRadius: number\n    borderWidth: number\n    borderColor: InheritedColorConfig<ComputedDatum<D> | { color: string }>\n    isInteractive: boolean\n    tooltip: TooltipComponent<D>\n    forwardLegendData: (data: LegendDatum<D>[]) => void\n    role: string\n    renderWrapper: boolean\n    ariaLabel: AriaAttributes['aria-label']\n    ariaLabelledBy: AriaAttributes['aria-labelledby']\n    ariaDescribedBy: AriaAttributes['aria-describedby']\n}\n\nexport type MouseHandler<D extends Datum, E extends Element> = (\n    data: ComputedDatum<D>,\n    event: MouseEvent<E>\n) => void\n\nexport interface MouseHandlers<D extends Datum, E extends Element> {\n    onClick: MouseHandler<D, E>\n    onMouseEnter: MouseHandler<D, E>\n    onMouseMove: MouseHandler<D, E>\n    onMouseLeave: MouseHandler<D, E>\n}\n\nexport type LayerId = 'cells' | 'areas' | 'legends'\n\nexport interface CustomLayerProps<D extends Datum> {\n    cells: readonly Cell<D>[]\n    computedData: readonly ComputedDatum<D>[]\n}\n\nexport type WaffleSvgLayer<D extends Datum> = LayerId | FunctionComponent<CustomLayerProps<D>>\n\nexport type WaffleSvgProps<D extends Datum = Datum> = DataProps<D> &\n    Dimensions &\n    Partial<CommonProps<D>> &\n    SvgDefsAndFill<ComputedDatum<D>> &\n    Partial<MouseHandlers<D, SVGGeometryElement>> & {\n        layers?: readonly WaffleSvgLayer<D>[]\n        legends?: readonly LegendProps[]\n        cellComponent?: CellComponent<D>\n        motionStagger?: number\n        testIdPrefix?: string\n    }\n\nexport type HtmlLayerId = Exclude<LayerId, 'legends'>\n\nexport type WaffleHtmlLayer<D extends Datum> = HtmlLayerId | FunctionComponent<CustomLayerProps<D>>\n\nexport type WaffleHtmlProps<D extends Datum = Datum> = DataProps<D> &\n    Dimensions &\n    Partial<CommonProps<D>> &\n    Partial<MouseHandlers<D, HTMLElement>> & {\n        layers?: readonly WaffleHtmlLayer<D>[]\n        cellComponent?: CellComponent<D>\n        motionStagger?: number\n        testIdPrefix?: string\n    }\n\nexport type CanvasProps<D extends Datum = Datum> = DataProps<D> &\n    Dimensions &\n    Partial<CommonProps<D>> &\n    Partial<Omit<MouseHandlers<D, HTMLCanvasElement>, 'onMouseEnter' | 'onMouseLeave'>> & {\n        legends?: readonly LegendProps[]\n        pixelRatio?: number\n    }\n","import { createElement, MouseEvent, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useTransition } from '@react-spring/web'\nimport { line as d3Line, curveLinearClosed } from 'd3-shape'\nimport {\n    useMotionConfig,\n    useValueFormatter,\n    // @ts-expect-error no types\n    bindDefs,\n} from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { useTooltip } from '@nivo/tooltip'\nimport { OrdinalColorScaleConfig, useInheritedColor, useOrdinalColorScale } from '@nivo/colors'\nimport { generateGrid, GridCell, GridFillDirection, Vertex, getCellsPolygons } from '@nivo/grid'\nimport {\n    CommonProps,\n    ComputedDatum,\n    Datum,\n    DataProps,\n    EmptyCell,\n    Cell,\n    DataCell,\n    isDataCell,\n    MouseHandlers,\n    TooltipComponent,\n    LegendDatum,\n    WaffleSvgProps,\n    CustomLayerProps,\n    CellAnimatedProps,\n} from './types'\nimport { commonDefaultProps } from './defaults'\n\n/**\n * Computes empty cells according to dimensions/layout/padding.\n * At this stage the cells aren't bound to any data.\n */\nexport const computeGrid = ({\n    width,\n    height,\n    rows,\n    columns,\n    fillDirection,\n    emptyColor,\n    emptyOpacity,\n    getBorderColor,\n}: {\n    width: number\n    height: number\n    rows: number\n    columns: number\n    fillDirection: GridFillDirection\n    emptyColor: string\n    emptyOpacity: number\n    getBorderColor: ReturnType<typeof useInheritedColor<{ color: string }>>\n}) => {\n    const borderColor = getBorderColor({ color: emptyColor })\n    const extend = (cell: GridCell, origin: [number, number]): EmptyCell => ({\n        ...cell,\n        x: origin[0] + cell.x,\n        y: origin[1] + cell.y,\n        color: emptyColor,\n        opacity: emptyOpacity,\n        borderColor,\n    })\n\n    // We do not apply the padding at this stage so that we can\n    // easily compute the polygon surrounding each \"area\"\n    // (all cells belonging to a specific datum), because they\n    // need to touch.\n    const { cells } = generateGrid<EmptyCell>({\n        width,\n        height,\n        rows,\n        columns,\n        fillDirection,\n        square: true,\n        extend,\n    })\n\n    return cells\n}\n\nexport const mergeCellsData = <RawDatum extends Datum>(\n    cells: EmptyCell[],\n    data: ComputedDatum<RawDatum>[]\n) => {\n    const cellsCopy: Cell<RawDatum>[] = cells.map(cell => ({ ...cell }))\n\n    data.forEach(datum => {\n        for (let index = datum.startAt; index < datum.endAt; index++) {\n            const cell = cellsCopy[index]\n            if (cell !== undefined) {\n                const cellWithData = cell as DataCell<RawDatum>\n                cellWithData.data = datum\n                cellWithData.color = datum.color\n                cellWithData.opacity = 1\n                cellWithData.borderColor = datum.borderColor\n\n                if (datum.fill) {\n                    cellWithData.fill = datum.fill\n                }\n            }\n        }\n    }, [])\n\n    return cellsCopy\n}\n\n/**\n * Assumes that cells ares sorted by group.\n */\nconst findPolygons = <D extends Datum>(grid: DataCell<D>[]) => {\n    const grouped = grid.reduce(\n        (acc, cell) => {\n            ;(acc[cell.data.id] = acc[cell.data.id] || []).push(cell)\n            return acc\n        },\n        {} as Record<string | number, DataCell<D>[]>\n    )\n\n    const polygons: Partial<Record<D['id'], Vertex[][]>> = {}\n    for (const [group, cells] of Object.entries(grouped)) {\n        polygons[group as D['id']] = getCellsPolygons(cells)\n    }\n\n    return polygons\n}\n\nexport const useWaffle = <D extends Datum = Datum>({\n    width,\n    height,\n    data,\n    hiddenIds,\n    valueFormat,\n    total,\n    rows,\n    columns,\n    fillDirection = commonDefaultProps.fillDirection,\n    colors = commonDefaultProps.colors as OrdinalColorScaleConfig<D>,\n    emptyColor = commonDefaultProps.emptyColor,\n    emptyOpacity = commonDefaultProps.emptyOpacity,\n    borderColor = commonDefaultProps.borderColor,\n    forwardLegendData,\n    // `defs` and `fill` are only supported for the SVG implementation\n    defs = [],\n    fill = [],\n}: Pick<\n    CommonProps<D>,\n    | 'hiddenIds'\n    | 'valueFormat'\n    | 'fillDirection'\n    | 'colors'\n    | 'emptyColor'\n    | 'emptyOpacity'\n    | 'borderColor'\n> &\n    Pick<WaffleSvgProps<D>, 'defs' | 'fill'> &\n    DataProps<D> & {\n        width: number\n        height: number\n        forwardLegendData?: CommonProps<D>['forwardLegendData']\n    }) => {\n    const formatValue = useValueFormatter(valueFormat)\n\n    const getColor = useOrdinalColorScale<D>(colors, 'id')\n    const theme = useTheme()\n    const getBorderColor = useInheritedColor(borderColor, theme)\n\n    const unit = total / (rows * columns)\n\n    const computedData: Array<ComputedDatum<D>> = useMemo(() => {\n        let currentPosition = 0\n\n        const enhancedData: ComputedDatum<D>[] = []\n\n        data.forEach((datum, groupIndex) => {\n            const isHidden = hiddenIds.includes(datum.id)\n\n            const startAt = currentPosition\n            let endAt = startAt\n            if (!isHidden) {\n                endAt = startAt + Math.round(datum.value / unit)\n            }\n            currentPosition = endAt\n\n            const color = getColor(datum)\n\n            const enhancedDatum: ComputedDatum<D> = {\n                id: datum.id,\n                isHidden,\n                label: datum.label,\n                value: datum.value,\n                formattedValue: formatValue(datum.value),\n                groupIndex,\n                startAt,\n                endAt,\n                color,\n                // Temporary, it's re-computed later as the inherited color\n                // needs the computed data.\n                borderColor: color,\n                data: datum,\n                polygons: [],\n            }\n            enhancedDatum.borderColor = getBorderColor(enhancedDatum)\n\n            enhancedData.push(enhancedDatum)\n        })\n\n        return enhancedData\n    }, [data, hiddenIds, unit, formatValue, getColor, getBorderColor])\n\n    // Please note that this also mutates `computedData`.\n    const boundDefs = useMemo(() => bindDefs(defs, computedData, fill), [computedData, defs, fill])\n\n    const emptyCells = useMemo(\n        () =>\n            computeGrid({\n                width,\n                height,\n                rows,\n                columns,\n                fillDirection,\n                emptyColor,\n                emptyOpacity,\n                getBorderColor,\n            }),\n        [width, height, rows, columns, fillDirection, emptyColor, emptyOpacity, getBorderColor]\n    )\n\n    const cells = useMemo(\n        () => mergeCellsData(emptyCells, computedData),\n        [emptyCells, computedData]\n    )\n\n    const polygons = useMemo(() => findPolygons(cells.filter(isDataCell)), [cells])\n    computedData.forEach(datum => {\n        if (datum.id in polygons) {\n            datum.polygons = polygons[datum.id as D['id']]!\n        }\n    })\n\n    const legendData: LegendDatum<D>[] = useMemo(() => {\n        const _legendData = computedData.map(datum => ({\n            id: datum.id,\n            label: datum.label,\n            color: datum.color,\n            // fill: datum.fill,\n            data: datum,\n        }))\n\n        // Adjust the legend items order according to `fillDirection`\n        // so that it's more natural to read.\n        if (['top', 'left'].includes(fillDirection)) {\n            _legendData.reverse()\n        }\n\n        return _legendData\n    }, [computedData, fillDirection])\n\n    // Forward the legends data if `forwardLegendData` is defined.\n    const forwardLegendDataRef = useRef(forwardLegendData)\n    useEffect(() => {\n        if (typeof forwardLegendDataRef.current !== 'function') return\n        forwardLegendDataRef.current(legendData)\n    }, [forwardLegendDataRef, legendData])\n\n    return {\n        cells,\n        computedData,\n        legendData,\n        getBorderColor,\n        boundDefs,\n    }\n}\n\n/**\n * This D3 path generator is used to compute the polygons\n * surrounding each group of cells attached to the same datum.\n */\nexport const useAreaPathGenerator = () => useMemo(() => d3Line().curve(curveLinearClosed), [])\n\n/**\n * Generate event handlers for both the SVG & HTML implementations,\n * for the canvas implementation, we don't need it because the current\n * cell is detected using a global event handler attached to the canvas itself.\n */\nexport const useAreaMouseHandlers = <D extends Datum, E extends Element>(\n    data: ComputedDatum<D>,\n    { onMouseEnter, onMouseMove, onMouseLeave, onClick }: Partial<MouseHandlers<D, E>>,\n    tooltip: TooltipComponent<D>\n) => {\n    const { showTooltipFromEvent, hideTooltip } = useTooltip()\n\n    const handleMouseEnter = useCallback(\n        (event: MouseEvent<E>) => {\n            showTooltipFromEvent(createElement(tooltip, { data }), event)\n            onMouseEnter?.(data, event)\n        },\n        [showTooltipFromEvent, tooltip, data, onMouseEnter]\n    )\n\n    const handleMouseMove = useCallback(\n        (event: MouseEvent<E>) => {\n            showTooltipFromEvent(createElement(tooltip, { data }), event)\n            onMouseMove?.(data, event)\n        },\n        [showTooltipFromEvent, tooltip, data, onMouseMove]\n    )\n\n    const handleMouseLeave = useCallback(\n        (event: MouseEvent<E>) => {\n            hideTooltip()\n            onMouseLeave?.(data, event)\n        },\n        [hideTooltip, data, onMouseLeave]\n    )\n\n    const handleClick = useCallback(\n        (event: MouseEvent<E>) => {\n            hideTooltip()\n            onClick?.(data, event)\n        },\n        [hideTooltip, data, onClick]\n    )\n\n    return {\n        handleMouseEnter,\n        handleMouseMove,\n        handleMouseLeave,\n        handleClick,\n    }\n}\n\n/**\n * Generate cells transitions for the SVG & HTML implementations.\n */\nexport const useAnimatedCells = <D extends Datum>({\n    cells,\n    padding,\n    motionStagger,\n}: {\n    cells: Cell<D>[]\n    padding: number\n    motionStagger: number\n}) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const getAnimatedProps = useMemo(\n        () =>\n            (cell: Cell<D>): CellAnimatedProps => ({\n                x: cell.x + padding / 2,\n                y: cell.y + padding / 2,\n                color: cell.color,\n                size: cell.width - padding,\n                opacity: cell.opacity,\n                borderColor: cell.borderColor,\n            }),\n        [padding]\n    )\n\n    return useTransition<Cell<D>, CellAnimatedProps>(cells, {\n        keys: cell => cell.key,\n        initial: getAnimatedProps,\n        enter: getAnimatedProps,\n        update: getAnimatedProps,\n        trail: animate ? motionStagger : undefined,\n        config: springConfig,\n        immediate: !animate,\n    })\n}\n\n/**\n * Memoize custom layers props.\n */\nexport const useCustomLayerProps = <D extends Datum>({\n    cells,\n    computedData,\n}: CustomLayerProps<D>): CustomLayerProps<D> =>\n    useMemo(\n        () => ({\n            cells,\n            computedData,\n        }),\n        [cells, computedData]\n    )\n","import { createElement } from 'react'\nimport { Cell, Datum, WaffleSvgProps, CellComponent } from './types'\nimport { useAnimatedCells } from './hooks'\n\ninterface WaffleCellsProps<D extends Datum> {\n    cells: Cell<D>[]\n    cellComponent: CellComponent<D>\n    padding: number\n    borderRadius: number\n    borderWidth: number\n    motionStagger: number\n    testIdPrefix: WaffleSvgProps<D>['testIdPrefix']\n}\n\nexport const WaffleCells = <D extends Datum>({\n    cells,\n    cellComponent,\n    padding,\n    borderRadius,\n    borderWidth,\n    motionStagger,\n    testIdPrefix,\n}: WaffleCellsProps<D>) => {\n    const transition = useAnimatedCells<D>({\n        cells,\n        padding,\n        motionStagger,\n    })\n\n    return (\n        <g>\n            {transition((animatedProps, cell) => {\n                return createElement(cellComponent, {\n                    key: cell.key,\n                    cell,\n                    padding,\n                    animatedProps,\n                    borderRadius,\n                    borderWidth,\n                    testIdPrefix,\n                })\n            })}\n        </g>\n    )\n}\n","import { Line } from 'd3-shape'\nimport { ComputedDatum, Datum, WaffleSvgProps } from './types'\nimport { Vertex } from '@nivo/grid'\nimport { useAreaMouseHandlers } from './hooks'\n\ninterface WaffleAreaProps<D extends Datum> {\n    data: ComputedDatum<D>\n    pathGenerator: Line<Vertex>\n    isInteractive: Exclude<WaffleSvgProps<D>['isInteractive'], undefined>\n    onMouseEnter: WaffleSvgProps<D>['onMouseEnter']\n    onMouseMove: WaffleSvgProps<D>['onMouseMove']\n    onMouseLeave: WaffleSvgProps<D>['onMouseLeave']\n    onClick: WaffleSvgProps<D>['onClick']\n    tooltip: Exclude<WaffleSvgProps<D>['tooltip'], undefined>\n    testIdPrefix: WaffleSvgProps<D>['testIdPrefix']\n}\n\nexport const WaffleArea = <D extends Datum>({\n    data,\n    pathGenerator,\n    isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    testIdPrefix,\n}: WaffleAreaProps<D>) => {\n    const { handleMouseEnter, handleMouseMove, handleMouseLeave, handleClick } =\n        useAreaMouseHandlers<D, SVGPathElement>(\n            data,\n            {\n                onMouseEnter,\n                onMouseMove,\n                onMouseLeave,\n                onClick,\n            },\n            tooltip\n        )\n\n    return (\n        <>\n            {data.polygons.map((polygon, index) => (\n                <path\n                    key={index}\n                    d={pathGenerator(polygon)!}\n                    fill=\"#000000\"\n                    fillOpacity={0}\n                    onMouseEnter={isInteractive ? handleMouseEnter : undefined}\n                    onMouseMove={isInteractive ? handleMouseMove : undefined}\n                    onMouseLeave={isInteractive ? handleMouseLeave : undefined}\n                    onClick={isInteractive ? handleClick : undefined}\n                    data-test-id={\n                        testIdPrefix\n                            ? `${testIdPrefix}.area_${data.id}.polygon_${index}`\n                            : undefined\n                    }\n                />\n            ))}\n        </>\n    )\n}\n","import { ComputedDatum, Datum, WaffleSvgProps } from './types'\nimport { useAreaPathGenerator } from './hooks'\nimport { WaffleArea } from './WaffleArea'\n\ninterface WaffleAreasProps<D extends Datum> {\n    data: ComputedDatum<D>[]\n    isInteractive: Exclude<WaffleSvgProps<D>['isInteractive'], undefined>\n    onMouseEnter: WaffleSvgProps<D>['onMouseEnter']\n    onMouseMove: WaffleSvgProps<D>['onMouseMove']\n    onMouseLeave: WaffleSvgProps<D>['onMouseLeave']\n    onClick: WaffleSvgProps<D>['onClick']\n    tooltip: Exclude<WaffleSvgProps<D>['tooltip'], undefined>\n    testIdPrefix?: string\n}\n\nexport const WaffleAreas = <D extends Datum>({\n    data,\n    isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    testIdPrefix,\n}: WaffleAreasProps<D>) => {\n    const pathGenerator = useAreaPathGenerator()\n\n    return (\n        <g>\n            {data.map(datum => {\n                if (datum.isHidden) return null\n\n                return (\n                    <WaffleArea<D>\n                        key={datum.id}\n                        data={datum}\n                        pathGenerator={pathGenerator}\n                        isInteractive={isInteractive}\n                        onMouseEnter={onMouseEnter}\n                        onMouseMove={onMouseMove}\n                        onMouseLeave={onMouseLeave}\n                        onClick={onClick}\n                        tooltip={tooltip}\n                        testIdPrefix={testIdPrefix}\n                    />\n                )\n            })}\n        </g>\n    )\n}\n","import { createElement, Fragment, ReactNode, forwardRef, Ref, ReactElement } from 'react'\nimport { Container, useDimensions, SvgWrapper, WithChartRef } from '@nivo/core'\nimport { OrdinalColorScaleConfig } from '@nivo/colors'\nimport { BoxLegendSvg } from '@nivo/legends'\nimport { Datum, WaffleSvgProps, LayerId, TooltipComponent } from './types'\nimport { svgDefaultProps } from './defaults'\nimport { useWaffle, useCustomLayerProps } from './hooks'\nimport { WaffleCells } from './WaffleCells'\nimport { WaffleAreas } from './WaffleAreas'\n\ntype InnerWaffleProps<D extends Datum> = Omit<\n    WaffleSvgProps<D>,\n    'animate' | 'motionConfig' | 'renderWrapper' | 'theme'\n> & {\n    forwardedRef: Ref<SVGSVGElement>\n}\n\nconst InnerWaffle = <D extends Datum>({\n    width,\n    height,\n    margin: partialMargin,\n    data,\n    valueFormat,\n    total,\n    rows,\n    columns,\n    fillDirection = svgDefaultProps.fillDirection,\n    padding = svgDefaultProps.padding,\n    hiddenIds = svgDefaultProps.hiddenIds,\n    layers = svgDefaultProps.layers as LayerId[],\n    cellComponent = svgDefaultProps.cellComponent,\n    colors = svgDefaultProps.colors as OrdinalColorScaleConfig<D>,\n    emptyColor = svgDefaultProps.emptyColor,\n    emptyOpacity = svgDefaultProps.emptyOpacity,\n    borderRadius = svgDefaultProps.borderRadius,\n    borderWidth = svgDefaultProps.borderWidth,\n    borderColor = svgDefaultProps.borderColor,\n    defs = svgDefaultProps.defs,\n    fill = svgDefaultProps.fill,\n    isInteractive = svgDefaultProps.isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip = svgDefaultProps.tooltip as TooltipComponent<D>,\n    forwardLegendData,\n    legends = svgDefaultProps.legends,\n    motionStagger = svgDefaultProps.motionStagger,\n    role = svgDefaultProps.role,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    testIdPrefix,\n    forwardedRef,\n}: InnerWaffleProps<D>) => {\n    const { outerWidth, outerHeight, margin, innerWidth, innerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const { cells, legendData, computedData, boundDefs } = useWaffle<D>({\n        width: innerWidth,\n        height: innerHeight,\n        data,\n        hiddenIds,\n        valueFormat,\n        total,\n        rows,\n        columns,\n        fillDirection,\n        colors,\n        emptyColor,\n        emptyOpacity,\n        borderColor,\n        forwardLegendData,\n        defs,\n        fill,\n    })\n\n    const layerById: Record<LayerId, ReactNode> = {\n        cells: null,\n        areas: null,\n        legends: null,\n    }\n\n    if (layers.includes('cells')) {\n        layerById.cells = (\n            <WaffleCells<D>\n                key=\"cells\"\n                cells={cells}\n                cellComponent={cellComponent}\n                padding={padding}\n                borderRadius={borderRadius}\n                borderWidth={borderWidth}\n                motionStagger={motionStagger}\n                testIdPrefix={testIdPrefix}\n            />\n        )\n    }\n\n    if (layers.includes('areas')) {\n        layerById.areas = (\n            <WaffleAreas<D>\n                key=\"areas\"\n                data={computedData}\n                isInteractive={isInteractive}\n                onMouseEnter={onMouseEnter}\n                onMouseMove={onMouseMove}\n                onMouseLeave={onMouseLeave}\n                onClick={onClick}\n                tooltip={tooltip}\n                testIdPrefix={testIdPrefix}\n            />\n        )\n    }\n\n    if (layers.includes('legends')) {\n        layerById.legends = (\n            <g key=\"legends\">\n                {legends.map((legend, i) => (\n                    <BoxLegendSvg\n                        key={i}\n                        {...legend}\n                        containerWidth={width}\n                        containerHeight={height}\n                        data={legendData}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    const customLayerProps = useCustomLayerProps<D>({\n        cells,\n        computedData,\n    })\n\n    return (\n        <SvgWrapper\n            width={outerWidth}\n            height={outerHeight}\n            margin={margin}\n            defs={boundDefs}\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 Waffle = forwardRef(\n    <D extends Datum = Datum>(\n        {\n            isInteractive = svgDefaultProps.isInteractive,\n            animate = svgDefaultProps.animate,\n            motionConfig = svgDefaultProps.motionConfig,\n            theme,\n            renderWrapper,\n            ...props\n        }: WaffleSvgProps<D>,\n        ref: Ref<SVGSVGElement>\n    ) => (\n        <Container\n            animate={animate}\n            isInteractive={isInteractive}\n            motionConfig={motionConfig}\n            renderWrapper={renderWrapper}\n            theme={theme}\n        >\n            <InnerWaffle<D> {...props} forwardedRef={ref} isInteractive={isInteractive} />\n        </Container>\n    )\n) as <D extends Datum = Datum>(\n    props: WithChartRef<WaffleSvgProps<D>, SVGSVGElement>\n) => ReactElement\n","import { forwardRef, Ref, ReactElement } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { WaffleSvgProps, Datum } from './types'\nimport { Waffle } from './Waffle'\n\nexport const ResponsiveWaffle = forwardRef(\n    <D extends Datum = Datum>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<WaffleSvgProps<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                <Waffle<D> {...props} width={width} height={height} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <D extends Datum = Datum>(\n    props: WithChartRef<ResponsiveProps<WaffleSvgProps<D>>, SVGSVGElement>\n) => ReactElement\n","import { createElement } from 'react'\nimport { Margin } from '@nivo/core'\nimport { Cell, Datum, CellComponent, WaffleHtmlProps } from './types'\nimport { useAnimatedCells } from './hooks'\n\ninterface WaffleCellsHtmlProps<D extends Datum> {\n    cells: Cell<D>[]\n    cellComponent: CellComponent<D>\n    padding: number\n    margin: Margin\n    borderRadius: number\n    borderWidth: number\n    motionStagger: number\n    testIdPrefix: WaffleHtmlProps<D>['testIdPrefix']\n}\n\nexport const WaffleCellsHtml = <D extends Datum>({\n    cells,\n    cellComponent,\n    padding,\n    borderRadius,\n    borderWidth,\n    motionStagger,\n    testIdPrefix,\n    margin,\n}: WaffleCellsHtmlProps<D>) => {\n    const transition = useAnimatedCells<D>({\n        cells,\n        padding,\n        motionStagger,\n    })\n\n    return (\n        <div\n            style={{\n                position: 'absolute',\n                top: margin.top,\n                left: margin.left,\n            }}\n        >\n            {transition((animatedProps, cell) => {\n                return createElement(cellComponent, {\n                    key: cell.key,\n                    cell,\n                    padding,\n                    animatedProps,\n                    borderRadius,\n                    borderWidth,\n                    testIdPrefix,\n                })\n            })}\n        </div>\n    )\n}\n","import { Line } from 'd3-shape'\nimport { Vertex } from '@nivo/grid'\nimport { ComputedDatum, Datum, WaffleHtmlProps } from './types'\nimport { useAreaMouseHandlers } from './hooks'\n\ninterface WaffleAreaHtmlProps<D extends Datum> {\n    data: ComputedDatum<D>\n    pathGenerator: Line<Vertex>\n    isInteractive: Exclude<WaffleHtmlProps<D>['isInteractive'], undefined>\n    onMouseEnter: WaffleHtmlProps<D>['onMouseEnter']\n    onMouseMove: WaffleHtmlProps<D>['onMouseMove']\n    onMouseLeave: WaffleHtmlProps<D>['onMouseLeave']\n    onClick: WaffleHtmlProps<D>['onClick']\n    tooltip: Exclude<WaffleHtmlProps<D>['tooltip'], undefined>\n    testIdPrefix: WaffleHtmlProps<D>['testIdPrefix']\n}\n\nexport const WaffleAreaHtml = <D extends Datum>({\n    data,\n    pathGenerator,\n    isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    testIdPrefix,\n}: WaffleAreaHtmlProps<D>) => {\n    const { handleMouseEnter, handleMouseMove, handleMouseLeave, handleClick } =\n        useAreaMouseHandlers<D, HTMLElement>(\n            data,\n            {\n                onMouseEnter,\n                onMouseMove,\n                onMouseLeave,\n                onClick,\n            },\n            tooltip\n        )\n\n    return (\n        <>\n            {data.polygons.map((polygon, index) => (\n                <div\n                    key={index}\n                    style={{\n                        position: 'absolute',\n                        top: 0,\n                        left: 0,\n                        width: '100%',\n                        height: '100%',\n                        backgroundColor: 'transparent',\n                        clipPath: `path('${pathGenerator(polygon)}')`,\n                    }}\n                    onMouseEnter={isInteractive ? handleMouseEnter : undefined}\n                    onMouseMove={isInteractive ? handleMouseMove : undefined}\n                    onMouseLeave={isInteractive ? handleMouseLeave : undefined}\n                    onClick={isInteractive ? handleClick : undefined}\n                    data-test-id={\n                        testIdPrefix\n                            ? `${testIdPrefix}.area_${data.id}.polygon_${index}`\n                            : undefined\n                    }\n                />\n            ))}\n        </>\n    )\n}\n","import { Margin } from '@nivo/core'\nimport { ComputedDatum, Datum, WaffleHtmlProps } from './types'\nimport { useAreaPathGenerator } from './hooks'\nimport { WaffleAreaHtml } from './WaffleAreaHtml'\n\ninterface WaffleAreasHtmlProps<D extends Datum> {\n    data: ComputedDatum<D>[]\n    margin: Margin\n    isInteractive: Exclude<WaffleHtmlProps<D>['isInteractive'], undefined>\n    onMouseEnter: WaffleHtmlProps<D>['onMouseEnter']\n    onMouseMove: WaffleHtmlProps<D>['onMouseMove']\n    onMouseLeave: WaffleHtmlProps<D>['onMouseLeave']\n    onClick: WaffleHtmlProps<D>['onClick']\n    tooltip: Exclude<WaffleHtmlProps<D>['tooltip'], undefined>\n    testIdPrefix: WaffleHtmlProps<D>['testIdPrefix']\n}\n\nexport const WaffleAreasHtml = <D extends Datum>({\n    data,\n    margin,\n    isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    testIdPrefix,\n}: WaffleAreasHtmlProps<D>) => {\n    const pathGenerator = useAreaPathGenerator()\n\n    return (\n        <div\n            style={{\n                position: 'absolute',\n                top: margin.top,\n                left: margin.left,\n                width: '100%',\n                height: '100%',\n            }}\n        >\n            {data.map(datum => {\n                if (datum.isHidden) return null\n\n                return (\n                    <WaffleAreaHtml<D>\n                        key={datum.id}\n                        data={datum}\n                        pathGenerator={pathGenerator}\n                        isInteractive={isInteractive}\n                        onMouseEnter={onMouseEnter}\n                        onMouseMove={onMouseMove}\n                        onMouseLeave={onMouseLeave}\n                        onClick={onClick}\n                        tooltip={tooltip}\n                        testIdPrefix={testIdPrefix}\n                    />\n                )\n            })}\n        </div>\n    )\n}\n","import { createElement, Fragment, ReactNode, forwardRef, Ref, ReactElement } from 'react'\nimport { Container, useDimensions, WithChartRef } from '@nivo/core'\nimport { OrdinalColorScaleConfig } from '@nivo/colors'\nimport { Datum, CellComponent, WaffleHtmlProps, TooltipComponent, HtmlLayerId } from './types'\nimport { htmlDefaultProps } from './defaults'\nimport { useCustomLayerProps, useWaffle } from './hooks'\nimport { WaffleCellsHtml } from './WaffleCellsHtml'\nimport { WaffleAreasHtml } from './WaffleAreasHtml'\n\ntype InnerWaffleHtmlProps<D extends Datum> = Omit<\n    WaffleHtmlProps<D>,\n    'animate' | 'motionConfig' | 'renderWrapper' | 'theme'\n> & {\n    forwardedRef: Ref<HTMLDivElement>\n}\n\nconst InnerWaffleHtml = <D extends Datum>({\n    width,\n    height,\n    margin: partialMargin,\n    data,\n    valueFormat,\n    total,\n    rows,\n    columns,\n    fillDirection = htmlDefaultProps.fillDirection,\n    hiddenIds = htmlDefaultProps.hiddenIds,\n    padding = htmlDefaultProps.padding,\n    layers = htmlDefaultProps.layers as HtmlLayerId[],\n    cellComponent = htmlDefaultProps.cellComponent as unknown as CellComponent<D>,\n    colors = htmlDefaultProps.colors as OrdinalColorScaleConfig<D>,\n    emptyColor = htmlDefaultProps.emptyColor,\n    emptyOpacity = htmlDefaultProps.emptyOpacity,\n    borderRadius = htmlDefaultProps.borderRadius,\n    borderWidth = htmlDefaultProps.borderWidth,\n    borderColor = htmlDefaultProps.borderColor,\n    isInteractive = htmlDefaultProps.isInteractive,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip = htmlDefaultProps.tooltip as TooltipComponent<D>,\n    forwardLegendData,\n    motionStagger = htmlDefaultProps.motionStagger,\n    role = htmlDefaultProps.role,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    testIdPrefix,\n    forwardedRef,\n}: InnerWaffleHtmlProps<D>) => {\n    const { outerWidth, outerHeight, margin, innerWidth, innerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const { cells, computedData } = useWaffle<D>({\n        width: innerWidth,\n        height: innerHeight,\n        data,\n        hiddenIds,\n        valueFormat,\n        total,\n        rows,\n        columns,\n        fillDirection,\n        colors,\n        emptyColor,\n        emptyOpacity,\n        borderColor,\n        forwardLegendData,\n    })\n\n    const layerById: Record<HtmlLayerId, ReactNode> = {\n        cells: null,\n        areas: null,\n    }\n\n    if (layers.includes('cells')) {\n        layerById.cells = (\n            <WaffleCellsHtml<D>\n                key=\"cells\"\n                cells={cells}\n                cellComponent={cellComponent}\n                padding={padding}\n                margin={margin}\n                borderRadius={borderRadius}\n                borderWidth={borderWidth}\n                motionStagger={motionStagger}\n                testIdPrefix={testIdPrefix}\n            />\n        )\n    }\n\n    if (layers.includes('areas')) {\n        layerById.areas = (\n            <WaffleAreasHtml<D>\n                key=\"areas\"\n                data={computedData}\n                margin={margin}\n                isInteractive={isInteractive}\n                onMouseEnter={onMouseEnter}\n                onMouseMove={onMouseMove}\n                onMouseLeave={onMouseLeave}\n                onClick={onClick}\n                tooltip={tooltip}\n                testIdPrefix={testIdPrefix}\n            />\n        )\n    }\n\n    const customLayerProps = useCustomLayerProps<D>({\n        cells,\n        computedData,\n    })\n\n    return (\n        <div\n            style={{\n                position: 'relative',\n                width: outerWidth,\n                height: outerHeight,\n            }}\n            role={role}\n            aria-label={ariaLabel}\n            aria-labelledby={ariaLabelledBy}\n            aria-describedby={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        </div>\n    )\n}\n\nexport const WaffleHtml = forwardRef(\n    <D extends Datum = Datum>(\n        {\n            isInteractive = htmlDefaultProps.isInteractive,\n            animate = htmlDefaultProps.animate,\n            motionConfig = htmlDefaultProps.motionConfig,\n            theme,\n            renderWrapper,\n            ...props\n        }: WaffleHtmlProps<D>,\n        ref: Ref<HTMLDivElement>\n    ) => (\n        <Container\n            animate={animate}\n            isInteractive={isInteractive}\n            motionConfig={motionConfig}\n            renderWrapper={renderWrapper}\n            theme={theme}\n        >\n            <InnerWaffleHtml<D> isInteractive={isInteractive} {...props} forwardedRef={ref} />\n        </Container>\n    )\n) as <D extends Datum = Datum>(\n    props: WithChartRef<WaffleHtmlProps<D>, HTMLDivElement>\n) => ReactElement\n","import { forwardRef, Ref, ReactElement } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { WaffleHtmlProps, Datum } from './types'\nimport { WaffleHtml } from './WaffleHtml'\n\nexport const ResponsiveWaffleHtml = forwardRef(\n    <RawDatum extends Datum = Datum>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<WaffleHtmlProps<RawDatum>>,\n        ref: Ref<HTMLDivElement>\n    ) => (\n        <ResponsiveWrapper\n            defaultWidth={defaultWidth}\n            defaultHeight={defaultHeight}\n            onResize={onResize}\n            debounceResize={debounceResize}\n        >\n            {({ width, height }) => (\n                <WaffleHtml<RawDatum> {...props} width={width} height={height} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <RawDatum extends Datum = Datum>(\n    props: WithChartRef<ResponsiveProps<WaffleHtmlProps<RawDatum>>, HTMLDivElement>\n) => ReactElement\n","import {\n    createElement,\n    MouseEvent,\n    useCallback,\n    useEffect,\n    useRef,\n    forwardRef,\n    Ref,\n    ReactElement,\n} from 'react'\nimport {\n    isCursorInRect,\n    getRelativeCursor,\n    Container,\n    useDimensions,\n    Margin,\n    WithChartRef,\n    mergeRefs,\n} from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { roundedRect } from '@nivo/canvas'\nimport { OrdinalColorScaleConfig } from '@nivo/colors'\nimport { useTooltip } from '@nivo/tooltip'\nimport { renderLegendToCanvas } from '@nivo/legends'\nimport { CanvasProps, Datum, isDataCell, TooltipComponent, Cell } from './types'\nimport { canvasDefaultProps } from './defaults'\nimport { useWaffle } from './hooks'\n\nconst findCellUnderCursor = <D extends Datum>(\n    cells: Cell<D>[],\n    margin: Margin,\n    x: number,\n    y: number\n) =>\n    cells.find(cell =>\n        isCursorInRect(margin.left + cell.x, margin.top + cell.y, cell.width, cell.height, x, y)\n    )\n\ntype InnerWaffleCanvasProps<D extends Datum> = Omit<CanvasProps<D>, 'renderWrapper' | 'theme'> & {\n    forwardedRef: Ref<HTMLCanvasElement>\n}\n\nconst InnerWaffleCanvas = <D extends Datum>({\n    width,\n    height,\n    margin: partialMargin,\n    data,\n    valueFormat,\n    total,\n    rows,\n    columns,\n    fillDirection = canvasDefaultProps.fillDirection,\n    hiddenIds = canvasDefaultProps.hiddenIds,\n    padding = canvasDefaultProps.padding,\n    colors = canvasDefaultProps.colors as OrdinalColorScaleConfig<D>,\n    emptyColor = canvasDefaultProps.emptyColor,\n    emptyOpacity = canvasDefaultProps.emptyOpacity,\n    borderRadius = canvasDefaultProps.borderRadius,\n    borderWidth = canvasDefaultProps.borderWidth,\n    borderColor = canvasDefaultProps.borderColor,\n    isInteractive = canvasDefaultProps.isInteractive,\n    onMouseMove,\n    onClick,\n    tooltip = canvasDefaultProps.tooltip as TooltipComponent<D>,\n    forwardLegendData,\n    legends = canvasDefaultProps.legends,\n    role = canvasDefaultProps.role,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    pixelRatio = canvasDefaultProps.pixelRatio,\n    forwardedRef,\n}: InnerWaffleCanvasProps<D>) => {\n    const canvasEl = useRef<HTMLCanvasElement | null>(null)\n\n    const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const { cells, legendData } = useWaffle<D>({\n        width: innerWidth,\n        height: innerHeight,\n        data,\n        hiddenIds,\n        valueFormat,\n        total,\n        rows,\n        columns,\n        fillDirection,\n        colors,\n        emptyColor,\n        emptyOpacity,\n        borderColor,\n        forwardLegendData,\n    })\n\n    const theme = useTheme()\n\n    useEffect(() => {\n        if (canvasEl.current === null) return\n\n        const ctx = canvasEl.current.getContext('2d')\n        if (ctx === null) return\n\n        canvasEl.current.width = outerWidth * pixelRatio\n        canvasEl.current.height = outerHeight * pixelRatio\n\n        ctx.scale(pixelRatio, pixelRatio)\n\n        ctx.fillStyle = theme.background\n        ctx.fillRect(0, 0, outerWidth, outerHeight)\n        ctx.translate(margin.left, margin.top)\n\n        cells.forEach(cell => {\n            ctx.save()\n\n            ctx.fillStyle = cell.color\n            ctx.globalAlpha = cell.opacity\n\n            const x = cell.x + padding / 2\n            const y = cell.y + padding / 2\n            const cellWidth = cell.width - padding\n            const cellHeight = cell.height - padding\n\n            ctx.beginPath()\n            roundedRect(ctx, x, y, cellWidth, cellHeight, borderRadius)\n            ctx.fill()\n\n            if (borderWidth > 0) {\n                ctx.strokeStyle = cell.borderColor\n                ctx.lineWidth = borderWidth\n\n                ctx.beginPath()\n                roundedRect(ctx, x, y, cellWidth, cellHeight, borderRadius)\n                ctx.stroke()\n            }\n\n            ctx.restore()\n        })\n\n        legends.forEach(legend => {\n            renderLegendToCanvas(ctx, {\n                ...legend,\n                data: legendData,\n                containerWidth: width,\n                containerHeight: height,\n                theme,\n            })\n        })\n    }, [\n        canvasEl,\n        margin,\n        outerWidth,\n        outerHeight,\n        cells,\n        padding,\n        borderRadius,\n        borderWidth,\n        theme,\n        width,\n        height,\n        pixelRatio,\n        legends,\n        legendData,\n    ])\n\n    const { showTooltipFromEvent, hideTooltip } = useTooltip()\n\n    const handleMouseHover = useCallback(\n        (event: MouseEvent<HTMLCanvasElement>) => {\n            if (canvasEl.current === null) return\n\n            const [x, y] = getRelativeCursor(canvasEl.current, event)\n            const cell = findCellUnderCursor(cells, margin, x, y)\n\n            if (cell !== undefined && isDataCell(cell)) {\n                showTooltipFromEvent(createElement(tooltip, { data: cell.data }), event, 'top')\n                onMouseMove?.(cell.data, event)\n            } else {\n                hideTooltip()\n            }\n        },\n        [canvasEl, cells, margin, showTooltipFromEvent, hideTooltip, tooltip, onMouseMove]\n    )\n\n    const handleMouseLeave = useCallback(() => {\n        hideTooltip()\n    }, [hideTooltip])\n\n    const handleClick = useCallback(\n        (event: MouseEvent<HTMLCanvasElement>) => {\n            if (!onClick || canvasEl.current === null) return\n\n            const [x, y] = getRelativeCursor(canvasEl.current, event)\n            const cell = findCellUnderCursor(cells, margin, x, y)\n\n            if (cell !== undefined && isDataCell(cell)) {\n                onClick(cell.data, event)\n            }\n        },\n        [canvasEl, cells, margin, onClick]\n    )\n\n    return (\n        <canvas\n            ref={mergeRefs(canvasEl, forwardedRef)}\n            width={outerWidth * pixelRatio}\n            height={outerHeight * pixelRatio}\n            style={{\n                width: outerWidth,\n                height: outerHeight,\n            }}\n            onMouseEnter={isInteractive ? handleMouseHover : undefined}\n            onMouseMove={isInteractive ? handleMouseHover : undefined}\n            onMouseLeave={isInteractive ? handleMouseLeave : undefined}\n            onClick={isInteractive ? handleClick : undefined}\n            role={role}\n            aria-label={ariaLabel}\n            aria-labelledby={ariaLabelledBy}\n            aria-describedby={ariaDescribedBy}\n        />\n    )\n}\n\nexport const WaffleCanvas = forwardRef(\n    <D extends Datum = Datum>(\n        {\n            theme,\n            isInteractive = canvasDefaultProps.isInteractive,\n            animate = canvasDefaultProps.animate,\n            motionConfig = canvasDefaultProps.motionConfig,\n            renderWrapper,\n            ...props\n        }: CanvasProps<D>,\n        ref: Ref<HTMLCanvasElement>\n    ) => (\n        <Container\n            isInteractive={isInteractive}\n            animate={animate}\n            motionConfig={motionConfig}\n            theme={theme}\n            renderWrapper={renderWrapper}\n        >\n            <InnerWaffleCanvas<D> {...props} isInteractive={isInteractive} forwardedRef={ref} />\n        </Container>\n    )\n) as <D extends Datum = Datum>(\n    props: WithChartRef<CanvasProps<D>, HTMLCanvasElement>\n) => ReactElement\n","import { forwardRef, Ref, ReactElement } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { CanvasProps, Datum } from './types'\nimport { WaffleCanvas } from './WaffleCanvas'\n\nexport const ResponsiveWaffleCanvas = forwardRef(\n    <D extends Datum = Datum>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<CanvasProps<D>>,\n        ref: Ref<HTMLCanvasElement>\n    ) => (\n        <ResponsiveWrapper\n            defaultWidth={defaultWidth}\n            defaultHeight={defaultHeight}\n            onResize={onResize}\n            debounceResize={debounceResize}\n        >\n            {({ width, height }) => (\n                <WaffleCanvas<D> {...props} width={width} height={height} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <D extends Datum = Datum>(\n    props: WithChartRef<ResponsiveProps<CanvasProps<D>>, HTMLCanvasElement>\n) => ReactElement\n"],"names":["commonDefaultProps","hiddenIds","fillDirection","padding","colors","scheme","emptyColor","emptyOpacity","borderRadius","borderWidth","borderColor","from","modifiers","isInteractive","tooltip","_ref","data","_jsx","BasicTooltip","id","label","value","formattedValue","enableChip","color","role","animate","motionConfig","svgDefaultProps","_extends","layers","cellComponent","cell","animatedProps","testIdPrefix","animated","rect","x","y","width","size","height","rx","ry","opacity","fill","stroke","strokeWidth","key","undefined","defs","legends","motionStagger","htmlDefaultProps","div","style","position","top","left","background","boxSizing","borderStyle","canvasDefaultProps","pixelRatio","window","_window$devicePixelRa","devicePixelRatio","isDataCell","useWaffle","_ref2","valueFormat","total","rows","columns","_ref2$fillDirection","_ref2$colors","_ref2$emptyColor","_ref2$emptyOpacity","_ref2$borderColor","forwardLegendData","_ref2$defs","_ref2$fill","formatValue","useValueFormatter","getColor","useOrdinalColorScale","theme","useTheme","getBorderColor","useInheritedColor","unit","computedData","useMemo","currentPosition","enhancedData","forEach","datum","groupIndex","isHidden","includes","startAt","endAt","Math","round","enhancedDatum","polygons","push","boundDefs","bindDefs","emptyCells","generateGrid","square","extend","origin","cells","computeGrid","cellsCopy","map","index","cellWithData","mergeCellsData","grid","grouped","reduce","acc","_i","_Object$entries","Object","entries","length","_Object$entries$_i","group","getCellsPolygons","findPolygons","filter","legendData","_legendData","reverse","forwardLegendDataRef","useRef","useEffect","current","useAreaPathGenerator","d3Line","curve","curveLinearClosed","useAreaMouseHandlers","_ref3","onMouseEnter","onMouseMove","onMouseLeave","onClick","_useTooltip","useTooltip","showTooltipFromEvent","hideTooltip","handleMouseEnter","useCallback","event","createElement","handleMouseMove","handleMouseLeave","handleClick","useAnimatedCells","_ref4","_useMotionConfig","useMotionConfig","springConfig","config","getAnimatedProps","useTransition","keys","initial","enter","update","trail","immediate","useCustomLayerProps","_ref5","WaffleCells","transition","children","WaffleArea","pathGenerator","_useAreaMouseHandlers","_Fragment","polygon","d","fillOpacity","WaffleAreas","InnerWaffle","partialMargin","margin","_ref$fillDirection","_ref$padding","_ref$hiddenIds","_ref$layers","_ref$cellComponent","_ref$colors","_ref$emptyColor","_ref$emptyOpacity","_ref$borderRadius","_ref$borderWidth","_ref$borderColor","_ref$defs","_ref$fill","_ref$isInteractive","_ref$tooltip","_ref$legends","_ref$motionStagger","_ref$role","ariaLabel","ariaLabelledBy","ariaDescribedBy","forwardedRef","_useDimensions","useDimensions","outerWidth","outerHeight","innerWidth","innerHeight","_useWaffle","layerById","areas","legend","i","BoxLegendSvg","containerWidth","containerHeight","customLayerProps","SvgWrapper","ref","layer","_layerById$layer","Fragment","Waffle","forwardRef","_ref2$isInteractive","_ref2$animate","_ref2$motionConfig","renderWrapper","props","_objectWithoutPropertiesLoose","_excluded","Container","ResponsiveWaffle","defaultWidth","defaultHeight","onResize","debounceResize","ResponsiveWrapper","WaffleCellsHtml","WaffleAreaHtml","backgroundColor","clipPath","WaffleAreasHtml","InnerWaffleHtml","WaffleHtml","ResponsiveWaffleHtml","findCellUnderCursor","find","isCursorInRect","InnerWaffleCanvas","_ref$pixelRatio","canvasEl","ctx","getContext","scale","fillStyle","fillRect","translate","save","globalAlpha","cellWidth","cellHeight","beginPath","roundedRect","strokeStyle","lineWidth","restore","renderLegendToCanvas","handleMouseHover","_getRelativeCursor","getRelativeCursor","_getRelativeCursor2","mergeRefs","WaffleCanvas","ResponsiveWaffleCanvas"],"mappings":"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"}