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. 01为 Dune 应用添加导航
  2. 02将导航连接到现有路由
  3. 03让标志适配应用主题

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/add-navigation确认已加载。

详细介绍

添加导航

将 Navigation 从 @cognite/dune-industrial-components/navigation 接入此 Dune 应用。

导航项:$ARGUMENTS

该组件完全受控——父级负责管理 activeId 和 onNavigate。组件内部不假设任何状态或路由。

logo 属性为可选项,默认为 Cognite 竖版 Logo。它使用 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?)
  • 现有的深色模式/主题 Hook
  • 当前页面内容所在位置

第 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 Logo,并包含主题切换按钮。

无路由器(使用 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>
  );
}

可选——自定义 Logo

默认情况下,Navigation 使用 Cognite Logo,并会自动适配浅色/深色主题。仅在需要时添加自定义 Logo。

如需使用自定义 Logo,请传入 logo 属性。如果应用支持深色/浅色模式,请根据主题 Hook 切换图片:

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 Logo
  • 主题切换按钮(如果存在深色模式 Hook)
  • 当前项上的 aria-current="page"
  • Logo 按钮和 <nav> 元素上的 aria-label 属性

包:@cognite/dune-industrial-components/navigation 导出项:Navigation、CogniteLogo、NavItem、NavigationProps

评论

支持 Markdown