{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "icons",
  "type": "registry:ui",
  "title": "Icons",
  "description": "Icons — 03_ASSET_GUIDE/engine/shell-markup.js 의 sprite(<symbol id=\"atom-i-*\">)를",
  "files": [
    {
      "path": "poc/design-system/implement/src/components/icons.tsx",
      "content": "\"use client\";\n\nimport type { SVGProps } from \"react\";\n\n/* -------------------------------------------------------------------------- */\n/*  Icons — 03_ASSET_GUIDE/engine/shell-markup.js 의 sprite(<symbol id=\"atom-i-*\">)를  */\n/*  컴포넌트로 옮긴 것. 경로·viewBox·stroke 값은 원본 그대로입니다.             */\n/*  장식용이 기본이라 aria-hidden 을 붙이고, 의미가 필요하면 부모에 aria-label 을 둡니다. */\n/* -------------------------------------------------------------------------- */\n\nexport type IconProps = SVGProps<SVGSVGElement>;\n\nfunction Svg({ viewBox, children, ...rest }: IconProps) {\n  return (\n    <svg aria-hidden=\"true\" focusable=\"false\" viewBox={viewBox} {...rest}>\n      {children}\n    </svg>\n  );\n}\n\n/** atom-i-mark */\nexport function MarkIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <circle cx=\"12\" cy=\"12\" r=\"2.6\" fill=\"currentColor\" />\n      <ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n      <ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" transform=\"rotate(60 12 12)\" />\n      <ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4.4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" transform=\"rotate(120 12 12)\" />\n    </Svg>\n  );\n}\n\n/** atom-i-chevron-down */\nexport function ChevronDownIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M6 9.5 12 15.5 18 9.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-chevron-right */\nexport function ChevronRightIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M9.5 6 15.5 12 9.5 18\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-search */\nexport function SearchIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <circle cx=\"11\" cy=\"11\" r=\"6.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n      <path d=\"m16 16 4.5 4.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-theme */\nexport function ThemeIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 3a9 9 0 1 0 9 9 7 7 0 0 1-9-9Z\" fill=\"currentColor\" fillRule=\"evenodd\" />\n    </Svg>\n  );\n}\n\n/** atom-i-menu */\nexport function MenuIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M4 7h16M4 12h16M4 17h16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-image */\nexport function ImageIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 64 64\" {...props}>\n      <path d=\"M10 14h44a2 2 0 0 1 2 2v32a2 2 0 0 1-2 2H10a2 2 0 0 1-2-2V16a2 2 0 0 1 2-2Zm0 30 12.5-13 8 8L41 28l13 14v4a2 2 0 0 1-2 2H10a2 2 0 0 1-2-2v-4Zm31-18a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z\" fill=\"currentColor\" />\n    </Svg>\n  );\n}\n\n/** atom-i-alert */\nexport function AlertIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 64 64\" {...props}>\n      <path d=\"M32 8 60 56H4L32 8Zm0 16v18m0 6v4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-check */\nexport function CheckIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"m5 12.5 4.5 4.5L19 7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-check-circle */\nexport function CheckCircleIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm4.7 7.3a1 1 0 0 0-1.4-1.4l-4.4 4.4-2.2-2.2a1 1 0 1 0-1.4 1.4l2.9 2.9a1 1 0 0 0 1.4 0l5.1-5.1Z\" fill=\"currentColor\" />\n    </Svg>\n  );\n}\n\n/** atom-i-x-circle */\nexport function XCircleIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm3.5 5.8L12 11.3 8.5 7.8 7.1 9.2l3.5 3.5-3.5 3.5 1.4 1.4 3.5-3.5 3.5 3.5 1.4-1.4-3.5-3.5 3.5-3.5-1.4-1.4Z\" fill=\"currentColor\" />\n    </Svg>\n  );\n}\n\n/** atom-i-info */\nexport function InfoIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm1 8h-2v7h2v-7Zm0-3.5h-2v2h2v-2Z\" fill=\"currentColor\" />\n    </Svg>\n  );\n}\n\n/** atom-i-warning */\nexport function WarningIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12.9 3.5a1 1 0 0 0-1.8 0l-8.8 16A1 1 0 0 0 3.2 21h17.6a1 1 0 0 0 .9-1.5l-8.8-16ZM13 9v5h-2V9h2Zm0 7v2h-2v-2h2Z\" fill=\"currentColor\" />\n    </Svg>\n  );\n}\n\n/** atom-i-arrow-up-right */\nexport function ArrowUpRightIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M8 6h10v10M18 6 6.5 17.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-braces */\nexport function BracesIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M9 4c-2 0-2 3.5-2 4s0 2-2 2v4c2 0 2 1.5 2 2s0 4 2 4M15 4c2 0 2 3.5 2 4s0 2 2 2v4c-2 0-2 1.5-2 2s0 4-2 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-close */\nexport function CloseIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M6 6l12 12M18 6 6 18\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.4\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-search-glass */\nexport function SearchGlassIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <circle cx=\"11\" cy=\"11\" r=\"6.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n      <path d=\"m16 16 4.5 4.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-calendar */\nexport function CalendarIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"15\" rx=\"2.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n      <path d=\"M3.5 10h17M8 3.5v3M16 3.5v3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-plus */\nexport function PlusIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 5v14M5 12h14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-heart */\nexport function HeartIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M12 20s-7.5-4.7-7.5-9.4A4.4 4.4 0 0 1 12 7.7a4.4 4.4 0 0 1 7.5 2.9C19.5 15.3 12 20 12 20Z\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-trash */\nexport function TrashIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <path d=\"M5 7h14M9 7V5h6v2M7 7l1 13h8l1-13M10 11v6M14 11v6\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </Svg>\n  );\n}\n\n/** atom-i-person */\nexport function PersonIcon(props: IconProps) {\n  return (\n    <Svg viewBox=\"0 0 24 24\" {...props}>\n      <circle cx=\"12\" cy=\"8.5\" r=\"3.7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" />\n      <path d=\"M4.8 20c.9-3.6 3.7-5.5 7.2-5.5s6.3 1.9 7.2 5.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n    </Svg>\n  );\n}\n\n/** 스프라이트 이름(atom-i-*) → 컴포넌트. 스키마·문서에서 이름으로 고를 때 씁니다. */\nexport const icons = {\n  \"mark\": MarkIcon,\n  \"chevron-down\": ChevronDownIcon,\n  \"chevron-right\": ChevronRightIcon,\n  \"search\": SearchIcon,\n  \"theme\": ThemeIcon,\n  \"menu\": MenuIcon,\n  \"image\": ImageIcon,\n  \"alert\": AlertIcon,\n  \"check\": CheckIcon,\n  \"check-circle\": CheckCircleIcon,\n  \"x-circle\": XCircleIcon,\n  \"info\": InfoIcon,\n  \"warning\": WarningIcon,\n  \"arrow-up-right\": ArrowUpRightIcon,\n  \"braces\": BracesIcon,\n  \"close\": CloseIcon,\n  \"search-glass\": SearchGlassIcon,\n  \"calendar\": CalendarIcon,\n  \"plus\": PlusIcon,\n  \"heart\": HeartIcon,\n  \"trash\": TrashIcon,\n  \"person\": PersonIcon,\n} as const;\n\nexport type IconName = keyof typeof icons;\n",
      "type": "registry:ui",
      "target": "components/ui/icons.tsx"
    }
  ],
  "categories": [
    "internal"
  ],
  "meta": {
    "version": "0.1.0"
  }
}
