{"version":3,"file":"MapLegend.cjs","names":[],"sources":["../../src/br/MapLegend.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { SEQUENTIAL_BLUES } from \"./scales\";\nimport styles from \"./MapLegend.module.css\";\n\n/** A discrete legend entry. */\nexport interface LegendItem {\n    color: string;\n    label: ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n    /** Legend heading. */\n    title?: ReactNode;\n    /**\n     * Discrete entries (swatch + label). When provided the legend renders in\n     * \"steps\" mode; otherwise it renders a continuous gradient from `min`/`max`.\n     */\n    items?: readonly LegendItem[];\n    /** Continuous mode: low end of the domain. */\n    min?: number;\n    /** Continuous mode: high end of the domain. */\n    max?: number;\n    /** Continuous mode: palette (light → dark). Default: sequential blues. */\n    palette?: readonly string[];\n    /** Continuous mode: format the min/mid/max tick labels. */\n    format?: (value: number) => string;\n}\n\n/**\n * Legend for a choropleth map. Renders a **continuous gradient** (with\n * min/mid/max ticks) from `min`/`max`/`palette`, or **discrete swatches** when\n * `items` is given. Pair it with a `BrazilMap`/`BrazilStateMap` `colorScale`.\n *\n * @example\n * // Continuous, matching a sequentialScale(0, 100)\n * <MapLegend title=\"Vendas\" min={0} max={100} palette={SEQUENTIAL_BLUES} />\n *\n * @example\n * // Discrete buckets\n * <MapLegend\n *   title=\"Faixa\"\n *   items={[\n *     { color: \"#c6dbef\", label: \"< 10\" },\n *     { color: \"#6baed6\", label: \"10–50\" },\n *     { color: \"#08519c\", label: \"> 50\" },\n *   ]}\n * />\n */\nexport function MapLegend({\n    title,\n    items,\n    min = 0,\n    max = 1,\n    palette = SEQUENTIAL_BLUES,\n    format = (v) => String(Math.round(v)),\n    className,\n    ...rest\n}: MapLegendProps) {\n    return (\n        <div className={cn(styles.legend, className)} {...rest}>\n            {title != null && <div className={styles.title}>{title}</div>}\n\n            {items ? (\n                <ul className={styles.items}>\n                    {items.map((item, i) => (\n                        <li key={i} className={styles.item}>\n                            <span className={styles.swatch} style={{ background: item.color }} />\n                            <span className={styles.itemLabel}>{item.label}</span>\n                        </li>\n                    ))}\n                </ul>\n            ) : (\n                <>\n                    <div\n                        className={styles.gradient}\n                        style={{ background: `linear-gradient(to right, ${palette.join(\", \")})` }}\n                    />\n                    <div className={styles.ticks}>\n                        <span>{format(min)}</span>\n                        <span>{format((min + max) / 2)}</span>\n                        <span>{format(max)}</span>\n                    </div>\n                </>\n            )}\n        </div>\n    );\n}\n"],"mappings":"oIAiDA,SAAgB,EAAU,CACtB,QACA,QACA,MAAM,EACN,MAAM,EACN,UAAU,EAAA,iBACV,SAAU,GAAM,OAAO,KAAK,MAAM,CAAC,CAAC,EACpC,YACA,GAAG,GACY,CACf,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,CAAS,EAAG,GAAI,EAAlD,SAAA,CACK,GAAS,OAAQ,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAW,CAAA,EAE3D,GACG,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,QAAO,MACjB,SAAA,EAAM,KAAK,EAAM,KACd,EAAA,EAAA,KAAA,CAAC,KAAD,CAAY,UAAW,EAAA,QAAO,KAA9B,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,OAAQ,MAAO,CAAE,WAAY,EAAK,KAAM,CAAI,CAAA,GACpE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAY,SAAA,EAAK,KAAY,CAAA,CACrD,CAHK,EAAA,CAGL,CACP,CACD,CAAA,GAEJ,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,QAAO,SAClB,MAAO,CAAE,WAAY,6BAA6B,EAAQ,KAAK,IAAI,EAAE,EAAG,CAC3E,CAAA,GACD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,EAAO,CAAG,CAAQ,CAAA,GACzB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,GAAQ,EAAM,GAAO,CAAC,CAAQ,CAAA,GACrC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,EAAO,CAAG,CAAQ,CAAA,CACxB,CACP,CAAA,CAAA,CAAA,CAAA,CAEL,GAEb"}