组件

基础原语

从 shadcn 组件模式中筛选并采用 Vibecape 视觉的基础 UI 原语

基础原语

这些组件使用现有 Base UI 运行时与 Vibecape 设计 token,不引入 Shadcn 视觉样式或运行时依赖。

<Accordion><AccordionItem value="details"><AccordionTrigger>详情</AccordionTrigger><AccordionContent>内容</AccordionContent></AccordionItem></Accordion>
<Alert variant="destructive"><AlertTitle>删除项目</AlertTitle></Alert>
<Progress value={60}><ProgressTrack><ProgressIndicator /></ProgressTrack></Progress>
<Avatar><AvatarImage src={avatar_url} /><AvatarFallback>DC</AvatarFallback></Avatar>
<InputGroup><InputGroupAddon>⌕</InputGroupAddon><InputGroupInput placeholder="搜索" /></InputGroup>

同时提供 AlertDialogDrawerPaginationRadioGroupScrollAreaTable

高复用交互原语

FileUpload 只将浏览器 File 对象回传给宿主。DataTable 接收数据与列定义,排序、请求和选择状态仍由应用管理。HoverCard 提供延迟展示的紧凑摘要,ResizablePanelGroup 用于组合可调整的工作区。

<FileUpload files={files} onFilesChange={set_files} accept="image/*" />
<DataTable data={rows} columns={columns} getRowId={(row) => row.id} />
<ResizablePanelGroup orientation="horizontal">
  <ResizablePanel defaultSize="30%">导航</ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel>内容</ResizablePanel>
</ResizablePanelGroup>

颜色主题

所有原语共用同一组语义变量:backgroundforegroundsurface-subtlecontrol-surfacedividerinteraction-hoverinteraction-selectedprimary。宿主通过 ThemeContainer 设置主题,不需要修改任何组件 class。

<ThemeContainer variant="slate" mode="dark">
  <Application />
</ThemeContainer>

展示站保持页面框架不变,只用 ThemeContainer 包裹组件展示区域。内置 neutralzincslatestoneblue 五套预设,且每套都同时支持浅色与深色外观。

主题容器

ThemeContainer 是整棵组件树的主题边界。它统一提供颜色、控件表面、边界、交互状态和浮层 token,具体组件不需要接收主题属性或增加主题 class。

import { Button, Input, ThemeContainer } from "@downcity/ui";

export function ThemedApplication() {
  return (
    <ThemeContainer variant="slate" mode="dark">
      <Input placeholder="项目名称" />
      <Button variant="primary">保存</Button>
    </ThemeContainer>
  );
}

variant 支持 neutralzincslatestonebluemode 支持 lightdark。Dropdown、ContextMenu、Select、Popover、Tooltip、HoverCard、Dialog、AlertDialog、Sheet、Drawer 与 ImagePreview 的浮层都会自动挂载到 ThemeContainer 内部,无需额外同步主题。Showcase 中每个组件使用 Neutral Light、Neutral Dark、Blue Light、Blue Dark 四个 ThemeContainer 对照块验证同一调用在不同环境中的表现。