UNPKG

@nivo/legends

Version:

legend components for nivo dataviz library

1 lines 63.7 kB
{"version":3,"file":"nivo-legends.cjs.js","sources":["../src/svg/symbols/SymbolCircle.tsx","../src/svg/symbols/SymbolDiamond.tsx","../src/svg/symbols/SymbolSquare.tsx","../src/svg/symbols/SymbolTriangle.tsx","../src/defaults.ts","../src/compute.ts","../src/svg/ContinuousColorsLegendSvg.tsx","../src/svg/LegendSvgItem.tsx","../src/svg/LegendSvg.tsx","../src/canvas.ts","../src/svg/AnchoredContinuousColorsLegendSvg.tsx","../src/svg/BoxLegendSvg.tsx","../src/hooks.ts"],"sourcesContent":["import { SymbolProps } from './types'\n\nexport const SymbolCircle = ({\n    x,\n    y,\n    size,\n    fill,\n    opacity = 1,\n    borderWidth = 0,\n    borderColor = 'transparent',\n}: SymbolProps) => {\n    return (\n        <circle\n            r={size / 2}\n            cx={x + size / 2}\n            cy={y + size / 2}\n            fill={fill}\n            opacity={opacity}\n            strokeWidth={borderWidth}\n            stroke={borderColor}\n            style={{\n                pointerEvents: 'none',\n            }}\n        />\n    )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolDiamond = ({\n    x,\n    y,\n    size,\n    fill,\n    opacity = 1,\n    borderWidth = 0,\n    borderColor = 'transparent',\n}: SymbolProps) => {\n    return (\n        <g transform={`translate(${x},${y})`}>\n            <path\n                d={`\n                    M${size / 2} 0\n                    L${size * 0.8} ${size / 2}\n                    L${size / 2} ${size}\n                    L${size * 0.2} ${size / 2}\n                    L${size / 2} 0\n                `}\n                fill={fill}\n                opacity={opacity}\n                strokeWidth={borderWidth}\n                stroke={borderColor}\n                style={{\n                    pointerEvents: 'none',\n                }}\n            />\n        </g>\n    )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolSquare = ({\n    x,\n    y,\n    size,\n    fill,\n    opacity = 1,\n    borderWidth = 0,\n    borderColor = 'transparent',\n}: SymbolProps) => {\n    return (\n        <rect\n            x={x}\n            y={y}\n            fill={fill}\n            opacity={opacity}\n            strokeWidth={borderWidth}\n            stroke={borderColor}\n            width={size}\n            height={size}\n            style={{\n                pointerEvents: 'none',\n            }}\n        />\n    )\n}\n","import { SymbolProps } from './types'\n\nexport const SymbolTriangle = ({\n    x,\n    y,\n    size,\n    fill,\n    opacity = 1,\n    borderWidth = 0,\n    borderColor = 'transparent',\n}: SymbolProps) => {\n    return (\n        <g transform={`translate(${x},${y})`}>\n            <path\n                d={`\n                M${size / 2} 0\n                L${size} ${size}\n                L0 ${size}\n                L${size / 2} 0\n            `}\n                fill={fill}\n                opacity={opacity}\n                strokeWidth={borderWidth}\n                stroke={borderColor}\n                style={{\n                    pointerEvents: 'none',\n                }}\n            />\n        </g>\n    )\n}\n","import { BoxLegendSvgProps, ContinuousColorsLegendProps } from './types'\n\nexport const legendDefaults: {\n    translateX: NonNullable<BoxLegendSvgProps['translateX']>\n    translateY: NonNullable<BoxLegendSvgProps['translateY']>\n    padding: NonNullable<BoxLegendSvgProps['padding']>\n    itemsSpacing: NonNullable<BoxLegendSvgProps['itemsSpacing']>\n    itemDirection: NonNullable<BoxLegendSvgProps['itemDirection']>\n    justify: NonNullable<BoxLegendSvgProps['justify']>\n    symbolShape: NonNullable<BoxLegendSvgProps['symbolShape']>\n    symbolSize: NonNullable<BoxLegendSvgProps['symbolSize']>\n    symbolSpacing: NonNullable<BoxLegendSvgProps['symbolSpacing']>\n} = {\n    translateX: 0,\n    translateY: 0,\n    padding: 0,\n    itemsSpacing: 0,\n    itemDirection: 'left-to-right',\n    justify: false,\n    symbolShape: 'square',\n    symbolSize: 16,\n    symbolSpacing: 8,\n}\n\nexport const continuousColorsLegendDefaults: {\n    length: NonNullable<ContinuousColorsLegendProps['length']>\n    thickness: NonNullable<ContinuousColorsLegendProps['thickness']>\n    direction: NonNullable<ContinuousColorsLegendProps['direction']>\n    tickPosition: NonNullable<ContinuousColorsLegendProps['tickPosition']>\n    tickSize: NonNullable<ContinuousColorsLegendProps['tickSize']>\n    tickSpacing: NonNullable<ContinuousColorsLegendProps['tickSpacing']>\n    tickOverlap: NonNullable<ContinuousColorsLegendProps['tickOverlap']>\n    tickFormat: NonNullable<ContinuousColorsLegendProps['tickFormat']>\n    titleAlign: NonNullable<ContinuousColorsLegendProps['titleAlign']>\n    titleOffset: NonNullable<ContinuousColorsLegendProps['titleOffset']>\n} = {\n    length: 200,\n    thickness: 16,\n    direction: 'row',\n    tickPosition: 'after',\n    tickSize: 4,\n    tickSpacing: 3,\n    tickOverlap: false,\n    tickFormat: (value: number) => `${value}`,\n    titleAlign: 'start',\n    titleOffset: 4,\n}\n","import { scaleLinear } from 'd3-scale'\nimport { getValueFormatter } from '@nivo/core'\nimport { computeContinuousColorScaleColorStops } from '@nivo/colors'\nimport {\n    BoxLegendSvgProps,\n    ContinuousColorsLegendProps,\n    LegendAnchor,\n    LegendItemDirection,\n} from './types'\nimport { continuousColorsLegendDefaults } from './defaults'\n\nconst isObject = <T>(item: unknown): item is T =>\n    typeof item === 'object' && !Array.isArray(item) && item !== null\n\nconst zeroPadding = {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n}\n\nexport const computeDimensions = ({\n    direction,\n    itemsSpacing,\n    padding: _padding,\n    itemCount,\n    itemWidth,\n    itemHeight,\n}: Pick<BoxLegendSvgProps, 'direction' | 'padding'> &\n    Record<'itemsSpacing' | 'itemCount' | 'itemWidth' | 'itemHeight', number>) => {\n    if (typeof _padding !== 'number' && !isObject(_padding)) {\n        throw new Error('Invalid property padding, must be one of: number, object')\n    }\n\n    const padding =\n        typeof _padding === 'number'\n            ? {\n                  top: _padding,\n                  right: _padding,\n                  bottom: _padding,\n                  left: _padding,\n              }\n            : {\n                  ...zeroPadding,\n                  ..._padding,\n              }\n\n    const horizontalPadding = padding.left + padding.right\n    const verticalPadding = padding.top + padding.bottom\n    let width = itemWidth + horizontalPadding\n    let height = itemHeight + verticalPadding\n    const spacing = (itemCount - 1) * itemsSpacing\n    if (direction === 'row') {\n        width = itemWidth * itemCount + spacing + horizontalPadding\n    } else if (direction === 'column') {\n        height = itemHeight * itemCount + spacing + verticalPadding\n    }\n\n    return { width, height, padding }\n}\n\nexport const computePositionFromAnchor = ({\n    anchor,\n    translateX,\n    translateY,\n    containerWidth,\n    containerHeight,\n    width,\n    height,\n}: { anchor: LegendAnchor } & Record<\n    'translateX' | 'translateY' | 'containerWidth' | 'containerHeight' | 'width' | 'height',\n    number\n>) => {\n    let x = translateX\n    let y = translateY\n\n    switch (anchor) {\n        case 'top':\n            x += (containerWidth - width) / 2\n            break\n\n        case 'top-right':\n            x += containerWidth - width\n            break\n\n        case 'right':\n            x += containerWidth - width\n            y += (containerHeight - height) / 2\n            break\n\n        case 'bottom-right':\n            x += containerWidth - width\n            y += containerHeight - height\n            break\n\n        case 'bottom':\n            x += (containerWidth - width) / 2\n            y += containerHeight - height\n            break\n\n        case 'bottom-left':\n            y += containerHeight - height\n            break\n\n        case 'left':\n            y += (containerHeight - height) / 2\n            break\n\n        case 'center':\n            x += (containerWidth - width) / 2\n            y += (containerHeight - height) / 2\n            break\n    }\n\n    return { x, y }\n}\n\nexport const computeItemLayout = ({\n    direction,\n    justify,\n    symbolSize,\n    symbolSpacing,\n    width,\n    height,\n}: {\n    direction: LegendItemDirection\n    justify: boolean\n} & Record<'symbolSize' | 'symbolSpacing' | 'width' | 'height', number>) => {\n    let symbolX\n    let symbolY\n\n    let labelX\n    let labelY\n    let labelAnchor: 'start' | 'middle' | 'end'\n    let labelAlignment: 'alphabetic' | 'central' | 'text-before-edge'\n\n    switch (direction) {\n        case 'left-to-right':\n            symbolX = 0\n            symbolY = (height - symbolSize) / 2\n\n            labelY = height / 2\n            labelAlignment = 'central'\n            if (justify) {\n                labelX = width\n                labelAnchor = 'end'\n            } else {\n                labelX = symbolSize + symbolSpacing\n                labelAnchor = 'start'\n            }\n            break\n\n        case 'right-to-left':\n            symbolX = width - symbolSize\n            symbolY = (height - symbolSize) / 2\n\n            labelY = height / 2\n            labelAlignment = 'central'\n            if (justify) {\n                labelX = 0\n                labelAnchor = 'start'\n            } else {\n                labelX = width - symbolSize - symbolSpacing\n                labelAnchor = 'end'\n            }\n            break\n\n        case 'top-to-bottom':\n            symbolX = (width - symbolSize) / 2\n            symbolY = 0\n\n            labelX = width / 2\n\n            labelAnchor = 'middle'\n            if (justify) {\n                labelY = height\n                labelAlignment = 'alphabetic'\n            } else {\n                labelY = symbolSize + symbolSpacing\n                labelAlignment = 'text-before-edge'\n            }\n            break\n\n        case 'bottom-to-top':\n            symbolX = (width - symbolSize) / 2\n            symbolY = height - symbolSize\n\n            labelX = width / 2\n            labelAnchor = 'middle'\n            if (justify) {\n                labelY = 0\n                labelAlignment = 'text-before-edge'\n            } else {\n                labelY = height - symbolSize - symbolSpacing\n                labelAlignment = 'alphabetic'\n            }\n            break\n    }\n\n    return {\n        symbolX,\n        symbolY,\n        labelX,\n        labelY,\n        labelAnchor,\n        labelAlignment,\n    }\n}\n\nexport const computeContinuousColorsLegend = ({\n    scale,\n    ticks,\n    length = continuousColorsLegendDefaults.length,\n    thickness = continuousColorsLegendDefaults.thickness,\n    direction = continuousColorsLegendDefaults.direction,\n    tickPosition = continuousColorsLegendDefaults.tickPosition,\n    tickSize = continuousColorsLegendDefaults.tickSize,\n    tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n    tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n    tickFormat = continuousColorsLegendDefaults.tickFormat,\n    title,\n    titleAlign = continuousColorsLegendDefaults.titleAlign,\n    titleOffset = continuousColorsLegendDefaults.titleOffset,\n}: ContinuousColorsLegendProps) => {\n    // left to right for `row`, bottom to top for `column`\n    const domain = direction === 'column' ? [...scale.domain()].reverse() : scale.domain()\n\n    const positionScale = scaleLinear().domain(domain)\n    if (domain.length === 2) {\n        // sequential, quantize\n        positionScale.range([0, length])\n    } else if (domain.length === 3) {\n        // diverging\n        positionScale.range([0, length / 2, length])\n    }\n\n    let values: number[]\n    if ('thresholds' in scale) {\n        // quantize\n        values = [domain[0], ...scale.thresholds(), domain[1]]\n    } else {\n        // sequential, diverging\n        values = Array.isArray(ticks) ? ticks : (scale as any).ticks(ticks)\n    }\n\n    const colorStops = computeContinuousColorScaleColorStops(scale, 32)\n\n    const formatValue = getValueFormatter(tickFormat)\n\n    const computedTicks: {\n        x1: number\n        y1: number\n        x2: number\n        y2: number\n        text: string\n        textX: number\n        textY: number\n        textHorizontalAlign: 'start' | 'middle' | 'end'\n        textVerticalAlign: 'alphabetic' | 'central' | 'hanging'\n    }[] = []\n\n    let width: number\n    let height: number\n\n    const gradientX1 = 0\n    let gradientY1 = 0\n    let gradientX2 = 0\n    const gradientY2 = 0\n\n    let titleX: number\n    let titleY: number\n    let titleRotation: number\n    let titleVerticalAlign: 'alphabetic' | 'hanging'\n\n    if (direction === 'row') {\n        width = length\n        height = thickness\n\n        gradientX2 = 1\n\n        let y1: number\n        let y2: number\n\n        let textY: number\n        const textHorizontalAlign = 'middle'\n        let textVerticalAlign: 'alphabetic' | 'hanging'\n\n        titleRotation = 0\n        if (titleAlign === 'start') {\n            titleX = 0\n        } else if (titleAlign === 'middle') {\n            titleX = length / 2\n        } else {\n            titleX = length\n        }\n\n        if (tickPosition === 'before') {\n            y1 = -tickSize\n            y2 = tickOverlap ? thickness : 0\n\n            textY = -tickSize - tickSpacing\n            textVerticalAlign = 'alphabetic'\n\n            titleY = thickness + titleOffset\n            titleVerticalAlign = 'hanging'\n        } else {\n            y1 = tickOverlap ? 0 : thickness\n            y2 = thickness + tickSize\n\n            textY = y2 + tickSpacing\n            textVerticalAlign = 'hanging'\n\n            titleY = -titleOffset\n            titleVerticalAlign = 'alphabetic'\n        }\n\n        values.forEach(value => {\n            const x = positionScale(value)\n\n            computedTicks.push({\n                x1: x,\n                y1,\n                x2: x,\n                y2,\n                text: formatValue(value),\n                textX: x,\n                textY,\n                textHorizontalAlign,\n                textVerticalAlign,\n            })\n        })\n    } else {\n        width = thickness\n        height = length\n\n        gradientY1 = 1\n\n        let x1: number\n        let x2: number\n\n        let textX: number\n        let textHorizontalAlign: 'start' | 'end'\n        const textVerticalAlign = 'central'\n\n        titleRotation = -90\n        if (titleAlign === 'start') {\n            titleY = length\n        } else if (titleAlign === 'middle') {\n            titleY = length / 2\n        } else {\n            titleY = 0\n        }\n\n        if (tickPosition === 'before') {\n            x1 = -tickSize\n            x2 = tickOverlap ? thickness : 0\n\n            textX = x1 - tickSpacing\n            textHorizontalAlign = 'end'\n\n            titleX = thickness + titleOffset\n            titleVerticalAlign = 'hanging'\n        } else {\n            x1 = tickOverlap ? 0 : thickness\n            x2 = thickness + tickSize\n\n            textX = x2 + tickSpacing\n            textHorizontalAlign = 'start'\n\n            titleX = -titleOffset\n            titleVerticalAlign = 'alphabetic'\n        }\n\n        values.forEach(value => {\n            const y = positionScale(value)\n\n            computedTicks.push({\n                x1,\n                y1: y,\n                x2,\n                y2: y,\n                text: formatValue(value),\n                textX,\n                textY: y,\n                textHorizontalAlign,\n                textVerticalAlign,\n            })\n        })\n    }\n\n    return {\n        width,\n        height,\n        gradientX1,\n        gradientY1,\n        gradientX2,\n        gradientY2,\n        colorStops,\n        ticks: computedTicks,\n        titleText: title,\n        titleX,\n        titleY,\n        titleRotation,\n        titleHorizontalAlign: titleAlign,\n        titleVerticalAlign,\n    }\n}\n","import { Fragment } from 'react'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { computeContinuousColorsLegend } from '../compute'\nimport { ContinuousColorsLegendProps } from '../types'\nimport { continuousColorsLegendDefaults } from '../defaults'\n\nexport const ContinuousColorsLegendSvg = ({\n    scale,\n    ticks,\n    length = continuousColorsLegendDefaults.length,\n    thickness = continuousColorsLegendDefaults.thickness,\n    direction = continuousColorsLegendDefaults.direction,\n    tickPosition = continuousColorsLegendDefaults.tickPosition,\n    tickSize = continuousColorsLegendDefaults.tickSize,\n    tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n    tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n    tickFormat = continuousColorsLegendDefaults.tickFormat,\n    title,\n    titleAlign = continuousColorsLegendDefaults.titleAlign,\n    titleOffset = continuousColorsLegendDefaults.titleOffset,\n}: ContinuousColorsLegendProps) => {\n    const {\n        width,\n        height,\n        gradientX1,\n        gradientY1,\n        gradientX2,\n        gradientY2,\n        ticks: computedTicks,\n        colorStops,\n        titleText,\n        titleX,\n        titleY,\n        titleRotation,\n        titleVerticalAlign,\n        titleHorizontalAlign,\n    } = computeContinuousColorsLegend({\n        scale,\n        ticks,\n        length,\n        thickness,\n        direction,\n        tickPosition,\n        tickSize,\n        tickSpacing,\n        tickOverlap,\n        tickFormat,\n        title,\n        titleAlign,\n        titleOffset,\n    })\n\n    const theme = useTheme()\n\n    // remove commas, parentheses and spaces from stop color, this will then create a unique id depending on which color scheme you use.\n    // so if you have two or more heatmaps on a single page with differing color schemes the legend will be correct for each.\n    const id = `ContinuousColorsLegendSvgGradient.${direction}.${colorStops\n        .map(stop => `${stop.stopColor.replace(/[(),\\s]/g, '')}.${stop.offset}`)\n        .join('_')}`\n\n    return (\n        <g>\n            <defs>\n                <linearGradient\n                    id={id}\n                    x1={gradientX1}\n                    y1={gradientY1}\n                    x2={gradientX2}\n                    y2={gradientY2}\n                >\n                    {colorStops.map(colorStop => (\n                        <stop\n                            key={colorStop.key}\n                            offset={colorStop.offset}\n                            stopColor={colorStop.stopColor}\n                        />\n                    ))}\n                </linearGradient>\n            </defs>\n            {titleText && (\n                <text\n                    transform={`translate(${titleX}, ${titleY}) rotate(${titleRotation})`}\n                    textAnchor={titleHorizontalAlign}\n                    dominantBaseline={titleVerticalAlign}\n                    style={theme.legends.title.text}\n                >\n                    {titleText}\n                </text>\n            )}\n            <rect width={width} height={height} fill={`url(#${id}`} />\n            {computedTicks.map((tick, index) => (\n                <Fragment key={index}>\n                    <line\n                        x1={tick.x1}\n                        y1={tick.y1}\n                        x2={tick.x2}\n                        y2={tick.y2}\n                        style={theme.legends.ticks.line}\n                    />\n                    <Text\n                        x={tick.textX}\n                        y={tick.textY}\n                        textAnchor={tick.textHorizontalAlign}\n                        dominantBaseline={tick.textVerticalAlign}\n                        style={theme.legends.ticks.text}\n                    >\n                        {tick.text}\n                    </Text>\n                </Fragment>\n            ))}\n        </g>\n    )\n}\n","import { useState, useCallback } from 'react'\nimport * as React from 'react'\nimport { useTheme } from '@nivo/theming'\nimport { Text } from '@nivo/text'\nimport { LegendSvgItemProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeItemLayout } from '../compute'\nimport { SymbolCircle, SymbolDiamond, SymbolSquare, SymbolTriangle } from './symbols'\n\ntype Style = Partial<{\n    itemBackground: string\n    itemOpacity: number\n    itemTextColor: string\n    symbolBorderColor: string\n    symbolBorderWidth: number\n    symbolSize: number\n}>\n\nconst symbolByShape = {\n    circle: SymbolCircle,\n    diamond: SymbolDiamond,\n    square: SymbolSquare,\n    triangle: SymbolTriangle,\n}\n\nexport const LegendSvgItem = ({\n    x,\n    y,\n    width,\n    height,\n    data,\n    direction = legendDefaults.itemDirection,\n    justify = legendDefaults.justify,\n    textColor,\n    background = 'transparent',\n    opacity = 1,\n    symbolShape = legendDefaults.symbolShape,\n    symbolSize = legendDefaults.symbolSize,\n    symbolSpacing = legendDefaults.symbolSpacing,\n    symbolBorderWidth = 0,\n    symbolBorderColor = 'transparent',\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    toggleSerie,\n    effects,\n}: LegendSvgItemProps) => {\n    const [style, setStyle] = useState<Style>({})\n    const theme = useTheme()\n\n    const handleMouseEnter = useCallback(\n        (event: React.MouseEvent<SVGRectElement>) => {\n            if (effects) {\n                const applyEffects = effects.filter(({ on }) => on === 'hover')\n                const style = applyEffects.reduce(\n                    (acc, effect) => ({\n                        ...acc,\n                        ...effect.style,\n                    }),\n                    {}\n                )\n                setStyle(style)\n            }\n\n            onMouseEnter?.(data, event)\n        },\n        [onMouseEnter, data, effects]\n    )\n    const handleMouseLeave = useCallback(\n        (event: React.MouseEvent<SVGRectElement>) => {\n            if (effects) {\n                const applyEffects = effects.filter(({ on }) => on !== 'hover')\n                const style = applyEffects.reduce(\n                    (acc, effect) => ({\n                        ...acc,\n                        ...effect.style,\n                    }),\n                    {}\n                )\n                setStyle(style)\n            }\n\n            onMouseLeave?.(data, event)\n        },\n        [onMouseLeave, data, effects]\n    )\n\n    const { symbolX, symbolY, labelX, labelY, labelAnchor, labelAlignment } = computeItemLayout({\n        direction,\n        justify,\n        symbolSize: style.symbolSize ?? symbolSize,\n        symbolSpacing,\n        width,\n        height,\n    })\n\n    const isInteractive = [onClick, onMouseEnter, onMouseLeave, toggleSerie].some(\n        handler => handler !== undefined\n    )\n\n    const SymbolShape = typeof symbolShape === 'function' ? symbolShape : symbolByShape[symbolShape]\n\n    return (\n        <g\n            transform={`translate(${x},${y})`}\n            style={{\n                opacity: style.itemOpacity ?? opacity,\n            }}\n        >\n            <rect\n                width={width}\n                height={height}\n                fill={style.itemBackground ?? background}\n                style={{\n                    cursor: isInteractive ? 'pointer' : 'auto',\n                }}\n                onClick={event => {\n                    onClick?.(data, event)\n                    toggleSerie?.(data.id)\n                }}\n                onMouseEnter={handleMouseEnter}\n                onMouseLeave={handleMouseLeave}\n            />\n            {React.createElement(SymbolShape, {\n                id: data.id,\n                x: symbolX,\n                y: symbolY,\n                size: style.symbolSize ?? symbolSize,\n                fill: data.fill ?? data.color ?? 'black',\n                borderWidth: style.symbolBorderWidth ?? symbolBorderWidth,\n                borderColor: style.symbolBorderColor ?? symbolBorderColor,\n                ...(data.hidden ? theme.legends.hidden.symbol : undefined),\n            })}\n            <Text\n                textAnchor={labelAnchor}\n                style={{\n                    ...theme.legends.text,\n                    fill: style.itemTextColor ?? textColor ?? theme.legends.text.fill ?? 'black',\n                    dominantBaseline: labelAlignment,\n                    pointerEvents: 'none',\n                    userSelect: 'none',\n                    ...(data.hidden ? theme.legends.hidden.text : undefined),\n                }}\n                x={labelX}\n                y={labelY}\n            >\n                {data.label}\n            </Text>\n        </g>\n    )\n}\n","import { LegendSvgItem } from './LegendSvgItem'\nimport { LegendSvgProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeDimensions } from '../compute'\n\nexport const LegendSvg = ({\n    data,\n    x,\n    y,\n    direction,\n    padding: _padding = legendDefaults.padding,\n    justify,\n    effects,\n    itemWidth,\n    itemHeight,\n    itemDirection = legendDefaults.itemDirection,\n    itemsSpacing = legendDefaults.itemsSpacing,\n    itemTextColor,\n    itemBackground = 'transparent',\n    itemOpacity = 1,\n    symbolShape,\n    symbolSize,\n    symbolSpacing,\n    symbolBorderWidth,\n    symbolBorderColor,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    toggleSerie,\n}: LegendSvgProps) => {\n    const { padding } = computeDimensions({\n        itemCount: data.length,\n        itemWidth,\n        itemHeight,\n        itemsSpacing,\n        direction,\n        padding: _padding,\n    })\n\n    const xStep = direction === 'row' ? itemWidth + itemsSpacing : 0\n    const yStep = direction === 'column' ? itemHeight + itemsSpacing : 0\n\n    return (\n        <g transform={`translate(${x},${y})`}>\n            {data.map((data, i) => (\n                <LegendSvgItem\n                    key={i}\n                    data={data}\n                    x={i * xStep + padding.left}\n                    y={i * yStep + padding.top}\n                    width={itemWidth}\n                    height={itemHeight}\n                    direction={itemDirection}\n                    justify={justify}\n                    effects={effects}\n                    textColor={itemTextColor}\n                    background={itemBackground}\n                    opacity={itemOpacity}\n                    symbolShape={symbolShape}\n                    symbolSize={symbolSize}\n                    symbolSpacing={symbolSpacing}\n                    symbolBorderWidth={symbolBorderWidth}\n                    symbolBorderColor={symbolBorderColor}\n                    onClick={onClick}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                    toggleSerie={toggleSerie}\n                />\n            ))}\n        </g>\n    )\n}\n","import { degreesToRadians } from '@nivo/core'\nimport { Theme } from '@nivo/theming'\nimport { setCanvasFont, drawCanvasText } from '@nivo/text'\nimport {\n    computeDimensions,\n    computePositionFromAnchor,\n    computeItemLayout,\n    computeContinuousColorsLegend,\n} from './compute'\nimport { AnchoredContinuousColorsLegendProps, LegendCanvasProps } from './types'\nimport { continuousColorsLegendDefaults } from './defaults'\n\nconst textAlignMapping = {\n    start: 'left',\n    middle: 'center',\n    end: 'right',\n} as const\n\nexport const renderLegendToCanvas = (\n    ctx: CanvasRenderingContext2D,\n    {\n        data,\n\n        containerWidth,\n        containerHeight,\n        translateX = 0,\n        translateY = 0,\n        anchor,\n        direction,\n        padding: _padding = 0,\n        justify = false,\n\n        // items\n        itemsSpacing = 0,\n        itemWidth,\n        itemHeight,\n        itemDirection = 'left-to-right',\n        itemTextColor,\n\n        // symbol\n        symbolSize = 16,\n        symbolSpacing = 8,\n        // @todo add support for shapes\n        // symbolShape = LegendSvgItem.defaultProps.symbolShape,\n\n        theme,\n    }: LegendCanvasProps\n) => {\n    const { width, height, padding } = computeDimensions({\n        itemCount: data.length,\n        itemWidth,\n        itemHeight,\n        itemsSpacing,\n        direction,\n        padding: _padding,\n    })\n\n    const { x, y } = computePositionFromAnchor({\n        anchor,\n        translateX,\n        translateY,\n        containerWidth,\n        containerHeight,\n        width,\n        height,\n    })\n\n    const xStep = direction === 'row' ? itemWidth + itemsSpacing : 0\n    const yStep = direction === 'column' ? itemHeight + itemsSpacing : 0\n\n    ctx.save()\n    ctx.translate(x, y)\n\n    setCanvasFont(ctx, theme.legends.text)\n\n    data.forEach((d, i) => {\n        const itemX = i * xStep + padding.left\n        const itemY = i * yStep + padding.top\n\n        const { symbolX, symbolY, labelX, labelY, labelAnchor, labelAlignment } = computeItemLayout(\n            {\n                direction: itemDirection,\n                justify,\n                symbolSize,\n                symbolSpacing,\n                width: itemWidth,\n                height: itemHeight,\n            }\n        )\n\n        ctx.fillStyle = d.color ?? 'black'\n        ctx.fillRect(itemX + symbolX, itemY + symbolY, symbolSize, symbolSize)\n\n        ctx.textAlign = textAlignMapping[labelAnchor]\n        if (labelAlignment === 'central') {\n            ctx.textBaseline = 'middle'\n        }\n\n        drawCanvasText(\n            ctx,\n            {\n                ...theme.legends.text,\n                fill: itemTextColor ?? theme.legends.text.fill,\n            },\n            String(d.label),\n            itemX + labelX,\n            itemY + labelY\n        )\n    })\n\n    ctx.restore()\n}\n\nexport const renderContinuousColorLegendToCanvas = (\n    ctx: CanvasRenderingContext2D,\n    {\n        containerWidth,\n        containerHeight,\n        anchor,\n        translateX = 0,\n        translateY = 0,\n        scale,\n        length = continuousColorsLegendDefaults.length,\n        thickness = continuousColorsLegendDefaults.thickness,\n        direction = continuousColorsLegendDefaults.direction,\n        ticks: _ticks,\n        tickPosition = continuousColorsLegendDefaults.tickPosition,\n        tickSize = continuousColorsLegendDefaults.tickSize,\n        tickSpacing = continuousColorsLegendDefaults.tickSpacing,\n        tickOverlap = continuousColorsLegendDefaults.tickOverlap,\n        tickFormat = continuousColorsLegendDefaults.tickFormat,\n        title,\n        titleAlign = continuousColorsLegendDefaults.titleAlign,\n        titleOffset = continuousColorsLegendDefaults.titleOffset,\n        theme,\n    }: AnchoredContinuousColorsLegendProps & {\n        theme: Theme\n    }\n) => {\n    const {\n        width,\n        height,\n        gradientX1,\n        gradientY1,\n        gradientX2,\n        gradientY2,\n        colorStops,\n        ticks,\n        titleText,\n        titleX,\n        titleY,\n        titleRotation,\n        titleVerticalAlign,\n        titleHorizontalAlign,\n    } = computeContinuousColorsLegend({\n        scale,\n        ticks: _ticks,\n        length,\n        thickness,\n        direction,\n        tickPosition,\n        tickSize,\n        tickSpacing,\n        tickOverlap,\n        tickFormat,\n        title,\n        titleAlign,\n        titleOffset,\n    })\n\n    const { x, y } = computePositionFromAnchor({\n        anchor,\n        translateX,\n        translateY,\n        containerWidth,\n        containerHeight,\n        width,\n        height,\n    })\n\n    const initialStyles = {\n        font: ctx.font,\n        textAlign: ctx.textAlign,\n        textBaseline: ctx.textBaseline,\n    }\n    ctx.save()\n\n    ctx.translate(x, y)\n\n    const gradient = ctx.createLinearGradient(\n        gradientX1 * width,\n        gradientY1 * height,\n        gradientX2 * width,\n        gradientY2 * height\n    )\n    colorStops.forEach(colorStop => {\n        gradient.addColorStop(colorStop.offset, colorStop.stopColor)\n    })\n\n    ctx.fillStyle = gradient\n    ctx.fillRect(0, 0, width, height)\n\n    setCanvasFont(ctx, theme.legends.ticks.text)\n\n    const tickLineWidth = theme.legends.ticks.line.strokeWidth ?? 0\n    const shouldRenderTickLine = typeof tickLineWidth !== 'string' && tickLineWidth > 0\n    ticks.forEach(tick => {\n        if (shouldRenderTickLine) {\n            ctx.lineWidth = tickLineWidth\n            if (theme.axis.ticks.line.stroke) {\n                ctx.strokeStyle = theme.axis.ticks.line.stroke\n            }\n            ctx.lineCap = 'square'\n\n            ctx.beginPath()\n            ctx.moveTo(tick.x1, tick.y1)\n            ctx.lineTo(tick.x2, tick.y2)\n            ctx.stroke()\n        }\n\n        ctx.textAlign = tick.textHorizontalAlign === 'middle' ? 'center' : tick.textHorizontalAlign\n        ctx.textBaseline = tick.textVerticalAlign === 'central' ? 'middle' : tick.textVerticalAlign\n\n        drawCanvasText(ctx, theme.legends.ticks.text, tick.text, tick.textX, tick.textY)\n    })\n\n    if (titleText) {\n        ctx.save()\n        ctx.translate(titleX, titleY)\n        ctx.rotate(degreesToRadians(titleRotation))\n\n        setCanvasFont(ctx, theme.legends.title.text)\n        ctx.textAlign = titleHorizontalAlign === 'middle' ? 'center' : titleHorizontalAlign\n        ctx.textBaseline = titleVerticalAlign\n\n        drawCanvasText(ctx, theme.legends.title.text, titleText)\n\n        ctx.restore()\n    }\n\n    ctx.restore()\n\n    ctx.font = initialStyles.font\n    ctx.textAlign = initialStyles.textAlign\n    ctx.textBaseline = initialStyles.textBaseline\n}\n","import { AnchoredContinuousColorsLegendProps } from '../types'\nimport { computePositionFromAnchor } from '../compute'\nimport { continuousColorsLegendDefaults } from '../defaults'\nimport { ContinuousColorsLegendSvg } from './ContinuousColorsLegendSvg'\n\nexport const AnchoredContinuousColorsLegendSvg = ({\n    containerWidth,\n    containerHeight,\n    anchor,\n    translateX = 0,\n    translateY = 0,\n    length = continuousColorsLegendDefaults.length,\n    thickness = continuousColorsLegendDefaults.thickness,\n    direction = continuousColorsLegendDefaults.direction,\n    ...legendProps\n}: AnchoredContinuousColorsLegendProps) => {\n    let width: number\n    let height: number\n    if (direction === 'row') {\n        width = length\n        height = thickness\n    } else {\n        width = thickness\n        height = length\n    }\n\n    const { x, y } = computePositionFromAnchor({\n        anchor,\n        translateX,\n        translateY,\n        containerWidth,\n        containerHeight,\n        width,\n        height,\n    })\n\n    return (\n        <g transform={`translate(${x}, ${y})`}>\n            <ContinuousColorsLegendSvg\n                length={length}\n                thickness={thickness}\n                direction={direction}\n                {...legendProps}\n            />\n        </g>\n    )\n}\n","import { LegendSvg } from './LegendSvg'\nimport { BoxLegendSvgProps } from '../types'\nimport { legendDefaults } from '../defaults'\nimport { computeDimensions, computePositionFromAnchor } from '../compute'\n\nexport const BoxLegendSvg = ({\n    data,\n    containerWidth,\n    containerHeight,\n    translateX = legendDefaults.translateX,\n    translateY = legendDefaults.translateY,\n    anchor,\n    direction,\n    padding = legendDefaults.padding,\n    justify,\n    itemsSpacing = legendDefaults.itemsSpacing,\n    itemWidth,\n    itemHeight,\n    itemDirection,\n    itemTextColor,\n    itemBackground,\n    itemOpacity,\n    symbolShape,\n    symbolSize,\n    symbolSpacing,\n    symbolBorderWidth,\n    symbolBorderColor,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    toggleSerie,\n    effects,\n}: BoxLegendSvgProps) => {\n    const { width, height } = computeDimensions({\n        itemCount: data.length,\n        itemsSpacing,\n        itemWidth,\n        itemHeight,\n        direction,\n        padding,\n    })\n\n    const { x, y } = computePositionFromAnchor({\n        anchor,\n        translateX,\n        translateY,\n        containerWidth,\n        containerHeight,\n        width,\n        height,\n    })\n\n    return (\n        <LegendSvg\n            data={data}\n            x={x}\n            y={y}\n            direction={direction}\n            padding={padding}\n            justify={justify}\n            effects={effects}\n            itemsSpacing={itemsSpacing}\n            itemWidth={itemWidth}\n            itemHeight={itemHeight}\n            itemDirection={itemDirection}\n            itemTextColor={itemTextColor}\n            itemBackground={itemBackground}\n            itemOpacity={itemOpacity}\n            symbolShape={symbolShape}\n            symbolSize={symbolSize}\n            symbolSpacing={symbolSpacing}\n            symbolBorderWidth={symbolBorderWidth}\n            symbolBorderColor={symbolBorderColor}\n            onClick={onClick}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            toggleSerie={typeof toggleSerie === 'boolean' ? undefined : toggleSerie}\n        />\n    )\n}\n","import { useMemo } from 'react'\n\ntype Scale = {\n    (value: number): number\n    invertExtent: (value: number) => [number, number]\n    range: () => number[]\n}\n\nexport const useQuantizeColorScaleLegendData = ({\n    scale,\n    domain: overriddenDomain,\n    reverse = false,\n    valueFormat = v => v,\n    separator = ' - ',\n}: {\n    scale: Scale\n    domain?: number[]\n    reverse?: boolean\n    valueFormat?: <T, U>(value: T) => T | U\n    separator?: string\n}) => {\n    return useMemo(() => {\n        const domain = overriddenDomain ?? scale.range()\n\n        const items = domain.map((domainValue, index) => {\n            const [start, end] = scale.invertExtent(domainValue)\n\n            return {\n                id: domainValue,\n                index,\n                extent: [start, end],\n                label: `${valueFormat(start)}${separator}${valueFormat(end)}`,\n                value: scale(start),\n                color: domainValue,\n            }\n        })\n\n        if (reverse) items.reverse()\n\n        return items\n    }, [overriddenDomain, scale, reverse, separator, valueFormat])\n}\n"],"names":["SymbolCircle","_ref","x","y","size","fill","_ref$opacity","opacity","_ref$borderWidth","borderWidth","_ref$borderColor","borderColor","_jsx","r","cx","cy","strokeWidth","stroke","style","pointerEvents","SymbolDiamond","transform","children","jsx","d","SymbolSquare","width","height","SymbolTriangle","legendDefaults","translateX","translateY","padding","itemsSpacing","itemDirection","justify","symbolShape","symbolSize","symbolSpacing","continuousColorsLegendDefaults","length","thickness","direction","tickPosition","tickSize","tickSpacing","tickOverlap","tickFormat","value","titleAlign","titleOffset","zeroPadding","top","right","bottom","left","computeDimensions","item","_padding","itemCount","itemWidth","itemHeight","Array","isArray","Error","_extends","horizontalPadding","verticalPadding","spacing","computePositionFromAnchor","_ref2","anchor","containerWidth","containerHeight","computeItemLayout","_ref3","symbolX","symbolY","labelX","labelY","labelAnchor","labelAlignment","computeContinuousColorsLegend","_ref4","values","scale","ticks","_ref4$length","_ref4$thickness","_ref4$direction","_ref4$tickPosition","_ref4$tickSize","_ref4$tickSpacing","_ref4$tickOverlap","_ref4$tickFormat","title","_ref4$titleAlign","_ref4$titleOffset","domain","concat","reverse","positionScale","scaleLinear","range","thresholds","titleX","titleY","titleRotation","titleVerticalAlign","colorStops","computeContinuousColorScaleColorStops","formatValue","getValueFormatter","computedTicks","gradientY1","gradientX2","y1","y2","textY","textVerticalAlign","forEach","push","x1","x2","text","textX","textHorizontalAlign","gradientX1","gradientY2","titleText","titleHorizontalAlign","ContinuousColorsLegendSvg","_ref$length","_ref$thickness","_ref$direction","_ref$tickPosition","_ref$tickSize","_ref$tickSpacing","_ref$tickOverlap","_ref$tickFormat","_ref$titleAlign","_ref$titleOffset","_computeContinuousCol","theme","useTheme","id","map","stop","stopColor","replace","offset","join","_jsxs","colorStop","key","textAnchor","dominantBaseline","legends","tick","index","Fragment","line","Text","symbolByShape","circle","diamond","square","triangle","LegendSvgItem","_style$symbolSize","_style$itemOpacity","_style$itemBackground","_style$symbolSize2","_data$fill","_style$symbolBorderWi","_style$symbolBorderCo","_ref5","_ref6","_style$itemTextColor","data","_ref$justify","textColor","_ref$background","background","_ref$symbolShape","_ref$symbolSize","_ref$symbolSpacing","_ref$symbolBorderWidt","symbolBorderWidth","_ref$symbolBorderColo","symbolBorderColor","onClick","onMouseEnter","onMouseLeave","toggleSerie","effects","_useState","useState","setStyle","handleMouseEnter","useCallback","event","filter","on","reduce","acc","effect","handleMouseLeave","_computeItemLayout","isInteractive","some","handler","undefined","SymbolShape","itemOpacity","itemBackground","cursor","React","createElement","color","hidden","symbol","itemTextColor","userSelect","label","LegendSvg","_ref$padding","_ref$itemDirection","_ref$itemsSpacing","_ref$itemBackground","_ref$itemOpacity","xStep","yStep","i","textAlignMapping","start","middle","end","_ref$translateX","_ref$translateY","legendProps","_objectWithoutPropertiesLoose","_excluded","_computePositionFromA","_computeDimensions","ctx","_theme$legends$ticks$","_ref2$translateX","_ref2$translateY","_ref2$length","_ref2$thickness","_ref2$direction","_ticks","_ref2$tickPosition","_ref2$tickSize","_ref2$tickSpacing","_ref2$tickOverlap","_ref2$tickFormat","_ref2$titleAlign","_ref2$titleOffset","_computePositionFromA2","initialStyles","font","textAlign","textBaseline","save","translate","gradient","createLinearGradient","addColorStop","fillStyle","fillRect","setCanvasFont","tickLineWidth","shouldRenderTickLine","lineWidth","axis","strokeStyle","lineCap","beginPath","moveTo","lineTo","drawCanvasText","rotate","degreesToRadians","restore","_d$color","itemX","itemY","String","overriddenDomain","_ref$reverse","_ref$valueFormat","valueFormat","v","_ref$separator","separator","useMemo","items","domainValue","_scale$invertExtent","invertExtent","extent"],"mappings":"4cAEaA,EAAe,SAAHC,GAQN,IAPfC,EAACD,EAADC,EACAC,EAACF,EAADE,EACAC,EAAIH,EAAJG,KACAC,EAAIJ,EAAJI,KAAIC,EAAAL,EACJM,QAAAA,OAAU,IAAHD,EAAG,EAACA,EAAAE,EAAAP,EACXQ,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAAAT,EACfU,YAAAA,OAAc,IAAHD,EAAG,cAAaA,EAE3B,OACIE,EAAAA,IAAA,SAAA,CACIC,EAAGT,EAAO,EACVU,GAAIZ,EAAIE,EAAO,EACfW,GAAIZ,EAAIC,EAAO,EACfC,KAAMA,EACNE,QAASA,EACTS,YAAaP,EACbQ,OAAQN,EACRO,MAAO,CACHC,cAAe,SAI/B,ECvBaC,EAAgB,SAAHnB,GAQP,IAPfC,EAACD,EAADC,EACAC,EAACF,EAADE,EACAC,EAAIH,EAAJG,KACAC,EAAIJ,EAAJI,KAAIC,EAAAL,EACJM,QAAAA,OAAU,IAAHD,EAAG,EAACA,EAAAE,EAAAP,EACXQ,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAAAT,EACfU,YAAAA,OAAc,IAAHD,EAAG,cAAaA,EAE3B,OACIE,EAAAA,IAAA,IAAA,CAAGS,UAAwBnB,aAAAA,EAAKC,IAAAA,EAAK,IAAAmB,SACjCV,EAAAW,IAAA,OAAA,CACIC,EACOpB,0BAAAA,EAAO,EACPA,4BAAO,GAAPA,EAAcA,IAAAA,EAAO,4BACrBA,EAAO,EAAC,IAAIA,EAAI,0BACT,GAAPA,EAAU,IAAIA,EAAO,EAAC,0BACtBA,EAAO,EACZ,uBACFC,KAAMA,EACNE,QAASA,EACTS,YAAaP,EACbQ,OAAQN,EACRO,MAAO,CACHC,cAAe,WAKnC,EC7BaM,EAAe,SAAHxB,GAQN,IAPfC,EAACD,EAADC,EACAC,EAACF,EAADE,EACAC,EAAIH,EAAJG,KACAC,EAAIJ,EAAJI,KAAIC,EAAAL,EACJM,QAAAA,OAAU,IAAHD,EAAG,EAACA,EAAAE,EAAAP,EACXQ,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAAAT,EACfU,YAAAA,OAAc,IAAHD,EAAG,cAAaA,EAE3B,OACIE,EAAAA,IAAA,OAAA,CACIV,EAAGA,EACHC,EAAGA,EACHE,KAAMA,EACNE,QAASA,EACTS,YAAaP,EACbQ,OAAQN,EACRe,MAAOtB,EACPuB,OAAQvB,EACRc,MAAO,CACHC,cAAe,SAI/B,ECxBaS,EAAiB,SAAH3B,GAQR,IAPfC,EAACD,EAADC,EACAC,EAACF,EAADE,EACAC,EAAIH,EAAJG,KACAC,EAAIJ,EAAJI,KAAIC,EAAAL,EACJM,QAAAA,OAAU,IAAHD,EAAG,EAACA,EAAAE,EAAAP,EACXQ,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAAAT,EACfU,YAAAA,OAAc,IAAHD,EAAG,cAAaA,EAE3B,OACIE,EAAAA,IAAA,IAAA,CAAGS,UAAwBnB,aAAAA,EAAKC,IAAAA,EAAK,IAAAmB,SACjCV,EAAAW,IAAA,OAAA,CACIC,EACGpB,sBAAAA,EAAO,0BACPA,EAAI,IAAIA,EAAI,wBACVA,EAAI,sBACNA,EAAO,EACZ,mBACEC,KAAMA,EACNE,QAASA,EACTS,YAAaP,EACbQ,OAAQN,EACRO,MAAO,CACHC,cAAe,WAKnC,0NC5BO,IAAMU,EAUT,CACAC,WAAY,EACZC,WAAY,EACZC,QAAS,EACTC,aAAc,EACdC,cAAe,gBACfC,SAAS,EACTC,YAAa,SACbC,WAAY,GACZC,cAAe,GAGNC,EAWT,CACAC,OAAQ,IACRC,UAAW,GACXC,UAAW,MACXC,aAAc,QACdC,SAAU,EACVC,YAAa,EACbC,aAAa,EACbC,WAAY,SAACC,GAAa,MAAA,GAAQA,CAAO,EACzCC,WAAY,QACZC,YAAa,GC/BXC,EAAc,CAChBC,IAAK,EACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,GAGGC,EAAoB,SAAHvD,GAQoD,IAlB7DwD,EAWjBf,EAASzC,EAATyC,UACAT,EAAYhC,EAAZgC,aACSyB,EAAQzD,EAAjB+B,QACA2B,EAAS1D,EAAT0D,UACAC,EAAS3D,EAAT2D,UACAC,EAAU5D,EAAV4D,WAGA,GAAwB,iBAAbH,IAlBK,iBADCD,EAmB6BC,IAlBjBI,MAAMC,QAAQN,IAAkB,OAATA,GAmBhD,MAAM,IAAIO,MAAM,4DAGpB,IAAMhC,EACkB,iBAAb0B,EACD,CACIN,IAAKM,EACLL,MAAOK,EACPJ,OAAQI,EACRH,KAAMG,GACTO,EAAA,CAAA,EAEMd,EACAO,GAGXQ,EAAoBlC,EAAQuB,KAAOvB,EAAQqB,MAC3Cc,EAAkBnC,EAAQoB,IAAMpB,EAAQsB,OAC1C5B,EAAQkC,EAAYM,EACpBvC,EAASkC,EAAaM,EACpBC,GAAWT,EAAY,GAAK1B,EAOlC,MANkB,QAAdS,EACAhB,EAAQkC,EAAYD,EAAYS,EAAUF,EACrB,WAAdxB,IACPf,EAASkC,EAAaF,EAAYS,EAAUD,GAGzC,CAAEzC,MAAAA,EAAOC,OAAAA,EAAQK,QAAAA,EAC5B,EAEaqC,EAA4B,SAAHC,GAWhC,IAVFC,EAAMD,EAANC,OACAzC,EAAUwC,EAAVxC,WACAC,EAAUuC,EAAVvC,WACAyC,EAAcF,EAAdE,eACAC,EAAeH,EAAfG,gBACA/C,EAAK4C,EAAL5C,MACAC,EAAM2C,EAAN3C,OAKIzB,EAAI4B,EACJ3B,EAAI4B,EAER,OAAQwC,GACJ,IAAK,MACDrE,IAAMsE,EAAiB9C,GAAS,EAChC,MAEJ,IAAK,YACDxB,GAAKsE,EAAiB9C,EACtB,MAEJ,IAAK,QACDxB,GAAKsE,EAAiB9C,EACtBvB,IAAMsE,EAAkB9C,GAAU,EAClC,MAEJ,IAAK,eACDzB,GAAKsE,EAAiB9C,EACtBvB,GAAKsE,EAAkB9C,EACvB,MAEJ,IAAK,SACDzB,IAAMsE,EAAiB9C,GAAS,EAChCvB,GAAKsE,EAAkB9C,EACvB,MAEJ,IAAK,cACDxB,GAAKsE,EAAkB9C,EACvB,MAEJ,IAAK,OACDxB,IAAMsE,EAAkB9C,GAAU,EAClC,MAEJ,IAAK,SACDzB,IAAMsE,EAAiB9C,GAAS,EAChCvB,IAAMsE,EAAkB9C,GAAU,EAI1C,MAAO,CAAEzB,EAAAA,EAAGC,EAAAA,EAChB,EAEauE,EAAoB,SAAHC,GAU8C,IACpEC,EACAC,EAEAC,EACAC,EACAC,EACAC,EAhBJvC,EAASiC,EAATjC,UACAP,EAAOwC,EAAPxC,QACAE,EAAUsC,EAAVtC,WACAC,EAAaqC,EAAbrC,cACAZ,EAAKiD,EAALjD,MACAC,EAAMgD,EAANhD,OAaA,OAAQe,GACJ,IAAK,gBACDkC,EAAU,EACVC,GAAWlD,EAASU,GAAc,EAElC0C,EAASpD,EAAS,EAClBsD,EAAiB,UACb9C,GACA2C,EAASpD,EACTsD,EAAc,QAEdF,EAASzC,EAAaC,EACtB0C,EAAc,SAElB,MAEJ,IAAK,gBACDJ,EAAUlD,EAAQW,EAClBwC,GAAWlD,EAASU,GAAc,EAElC0C,EAASpD,EAAS,EAClBsD,EAAiB,UACb9C,GACA2C,EAAS,EACTE,EAAc,UAEdF,EAASpD,EAAQW,EAAaC,EAC9B0C,EAAc,OAElB,MAEJ,IAAK,gBACDJ,GAAWlD,EAAQW,GAAc,EACjCwC,EAAU,EAEVC,EAASpD,EAAQ,EAEjBsD,EAAc,SACV7C,GACA4C,EAASpD,EACTsD,EAAiB,eAEjBF,EAAS1C,EAAaC,EACtB2C,EAAiB,oBAErB,MAEJ,IAAK,gBACDL,GAAWlD,EAAQW,GAAc,EACjCwC,EAAUlD,EAASU,EAEnByC,EAASpD,EAAQ,EACjBsD,EAAc,SACV7C,GACA4C,EAAS,EACTE,EAAiB,qBAEjBF,EAASpD,EAASU,EAAaC,EAC/B2C,EAAiB,cAK7B,MAAO,CACHL,QAAAA,EACAC,QAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAC,YAAAA,EACAC,eAAAA,EAER,EAEaC,EAAgC,SAAHC,GAcP,IAa3BC,EA1BJC,EAAKF,EAALE,MACAC,EAAKH,EAALG,MAAKC,EAAAJ,EACL3C,OAAAA,OAAM,IAAA+C,EAAGhD,EAA+BC,OAAM+C,EAAAC,EAAAL,EAC9C1C,UAAAA,OAAS,IAAA+C,EAAGjD,EAA+BE,UAAS+C,EAAAC,EAAAN,EACpDzC,UAAAA,OAAS,IAAA+C,EAAGlD,EAA+BG,UAAS+C,EAAAC,EAAAP,EACpDxC,aAAAA,OAAY,IAAA+C,EAAGnD,EAA+BI,aAAY+C,EAAAC,EAAAR,EAC1DvC,SAAAA,OAAQ,IAAA+C,EAAGpD,EAA+BK,SAAQ+C,EAAAC,EAAAT,EAClDtC,YAAAA,OAAW,IAAA+C,EAAGrD,EAA+BM,YAAW+C,EAAAC,EAAAV,EACxDrC,YAAAA,OAAW,IAAA+C,EAAGtD,EAA+BO,YAAW+C,EAAAC,EAAAX,EACxDpC,WAAAA,OAAU,IAAA+C,EAAGvD,EAA+BQ,WAAU+C,EACtDC,EAAKZ,EAALY,MAAKC,EAAAb,EACLlC,WAAAA,OAAU,IAAA+C,EAAGzD,EAA+BU,WAAU+C,EAAAC,EAAAd,EACtDjC,YAAAA,OAAW,IAAA+C,EAAG1D,EAA+BW,YAAW+C,EAGlDC,EAAuB,WAAdxD,EAAyB,GAAAyD,OAAId,EAAMa,UAAUE,UAAYf,EAAMa,SAExEG,EAAgBC,EAAWA,cAAGJ,OAAOA,GACrB,IAAlBA,EAAO1D,OAEP6D,EAAcE,MAAM,CAAC,EAAG/D,IACC,IAAlB0D,EAAO1D,QAEd6D,EAAcE,MAAM,CAAC,EAAG/D,EAAS,EAAGA,IAMpC4C,EAFA,eAAgBC,GAENa,EAAO,IAAEC,OAAKd,EAAMmB,aAAY,CAAEN,EAAO,KAG1CpC,MAAMC,QAAQuB,GAASA,EAASD,EAAcC,MAAMA,GAGjE,IAgBI5D,EACAC,EAOA8E,EACAC,EACAC,EACAC,EA3BEC,EAAaC,EAAAA,sCAAsCzB,EAAO,IAE1D0B,EAAcC,oBAAkBjE,GAEhCkE,EAUA,GAMFC,EAAa,EACbC,EAAa,EAQjB,GAAkB,QAAdzE,EAAqB,CAMrB,IAAI0E,EACAC,EAEAC,EARJ5F,EAAQc,EACRb,EAASc,EAET0E,EAAa,EAMb,IACII,EAEJZ,EAAgB,EAEZF,EADe,UAAfxD,EACS,EACa,WAAfA,EACET,EAAS,EAETA,EAGQ,WAAjBG,GACAyE,GAAMxE,EACNyE,EAAKvE,EAAcL,EAAY,EAE/B6E,GAAS1E,EAAWC,EACpB0E,EAAoB,aAEpBb,EAASjE,EAAYS,EACrB0D,EAAqB,YAErBQ,EAAKtE,EAAc,EAAIL,EAGvB6E,GAFAD,EAAK5E,EAAYG,GAEJC,EACb0E,EAAoB,UAEpBb,GAAUxD,EACV0D,EAAqB,cAGzBxB,EAAOoC,SAAQ,SAAAxE,GACX,IAAM9C,EAAImG,EAAcrD,GAExBiE,EAAcQ,KAAK,CACfC,GAAIxH,EACJkH,GAAAA,EACAO,GAAIzH,EACJmH,GAAAA,EACAO,KAAMb,EAAY/D,GAClB6E,MAAO3H,EACPoH,MAAAA,EACAQ,oBA3CoB,SA4CpBP,kBAAAA,GAER,GACJ,KAAO,CAMH,IAAIG,EACAC,EAEAE,EACAC,EATJpG,EAAQe,EACRd,EAASa,EAET0E,EAAa,EASbP,GAAiB,GAEbD,EADe,UAAfzD,EACST,EACa,WAAfS,EACET,EAAS,EAET,EAGQ,WAAjBG,GAEAgF,EAAK7E,EAAcL,EAAY,EAE/BoF,GAHAH,GAAM9E,GAGOC,EACbiF,EAAsB,MAEtBrB,EAAShE,EAAYS,EACrB0D,EAAqB,YAErBc,EAAK5E,EAAc,EAAIL,EAGvBoF,GAFAF,EAAKlF,EAAYG,GAEJC,EACbiF,EAAsB,QAEtBrB,GAAUvD,EACV0D,EAAqB,cAGzBxB,EAAOoC,SAAQ,SAAAxE,GACX,IAAM7C,EAAIkG,EAAcrD,GAExBiE,EAAcQ,KAAK,CACfC,GAAAA,EACAN,GAAIjH,EACJwH,GAAAA,EACAN,GAAIlH,EACJyH,KAAMb,EAAY/D,GAClB6E,MAAAA,EACAP,MAAOnH,EACP2H,oBAAAA,EACAP,kBA3CkB,WA6C1B,GACJ,CAEA,MAAO,CACH7F,MAAAA,EACAC,OAAAA,EACAoG,WAjIe,EAkIfb,WAAAA,EACAC,WAAAA,EACAa,WAjIe,EAkIfnB,WAAAA,EACAvB,MAAO2B,EACPgB,UAAWlC,EACXU,OAAAA,EACAC,OAAAA,EACAC,cAAAA,EACAuB,qBAAsBjF,EACtB2D,mBAAAA,EAER,EC/YauB,EAA4B,SAAHlI,GAcH,IAb/BoF,EAAKpF,EAALoF,MACAC,EAAKrF,EAALqF,MAAK8C,EAAAnI,EACLuC,OAAAA,OAAM,IAAA4F,EAAG7F,EAA+BC,OAAM4F,EAAAC,EAAApI,EAC9CwC,UAAAA,OAAS,IAAA4F,EAAG9F,EAA+BE,UAAS4F,EAAAC,EAAArI,EACpDyC,UAAAA,OAAS,IAAA4F,EAAG/F,EAA+BG,UAAS4F,EAAAC,EAAAtI,EACpD0C,aAAAA,OAAY,IAAA4F,EAAGhG,EAA+BI,aAAY4F,EAAAC,EAAAvI,EAC1D2C,SAAAA,OAAQ,IAAA4F,EAAGjG,EAA+BK,SAAQ4F,EAAAC,EAAAxI,EAClD4C,YAAAA,OAAW,IAAA4F,EAAGlG,EAA+BM,YAAW4F,EAAAC,EAAAzI,EACxD6C,YAAAA,OAAW,IAAA4F,EAAGnG,EAA+BO,YAAW4F,EAAAC,EAAA1I,EACxD8C,WAAAA,OAAU,IAAA4F,EAAGpG,EAA+BQ,WAAU4F,EACtD5C,EAAK9F,EAAL8F,MAAK6C,EAAA3I,EACLgD,WAAAA,OAAU,IAAA2F,EAAGrG,EAA+BU,WAAU2F,EAAAC,EAAA5I,EACtDiD,YAEA4F,EAeI5D,EAA8B,CAC9BG,MAAAA,EACAC,MAAAA,EACA9C,OAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,SAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAC,WAAAA,EACAgD,MAAAA,EACA9C,WAAAA,EACAC,iBA9BO,IAAA2F,EAAGtG,EAA+BW,YAAW2F,IAGpDnH,EAAKoH,EAALpH,MACAC,EAAMmH,EAANnH,OACAoG,EAAUe,EAAVf,WACAb,EAAU4B,EAAV5B,WACAC,EAAU2B,EAAV3B,WACAa,EAAUc,EAAVd,WACOf,EAAa6B,EAApBxD,MACAuB,EAAUiC,EAAVjC,WACAoB,EAASa,EAATb,UACAxB,EAAMqC,EAANrC,OACAC,EAAMoC,EAANpC,OACAC,EAAamC,EAAbnC,cACAC,EAAkBkC,EAAlBlC,mBACAsB,EAAoBY,EAApBZ,qBAiBEa,EAAQC,EAAAA,WAIRC,uCAA0CvG,EAAS,IAAImE,EACxDqC,KAAI,SAAAC,GAAI,OAAOA,EAAKC,UAAUC,QAAQ,WAAY,IAAOF,IAAAA,EAAKG,MAAM,IACpEC,KAAK,KAEV,OACIC,EAAAA,KAAA,IAAA,CAAAlI,UACIV,EAAAW,IAAA,OAAA,CAAAD,SACIV,EAAAW,IAAA,iBAAA,CACI0H,GAAIA,EACJvB,GAAIK,EACJX,GAAIF,EACJS,GAAIR,EACJE,GAAIW,EAAW1G,SAEduF,EAAWqC,KAAI,SAAAO,GAAS,OACrB7I,EAAAA,IAAA,OAAA,CAEI0I,OAAQG,EAAUH,OAClBF,UAAWK,EAAUL,WAFhBK,EAAUC,YAO9BzB,GACGrH,EAAAW,IAAA,OAAA,CACIF,uBAAwBoF,EAAM,KAAKC,EAAM,YAAYC,EAAiB,IACtEgD,WAAYzB,EACZ0B,iBAAkBhD,EAClB1F,MAAO6H,EAAMc,QAAQ9D,MAAM6B,KAAKtG,SAE/B2G,IAGTrH,EAAAW,IAAA,OAAA,CAAMG,MAAOA,EAAOC,OAAQA,EAAQtB,KAAc4I,QAAAA,IACjDhC,EAAciC,KAAI,SAACY,EAAMC,GAAK,OAC3BP,EAAAA,KAACQ,EAAAA,SAAQ,CAAA1I,UACLV,EAAAW,IAAA,OAAA,CACImG,GAAIoC,EAAKpC,GACTN,GAAI0C,EAAK1C,GACTO,GAAImC,EAAKnC,GACTN,GAAIyC,EAAKzC,GACTnG,MAAO6H,EAAMc,QAAQvE,MAAM2E,OAE/BrJ,EAAAW,IAAC2I,OAAI,CACDhK,EAAG4J,EAAKjC,MACR1H,EAAG2J,EAAKxC,MACRqC,WAAYG,EAAKhC,oBACjB8B,iBAAkBE,EAAKvC,kBACvBrG,MAAO6H,EAAMc,QAAQvE,MAAMsC,KAAKtG,SAE/BwI,EAAKlC,SAfCmC,EAiBJ,MAI3B,6GC/FMI,EAAgB,CAClBC,OAAQpK,EACRqK,QAASjJ,EACTkJ,OAAQ7I,EACR8I,SAAU3I,GAGD4I,EAAgB,SAAHvK,GAqBA,IAAAwK,EAAAC,EAAAC,EAAAC,EAAAzF,EAAA0F,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EApBtBhL,EAACD,EAADC,EACAC,EAACF,EAADE,EACAuB,EAAKzB,EAALyB,MACAC,EAAM1B,EAAN0B,OACAwJ,EAAIlL,EAAJkL,KAAI7C,EAAArI,EACJyC,UAAAA,OAAS,IAAA4F,EAAGzG,EAAeK,cAAaoG,EAAA8C,EAAAnL,EACxCkC,QAAAA,OAAO,IAAAiJ,EAAGvJ,EAAeM,QAAOiJ,EAChCC,EAASpL,EAAToL,UAASC,EAAArL,EACTsL,WAAAA,OAAa,IAAHD,EAAG,cAAaA,EAAAhL,EAAAL,EAC1BM,QAAAA,OAAU,IAAHD,EAAG,EAACA,EAAAkL,EAAAvL,EACXmC,YAAAA,OAAW,IAAAoJ,EAAG3J,EAAeO,YAAWoJ,EAAAC,EAAAxL,EACxCoC,WAAAA,OAAU,IAAAoJ,EAAG5J,EAAeQ,WAAUoJ,EAAAC,EAAAzL,EACtCqC,cAAAA,OAAa,IAAAoJ,EAAG7J,EAAeS,cAAaoJ,EAAAC,EAAA1L,EAC5C2L,kBAAAA,OAAoB,IAAHD,EAAG,EAACA,EAAAE,EAAA5L,EACrB6L,kBAAAA,OAAoB,IAAHD,EAAG,cAAaA,EACjCE,EAAO9L,EAAP8L,QACAC,EAAY/L,EAAZ+L,aACAC,EAAYhM,EAAZgM,aACAC,EAAWjM,EAAXiM,YACAC,EAAOlM,EAAPkM,QAEAC,EAA0BC,EAAQA,SAAQ,IAAnCnL,EAAKkL,EAAA,GAAEE,EAAQF,EAAA,GAChBrD,EAAQC,EAAAA,WAERuD,GAAmBC,eACrB,SAACC,GACG,GAAIN,EAAS,CACT,IACMjL,EADeiL,EAAQO,QAAO,SAAApI,GAAK,MAAc,UAAdA,EAAFqI,MACZC,QACvB,SAACC,EAAKC,GAAM,OAAA7I,EACL4I,CAAAA,EAAAA,EACAC,EAAO5L,MACZ,GACF,CACJ,GACAoL,EAASpL,EACb,OAEA8K,GAAAA,EAAeb,EAAMsB,EACxB,GACD,CAACT,EAAcb,EAAMgB,IAEnBY,GAAmBP,eACrB,SAACC,GACG,GAAIN,EAAS,CACT,IACMjL,EADeiL,EAAQO,QAAO,SAAA/H,GAAK,MAAc,UAAdA,EAAFgI,MACZC,QACvB,SAACC,EAAKC,GAAM,OAAA7I,EACL4I,CAAAA,EAAAA,EACAC,EAAO5L,MACZ,GACF,CACJ,GACAoL,EAASpL,EACb,OAEA+K,GAAAA,EAAed,EAAMsB,EACxB,GACD,CAACR,EAAcd,EAAMgB,IAGzBa,GAA0EtI,EAAkB,CACxFhC,UAAAA,EACAP,QAAAA,EACAE,WAA4B,OAAlBoI,EAAEvJ,EAAMmB,YAAUoI,EAAIpI,EAChCC,cAAAA,EACAZ,MAAAA,EACAC,OAAAA,IANIiD,GAAOoI,GAAPpI,QAASC,GAAOmI,GAAPnI,QAASC,GAAMkI,GAANlI,OAAQC,GAAMiI,GAANjI,OAAQC,GAAWgI,GAAXhI,YAAaC,GAAc+H,GAAd/H,eASjDgI,GAAgB,CAAClB,EAASC,EAAcC,EAAcC,GAAagB,MACrE,SAAAC,GAAO,YAAgBC,IAAZD,CAAqB,IAG9BE,GAAqC,mBAAhBjL,EAA6BA,EAAc+H,EAAc/H,GAEpF,OACIoH,EAAAA,KAAA,IAAA,CACInI,UAAwBnB,aAAAA,EAAKC,IAAAA,EAAK,IAClCe,MAAO,CACHX,QAA0B,OAAnBmK,EAAExJ,EAAMoM,aAAW5C,EAAInK,GAChCe,UAEFV,EAAAW,IAAA,OAAA,CACIG,MAAOA,EACPC,OAAQA,EACRtB,KAA0B,OAAtBsK,EAAEzJ,EAAMqM,gBAAc5C,EAAIY,EAC9BrK,MAAO,CACHsM,OAAQP,GAAgB,UAAY,QAExClB,QAAS,SAAAU,SACLV,GAAAA,EAAUZ,EAAMsB,SAChBP,GAAAA,EAAcf,EAAKlC,GACrB,EACF+C,aAAcO,GACdN,aAAcc,KAEjBU,EAAMC,cAAcL,GAAWpJ,EAAA,CAC5BgF,GAAIkC,EAAKlC,GACT/I,EAAG0E,GACHzE,EAAG0E,GACHzE,KAAsB,OAAlBwK,EAAE1J,EAAMmB,YAAUuI,EAAIvI,EAC1BhC,KAA6B8E,OAAzBA,EAAW0F,OAAXA,EAAEM,EAAK9K,MAAIwK,EAAIM,EAAKwC,OAAKxI,EAAI,QACjC1E,YAAoC,OAAzBqK,EAAE5J,EAAM0K,mBAAiBd,EAAIc,EACxCjL,YAAoC,OAAzBoK,EAAE7J,EAAM4K,mBAAiBf,EAAIe,GACpCX,EAAKyC,OAAS7E,EAAMc,QAAQ+D,OAAOC,YAAST,IAEpDxM,EAAAW,IAAC2I,OAAI,CACDP,WAAY3E,GACZ9D,MAAK+C,EAAA,CAAA,EACE8E,EAAMc,QAAQjC,KAAI,CACrBvH,KAAiE,OAA7D2K,EAAkC,OAAlCC,EAAqB,OAArBC,EAAEhK,EAAM4M,eAAa5C,EAAIG,GAASJ,EAAIlC,EAAMc,QAAQjC,KAAKvH,MAAI2K,EAAI,QACrEpB,iBAAkB3E,GAClB9D,cAAe,OACf4M,WAAY,QACR5C,EAAKyC,OAAS7E,EAAMc,QAAQ+D,OAAOhG,UAAOwF,GAElDlN,EAAG4E,GACH3E,EAAG4E,GAAOzD,SAET6J,EAAK6C,UAItB,ECjJaC,EAAY,SAAHhO,GAwBA,IAvBlBkL,EAAIlL,EAAJkL,KACAjL,EAACD,EAADC,EACAC,EAACF,EAADE,EACAuC,EAASzC,EAATyC,UAASwL,EAAAjO,EACT+B,QAAS0B,OAAQ,IAAAwK,EAAGrM,EAAeG,QAAOkM,EAC1C/L,EAAOlC,EAAPkC,QACAgK,EAAOlM,EAAPkM,QACAvI,EAAS3D,EAAT2D,UACAC,EAAU5D,EAAV4D,WAAUsK,EAAAlO,EACViC,cAAAA,OAAa,IAAAiM,EAAGtM,EAAeK,cAAaiM,EAAAC,EAAAnO,EAC5CgC,aAAAA,OAAY,IAAAmM,EAAGvM,EAAeI,aAAYmM,EAC1CN,EAAa7N,EAAb6N,cAAaO,EAAApO,EACbsN,eAAAA,OAAiB,IAAHc,EAAG,cAAaA,EAAAC,EAAArO,EAC9BqN,YAAAA,OAAc,IAAHgB,EAAG,EAACA,EACflM,EAAWnC,EAAXmC,YACAC,EAAUpC,EAAVoC,WACAC,EAAarC,EAAbqC,cACAsJ,EAAiB3L,EAAjB2L,kBACAE,EAAiB7L,EAAjB6L,kBACAC,EAAO9L,EAAP8L,QACAC,EAAY/L,EAAZ+L,aACAC,EAAYhM,EAAZgM,aACAC,EAAWjM,EAAXiM,YAEQlK,EAAYwB,EAAkB,CAClCG,UAAWwH,EAAK3I,OAChBoB,UAAAA,EACAC,WAAAA,EACA5B,aAAAA,EACAS,UAAAA,EACAV,QAAS0B,IANL1B,QASFuM,EAAsB,QAAd7L,EAAsBkB,EAAY3B,EAAe,EACzDuM,EAAsB,WAAd9L,EAAyBmB,EAAa5B,EAAe,EAEnE,OACIrB,EAAAA,IAAA,IAAA,CAAGS,UAAwBnB,aAAAA,EAAKC,IAAAA,EAAK,IAAAmB,SAChC6J,EAAKjC,KAAI,SAACiC,EAAMsD,GAAC,OACd7N,EAAAA,IAAC4J,EAAa,CAEVW,KAAMA,EACNjL,EAAGuO,EAAIF,EAAQvM,EAAQuB,KACvBpD,EAAGsO,EAAID,EAAQxM,EAAQoB,IACvB1B,MAAOkC,EACPjC,OAAQkC,EACRnB,UAAWR,EACXC,QAASA,EACTgK,QAASA,EACTd,UAAWyC,EACXvC,WAAYgC,EACZhN,QAAS+M,EACTlL,YAAaA,EACbC,WAAYA,EACZC,cAAeA,EACfsJ,kBAAmBA,EACnBE,kBAAmBA,EACnBC,QAASA,EACTC,aAAcA,EACdC,aAAcA,EACdC,YAAaA,GApBRuC,OAyBzB,EC3DMC,EAAmB,CACrBC,MAAO,OACPC,OAAQ,SACRC,IAAK,mDCVwC,SAAH5O,GAUH,IACnCyB,EACAC,EAXJ6C,EAAcvE,EAAduE,eACAC,EAAexE,EAAfwE,gBACAF,EAAMtE,EAANsE,OAAMuK,EAAA7O,EACN6B,WAAAA,OAAa,IAAHgN,EAAG,EAACA,EAAAC,EAAA9O,EACd8B,WAAAA,OAAa,IAAHgN,EAAG,EAACA,EAAA3G,EAAAnI,EACduC,OAAAA,OAAM,IAAA4F,EAAG7F,EAA+BC,OAAM4F,EAAAC,EAAApI,EAC9CwC,UAAAA,OAAS,IAAA4F,EAAG9F,EAA+BE,UAAS4F,EAAAC,EAAArI,EACpDyC,UAAAA,OAAS,IAAA4F,EAAG/F,EAA+BG,UAAS4F,EACjD0G,6IAAWC,CAAAhP,EAAAiP,GAII,QAAdxM,GACAhB,EAAQc,EACRb,EAASc,IAETf,EAAQe,EACRd,EAASa,GAGb,IAAA2M,EAAiB9K,EAA0B,CACvCE,OAAAA,EACAzC,WAAAA,EACAC,WAAAA,EACAyC,eAAAA,EACAC,gBAAAA,EACA/C,MAAAA,EACAC,OAAAA,IAPIzB,EAACiP,EAADjP,EAAGC,EAACgP,EAADhP,EAUX,OACIS,EAAAA,IAAA,IAAA,CAAGS,UAAwBnB,aAAAA,EAAMC,KAAAA,EAAK,IAAAmB,SAClCV,EAAAA,IAACuH,EAAyBlE,EAAA,CACtBzB,OAAQA,EACRC,UAAWA,EACXC,UAAWA,GACPsM,KAIpB,uBCzC4B,SAAH/O,GA2BA,IA1BrBkL,EAAIlL,EAAJkL,KACA3G,EAAcvE,EAAduE,eACAC,EAAexE,EAAfwE,gBAAeqK,EAAA7O,EACf6B,WAAAA,OAAU,IAAAgN,EAAGjN,EAAeC,WAAUgN,EAAAC,EAAA9O,EACtC8B,WAAAA,OAAU,IAAAgN,EAAGlN,EAAeE,WAAUgN,EACtCxK,EAAMtE,EAANsE,OACA7B,EAASzC,EAATyC,UAASwL,EAAAjO,EACT+B,QAAAA,OAAO,IAAAkM,EAAGrM,EAAeG,QAAOkM,EAChC/L,EAAOlC,EAAPkC,QAAOiM,EAAAnO,EACPgC,aAAAA,OAAY,IAAAmM,EAAGvM,EAAeI,aAAYmM,EAC1CxK,EAAS3D,EAAT2D,UACAC,EAAU5D,EAAV4D,WACA3B,EAAajC,EAAbiC,cACA4L,EAAa7N,EAAb6N,cACAP,EAActN,EAAdsN,eACAD,EAAWrN,EAAXqN,YACAlL,EAAWnC,EAAXmC,YACAC,EAAUpC,EAAVoC,WACAC,EAAarC,EAAbqC,cACAsJ,EAAiB3L,EAAjB2L,kBACAE,EAAiB7L,EAAjB6L,kBACAC,EAAO9L,EAAP8L,QACAC,EAAY/L,EAAZ+L,aACAC,EAAYhM,EAAZgM,aACAC,EAAWjM,EAAXiM,YACAC,EAAOlM,EAAPkM,QAEAiD,EAA0B5L,EAAkB,CACxCG,UAAWwH,EAAK3I,OAChBP,aAAAA,EACA2B,UAAAA,EACAC,WAAAA,EACAnB,UAAAA,EACAV,QAAAA,IANIN,EAAK0N,EAAL1N,MAAOC,EAAMyN,EAANzN,OASfwN,EAAiB9K,EAA0B,CACvCE,OAAAA,EACAzC,WAAAA,EACAC,WAAAA,EACAyC,eAAAA,EACAC,gBAAAA,EACA/C,MAAAA,EACAC,OAAAA,IAPIzB,EAACiP,EAADjP,EAAGC,EAACgP,EAADhP,EAUX,OACIS,EAAAA,IAACqN,EAAS,CACN9C,KAAMA,EACNjL,EAAGA,EACHC,EAAGA,EACHuC,UAAWA,EACXV,QAASA,EACTG,QAASA,EACTgK,QAASA,EACTlK,aAAcA,EACd2B,UAAWA,EACXC,WAAYA,EACZ3B,cAAeA,EACf4L,cAAeA,EACfP,eAAgBA,EAChBD,YAAaA,EACblL,YAAaA,EACbC,WAAYA,EACZC,cAAeA,EACfsJ,kBAAmBA,EACnBE,kBAAmBA,EACnBC,QAASA,EACTC,aAAcA,EACdC,aAAcA,EACdC,YAAoC,kBAAhBA,OAA4BkB,EAAYlB,GAGxE,maFkCmD,SAC/CmD,EAA6B/K,GAwB5B,IAAAgL,EAtBG9K,EAAcF,EAAdE,eACAC,EAAeH,EAAfG,gBACAF,EAAMD,EAANC,OAAMgL,EAAAjL,EACNxC,WAAAA,OAAa,IAAHyN,EAAG,EAACA,EAAAC,EAAAlL,EACdvC,WAAAA,OAAa,IAAHyN,EAAG,EAACA,EACdnK,EAAKf,EAALe,MAAKoK,EAAAnL,EACL9B,OAAAA,OAAM,IAAAiN,EAAGlN,EAA+BC,OAAMiN,EAAAC,EAAApL,EAC9C7B,UAAAA,OAAS,IAAAiN,EAAGnN,EAA+BE,UAASiN,EAAAC,EAAArL,EACpD5B,UAAAA,OAAS,IAAAiN,EAAGpN,EAA+BG,UAASiN,EAC7CC,EAAMtL,EAAbgB,MAAKuK,EAAAvL,EACL3B,aAAAA,OAAY,IAAAkN,EAAGtN,EAA+BI,aAAYkN,EAAAC,EAAAxL,EAC1D1B,SAAAA,OAAQ,IAAAkN,EAAGvN,EAA+BK,SAAQkN,EAAAC,EAAAzL,EAClDzB,YAAAA,OAAW,IAAAkN,EAAGxN,EAA+BM,YAAWkN,EAAAC,EAAA1L,EACxDxB,YAAAA,OAAW,IAAAkN,EAAGzN,EAA+BO,YAAWkN,EAAAC,EAAA3L,EACxDvB,WAAAA,OAAU,IAAAkN,EAAG1N,EAA+BQ,WAAUkN,EACtDlK,EAAKzB,EAALyB,MAAKmK,EAAA5L,EACLrB,WAAAA,OAAU,IAAAiN,EAAG3N,EAA+BU,WAAUiN,EAAAC,EAAA7L,EACtDpB,YAAAA,OAAW,IAAAiN,EAAG5N,EAA+BW,YAAWiN,EACxDpH,EAAKzE,EAALyE,MAKJD,EAeI5D,EAA8B,CAC9BG,MAAAA,EACAC,MAAOsK,EACPpN,OAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,SAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAC,WAAAA,EACAgD,MAAAA,EACA9C,WAAAA,EACAC,YAAAA,IA3BAxB,EAAKoH,EAALpH,MACAC,EAAMmH,EAANnH,OACAoG,EAAUe,EAAVf,WACAb,EAAU4B,EAAV5B,WACAC,EAAU2B,EAAV3B,WACAa,EAAUc,EAAVd,WACAnB,EAAUiC,EAAVjC,WACAvB,EAAKwD,EAALxD,MACA2C,EAASa,EAATb,UACAxB,EAAMqC,EAANrC,OACAC,EAAMoC,EAANpC,OACAC,EAAamC,EAAbnC,cACAC,EAAkBkC,EAAlBlC,mBACAsB,EAAoBY,EAApBZ,qBAiBJkI,GAAiB/L,EAA0B,CACvCE,OAAAA,EACAzC,WAAAA,EACAC,WAAAA,EACAyC,eAAAA,EACAC,gBAAAA,EACA/C,MAAAA,EACAC,OAAAA,IAPIzB,GAACkQ,GAADlQ,EAAGC,GAACiQ,GAADjQ,EAULkQ,GAAgB,CAClBC,KAAMjB,EAAIiB,KACVC,UAAWlB,EAAIkB,UACfC,aAAcnB,EAAImB,cAEtBnB,EAAIoB,OAEJpB,EAAIqB,UAAUxQ,GAAGC,IAEjB,IAAMwQ,GAAWtB,EAAIuB,qBACjB7I,EAAarG,EACbwF,EAAavF,EACbwF,EAAazF,EACbsG,EAAarG,GAEjBkF,EAAWW,SAAQ,SAAAiC,GACfkH,GAASE,aAAapH,EAAUH,OAAQG,EAAUL,UACtD,IAEAiG,EAAIyB,UAAYH,GAChBtB,EAAI0B,SAAS,EAAG,EAAGrP,EAAOC,GAE1BqP,EAAaA,cAAC3B,EAAKtG,EAAMc,QAAQvE,MAAMsC,MAEvC,IAAMqJ,GAAoD3B,OAAvCA,EAAGvG,EAAMc,QAAQvE,MAAM2E,KAAKjJ,aAAWsO,EAAI,EACxD4B,GAAgD,iBAAlBD,IAA8BA,GAAgB,EAClF3L,EAAMkC,SAAQ,SAAAsC,GACNoH,KACA7B,EAAI8B,UAAYF,GACZlI,EAAMqI,KAAK9L,MAAM2E,KAAKhJ,SACtBoO,EAAIgC,YAActI,EAAMqI,KAAK9L,MAAM2E,KAAKhJ,QAE5CoO,EAAIiC,QAAU,SAEdjC,EAAIkC,YACJlC,EAAImC,OAAO1H,EAAKpC,GAAIoC,EAAK1C,IACzBiI,EAAIoC,OAAO3H,EAAKnC,GAAImC,EAAKzC,IACzBgI,EAAIpO,UAGRoO,EAAIkB,UAAyC,WAA7BzG,EAAKhC,oBAAmC,SAAWgC,EAAKhC,oBACxEuH,EAAImB,aAA0C,YAA3B1G,EAAKvC,kBAAkC,SAAWuC,EAAKvC,kBAE1EmK,EAAAA,eAAerC,EAAKtG,EAAMc,QAAQvE,MAAMsC,KAAMkC,EAAKlC,KAAMkC,EAAKjC,MAAOiC,EAAKxC,MAC9E,IAEIW,IACAoH,EAAIoB,OACJpB,EAAIqB,UAAUjK,EAAQC,GACtB2I,EAAIsC,OAAOC,mBAAiBjL,IAE5BqK,EAAaA,cAAC3B,EAAKtG,EAAMc,QAAQ9D,MAAM6B,MACvCyH,EAAIkB,UAAqC,WAAzBrI,EAAoC,SAAWA,EAC/DmH,EAAImB,aAAe5J,EAEnB8K,EAAcA,eAACrC,EAAKtG,EAAMc,QAAQ9D,MAAM6B,KAAMK,GAE9CoH,EAAIwC,WAGRxC,EAAIwC,UAEJxC,EAAIiB,KAAOD,GAAcC,KACzBjB,EAAIkB,UAAYF,GAAcE,UAC9BlB,EAAImB,aAAeH,GAAcG,YACrC,+BAnOoC,SAChCnB,EAA6BpP,GA4B5B,IA1BGkL,EAAIlL,EAAJkL,KAEA3G,EAAcvE,EAAduE,eACAC,EAAexE,EAAfwE,gBAAeqK,EAAA7O,EACf6B,WAAAA,OAAa,IAAHgN,EAAG,EAACA,EAAAC,EAAA9O,EACd8B,WAAAA,OAAa,IAAHgN,EAAG,EAACA,EACdxK,EAAMtE,EAANsE,OACA7B,EAASzC,EAATyC,UAASwL,EAAAjO,EACT+B,QAAS0B,OAAW,IAAHwK,EAAG,EAACA,EAAA9C,EAAAnL,EACrBkC,QAAAA,OAAU,IAAHiJ,GAAQA,EAAAgD,EAAAnO,EAGfgC,aAAAA,OAAe,IAAHmM,EAAG,EAACA,EAChBxK,EAAS3D,EAAT2D,UACAC,EAAU5D,EAAV4D,WAAUsK,EAAAlO,EACViC,cAAAA,OAAgB,IAAHiM,EAAG,gBAAeA,EAC/BL,EAAa7N,EAAb6N,cAAarC,EAAAxL,EAGboC,WAAAA,OAAa,IAAHoJ,EAAG,GAAEA,EAAAC,EAAAzL,EACfqC,cAAAA,OAAgB,IAAHoJ,EAAG,EAACA,EAIjB3C,EAAK9I,EAAL8I,MAGJqG,EAAmC5L,EAAkB,CACjDG,UAAWwH,EAAK3I,OAChBoB,UAAAA,EACAC,WAAAA,EACA5B,aAAAA,EACAS,UAAAA,EACAV,QAAS0B,IANLhC,EAAK0N,EAAL1N,MAAOC,EAAMyN,EAANzN,OAAQK,EAAOoN,EAAPpN,QASvBmN,EAAiB9K,EAA0B,CACvCE,OAAAA,EACAzC,WAAAA,EACAC,WAAAA,EACAyC,eAAAA,EACAC,gBAAAA,EACA/C,MAAAA,EACAC,OAAAA,IAPIzB,EAACiP,EAADjP,EAAGC,EAACgP,EAADhP,EAULoO,EAAsB,QAAd7L,EAAsBkB,EAAY3B,EAAe,EACzDuM,EAAsB,WAAd9L,EAAyBmB,EAAa5B,EAAe,EAEnEoN,EAAIoB,OACJpB,EAAIqB,UAAUxQ,EAAGC,GAEjB6Q,EAAAA,cAAc3B,EAAKtG,EAAMc,QAAQjC,MAEjCuD,EAAK3D,SAAQ,SAAChG,EAAGiN,GAAM,IAAAqD,EACbC,EAAQtD,EAAIF,EAAQvM,EAAQuB,KAC5ByO,EAAQvD,EAAID,EAAQxM,EAAQoB,IAElC4J,EAA0EtI,EACtE,CACIhC,UAAWR,EACXC,QAAAA,EACAE,WAAAA,EACAC,cAAAA,EACAZ,MAAOkC,EACPjC,OAAQkC,IAPRe,EAAOoI,EAAPpI,QAASC,EAAOmI,EAAPnI,QAASC,EAAMkI,EAANlI,OAAQC,EAAMiI,EAANjI,OAAQC,EAAWgI,EAAXhI,YAAaC,EAAc+H,EAAd/H,eAWvDoK,EAAIyB,UAAmB,OAAVgB,EAAGtQ,EAAEmM,OAAKmE,EAAI,QAC3BzC,EAAI0B,SAASgB,EAAQnN,EAASoN,EAAQnN,EAASxC,EAAYA,GAE3DgN,EAAIkB,UAAY7B,EAAiB1J,GACV,YAAnBC,IACAoK,EAAImB,aAAe,UAGvBkB,EAAcA,eACVrC,EAAGpL,KAEI8E,EAAMc,QAAQjC,KAAI,CACrBvH,KAAmB,MAAbyN,EAAAA,EAAiB/E,EAAMc,QAAQjC,KAAKvH,OAE9C4R,OAAOzQ,EAAEwM,OACT+D,EAAQjN,EACRkN,EAAQjN,EAEhB,IAEAsK,EAAIwC,SACR,0CGvG+C,SAAH5R,GAYtC,IAXFoF,EAAKpF,EAALoF,MACQ6M,EAAgBjS,EAAxBiG,OAAMiM,EAAAlS,EACNmG,QAAAA,OAAU,IAAH+L,GAAQA,EAAAC,EAAAnS,EACfoS,YAAAA,OAAc,IAAHD,EAAG,SAAAE,GAAC,OAAIA,CAAC,EAAAF,EAAAG,EAAAtS,EACpBuS,UAAAA,OAAY,IAAHD,EAAG,MAAKA,EAQjB,OAAOE,EAAOA,SAAC,WACX,IAEMC,GAFSR,MAAAA,EAAAA,EAAoB7M,EAAMkB,SAEpB2C,KAAI,SAACyJ,EAAa5I,GACnC,IAAA6I,EAAqBvN,EAAMwN,aAAaF,GAAjChE,EAAKiE,EAAA,GAAE/D,EAAG+D,EAAA,GAEjB,MAAO,CACH3J,GAAI0J,EACJ5I,MAAAA,EACA+I,OAAQ,CAACnE,EAAOE,GAChBb,MAAK,GAAKqE,EAAY1D,GAAS6D,EAAYH,EAAYxD,GACvD7L,MAAOqC,EAAMsJ,GACbhB,MAAOgF,EAEf,IAIA,OAFIvM,GAASsM,EAAMtM,UAEZsM,CACX,GAAG,CAACR,EAAkB7M,EAAOe,EAASoM,EAAWH,GACrD"}