@choco-vanille/ui

中文文档
2.2.1发布于 2026/11/09MITTypeScriptESM + CJS近 30 天下载 3232

与"香草取出"和"基础UI"原始人相接而成的回放19UI套.

中文使用文档
文档目录8 节
  1. 特征
  2. 安装
  3. 构成部分
  4. 图标
  5. 方框和打字法
  6. 通知
  7. 他们
  8. 许可证

@choco-vanille/ui (英语)

个人项目通知: 该图书馆主要为个人使用而建. 它作为方便而公开发表,但不能保证稳定性、长期维护或后向兼容性。 冒险用吧.

使用 维特 (图书馆模式), 香草提取 (零运行时间,CSS-in-TS)和 基础UI 原始的 原始的 原始的 组成部分是: 预览用 故事书。 。 。 .

特征

  • * 反应19+类型脚本,船舶无害环境管理+CJS+类型申报
  • QQ 香草提取设计系统——一个已完全打入的符号主题 (颜色,间隔,半径,字体大小/重量,阴影,z-index)
  • 以 Vanilla 提取为样式的基 UI 组件 recipe() (类型) 替换为 cva)),编为: clsx
  • 用于交互式组件的文件目录
  • + ESLint 平面配置( 类型script- eslint, 反应- hooks, jsx- a11y, 故事本) + Pretier

安装

# npm
npm install @choco-vanille/ui @iconify/react@^5.2.1 react react-dom

# yarn
yarn add @choco-vanille/ui @iconify/react@^5.2.1 react react-dom

# pnpm
pnpm add @choco-vanille/ui @iconify/react@^5.2.1 react react-dom

软件包条目自动加载其样式表。 然后使用组件 :

import { Typography } from '@choco-vanille/ui';

export function Example() {
  return (
    <>
      <Typography variant="h1">Hello world</Typography>
      <Typography variant="p">A typographic primitive.</Typography>
      <Typography variant="code">@choco-vanille/ui</Typography>
    </>
  );
}

对于需要明确CSS加载的集成,样式表仍保留 可用时间 @choco-vanille/ui/styles.css。 。 。 .

构成部分

图标

所有图标道具接受信任的本地 IconifyIcon SVG 数据并通过 @iconify/react/offline,无需网络请求或全球登记. 为您选中的收藏安装数据包 :

pnpm add @iconify-icons/lucide
// src/icons/index.ts
import type { IconifyIcon } from '@iconify/react/offline';
import searchIcon from '@iconify-icons/lucide/search';

export const IconRegistry = {
  searchIcon,
} as const satisfies Readonly<Record<string, IconifyIcon>>;

消费者项目应界定一个 IconRegistry 导出所有使用的图标 由项目。 仅在登记册中导入单个图标数据模块, 并将其条目用于组件。 密钥使用骆驼 Case with the Icon 后缀, 例如 searchIcon 或者说 warningIcon; 不导入全部收藏.

import { Button, Icon, IconButton } from '@choco-vanille/ui';
import { IconRegistry } from './icons';

const Example = () => (
  <>
    <Icon icon={IconRegistry.searchIcon} size="md" aria-label="Search" />
    <Button label="Search" startIcon={IconRegistry.searchIcon} />
    <IconButton icon={IconRegistry.searchIcon} aria-label="Search" />
  </>
);

图标默认为装饰. 提供 aria-label 或者说 aria-labelledby 页:1 信息图标;仅由图标控件拥有其可访问名称. 大小(xs 结束 2xl默认值 md, (中文(简体) ), spin,包装样式和CSS颜色不变. 参考文献指向SVG. 单色图标继承 currentColor; 多颜色图标 可以保持他们的固定颜色。 图书馆的登记册是内部的;每个消费者 拥有其登记册。 公约不需要运行时间提供者或图标 全球登记。 图标不需要 SVG 到反应构建插件 . 只使用可信任的数据, 因为 SVG 天体是作为标记插入的 . 内部的SVG识别器是用于SSR和水合的示例. 已应用 SVG ID必须是非空的,在用下划线取代连字符后是独一无二的.

中断更改 : 替换 SVG 反应组件和前者 IconComponent 类型为 IconifyIcon 数据,包括主要/跟踪和自定义变量 图标。 字符串图标名称不被接受 . SvgImage 保留其单独的 SVG 反应组件合同.

方框和打字法

Box 默认为 a div· ; Typography 默认为 a span都推断出本地人 属性、事件和来自 as,包括自定义反应组件. 对于打字, variant 也选择元素当 as 缺席; as 优先,同时 variant 保持视觉预设.

import { Box, Typography, vars, type BoxProps } from '@choco-vanille/ui';

const linkProps = {
  as: 'a',
  href: '/account',
  padding: 16,
} satisfies BoxProps<'a'>;

export function AccountSummary() {
  return (
    <Box display="grid" gridTemplateColumns="1fr auto" gap={16} padding={24}>
      <Typography variant="h2" fontSize={20} lineHeight={1.4}>
        Account
      </Typography>
      <Box {...linkProps}>Open account</Box>
      <Typography
        variant="p"
        maxLines={8}
        overflowWrap="anywhere"
        color={vars.color.text.secondary}
      >
        Account details and preferences.
      </Typography>
    </Box>
  );
}

框支持定位( E)inset,方向冲抵, zIndex),弹性和网格 安置、个人边界、, background, (中文(简体) ), boxSizing, (中文(简体) ), aspectRatio 财务报告和审定财务报表 opacity。类型学继承了 Box 的布局道具并添加了主题字体家族 (单位:千美元)sans, (中文(简体) ), serif, (中文(简体) ), mono, (中文(简体) ), fontStyle, (中文(简体) ), lineHeight, (中文(简体) ), letterSpacing, (中文(简体) ), verticalAlign包装和装饰 基于收件间隔,字体大小, 光度和阴影使用已公布的有限尺度;其他CSS道具接受CSS 数值. style 优先于样式道具并接受自定义属性.

限制宽度 ellipsis。 。 。 . maxLines 接受任何正整数,并 优先于 ellipsis; 明确 style 能够覆盖断线. 提供另一种读取被剪切的基本内容的方法.

中断合同变更: 参考文献和本地属性必须匹配 已变造元素; 明确的非违约通用要求 as 或匹配 类型 variant 在呼叫现场。 使用 satisfies 当编译道具到 保留这些文字选择器,或者在 展开。 无效的令牌、 非无限 CSS 数字和无效行限制 TypeError。公开的打字方法使用 clamp: true 多线 结构而不是编号 maxLines 变体;行数为动态. 边际造型现在为 Box 所拥有, 而非复制于 Typography 食谱。 仍保留构成部分名称 Box 财务报告和审定财务报表 Typography。 。 。 .

类别构成部分
基金会Icon, (中文(简体) ), Typography
版式Box, (中文(简体) ), Flex, (中文(简体) ), Grid, (中文(简体) ), Inset, (中文(简体) ), Image, (中文(简体) ), Separator, (中文(简体) ), Form, (中文(简体) ), Fieldset
行动Button, (中文(简体) ), IconButton, (中文(简体) ), Toggle, (中文(简体) ), ToggleGroup
表单Autocomplete, (中文(简体) ), Calendar, (中文(简体) ), Checkbox, (中文(简体) ), CheckboxGroup, (中文(简体) ), DatePicker, (中文(简体) ), Legend, (中文(简体) ), RadioGroup, (中文(简体) ), RichTextEditor, (中文(简体) ), Select, (中文(简体) ), Slider, (中文(简体) ), Switch, (中文(简体) ), TextArea, (中文(简体) ), TextField, (中文(简体) ), NumberField
数据显示Avatar, (中文(简体) ), AvatarGroup, (中文(简体) ), Badge, (中文(简体) ), RichTextRenderer, (中文(简体) ), Table
表面Accordion, (中文(简体) ), Card, (中文(简体) ), Collapsible
导航Tabs, (中文(简体) ), Link, (中文(简体) ), Pagination, (中文(简体) ), Breadcrumbs, (中文(简体) ), Stepper, (中文(简体) ), StepIndicator
重叠Tooltip, (中文(简体) ), DropdownMenu, (中文(简体) ), ContextMenu, (中文(简体) ), Popover, (中文(简体) ), HoverCard, (中文(简体) ), Dialog, (中文(简体) ), AlertDialog, (中文(简体) ), Drawer, (中文(简体) ), Panel, (中文(简体) ), Command
反馈Skeleton, (中文(简体) ), Callout, (中文(简体) ), NotificationCard, (中文(简体) ), ToasterProvider, (中文(简体) ), Toaster, (中文(简体) ), Progress, (中文(简体) ), EmptyState, (中文(简体) ), Spinner
主题ThemeProvider, (中文(简体) ), useTheme

通知

NotificationCard 是独立的视觉复合体: Header 包含 Icon, (中文(简体) ), Title 财务报告和审定财务报表 Close, (中文(简体) ), Body 包含 Description 或自定义内容,以及 Footer 包含 Actions区域是可选的 NotificationCard.Icon 在使用复合内容时明确. Header 供给根 onClose 按钮,除非 Close 插槽已存在 。 方便道具仍然包括 变相图标. ToasterProvider 用同一张牌挂载两个频道 暂时的吐司和持续的通知。 一次包装应用程序 在所希望的主题范围内,外部转换或剪接容器:

import { Button, ThemeProvider, ToasterProvider, useNotification, useToast } from '@choco-vanille/ui';

const Actions = () => {
  const { showSuccess } = useToast();
  const { show } = useNotification();

  return (
    <>
      <Button label="Save" onClick={() => showSuccess({ title: 'Changes saved' })} />
      <Button label="Notify" onClick={() => show({ title: 'Update available' })} />
    </>
  );
};

const Example = () => (
  <ThemeProvider>
    <ToasterProvider>
      <Actions />
    </ToasterProvider>
  </ThemeProvider>
);

ToasterProviderProps 接受 children 和视图端口配置 : toastPosition, (中文(简体) ), notificationPosition, (中文(简体) ), toastLabel, (中文(简体) ), notificationLabel, (中文(简体) ), className,以及 style。它没有添加 DOM 包装并保留了视图 地方主题范围. Toaster 仍可供手工安装; 不为同一应用程序挂载两者。 钩子不需要反应 上下文,但信息需要挂载的提供者或手动的 Toaster 显示.

吐司出现在右下方,默认为5000ms,支持刷取解雇 没有关闭按钮。 通知出现在右上方, 默认为持久性 (单位:千美元)duration: 0并有一个关闭按钮。 每个频道显示最多 三堆 消息,在 Sonner 的队列中保留额外消息。 动作与 弹性端. 两个钩子都接受 actions; 只接受通知 closeLabel。 。 。 . 通知 children 接受 自定义 NotificationCard 节; 包含 Header 以保留默认关闭 按钮,或提供自己的 Close 插槽 。 原先的平面化合物含量应 归入 Header, (中文(简体) ), Body,以及 Footer。 。 。 .

中断 API 更改 : 替换 Toast 财务报告和审定财务报表 Toast.* 与 NotificationCard 财务报告和审定财务报表 NotificationCard.*,包括其相应的道具类型和样式 地图。 替换 <ToastProvider>{children}</ToastProvider> 与 <ToasterProvider>{children}</ToasterProvider>;钩名不变.

他们

设计系统是信使真实的单一来源. 调色板, 语义颜色和其他符号类别 src/theme/tokens/。 。 。 . 完整的光和暗主题组装在 src/theme/themes/,其CSS变量由 src/theme/styles/contract/contract.css.ts。 。 。 .

内建的彩色坡道使用 sRGB 十六进制值, 有蓝色初级和紫色二级 颜色 语义路径包括: surface.main, (中文(简体) ), surface.elevated, (中文(简体) ), surface.muted, (中文(简体) ), text.primary, (中文(简体) ), text.secondary, (中文(简体) ), text.tertiary, (中文(简体) ), neutral.main, (中文(简体) ), danger.main, (中文(简体) ), accent*,以及 focusRing。这些替换以前的颜色符号和CSS变量名称; 更新消费者主题对象并相应覆盖。 组件颜色意图 使用情况 neutral 财务报告和审定财务报表 danger;反馈变量也使用 danger编辑 purple 其他口音意向使用相应的 accent* 标志. ThemeColors, (中文(简体) ), ThemeEditorColors,以及 Theme 接受自定义的字符串 数值; ThemeColorOverrides 类型提供者的部分语义颜色 超载 全部从 @choco-vanille/ui。 。 。 .

装满了装备的船 浅而暗 主题。 暗模式遵循 操作系统默认( O)prefers-color-scheme),并且可以强制每个子树:

<html data-theme="dark"> ...   <!-- force dark -->
<html data-theme="light"> ...  <!-- force light -->
<html> ...                     <!-- auto: follow the OS -->

全球主题标识符使用 choco-vanille 名称空间 : .choco-vanille-theme-light, (中文(简体) ), .choco-vanille-theme-dark,则 choco-vanille.theme 财务报告和审定财务报表 choco-vanille.reset 级联层,和 --choco-vanille-theme-transition-duration。此前缀更改正在打破 : 更新自定义选择器、 层顺序和过渡覆盖到这些 名称。 上一个前缀的别名不释放 。 这个 data-theme 属性和符号变量,例如 --color-primary-main 不变.

有两种方法:

1. 类型 vars (内部) *.css.ts,完全自动完成 :

import { style } from '@vanilla-extract/css';
import { vars } from '@choco-vanille/ui';

export const card = style({
  backgroundColor: vars.color.surface.main,
  color: vars.color.surface.foreground,
  padding: vars.space[16],
  borderRadius: vars.radius[8],
  boxShadow: vars.shadow.sm,
});

2. 基本CSS变量 - 每一个符号都发出在 :root 与一个稳定, 人类可读名称来源于其路径( :--color-primary-main, (中文(简体) ), --space-12, (中文(简体) ), --radius-6(中文(简体) ). 在任意样式表中使用它们,或覆盖它们以重取主题 :

:root {
  --color-primary-main: oklch(0.55 0.2 250); /* override this token */
  --radius-8: 0.25rem;
}

两者自动保持同步 – 压倒 CSS 变量同时更新每个 内容,通过 vars。 。 。 .

间距、字体大小和半径使用数字键参考像素 16px根 (英语). 除间距外,值仍为对数 0 并固定 1px。 。 。 . 使用 padding={16}, (中文(简体) ), fontSize={14} 财务报告和审定财务报表 borderRadius={8}; 没有名称 别名或隐相乘. 支持中只接受数字 缩放,而不是任意值. radius.full 和类型 通过 72。 。 。 .

主题不再暴露 lineHeight 或者说 letterSpacing: 保留组件 他们的CSS打字机和打字机 letterSpacing 接受 CSS 值. 两者 shadow 财务报告和审定财务报表 dropShadow 曝光 none, (中文(简体) ), xs, (中文(简体) ), sm, (中文(简体) ), md, (中文(简体) ), lg, (中文(简体) ), xl。 。 。 . 字体家庭、重量、期限、放松和堆放保持不变. 独立组件大小轴, 如按钮 size="md" 不受影响. 这些符号名称和CSS变量正在打破没有遗留别名的更改.

覆盖接受任何有效的 CSS 颜色 。 重塑意图还要求其 盘旋、按住、前景和微妙的象征物 填满 请检查两个主题的每个受影响状态的对比度.

框、打字和图标直接接受 CSS 颜色,包括外部自定义 属性。 传出参考文献而不是符号名称 :

import { Box, Typography, vars } from '@choco-vanille/ui';

<Box backgroundColor={vars.color.surface.main} borderColor="var(--app-border)">
  <Typography color={vars.color.primary.main}>Brand text</Typography>
</Box>;

例如,提供方对嵌入形状的覆盖 tokens={{ primary: { main: '#0f766e' } }}。只提供叶片改变. 这是对颜色对象、基于符号的道具路径、 覆盖的破解更改 并重新命名 CSS 变量; 没有释放出遗留的别名 .

许可证

麻省理工学院

版本与发布记录

@choco-vanille/ui 共发布 75 个版本,首次发布于 2026/07/20;过去 12 个月发布了 75 个版本。

版本发布日期距今
2.2.1latest2026/11/09今天
2.2.02026/11/08今天
2.1.02026/11/081 天前
2.0.02026/11/081 天前
1.21.102026/10/1921 天前
1.21.92026/10/1921 天前

关于 @choco-vanille/ui 的常见问题

@choco-vanille/ui 是什么?

与"香草取出"和"基础UI"原始人相接而成的回放19UI套.

如何安装 @choco-vanille/ui?

在项目目录运行 npm install @choco-vanille/ui,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^19.0.0)、react-dom(^19.0.0)、@iconify/react(^5.2.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@choco-vanille/ui 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@choco-vanille/ui 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@choco-vanille/ui 可以商用吗?

@choco-vanille/ui 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@choco-vanille/ui 的下载量有多少?

根据 npm 官方下载统计,@choco-vanille/ui 在 2026/10/10 – 2026/11/08 这 30 天内被下载 3,232 次,日均约 108 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@choco-vanille/ui 还在维护吗?

最新版本 2.2.1 发布于 2026/11/09(今天);至今共发布 75 个版本,其中过去 12 个月发布了 75 个;首次发布于 2026/07/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。