{"version":3,"sources":["../src/NepalMap.tsx","../src/NepalMapLegend.tsx","../src/utils.ts"],"names":["_a","jsx","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport {\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  type CSSProperties,\n  type ReactNode,\n} from \"react\";\nimport { DISTRICTS } from \"./data/districts\";\nimport { DISTRICT_PROVINCE, PROVINCE_COLORS } from \"./data/provinces\";\nimport type { Province, DistrictDataMap } from \"./data/types\";\n\n/* ─────────────────────────────────────────────\n   Tooltip position type\n───────────────────────────────────────────── */\n\nexport type TooltipPosition =\n  | \"top-left\"\n  | \"top-right\"\n  | \"bottom-left\"\n  | \"bottom-right\"\n  | \"follow-cursor\";\n\n/* ─────────────────────────────────────────────\n   Props\n───────────────────────────────────────────── */\n\nexport interface NepalMapProps {\n  /** Data to visualize on the map. Keys are district names. */\n  data?: DistrictDataMap;\n\n  /** Color mode for districts without explicit color in data */\n  colorMode?: \"province\" | \"flat\" | \"data\";\n\n  /** Base fill color when colorMode is \"flat\" (default: \"#e2e8f0\") */\n  baseColor?: string;\n\n  /** Stroke color for district borders (default: \"#94a3b8\") */\n  strokeColor?: string;\n\n  /** Stroke width for district borders (default: 0.5) */\n  strokeWidth?: number;\n\n  /** Hovered district stroke color (default: \"#FFD600\") */\n  hoverColor?: string;\n\n  /** Background color of the map container (default: \"transparent\") */\n  backgroundColor?: string;\n\n  /** Show district name labels on the map (default: true) */\n  showLabels?: boolean;\n\n  /** Font size for district labels (default: 9) */\n  labelFontSize?: number;\n\n  /** Label color (default: \"rgba(255,255,255,0.9)\") */\n  labelColor?: string;\n\n  /** Show a tooltip on hover (default: true) */\n  showTooltip?: boolean;\n\n  /** Tooltip position (default: \"top-right\") */\n  tooltipPosition?: TooltipPosition;\n\n  /** Custom tooltip renderer. Receives district name and data. */\n  renderTooltip?: (districtName: string, data?: DistrictDataMap[string]) => ReactNode;\n\n  /** Format function for the default tooltip's `value` field */\n  valueFormatter?: (value: number) => string;\n\n  /** Called when a district is clicked */\n  onDistrictClick?: (districtName: string, data?: DistrictDataMap[string]) => void;\n\n  /** Called when mouse enters a district */\n  onDistrictHover?: (districtName: string | null) => void;\n\n  /** Province to highlight (dims all others) */\n  selectedProvince?: Province | null;\n\n  /**\n   * Programmatically highlight specific districts (e.g. search results).\n   * Highlighted districts get a glow and stronger stroke.\n   */\n  highlightedDistricts?: string[];\n\n  /** Color used for highlighted districts' stroke (default: \"#FFD600\") */\n  highlightColor?: string;\n\n  /** Override province colors */\n  provinceColors?: Partial<Record<Province, { fill: string; stroke: string }>>;\n\n  /** Custom short names for districts (e.g. { Kathmandu: \"KTM\" }) */\n  shortNames?: Record<string, string>;\n\n  /** CSS class for the root container */\n  className?: string;\n\n  /** Inline styles for the root container */\n  style?: CSSProperties;\n\n  /** Max height of the SVG (default: \"560px\") */\n  maxHeight?: string;\n\n  /** viewBox for the SVG (default: \"0 0 1200 800\") */\n  viewBox?: string;\n\n  /** Color scale function for data mode. Receives value, returns fill color. */\n  colorScale?: (value: number) => string;\n\n  /** Accessible label for the map (default: \"Interactive map of Nepal\") */\n  ariaLabel?: string;\n\n  /** Dim opacity for non-selected provinces (default: 0.2) */\n  dimOpacity?: number;\n\n  /** Animation duration in ms for transitions (default: 200, set 0 to disable) */\n  transitionDuration?: number;\n\n  /** Disable all interactions (hover, click, keyboard) — view-only mode (default: false) */\n  disabled?: boolean;\n}\n\n/* ─────────────────────────────────────────────\n   Default short names for tiny districts\n───────────────────────────────────────────── */\n\nconst DEFAULT_SHORT_NAMES: Record<string, string> = {\n  Kathmandu: \"KTM\",\n  Bhaktapur: \"BHA\",\n  Lalitpur: \"LA\",\n  \"Nawalparasi East\": \"Nawalparasi(E)\",\n  Kavrepalanchok: \"Kavreplan.\",\n  Arghakhanchi: \"Arghakh.\",\n};\n\n/* ─────────────────────────────────────────────\n   Tooltip position styles\n───────────────────────────────────────────── */\n\nfunction getTooltipStaticStyle(position: TooltipPosition): CSSProperties {\n  switch (position) {\n    case \"top-left\":\n      return { top: 12, left: 12 };\n    case \"bottom-left\":\n      return { bottom: 12, left: 12 };\n    case \"bottom-right\":\n      return { bottom: 12, right: 12 };\n    case \"top-right\":\n    default:\n      return { top: 12, right: 12 };\n  }\n}\n\n/* ─────────────────────────────────────────────\n   Component\n───────────────────────────────────────────── */\n\nexport function NepalMap({\n  data,\n  colorMode = \"province\",\n  baseColor = \"#e2e8f0\",\n  strokeColor = \"#94a3b8\",\n  strokeWidth = 0.5,\n  hoverColor = \"#FFD600\",\n  backgroundColor = \"transparent\",\n  showLabels = true,\n  labelFontSize = 9,\n  labelColor = \"rgba(255,255,255,0.9)\",\n  showTooltip = true,\n  tooltipPosition = \"top-right\",\n  renderTooltip,\n  valueFormatter,\n  onDistrictClick,\n  onDistrictHover,\n  selectedProvince = null,\n  highlightedDistricts,\n  highlightColor = \"#FFD600\",\n  provinceColors,\n  shortNames,\n  className,\n  style,\n  maxHeight = \"560px\",\n  viewBox = \"0 0 1200 800\",\n  colorScale,\n  ariaLabel = \"Interactive map of Nepal\",\n  dimOpacity = 0.2,\n  transitionDuration = 200,\n  disabled = false,\n}: NepalMapProps) {\n  const [hovered, setHovered] = useState<string | null>(null);\n  const [cursor, setCursor] = useState<{ x: number; y: number } | null>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const transitionStyle = transitionDuration > 0\n    ? `fill ${transitionDuration}ms, stroke ${transitionDuration}ms, stroke-width ${transitionDuration}ms`\n    : \"none\";\n\n  const opacityTransition = transitionDuration > 0\n    ? `opacity ${transitionDuration + 100}ms`\n    : \"none\";\n\n  const mergedProvinceColors = useMemo(() => {\n    return { ...PROVINCE_COLORS, ...provinceColors } as Record<Province, { fill: string; stroke: string }>;\n  }, [provinceColors]);\n\n  const mergedShortNames = useMemo(() => {\n    return { ...DEFAULT_SHORT_NAMES, ...shortNames };\n  }, [shortNames]);\n\n  const highlightedSet = useMemo(() => {\n    return new Set(highlightedDistricts ?? []);\n  }, [highlightedDistricts]);\n\n  const getFill = useCallback(\n    (name: string): string => {\n      const districtData = data?.[name];\n\n      // Explicit color from data always wins\n      if (districtData?.color) return districtData.color;\n\n      // Data mode with color scale\n      if (colorMode === \"data\" && colorScale && districtData?.value != null) {\n        return colorScale(districtData.value);\n      }\n\n      const province = DISTRICT_PROVINCE[name] as Province | undefined;\n\n      // Dim non-selected provinces\n      if (selectedProvince && province !== selectedProvince) {\n        return \"#1a2744\";\n      }\n\n      if (colorMode === \"province\" && province) {\n        const colors = mergedProvinceColors[province];\n        return colors ? colors.fill : baseColor;\n      }\n\n      return baseColor;\n    },\n    [data, colorMode, colorScale, selectedProvince, mergedProvinceColors, baseColor],\n  );\n\n  const getStroke = useCallback(\n    (name: string): string => {\n      if (hovered === name) return hoverColor;\n      if (highlightedSet.has(name)) return highlightColor;\n      return strokeColor;\n    },\n    [hovered, hoverColor, highlightedSet, highlightColor, strokeColor],\n  );\n\n  const getStrokeWidth = useCallback(\n    (name: string): number => {\n      if (hovered === name) return Math.max(strokeWidth * 3, 2);\n      if (highlightedSet.has(name)) return Math.max(strokeWidth * 2.5, 1.5);\n      return strokeWidth;\n    },\n    [hovered, highlightedSet, strokeWidth],\n  );\n\n  const isDisabled = useCallback(\n    (name: string) => disabled || data?.[name]?.disabled === true,\n    [disabled, data],\n  );\n\n  const handlePointerEnter = useCallback(\n    (name: string) => {\n      if (isDisabled(name)) return;\n      setHovered(name);\n      onDistrictHover?.(name);\n    },\n    [onDistrictHover, isDisabled],\n  );\n\n  const handlePointerLeave = useCallback(() => {\n    setHovered(null);\n    setCursor(null);\n    onDistrictHover?.(null);\n  }, [onDistrictHover]);\n\n  const handlePointerMove = useCallback(\n    (e: React.PointerEvent) => {\n      if (tooltipPosition !== \"follow-cursor\") return;\n      const rect = containerRef.current?.getBoundingClientRect();\n      if (!rect) return;\n      setCursor({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n    },\n    [tooltipPosition],\n  );\n\n  const handleClick = useCallback(\n    (name: string) => {\n      if (isDisabled(name)) return;\n      onDistrictClick?.(name, data?.[name]);\n    },\n    [onDistrictClick, data, isDisabled],\n  );\n\n  const handleKeyDown = useCallback(\n    (name: string, e: React.KeyboardEvent) => {\n      if (isDisabled(name)) return;\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        onDistrictClick?.(name, data?.[name]);\n      }\n    },\n    [onDistrictClick, data, isDisabled],\n  );\n\n  const hoveredData = hovered ? data?.[hovered] : undefined;\n\n  const tooltipPositionStyle: CSSProperties =\n    tooltipPosition === \"follow-cursor\" && cursor\n      ? {\n          left: Math.min(cursor.x + 16, (containerRef.current?.clientWidth ?? 0) - 220),\n          top: Math.max(cursor.y - 10, 12),\n        }\n      : getTooltipStaticStyle(tooltipPosition);\n\n  const formattedValue =\n    hoveredData?.value != null\n      ? valueFormatter\n        ? valueFormatter(hoveredData.value)\n        : hoveredData.value.toLocaleString()\n      : null;\n\n  return (\n    <div\n      ref={containerRef}\n      className={className}\n      style={{ position: \"relative\", background: backgroundColor, ...style }}\n    >\n      {/* Tooltip */}\n      {showTooltip && hovered && (\n        <div\n          role=\"tooltip\"\n          aria-live=\"polite\"\n          style={{\n            position: \"absolute\",\n            zIndex: 20,\n            background: \"rgba(0,0,0,0.85)\",\n            borderRadius: 12,\n            padding: \"12px 16px\",\n            minWidth: 180,\n            pointerEvents: \"none\",\n            color: \"#fff\",\n            fontSize: 13,\n            backdropFilter: \"blur(8px)\",\n            WebkitBackdropFilter: \"blur(8px)\",\n            border: \"1px solid rgba(255,255,255,0.1)\",\n            boxShadow: \"0 4px 24px rgba(0,0,0,0.3)\",\n            ...tooltipPositionStyle,\n          }}\n        >\n          {renderTooltip ? (\n            renderTooltip(hovered, hoveredData)\n          ) : (\n            <>\n              <div style={{ fontWeight: 700, marginBottom: 4 }}>{hovered}</div>\n              <div style={{ fontSize: 11, opacity: 0.6 }}>\n                Province: {DISTRICT_PROVINCE[hovered] || \"—\"}\n              </div>\n              {hoveredData?.tooltip && (\n                <div style={{ fontSize: 11, marginTop: 4, opacity: 0.8 }}>\n                  {hoveredData.tooltip}\n                </div>\n              )}\n              {formattedValue !== null && (\n                <div style={{ fontSize: 11, marginTop: 2, opacity: 0.8 }}>\n                  Value: {formattedValue}\n                </div>\n              )}\n            </>\n          )}\n        </div>\n      )}\n\n      {/* SVG Map */}\n      <svg\n        viewBox={viewBox}\n        role=\"img\"\n        aria-label={ariaLabel}\n        style={{\n          width: \"100%\",\n          height: \"auto\",\n          maxHeight,\n          display: \"block\",\n          touchAction: tooltipPosition === \"follow-cursor\" ? \"none\" : \"auto\",\n        }}\n        onPointerMove={handlePointerMove}\n      >\n        <title>{ariaLabel}</title>\n        {DISTRICTS.map((d) => {\n          const province = DISTRICT_PROVINCE[d.name] as Province | undefined;\n          const isActive = !selectedProvince || province === selectedProvince;\n          const isHighlighted = highlightedSet.has(d.name);\n          const isDistrictDisabled = isDisabled(d.name);\n          const isInteractive = !!onDistrictClick && !isDistrictDisabled;\n          const districtData = data?.[d.name];\n\n          return (\n            <g\n              key={d.id}\n              onPointerEnter={() => handlePointerEnter(d.name)}\n              onPointerLeave={handlePointerLeave}\n              onClick={() => handleClick(d.name)}\n              onKeyDown={(e) => handleKeyDown(d.name, e)}\n              role={isInteractive ? \"button\" : undefined}\n              tabIndex={isInteractive && isActive ? 0 : undefined}\n              aria-label={`${d.name}${province ? `, ${province} Province` : \"\"}${districtData?.tooltip ? `. ${districtData.tooltip}` : \"\"}${districtData?.value != null ? `. Value: ${districtData.value}` : \"\"}${isHighlighted ? \". Highlighted\" : \"\"}`}\n              aria-disabled={isDistrictDisabled || undefined}\n              style={{\n                cursor: isInteractive ? \"pointer\" : \"default\",\n                opacity: !isActive\n                  ? dimOpacity\n                  : isDistrictDisabled\n                    ? 0.5\n                    : 1,\n                transition: opacityTransition,\n                outline: \"none\",\n              }}\n            >\n              <path\n                d={d.d}\n                fill={getFill(d.name)}\n                stroke={getStroke(d.name)}\n                strokeWidth={getStrokeWidth(d.name)}\n                style={{ transition: transitionStyle }}\n              />\n              {showLabels && isActive && (\n                <text\n                  x={d.cx}\n                  y={d.cy}\n                  textAnchor=\"middle\"\n                  dominantBaseline=\"central\"\n                  fontSize={hovered === d.name ? labelFontSize + 3 : labelFontSize}\n                  fill={labelColor}\n                  fontWeight={hovered === d.name || isHighlighted ? 700 : 500}\n                  style={{ pointerEvents: \"none\", userSelect: \"none\" }}\n                  aria-hidden=\"true\"\n                >\n                  {mergedShortNames[d.name] ?? d.name}\n                </text>\n              )}\n            </g>\n          );\n        })}\n      </svg>\n    </div>\n  );\n}\n","\"use client\";\n\nimport { type CSSProperties, type ReactNode } from \"react\";\nimport { PROVINCES } from \"./data/provinces\";\nimport type { Province } from \"./data/types\";\n\n/* ─────────────────────────────────────────────\n   Legend item type\n───────────────────────────────────────────── */\n\nexport interface LegendItem {\n  /** Color swatch */\n  color: string;\n  /** Label text */\n  label: string;\n  /** Optional value to display */\n  value?: string | number;\n}\n\n/* ─────────────────────────────────────────────\n   Props\n───────────────────────────────────────────── */\n\nexport interface NepalMapLegendProps {\n  /** Legend mode */\n  mode?: \"province\" | \"custom\";\n\n  /** Custom legend items (used when mode is \"custom\") */\n  items?: LegendItem[];\n\n  /** Layout direction (default: \"horizontal\") */\n  direction?: \"horizontal\" | \"vertical\";\n\n  /** Swatch shape (default: \"circle\") */\n  swatchShape?: \"circle\" | \"square\";\n\n  /** Swatch size in px (default: 12) */\n  swatchSize?: number;\n\n  /** Font size for labels (default: 12) */\n  fontSize?: number;\n\n  /** Label color (default: \"#64748b\") */\n  labelColor?: string;\n\n  /** Currently selected province (highlights matching item) */\n  selectedProvince?: Province | null;\n\n  /** Called when a province legend item is clicked */\n  onProvinceClick?: (province: Province) => void;\n\n  /** CSS class for the container */\n  className?: string;\n\n  /** Inline styles for the container */\n  style?: CSSProperties;\n\n  /** Custom render for each legend item */\n  renderItem?: (item: LegendItem, index: number) => ReactNode;\n}\n\n/* ─────────────────────────────────────────────\n   Component\n───────────────────────────────────────────── */\n\nexport function NepalMapLegend({\n  mode = \"province\",\n  items: customItems,\n  direction = \"horizontal\",\n  swatchShape = \"circle\",\n  swatchSize = 12,\n  fontSize = 12,\n  labelColor = \"#64748b\",\n  selectedProvince,\n  onProvinceClick,\n  className,\n  style,\n  renderItem,\n}: NepalMapLegendProps) {\n  const items: LegendItem[] =\n    mode === \"custom\" && customItems\n      ? customItems\n      : PROVINCES.map((p) => ({\n          color: p.color,\n          label: p.name,\n          value: `${p.districts.length} districts`,\n        }));\n\n  const isHorizontal = direction === \"horizontal\";\n\n  return (\n    <div\n      className={className}\n      role=\"list\"\n      aria-label=\"Map legend\"\n      style={{\n        display: \"flex\",\n        flexDirection: isHorizontal ? \"row\" : \"column\",\n        flexWrap: isHorizontal ? \"wrap\" : undefined,\n        gap: isHorizontal ? \"16px\" : \"8px\",\n        alignItems: isHorizontal ? \"center\" : \"flex-start\",\n        ...style,\n      }}\n    >\n      {items.map((item, i) => {\n        if (renderItem) {\n          return <div key={i} role=\"listitem\">{renderItem(item, i)}</div>;\n        }\n\n        const isProvince = mode === \"province\";\n        const provinceName = isProvince ? (item.label as Province) : null;\n        const isSelected = isProvince && selectedProvince === provinceName;\n        const isClickable = isProvince && !!onProvinceClick;\n\n        return (\n          <div\n            key={i}\n            role=\"listitem\"\n            onClick={isClickable && provinceName ? () => onProvinceClick!(provinceName) : undefined}\n            style={{\n              display: \"flex\",\n              alignItems: \"center\",\n              gap: 6,\n              cursor: isClickable ? \"pointer\" : \"default\",\n              opacity: selectedProvince && !isSelected && isProvince ? 0.4 : 1,\n              transition: \"opacity 0.2s\",\n              padding: isClickable ? \"2px 4px\" : undefined,\n              borderRadius: isClickable ? 4 : undefined,\n            }}\n          >\n            <span\n              style={{\n                width: swatchSize,\n                height: swatchSize,\n                borderRadius: swatchShape === \"circle\" ? \"50%\" : 2,\n                backgroundColor: item.color,\n                flexShrink: 0,\n                border: isSelected ? \"2px solid #FFD600\" : \"1px solid rgba(0,0,0,0.1)\",\n                boxSizing: \"border-box\",\n              }}\n            />\n            <span\n              style={{\n                fontSize,\n                color: labelColor,\n                fontWeight: isSelected ? 700 : 400,\n                whiteSpace: \"nowrap\",\n              }}\n            >\n              {item.label}\n            </span>\n            {item.value != null && (\n              <span\n                style={{\n                  fontSize: fontSize - 2,\n                  color: labelColor,\n                  opacity: 0.6,\n                  whiteSpace: \"nowrap\",\n                }}\n              >\n                {item.value}\n              </span>\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n","import { DISTRICT_PROVINCE, PROVINCES } from \"./data/provinces\";\nimport { DISTRICTS } from \"./data/districts\";\nimport type { Province, DistrictDataMap } from \"./data/types\";\n\n/**\n * Get all district names belonging to a province.\n */\nexport function getDistrictsByProvince(province: Province): string[] {\n  return Object.entries(DISTRICT_PROVINCE)\n    .filter(([, p]) => p === province)\n    .map(([d]) => d);\n}\n\n/**\n * Get the province a district belongs to.\n * Returns undefined if the district name is not found.\n */\nexport function getProvinceByDistrict(districtName: string): Province | undefined {\n  return DISTRICT_PROVINCE[districtName] as Province | undefined;\n}\n\n/**\n * Get summary stats from a DistrictDataMap.\n * Useful for building legends and info panels.\n */\nexport function getDataStats(data: DistrictDataMap): {\n  min: number;\n  max: number;\n  count: number;\n  total: number;\n  average: number;\n} {\n  const values = Object.values(data)\n    .map((d) => d.value)\n    .filter((v): v is number => v != null);\n\n  if (values.length === 0) {\n    return { min: 0, max: 0, count: 0, total: 0, average: 0 };\n  }\n\n  const min = Math.min(...values);\n  const max = Math.max(...values);\n  const total = values.reduce((sum, v) => sum + v, 0);\n\n  return {\n    min,\n    max,\n    count: values.length,\n    total,\n    average: total / values.length,\n  };\n}\n\n/**\n * Generate a linear color scale function between two colors.\n * Returns a function that maps a value in [min, max] to a hex color.\n *\n * @example\n * const scale = createColorScale(0, 100, \"#22c55e\", \"#dc2626\");\n * scale(50); // midpoint color\n */\nexport function createColorScale(\n  min: number,\n  max: number,\n  fromColor: string,\n  toColor: string,\n): (value: number) => string {\n  const from = hexToRgb(fromColor);\n  const to = hexToRgb(toColor);\n\n  if (!from || !to) {\n    return () => fromColor;\n  }\n\n  const range = max - min || 1;\n\n  return (value: number): string => {\n    const t = Math.max(0, Math.min(1, (value - min) / range));\n    const r = Math.round(from.r + (to.r - from.r) * t);\n    const g = Math.round(from.g + (to.g - from.g) * t);\n    const b = Math.round(from.b + (to.b - from.b) * t);\n    return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n  };\n}\n\n/**\n * Generate a multi-stop color scale.\n * Stops are evenly distributed between min and max.\n *\n * @example\n * const scale = createMultiColorScale(0, 100, [\"#22c55e\", \"#eab308\", \"#dc2626\"]);\n * scale(25);  // between green and yellow\n * scale(75);  // between yellow and red\n */\nexport function createMultiColorScale(\n  min: number,\n  max: number,\n  colors: string[],\n): (value: number) => string {\n  if (colors.length === 0) return () => \"#e2e8f0\";\n  if (colors.length === 1) return () => colors[0];\n\n  const range = max - min || 1;\n  const segments = colors.length - 1;\n\n  return (value: number): string => {\n    const t = Math.max(0, Math.min(1, (value - min) / range));\n    const segment = Math.min(Math.floor(t * segments), segments - 1);\n    const localT = (t * segments) - segment;\n\n    const from = hexToRgb(colors[segment]);\n    const to = hexToRgb(colors[segment + 1]);\n\n    if (!from || !to) return colors[segment];\n\n    const r = Math.round(from.r + (to.r - from.r) * localT);\n    const g = Math.round(from.g + (to.g - from.g) * localT);\n    const b = Math.round(from.b + (to.b - from.b) * localT);\n    return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n  };\n}\n\n/**\n * Get the total number of districts.\n */\nexport function getTotalDistricts(): number {\n  return DISTRICTS.length;\n}\n\n/**\n * Get province-wise summary from data.\n */\nexport function getProvinceSummary(data: DistrictDataMap): Array<{\n  province: Province;\n  color: string;\n  totalDistricts: number;\n  coveredDistricts: number;\n  totalValue: number;\n}> {\n  return PROVINCES.map((p) => {\n    const districts = p.districts;\n    const covered = districts.filter((d) => data[d] != null);\n    const totalValue = covered.reduce((sum, d) => sum + (data[d]?.value ?? 0), 0);\n\n    return {\n      province: p.name,\n      color: p.color,\n      totalDistricts: districts.length,\n      coveredDistricts: covered.length,\n      totalValue,\n    };\n  });\n}\n\n/* ─── Internal helpers ─── */\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n  const clean = hex.replace(\"#\", \"\");\n  if (clean.length === 3) {\n    const r = parseInt(clean[0] + clean[0], 16);\n    const g = parseInt(clean[1] + clean[1], 16);\n    const b = parseInt(clean[2] + clean[2], 16);\n    return { r, g, b };\n  }\n  if (clean.length === 6) {\n    const r = parseInt(clean.slice(0, 2), 16);\n    const g = parseInt(clean.slice(2, 4), 16);\n    const b = parseInt(clean.slice(4, 6), 16);\n    return { r, g, b };\n  }\n  return null;\n}\n"]}