SuperAPI AI 工具集

fiftyone-voodo-design

前端与建站

查看项目

更新于 10-16 06:04

技能介绍

用途

VOODO(@voxel51/voodo)是 FiftyOne 应用的官方 React 组件库,源码位于 https://github.com/voxel51/design-system。本技能用于在构建 FiftyOne 用户界面时提供规范指导,适用场景包括构建插件面板、创建交互式 UI 以及进行样式设计。

主要能力

VOODO 提供完整的 React 组件与设计令牌体系,涵盖:

  • 设计令牌枚举,包含精确的成员值(Size、Spacing、Variant、Orientation 等)
  • 每个组件的 props、类型、默认值及用法示例
  • 常见布局的组合模式(表单、卡片、列表、选择器)
  • 需要避免的反模式(例如使用原始 Tailwind 而非组件 props)

使用方式

关键指令

在编写任何 UI 代码之前,必须先获取 LLM 参考文档:

WebFetch(
    url="https://voodo.dev.fiftyone.ai/voodo-llm-reference.md",
    prompt="Read the complete VOODO component API, design tokens, and composition patterns"
)

工作流

  1. 获取参考文档:
WebFetch(
    url="https://voodo.dev.fiftyone.ai/voodo-llm-reference.md",
    prompt="What VOODO components and tokens are available for building [describe UI]?"
)
  1. 使用参考文档中的组件与设计令牌。始终从 @voxel51/voodo 导入,始终使用枚举值,绝不传入原始字符串:
import { Button, Input, Stack, Text, FormField } from "@voxel51/voodo";
import { Orientation, Size, Spacing, Variant, TextColor } from "@voxel51/voodo";
  1. 遵循组合模式。参考文档包含以下模式:
  • 表单:将控件包裹在 <FormField> 中,使用 <FormFieldGroup> 分组
  • 布局:使用 <Stack> 并配合 orientation、spacing、align、justify 属性,而非 Tailwind flex 类
  • 卡片:使用 <Card> / <RichCard> 承载内容
  • 列表:使用 Descriptor<T>[] 模式配合 <RichList> 或 <RichButtonGroup>
  • 反馈:使用 <Toast>、<Tooltip>、<EmptyState>

安装

在依赖中加入:

{
  "dependencies": {
    "@voxel51/voodo": "latest"
  }
}

在应用入口点导入主题 CSS:

import "@voxel51/voodo/theme.css";

FiftyOne 模式

  • 深色主题:FiftyOne App 默认使用深色模式
  • 语义变体:使用 Variant.Success、Variant.Danger、Variant.Secondary 表示操作
  • 设计令牌:始终使用枚举值(Spacing.Md、Size.Sm),绝不使用任意 CSS 值
  • 布局:使用 <Stack> 的 align 和 justify 属性,而非 Tailwind 的 items-* / justify-* 类

与 FiftyOne SDK 集成

import { useRecoilValue } from "recoil";
import * as fos from "@fiftyone/state";  // Standard FiftyOne alias
import { Button, Text, Stack, FormField, Input } from "@voxel51/voodo";
import { Orientation, Spacing, Size, Variant, TextColor } from "@voxel51/voodo";

const MyPanel: React.FC = () => {
  const dataset = useRecoilValue(fos.dataset);
  return (
    <Stack orientation={Orientation.Column} spacing={Spacing.Md}>
      <Text color={TextColor.Secondary}>{dataset?.name}</Text>
      <FormField
        label="Filter"
        control={<Input size={Size.Sm} placeholder="Search..." />}
      />
      <Button variant={Variant.Primary} size={Size.Sm}>
        Process
      </Button>
    </Stack>
  );
};

资源

  • LLM 参考(需首先获取):https://voodo.dev.fiftyone.ai/voodo-llm-reference.md
  • 源码仓库:https://github.com/voxel51/design-system
  • 交互式 Storybook:https://voodo.dev.fiftyone.ai/
  • npm 包:@voxel51/voodo

相关:完整插件设置请使用 fiftyone-develop-plugin 技能。

限制与故障排查

  • 组件未找到:获取 LLM 参考以确认当前组件名称
  • 属性值错误:使用枚举成员(如 Size.Md),而非字符串(如 "md")
  • 布局不生效:使用 <Stack> 并配合 orientation、spacing、align、justify 属性
  • 样式未应用:确保已导入 @voxel51/voodo/theme.css,并在深色模式下测试