news 2026/8/24 17:58:56

Catppuccin Palette API 参考全解析:flavors、colorEntries 与完整类型系统一次看懂

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Catppuccin Palette API 参考全解析:flavors、colorEntries 与完整类型系统一次看懂

Catppuccin Palette API 参考全解析:flavors、colorEntries 与完整类型系统一次看懂

【免费下载链接】palette🎨 Soothing pastel theme to use within your projects!项目地址: https://gitcode.com/gh_mirrors/pal/palette

🎨Catppuccin Palette是一款为前端项目提供舒缓马卡龙配色的开源色板库,以@catppuccin/palette包发布。它的核心是导出flavorsflavorEntriescolorEntries等 API 和一套完整的 TypeScript 类型系统,让你可以在 Node、Deno 乃至任何 JS/TS 环境里以类型安全的方式取用 4 种口味(flavor)、每种 26 个颜色的 hex、rgb、hsl、oklch 值。本文带你一次看懂它的 API 参考与类型设计。

如需本地阅读源码,可执行:git clone https://gitcode.com/gh_mirrors/pal/palette

一、30 秒上手:安装与导入

📦 项目当前版本为1.8.0(见 deno.json 中的version字段),支持 npm 与 Deno 两种安装方式:

npm install @catppuccin/palette
import { flavors, flavorEntries, version } from "@catppuccin/palette";

整个库的对外入口只有一个文件 mod.ts,颜色数据则由 palette.json 提供,二者共同构成"数据 + 类型"的 API 参考核心。

二、flavors:四口味(flavors)核心入口

flavors是一个对象,键为 4 个口味名,值为该口味的完整色板(类型CatppuccinFlavors)。🐱 四个口味的设计定位如下:

口味Emoji明暗特点
latte🌻亮色唯一的浅色主题(dark: false
frappe🪩暗色低饱和、低对比
macchiato🌌暗色中饱和、中对比
mocha暗色高饱和、高对比

每个口味对象包含以下字段(定义见 mod.ts 的CatppuccinFlavor类型):

字段类型说明
namestring口味名称,如"Latte"
emojistring口味图标(需 Unicode 13.0+)
ordernumber在调色板规范中的顺序(0 起)
darkboolean是否为暗色主题
colorsCatppuccinColors26 个颜色的键值对
ansiColorsCatppuccinAnsiColors8 组终端 ANSI 颜色映射
colorEntriesEntries<CatppuccinColors>可类型安全遍历的颜色数组
ansiColorEntriesEntries<CatppuccinAnsiColors>可类型安全遍历的 ANSI 颜色数组

三、Catppuccin 的 26 色系统:Accent 与 Monochromatic

每个口味的colors都包含26 个颜色,由两类组成:

1. Accent(14 个强调色)

类型AccentName(mod.ts)列出了全部强调色名:

rosewater·flamingo·pink·mauve·red·maroon·peach·yellow·green·teal·sky·sapphire·blue·lavender

💡 这些颜色都标记accent: true,适合作为品牌色、链接色、图标高亮等。

2. Monochromatic(12 个中性色)

类型MonochromaticName(mod.ts)是从前景到背景的完整灰阶:

textsubtext1subtext0overlay2overlay1overlay0surface2surface1surface0basemantlecrust

🖼️ 使用建议:text系列用于文字,overlay系列用于悬浮/悬停元素,surface/base/mantle/crust从内到外层层加深背景,是搭建深色 UI 的标准骨架。

两类合并得到总类型:ColorName = AccentName | MonochromaticName

四、colorEntries 与 flavorEntries:类型安全的遍历器

Object.entries()在原生 TypeScript 里会丢失键的联合类型,而 Catppuccin Palette 专门定义了工具类型Entries<T>(mod.ts),为遍历场景提供"带类型的键值对数组":

flavorEntries.map(([flavorName, flavor]) => { console.log(`${flavor.emoji} ${flavor.name} is a ${flavor.dark ? "dark" : "light"} theme.`); flavor.colorEntries.map(([colorName, { hex, rgb, accent }]) => { // colorName 是 ColorName 联合类型,hex、rgb 都有完整补全 }); });
  • flavorEntries:遍历 4 个口味本身,元素形如["mocha", CatppuccinFlavor]
  • flavor.colorEntries:遍历单个口味的 26 个颜色,元素形如["rosewater", ColorFormat]
  • flavor.ansiColorEntries:遍历 8 组 ANSI 颜色,元素形如["blue", AnsiColorGroups]

🧭 一句话记忆:要按名取用用flavors.x.colors.y,要循环生成用各种*Entries

五、ColorFormat:一个颜色的四种色彩空间

ColorFormat是理解整个类型系统的钥匙(mod.ts),每个颜色对象都同时提供:

字段格式示例用途
name"Rosewater"规范中的显示名
order0在调色板规范中的排序
hex"#dc8a78"通用十六进制色值
rgb{ r: 220, g: 138, b: 120 }rgb()/rgba()字符串
hsl{ h: 10.8, s: 0.588, l: 0.667 }hsl(),前端微调很方便
oklch{ l: 0.714, c: 0.105, h: 33.1 }现代感知均匀色彩空间(1.8.0 新增)
accenttrue是否为强调色

✅ 这意味着无论是 CSS 变量、终端染色还是设计稿取色,一份数据即可满足所有场景,无需再做格式转换。

六、ANSI 终端配色:ansiColors 参考

🖥️ 做 CLI 工具时,ansiColors字段提供 8 组标准终端色(black/red/green/yellow/blue/magenta/cyan/white),每组内含normal(0–7 号色)与bright(8–15 号色)两个AnsiColorFormat对象,除上述色彩空间外还带code字段(ANSI 转义码编号)。

⚠️ 小细节:bright并不总是"更亮",而是更饱和;另外black组在暗色口味下映射的是surface1/surface2而非纯黑(可参考 mod.test.ts 中的断言逻辑)。

七、Web 前端用法:CSS 与 Sass

除了 JS 包,仓库还内置了 Web 生态的派生产物:

  • CSS 变量:docs/css.md 说明了如何引入@catppuccin/palette/style,之后即可写var(--ctp-mocha-text)rgba(var(--ctp-macchiato-base-rgb) / 0.9)这样的响应式变量。
  • Sass:docs/sass.md 提供两种用法——单口味@use "mocha"直接拿到$base$text变量;或引入聚合的catppuccin.$palette映射一次性生成 4 个口味的类。
  • 构建脚本:这些样式由 scripts/builders/npm/css.ts、scripts/builders/npm/scss.ts、scripts/builders/npm/less.ts 从同一份 JSON 自动生成,保证多格式颜色永不漂移。

八、数据来源与版本追踪

📌 所有颜色并非手写,而是由 scripts/gen_palette.ts 从每个口味的原始 hex 值出发,借助 colorjs.io 计算 rgb/hsl/oklch 后写入 palette.json(当前version: "1.8.0")。库导出的version常量与之保持一致,方便你的应用做兼容性检查。

📋 完整变更历史可查阅 CHANGELOG.md,例如 1.8.0 新增了oklch数值,1.5.0 引入了整套 ANSI 颜色,1.2.0 为每个口味加入了 emoji。

九、类型速查表

类型含义
FlavorName"latte" \| "frappe" \| "macchiato" \| "mocha"
AccentName/MonochromaticName14 个强调色 / 12 个中性色名
ColorName两者之并集,共 26 个
Colors<T>/AnsiColors<T>以颜色名为键、T为值的映射
ColorFormat单个颜色的 hex/rgb/hsl/oklch 结构
AnsiColorGroups/AnsiColorFormatANSI 组(normal+bright)/ 单个 ANSI 色
CatppuccinFlavor/CatppuccinFlavors单口味 / 四口味聚合对象
CatppuccinColors只读的完整颜色映射

总结

🎯 Catppuccin Palette 的 API 设计思路非常清晰:JSON 存数据、TS 类型保安全、Entries 助遍历、多色彩空间全覆盖。记住flavors(取用)、colorEntries(遍历)、ColorFormat(数据形态)这三件套,再配合 CSS/Sass 派生格式,你就能在任何项目中快速落地这套舒缓马卡龙配色了。

【免费下载链接】palette🎨 Soothing pastel theme to use within your projects!项目地址: https://gitcode.com/gh_mirrors/pal/palette

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 17:57:51

LLM智能体长期记忆安全:从攻击面分析到纵深防御实践

1. 从“记忆”到“软肋”&#xff1a;为什么LLM智能体的长期记忆安全成了新战场 最近和几个做AI应用落地的朋友聊天&#xff0c;大家不约而同地提到了一个痛点&#xff1a;那些能记住用户偏好、持续学习的智能助手&#xff0c;用起来是真爽&#xff0c;但心里也是真没底。一个能…

作者头像 李华
网站建设 2026/8/24 17:56:11

时间序列分析实战:从ARIMA到LSTM的核心技术与避坑指南

1. 项目概述&#xff1a;从数据噪声中捕捉时间的脉搏 在数据驱动的决策时代&#xff0c;我们每天都会接触到海量的时序数据&#xff1a;从股票市场的每分钟波动、电商平台的每日销售额、工厂设备的实时传感器读数&#xff0c;到城市每小时的空气质量指数。这些数据点按照时间顺…

作者头像 李华
网站建设 2026/8/24 17:54:36

scrcpy 5分钟把安卓投屏到电脑,免费免装App

scrcpy 5分钟把安卓投屏到电脑&#xff0c;免费免装App 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy scrcpy 是一款免费开源工具&#xff0c;把安卓手机屏幕实时投屏到电脑&#xff0c;并…

作者头像 李华
网站建设 2026/8/24 17:53:55

REPENTOGON 安装实战指南:以撒脚本扩展器一次跑通

REPENTOGON 安装实战指南&#xff1a;以撒脚本扩展器一次跑通 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON REPENTOGON 是《以撒的结合&#xff1a;忏悔》的 Lua 脚本扩展…

作者头像 李华
网站建设 2026/8/24 17:53:21

数学规划模型实战指南:从核心组件到工作流程与排坑

1. 项目概述&#xff1a;从“规划”到“模型”的思维跃迁干了这么多年项目&#xff0c;无论是排产调度、路径优化还是投资组合&#xff0c;我发现一个绕不开的核心工具就是数学规划模型。很多人一听到“数学规划”就觉得头大&#xff0c;觉得这是数学家或者算法工程师才需要懂的…

作者头像 李华