Icon
Lucide IconsとFontAwesome/Heroiconsをラップした統一アイコンコンポーネント
インポート
基本的な使い方
アイコンの種類
Caroa UIのIconコンポーネントは3種類のアイコンをサポートしています:
| 種類 | ソース | 例 |
|---|---|---|
| Lucide | Lucide Icons | Search, User, Settings, Home |
| カスタム(variant対応) | FontAwesome 6 | Heart, Star, Bookmark, Bell |
| ブランド | FontAwesome 6 | Facebook, Twitter, Discord |
サイズ
バリアント(outline / filled)
一部のアイコンは variant propで表示を切り替えられます。
variant対応アイコン一覧
線の太さ(Lucideアイコン専用)
Lucideアイコンは weight propで線の太さを調整できます。
weight はLucideアイコン専用です。カスタムアイコン(FontAwesome系)では効果がありません。
TypeScriptで型エラーが表示されます。
ブランドアイコン
SNSやサービスのブランドアイコンを使用できます。
利用可能なブランドアイコン
| アイコン名 | 説明 |
|---|---|
Facebook | |
Instagram | |
TwitterX | X (旧Twitter) |
Youtube | YouTube |
Discord | Discord |
Slack | Slack |
Line | LINE |
TikTok | TikTok |
Threads | Threads |
Spotify | Spotify |
Google | |
Figma | Figma |
Chrome | Google Chrome |
Codepen | CodePen |
Codesandbox | CodeSandbox |
Dribbble | Dribbble |
Framer | Framer |
Github | GitHub |
Gitlab | GitLab |
Linkedin | |
Pocket | |
Trello | Trello |
Twitter | X(旧Twitter。TwitterXと同じ見た目。新規実装ではTwitterXを推奨) |
Twitch | Twitch |
ブランドアイコンは variant や weight を指定できません。
TypeScriptで型エラーが表示されます。
旧lucideアイコン名のエイリアス
lucide-react upstreamでリネーム・削除された一部のアイコン名は、後方互換のため引き続き<Icon name="旧名">で使用できます。内部的にはLucide解決パス(通常のstroke描画)を通るため、カスタムアイコン(塗りつぶし)扱いにはなりません。
| 旧アイコン名 | 解決先 | 経緯 |
|---|---|---|
MousePointerSquare | SquareMousePointer | upstreamでのリネーム(2024-03、GitHub PR#1906) |
RailSymbol | TrainTrack(近似後継) | upstreamでicon.brand理由により非推奨化・v1.0で完全削除。リネームではなく撤去のため公式の後継名はなく、意味的に最も近いアイコンをエイリアス先とした |
いずれも新規実装では解決先の現行アイコン名(SquareMousePointer / TrainTrack)を使うことを推奨します。
カスタムクラス
未知のアイコン名(開発時の警告)
一覧に無いアイコン名を渡すと、開発モード(NODE_ENV !== 'production')限定で HelpCircle にフォールバックしつつ console.warn で警告します。本番ビルドでは警告は出ません(フォールバック表示のみ)。
エスケープハッチ(component)
Lucide/カスタムアイコン一覧に無いアイコン(サードパーティ製・独自SVG等)を一時的に使いたい場合は、name の代わりに component で任意のアイコンコンポーネントを直接渡せます。name と component は同時に指定できません(型エラーになります)。
恒久的に使うアイコンは component エスケープハッチではなく、Lucideなら src/components/Icon/lucide-icons.ts、ブランド等のカスタムアイコンなら src/components/Icon/custom-icons.ts に正規登録することを推奨します(name で一元管理でき、weight/variant 等の機能もフルに使えます)。
Props対応表
各propsがアイコンの種類によって有効かどうかを示します。
| Props | Lucide | カスタム(variant対応) | ブランド |
|---|---|---|---|
name | ✅ | ✅ | ✅ |
size | ✅ | ✅ | ✅ |
className | ✅ | ✅ | ✅ |
weight | ✅ | ❌ 型エラー | ❌ 型エラー |
variant | ✅ | ✅ | ❌ 型エラー |
Props
| Prop | Type | Default | Description |
|---|---|---|---|
name | IconName | - | アイコン名。Lucide、カスタム、ブランドアイコンから選択(componentと同時指定不可)。componentエスケープハッチを使う場合は不要(nameかcomponentのいずれか一方が必須) |
component | React.ComponentType | - | nameの代わりに任意のアイコンコンポーネントを直接渡すエスケープハッチ(nameと同時指定不可)。nameかcomponentのいずれか一方が必須 |
size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' | アイコンサイズ(12px〜40px) |
weight | 'thin' | 'light' | 'regular' | 'bold' | 'regular' | 線の太さ(Lucideアイコン専用) |
variant | 'outline' | 'filled' | 'outline' | アウトラインまたは塗りつぶし(Lucide、カスタムアイコン) |
className | string | - | 追加のCSSクラス |
よく使うLucideアイコン
全てのLucideアイコンは lucide.dev/icons で確認できます。