mcpField
A
add-navigation

add-navigation

github.com/cognitedataデザイン・UI102 回インストール
リポジトリ

add-navigation について

add-navigationは、@cognite/dune-industrial-componentsのNavigationをDuneアプリに組み込むスキルです。依存関係の確認、アプリ構成の調査、型付きナビゲーション項目の定義、状態管理やreact-router-domとの接続を案内します。

主な機能

  1. 01コンポーネントパッケージの依存確認
  2. 02アプリのレイアウトとルーティングの調査
  3. 03型付きナビゲーション項目の定義
  4. 04状態管理またはルーターとの接続
  5. 05任意のカスタムロゴに対応

活用シーン

  1. 01Duneアプリへのナビゲーション追加
  2. 02既存ルートへのナビゲーション接続
  3. 03アプリのテーマに合わせたロゴ調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cognitedata/dune-skills --skill add-navigation

インストール後、Claude Code で/add-navigationを入力して読み込まれたか確認します。

詳細

ナビゲーションを追加する

この Dune アプリに @cognite/dune-industrial-components/navigation の Navigation を組み込みます。

ナビゲーション項目:$ARGUMENTS

このコンポーネントは完全制御型です。親コンポーネントが activeId と onNavigate を管理します。コンポーネント内に状態管理やルーティングに関する前提はありません。

logo プロパティは省略可能で、デフォルトでは Cognite の縦型ロゴが使用されます。currentColor を使用するため、ライトモードでは自動的に黒、ダークモードでは白で表示されます。

ステップ 1 — 依存関係を確認する

まず、package.json を確認し、@cognite/dune-industrial-components がインストールされているかを調べます。インストールされていない場合は、次を実行します。

pnpm install "github:cognitedata/dune-industrial-components#semver:*"

ステップ 2 — アプリを確認する

変更を加える前に、src/App.tsx(またはメインのレイアウトファイル)と package.json を確認します。次の点を把握してください。

  • 既存のルーティング(react-router-dom?)
  • 既存のダークモード/テーマフック
  • 現在、ページコンテンツが配置されている場所

ステップ 3 — ナビゲーション項目を定義する

$ARGUMENTS を使って、型指定された NavItem[] 配列を作成します。空の場合は、アプリの既存のページ/ルートを使用します。

import type { NavItem } from '@cognite/dune-industrial-components/navigation';

const NAV_ITEMS: NavItem[] = [
  { id: 'home', label: 'Home' },
  // one entry per argument / page
];

ステップ 4 — レイアウトに組み込む

Navigation はデフォルトの Cognite ロゴを使用し、テーマ切り替え機能をデフォルトで含みます。

ルーターなし(useState を使用)
import { useState } from 'react';
import { Navigation } from '@cognite/dune-industrial-components/navigation';

export function App() {
  const [activeId, setActiveId] = useState(NAV_ITEMS[0].id);
  
  // If the app has dark mode, use the existing hook
  const { isDark, toggle } = useDarkMode(); // Adjust to match app's theme hook

  return (
    <div className="flex min-h-screen flex-col">
      <Navigation
        items={NAV_ITEMS}
        activeId={activeId}
        onNavigate={setActiveId}
        renderThemeToggle={() => (
          <button
            type="button"
            onClick={toggle}
            aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
          >
            {isDark ? '🌙' : '☀️'}
          </button>
        )}
      />
      <main className="flex flex-1 flex-col">{/* page content */}</main>
    </div>
  );
}
react-router-dom を使用する場合
import { useLocation, useNavigate } from 'react-router-dom';
import { Navigation } from '@cognite/dune-industrial-components/navigation';

export function App() {
  const location = useLocation();
  const navigate = useNavigate();
  
  // If the app has dark mode, use the existing hook
  const { isDark, toggle } = useDarkMode(); // Adjust to match app's theme hook

  // Derive activeId from path — adjust to match the app's route structure
  const activeId = location.pathname.split('/')[1] || NAV_ITEMS[0].id;

  return (
    <div className="flex min-h-screen flex-col">
      <Navigation
        items={NAV_ITEMS}
        activeId={activeId}
        onNavigate={(id) => navigate(`/${id === NAV_ITEMS[0].id ? '' : id}`)}
        renderThemeToggle={() => (
          <button
            type="button"
            onClick={toggle}
            aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
          >
            {isDark ? '🌙' : '☀️'}
          </button>
        )}
      />
      <main className="flex flex-1 flex-col">{/* page content */}</main>
    </div>
  );
}

任意 — カスタムロゴ

デフォルトでは、Navigation はライトテーマ/ダークテーマに自動で適応する Cognite ロゴを使用します。必要な場合にのみ、カスタムロゴを追加してください。

カスタムロゴを使用するには、logo プロパティを渡します。アプリにダークモード/ライトモードがある場合は、テーマフックを使って画像を切り替えます。

import { Navigation } from '@cognite/dune-industrial-components/navigation';
import logoLight from '@/assets/logo-light.svg';
import logoDark from '@/assets/logo-dark.svg';

// Inside the component (whatever hook the app uses):
const { isDark } = useDarkMode();

<Navigation
  items={NAV_ITEMS}
  activeId={activeId}
  onNavigate={setActiveId}
  logo={
    <img
      src={isDark ? logoDark : logoLight}
      alt="App"
      className="h-8 w-auto"
    />
  }
  renderThemeToggle={() => (
    <button
      type="button"
      onClick={toggle}
      aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}
    >
      {isDark ? '🌙' : '☀️'}
    </button>
  )}
/>

完了

アプリに、次の機能を備えた固定ナビゲーションヘッダーが追加されました。

  • ライトテーマ/ダークテーマに適応するデフォルトの Cognite ロゴ
  • テーマ切り替えボタン(ダークモードフックが存在する場合)
  • アクティブな項目の aria-current="page"
  • ロゴボタンと <nav> 要素の aria-label 属性

パッケージ:@cognite/dune-industrial-components/navigation エクスポート:Navigation、CogniteLogo、NavItem、NavigationProps

コメント