// Icon：渲染 design/icons.js 单源图标（Lucide 线条、24 网格、currentColor）。
// 业务代码禁止内联 <path>（check-code 闸拦截）——新图标先登记 icons.js + icon-map.json。
import { icons } from '../../icons.js';

export function Icon({ name, size = 16, sw = 2, ...rest }) {
  // 安全前提：body 只能来自 icons.js 的静态常量（源码入库、无用户输入），
  // 故 dangerouslySetInnerHTML 无 XSS 面。禁止改为接受外部传入的 SVG 字符串。
  const body = icons[name];
  if (!body) throw new Error(`unknown icon: ${name}（先在 design/icons.js 登记）`);
  return (
    <svg
      width={size}
      height={size}
      viewBox="0 0 24 24"
      fill="none"
      stroke="currentColor"
      strokeWidth={sw}
      strokeLinecap="round"
      strokeLinejoin="round"
      aria-hidden="true"
      dangerouslySetInnerHTML={{ __html: body }}
      {...rest}
    />
  );
}
