サイドバーのノード表示改善: 左寄せ修正とアイコン刷新(lucide-react/simple-icons)#302
Open
oboroge0 wants to merge 3 commits into
Open
Conversation
ノード一覧の各プラグインボタンに text-left が指定されておらず、ブラウザの button 要素のデフォルト中央寄せが効いてラベルが2行に折り返した際にだけ 見た目が中央寄せになっていた。カテゴリヘッダーボタンと同様に text-left を 明示して常に左寄せになるよう統一した。
- apps/web/lib/icons.tsx を、手書きSVG約24種の自前実装から lucide-react (named import、tree-shaking対応)へ全面移行。simple-icons のブランド アイコンも "si:<slug>" 形式(例: si:anthropic)で解決できるようにし、 fill方式でレンダリングするレンダラーを追加した。getIconComponent / renderIcon の呼び出し規約は変更していない。 - 手書きSVGマップに存在せず Box にフォールバックしていた CalendarClock / Zap / AudioLines を含む全アイコン名が実際に描画される ようになった。 - plugins/*/manifest.json の ui.icon を再割り当てし、無関係なノードが 同じアイコンを共有していた問題(Cpu x4, Volume2 x5, MessageSquare x3, Type/Clock/Play x2)を解消。LLM/チャット/OBSプラグインは simple-icons に実在するブランドロゴ(si:anthropic, si:googlegemini, si:mistralai, si:ollama, si:discord, si:twitch, si:youtube, si:obsstudio)に変更し、 色もブランドの公式hexへ合わせた。simple-icons に存在しないブランド (OpenAI, Groq, VOICEVOX系TTSエンジン)は商標を模倣せず lucide の 汎用アイコン+既存の色設定のみで区別した。 - memory-save / memory-search / prompt-builder の manifest.json は 他エージェントが編集中のため変更せず、アイコン名(Database, Search, FileText)は新しいレンダラー側で解決できるようにした。 closes なし(UI改善のみ)
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
サイドバーは ui.color を legibleAccent() を通さず生のまま描画するため、 simple-icons の公式hexが近黒のブランド(Anthropic #191919, Ollama #000000, OBS Studio #302E31)はダークテーマでアイコン・枠線がほぼ見えなくなっていた。 ブランドの識別は si: シルエットが担うため、色はテーマセーフな値に調整: - anthropic-llm: #D97757(Claudeのテラコッタ系アクセント) - ollama-llm: #5E81AC(従来色に戻す。Ollamaは黒/白のみで使える アクセント色がない) - obs-scene-switch / obs-source-toggle: #8B7CC4(従来色に戻す。同上) Gemini (#8E75B2) と Mistral (#FA520F) は両テーマで可読なため変更なし。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
Boxへのサイレントフォールバックあり)を廃止し、lucide-react/simple-iconsの実アイコンに置き換え。あわせて重複・破損していたアイコン割り当てを39プラグイン中16件で再設計1. サイドバーの左寄せ修正
apps/web/components/editor/Sidebar.tsx:347— ノード一覧グリッドの各プラグインボタンの className にtext-leftを追加<button>はブラウザのデフォルトスタイルでtext-align: centerになり、Tailwind Preflight もこれを上書きしない。1行に収まるラベルは flex box が内容にシュリンクするため見た目上問題が出ないが、長いラベルが2行に折り返すと2行目が1行目の幅を基準に中央寄せされ、「短いノードは左寄せ、長いノードは中央寄せ」に見える不整合が発生していたSidebar.tsx:312)はもともとtext-leftを持っており左寄せで正しかったため、そのスタイルに合わせたapps/web/components/editor/ContextMenu.tsx:74,159— 既にtext-left指定済みで、ラベルもtruncate(単一行)のため問題なしapps/web/components/editor/CustomNode.tsx:1616,1568— ノードヘッダーのラベルはtruncateで単一行固定のため折り返し自体が発生しないapps/web/components/editor/SearchPanel.tsx— アイコンのみのボタンでテキストラベルなし、対象外apps/web/components/panels/ActivityDrawer.tsx/NodeSettings.tsx—usePluginStoreはラベル文字列の参照のみで、プラグイン一覧をボタングリッドとして描画していないため対象外Sidebar.tsxの "Loading plugins..." / "No nodes found" 等の空状態メッセージ(text-centerは意図した用途)、MotionLibrary.tsx/ExpressionPresets.tsxなどの別グリッドピッカー(スコープ外)2. アイコン表示の全面刷新
アーキテクチャ変更(
apps/web/lib/icons.tsx)lucide-react(named importで個別インポート、tree-shaking対応)に置き換え"si:<slug>"形式(例:si:anthropic)のアイコン名はsimple-iconsのブランドアイコンとして解決。simple-iconsのパスは単色シルエットのためfillでレンダリング(lucideはstroke方式のまま維持し、レンダラー内で分岐)getIconComponent(name)/renderIcon(name, props)/ デフォルトエクスポートの呼び出し規約(IconProps=size/color/className)は変更なし。呼び出し元(Sidebar.tsx,CustomNode.tsx)の修正は不要Box(lucide-react)にフォールバックlucide-react@^1.23.0(React 18.3.1と互換)、simple-icons@^16.25.0をapps/web/package.jsonに追加。どちらも個別 named import のみを使用しており、import * asは一切していない(バンドルサイズ懸念への対応)副次的に修正されたバグ
旧・手書きSVGマップに存在せず
Box(無地の四角)に見えていたアイコンは、実体を持つ lucide-react アイコンとして自動的に正しく表示されるようになった:CalendarClock(cron-trigger),Zap(groq-llm),AudioLines(openai-tts)※※ いずれも今回のマニフェスト変更なし(値はそのまま)で自動的に直る
最終アイコン割り当て表(全39プラグイン)
AudioWaveformsi:anthropic#D97757を採用(後述の「近黒ブランドカラーの扱い」参照)Volume2(変更なし)User(変更なし)RadioTerminal(変更なし)CalendarClock(値は変更なし)FileJson(変更なし)Hourglasssi:discord#5865F2が既に公式hexと一致していたため変更なしGift(変更なし)Smile(変更なし)Square(変更なし)List(変更なし)si:googlegemini#8E75B2に更新(既存の汎用Googleブルーから変更、両テーマで可読)Zap(値は変更なし)Globe(変更なし)Mic(変更なし)RefreshCw(変更なし)Type(変更なし)Database(manifest未変更)Databaseを追加済みで正しく描画されるSearch(manifest未変更)Searchをマップに追加済みsi:mistralai#FA520Fに更新(既存の#FF7000から補正)Movesi:obsstudio#8B7CC4を維持si:obsstudiosi:ollama#5E81ACを維持Cpu(値は変更なし)siOpenai等のエクスポートなし)。他3件のLLMプロバイダーがsi:へ移行した結果、Cpuを使うのはopenai-llmのみとなり自然に重複が解消された。色は既存の#10B981(OpenAIのいわゆる"ChatGPT green"に近い一般的に知られた配色)を維持AudioLines(値は変更なし)FileText(manifest未変更)FileTextをマップに追加済みDice5(変更なし)Mic2Play(変更なし)Subtitles(変更なし)GitBranch(変更なし)CaseSensitiveClock(変更なし)si:twitch#9146FFが既に公式hexと一致していたため変更なしVariable(変更なし)Speakersi:youtube#FF0000が既に公式hexと一致していたため変更なし商標・著作権に関する判断
node_modules/simple-iconsの named export を直接確認して採用): Anthropic, Google Gemini, Mistral AI, Ollama, Discord, Twitch, YouTube, OBS Studio。いずれも公式hexを併せて設定require('simple-icons')のexportを検索して不在を確認):siOpenaiは存在しない(siOpenaigymのみヒット、別物)。ロゴを自作・模写することはせず、既存のCpu/AudioLines(lucideの汎用アイコン)と既存の色設定をそのまま維持siGroqは存在しない。既存のZap(lucide)と既存の色設定を維持Speaker/Radio/AudioWaveform/Mic2)で視覚的に区別する方針を採用。テキストモノグラム("V"/"C"等)は検討したが、既存のUIパターン(アイコン+単色チップ)との一貫性を優先し、確実に存在確認できるlucideアイコンでの区別を選んだui.color/ui.bgColor)は既存値をそのまま維持(変更していない)近黒ブランドカラーの扱い(ダークテーマ対応)
キャンバス上のノードヘッダーは
legibleAccent()(apps/web/components/editor/CustomNode.tsx)で暗いアクセント色から保護されているが、サイドバーはui.colorを生のままアイコンfill・枠線(${color}40)・背景色に使う。そのため simple-icons の公式hexが近黒のブランドはダークテーマのサイドバーでほぼ不可視になる。ブランドの識別は si: シルエット(ロゴ形状)が担うので、ui.colorはテーマセーフなアクセントに寄せる判断をした:#D97757(Claudeのテラコッタ系アクセント。両テーマで可読かつブランド連想が効く)#5E81ACに復帰(Ollamaは黒/白のみでアクセント色が存在しない)#8B7CC4に復帰(同上)#8E75B2/ Mistral#FA520Fは両テーマで可読なため公式hexのまま意図的に残した重複
obs-scene-switchとobs-source-toggleはどちらもsi:obsstudioを使用。同一ソフトウェア(OBS Studio)の異なる操作を表すノードであり、他に区別できる公式サブブランドロゴが存在しないための意図的な選択(見落としではない)audio-playerのVolume2は、TTSエンジン群(voicevox-tts等)とは異なる「汎用オーディオ再生」ノードとして意図的に維持ui.iconをグループ化するスクリプト)を実施し、上記2件(実質1組)以外の意図しない重複が無いことを確認済みテスト結果
cd apps/web && npx tsc --noEmit→ エラーなしnpm run lint(ルート) → web側は既存の警告のみ(変更ファイルであるicons.tsx/Sidebar.tsxは0件)。server-ts側の biome エラーは今回のPRで一切変更していないapps/server-ts/src/engine/executor.ts等の既存noExplicitAnywarningで、dev ブランチに既存の状態(server-tsは1ファイルも触っていない)npm test(ルート) → 331 pass / 0 fail(bun:test、tests/ 配下19ファイル)cd apps/web && npm run build(Next.js production build, Turbopack) → 成功(simple-icons / lucide-react のバンドラー解決に問題なし)ui.iconをグループ化)→ 意図的な1件(obs系)以外の重複なしを確認手動確認手順(ライブスクリーンショット検証は未実施)
ポート競合回避の制約上、既存の3000/8001を使う開発サーバーとは別ポートでの起動確認までは実施していません。動作確認する場合の手順:
(
apps/web/lib/runtimeEndpoints.tsを確認し、必要ならバックエンドURLをクエリパラメータ等で8006に向ける)http://localhost:3006/editor/<workflow-id>を開くsi:ollama/si:obsstudioの黒系カラー)を確認🤖 Generated with Claude Code