数据分析 · 新资源

Wonderflow Wanda 设计系统.

在完整的反馈阅读工作区中使用 Wanda 的真实主题角色和令牌语法,支持主题筛选、展开查看证据背景,以及持久保存到本地的笔记本。

OpenDesign 指南7 个章节33 条参考条目原始应用指南
01

Wonderflow Wanda 设计系统界面预览

筛选撰写的观察记录、查看上下文、保存笔记并切换 Wanda 主题。

阅读反馈并创建研究笔记打开完整示例
原始 HTML,采用原生 Wanda 16.0.0 主题 CSS;不使用 React 组件运行时。· 实现参考
02

Wonderflow Wanda 设计系统设计参考

@wonderflow/themes 16.0.0 浅色/深色 JSON 和 @wonderflow/tokens 16.0.0 Web 设计令牌 JSON,均已对照公开开发者文档验证。

包含浅色和深色值的主题角色

来源
名称 / 规则值 / 配置用途
--global-foregroundlight hsl(221 10% 30%) / dark hsl(220 16% 85%)反馈示例中使用的成对主题角色。
--global-backgroundlight hsl(0 0% 100%) / dark hsl(0 0% 0%)反馈示例中使用的成对主题角色。
--global-interactive-textlight hsl(214 66% 44%) / dark hsl(206 72% 67%)反馈示例中使用的成对主题角色。
--cta-defaultlight hsl(0 100% 44%) / dark hsl(0 100% 44%)反馈示例中使用的成对主题角色。
--cta-darklight hsl(0 100% 38%) / dark hsl(0 100% 38%)反馈示例中使用的成对主题角色。
--cta-foregroundlight hsl(0 0% 100%) / dark hsl(0 0% 100%)反馈示例中使用的成对主题角色。
--dimmed-0light hsl(210 20% 98%) / dark hsl(225 11% 7%)反馈示例中使用的成对主题角色。
--dimmed-1light hsl(220 19% 91%) / dark hsl(218 11% 14%)反馈示例中使用的成对主题角色。
--dimmed-2light hsl(220 16% 85%) / dark hsl(219 13% 22%)反馈示例中使用的成对主题角色。
--highlight-green-backgroundlight hsl(149 100% 91%) / dark hsl(166 100% 13%)反馈示例中使用的成对主题角色。
--highlight-green-foregroundlight hsl(156 100% 23%) / dark hsl(145 76% 75%)反馈示例中使用的成对主题角色。
--highlight-red-backgroundlight hsl(343 100% 96%) / dark hsl(350 100% 15%)反馈示例中使用的成对主题角色。
--highlight-red-foregroundlight hsl(351 92% 37%) / dark hsl(351 100% 81%)反馈示例中使用的成对主题角色。
--highlight-yellow-backgroundlight hsl(60 100% 89%) / dark hsl(22 100% 19%)反馈示例中使用的成对主题角色。
--highlight-yellow-foregroundlight hsl(25 100% 34%) / dark hsl(38 100% 77%)反馈示例中使用的成对主题角色。

间距基元

来源
名称 / 规则值 / 配置用途
--space-40.250rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--space-80.500rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--space-161.000rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--space-241.500rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--space-322.000rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--space-483.000rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。

圆角基元

来源
名称 / 规则值 / 配置用途
--radius-40.250rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--radius-80.500rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--radius-161.000rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--radius-241.500rem在构建时通过 token() 使用,或导入 CSS 自定义属性文件。

断点基元

来源
名称 / 规则值 / 配置用途
--breakpoint-extra-small30em在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--breakpoint-small48em在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--breakpoint-medium60em在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--breakpoint-large80em在构建时通过 token() 使用,或导入 CSS 自定义属性文件。

时长基元

来源
名称 / 规则值 / 配置用途
--duration-1000.10s在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--duration-2000.20s在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--duration-2500.25s在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
--duration-3000.30s在构建时通过 token() 使用,或导入 CSS 自定义属性文件。
03

Wonderflow Wanda 设计系统完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-wonderflow-wanda.md

完整指导、实现起点和源代码链接。

下载指南

Wonderflow Wanda 设计系统基元、主题与 CSS 用法

理解两层颜色

Wanda 的基元颜色设计令牌采用 HSL 通道值,例如 214 66% 44%,不带 hsl() 包装。主题角色(例如 --global-interactive-text)则会解析为完整的 CSS 颜色。再次包装完整的主题值会导致无效;基元通道值若省略 hsl(),同样无效。表格分别列出完整的角色值和常规尺寸。

摘自本 OpenDesign 指南

有意选择构建时或运行时设计令牌

文档中介绍的 token() 写法由 Wanda 的 PostCSS 配置处理,并非浏览器 CSS 函数。普通 HTML 项目也可以导入已发布的 tokens.css,并使用 var()。可运行的示例使用已发布的 themes.css 和标准自定义属性,因此不需要隐藏的 PostCSS 构建步骤。

Wonderflow Wanda 设计系统浅色和深色主题角色

一并切换语义表面

Wanda 提供浅色和深色主题映射。示例会更改根元素上的 data-theme 属性,由主题样式表统一替换前景色、表面、边框和高亮角色。选择内容和已保存笔记不会改变,因为主题切换属于呈现状态,不会重置研究状态。

将 CTA 角色留给主要本地操作

红色 CTA 配色只用于查看已保存笔记。主题标签使用中性的高亮角色,情感标签则使用绿色、黄色和红色配色。每个标签还会明确写出情感含义,因此即使用户对颜色的感知不同,也不会丢失信息。示例不会为每张卡片另造一套强调色。

Wonderflow Wanda 设计系统反馈内容与证据边界

将观察记录与解读分开

每张卡片都包含一条撰写的观察记录和一条可展开的上下文说明。上下文说明会描述示例展示的内容,并明确避免声称其频率或严重程度。真实的反馈工具应保留来源与分析之间的界限,而不是把单条引述变成缺乏依据的趋势结论。

不要用装饰捏造证据

此示例没有捏造的客户身份、星级评分或模型置信度分数。五条撰写的笔记足以展示筛选、展开说明和保存状态。在实际产品中,研究来源信息和访问规则应纳入数据契约;再精美的引述卡片也无法替代这些内容。

Wonderflow Wanda 设计系统筛选与笔记本状态

同时应用主题和情感条件

两个原生选择框会共同应用 AND 筛选条件。若组合条件没有匹配的笔记,界面会显示明确的恢复提示和重置操作。结果数量会注明分母为五条撰写的笔记,而不会让人误以为数量来自更大的数据集。所有这些实现细节都能在完整源码中查看。

让已保存笔记不受可见性影响

Wonderflow Wanda 设计系统卡片、展开说明与响应式布局

通过间距区分证据与控件

宽屏上的每张笔记卡片采用 16px 圆角和 24px 内边距。标签用于标明主题,引述使用较大的字号,可展开的上下文说明则位于保存操作之前。笔记本置于笔记旁边一处更克制的界面表面上。这些是使用 Wanda 数值实现的原创布局选择,并不意味着 Wanda 提供了原生研究卡片组件。

保持移动端阅读顺序不变

在 768px 时,笔记本区域会移至观察内容之后,卡片内边距缩小至 16px。主题和情感倾向控件会变为全宽行。展开的上下文仍处于文档流中,不会覆盖或遮挡其他笔记。卡片没有固定高度,因此较长的引述也能保持易读。

Wonderflow Wanda 设计系统原生 React 设置与 HTML 边界

了解 Wanda 完整工具链

官方安装方案使用 react-components、themes、symbols 和 tokens,并由 @wonderflow/config 提供组件 CSS 所需的 PostCSS 配置。React 入口会导入 core.css 和 themes 包。只安装 react-components 并假定所有主题角色均已就绪,属于不完整的集成。官方安装页面还提醒,10.6 以上版本与 Tailwind 存在兼容性问题。

使用此示例,但不要声称使用了原生组件

运行中的预览使用 Wanda 16.0.0 主题 CSS 和原始语义 HTML。它没有运行 React Button、Select 或折叠组件。我们有意明确呈现这一边界:完整源代码可通过静态服务器运行;若要迁移到原生 React,则必须核实当前组件 API 和构建配置。

Wonderflow Wanda 设计系统完整源代码与 AI Agent 审查

复现实际预览

安装指定版本的主题包,将生成的 themes.css 复制到所提供的 index.html 和 wanda.css 文件旁边,然后启动目录服务。源代码包含全部五条笔记、筛选、展开/收起、保存状态和反馈。预览将同一份样式表打包在本地,以避免运行时依赖网络。

  1. 安装 @wonderflow/themes 16.0.0,并复制生成的 CSS。
  2. 保存完整的 index.html 和 wanda.css 文件。
  3. 筛选至无结果,重置,然后保存一条笔记。
  4. 切换主题,并确认笔记本内容保持完整。

检查失败状态与过渡状态

请让 AI Agent 保留筛选结果分母、无结果时的恢复方式、已保存笔记的持久性,以及审查结果失效时的清除逻辑。检查两种外观和一条较长的展开笔记。本地审查仅对选定样本进行总结;若没有单独的实现和证据来源,不得将其标称为 AI 分析或客户验证。

  • 不要将 token() 当作运行时 CSS。
  • 区分原始 HSL 通道与完整主题颜色。
  • 区分编写的样本与真实研究证据。

Wonderflow Wanda 设计系统组件示例

index.html — 完整反馈工作区

原始语义 HTML 和全部应用状态。使用复制的 Wanda 主题样式表。

html
<!doctype html><html lang="en" data-theme="light"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Feedback study</title><link rel="stylesheet" href="wanda-theme.css"><link rel="stylesheet" href="wanda.css"><body><main><header><div><span class="eyebrow">PRODUCT RESEARCH / AUTHORED SAMPLE NOTES</span><h1>Explore the feedback</h1><p>Read individual observations before turning a theme into a decision.</p></div><button id="theme" aria-pressed="false">Dark theme</button></header><div class="filters"><label>Topic <select id="topic" aria-label="Topic"><option value="all">All topics</option><option>Setup</option><option>Search</option><option>Export</option></select></label><label>Sentiment <select id="sentiment" aria-label="Sentiment"><option value="all">All sentiments</option><option value="positive">Positive</option><option value="mixed">Mixed</option><option value="negative">Negative</option></select></label><button id="reset">Reset filters</button></div><div class="workspace"><section><div class="section-heading"><h2>Sample observations</h2><span id="count" role="status"></span></div><div id="notes"></div><div id="empty" hidden><h3>No observations match</h3><p>Clear a filter to see the authored examples again.</p></div></section><aside><h2>Research notebook</h2><p>Save observations to keep them together while comparing topics.</p><ul id="saved"></ul><p id="hint">No observations saved yet.</p><button class="cta" id="review">Review saved notes</button><p id="result" role="status"></p></aside></div><footer>Original interface using Wanda 16.0.0 theme and token values. All quotations are written for this specimen, not real customer feedback or research findings.</footer></main>
<script>
const data=[{id:1,topic:'Setup',sentiment:'positive',quote:'The first checklist made it clear what I needed to prepare.',context:'Authored onboarding observation; one sample, not a measured trend.'},{id:2,topic:'Search',sentiment:'negative',quote:'I could not tell whether the filter was still active after I changed the search.',context:'Authored state-visibility observation; investigate with actual users.'},{id:3,topic:'Export',sentiment:'mixed',quote:'The file was useful, but I wanted to check the included columns first.',context:'Authored export observation; no frequency or severity estimate.'},{id:4,topic:'Setup',sentiment:'mixed',quote:'I understood the steps but needed an explanation of one unfamiliar term.',context:'Authored terminology observation; the term is intentionally unspecified.'},{id:5,topic:'Search',sentiment:'positive',quote:'Seeing a count beside each topic helped me narrow the list.',context:'Authored topic-navigation observation; not an endorsement.'}];const saved=new Set();const $=id=>document.getElementById(id);function render(){const visible=data.filter(n=>($('topic').value==='all'||n.topic===$('topic').value)&&($('sentiment').value==='all'||n.sentiment===$('sentiment').value));$('count').textContent=visible.length+' of '+data.length+' notes';$('empty').hidden=!!visible.length;$('notes').replaceChildren(...visible.map(n=>{let a=document.createElement('article');a.innerHTML=`<div class="tags"><span>${n.topic}</span><span class="${n.sentiment}">${n.sentiment}</span></div><blockquote>${n.quote}</blockquote><details><summary>Read sample context</summary><p>${n.context}</p></details><button class="save" aria-pressed="${saved.has(n.id)}" aria-label="${saved.has(n.id)?'Remove':'Save'} note ${n.id}">${saved.has(n.id)?'Saved to notebook':'Save to notebook'}</button>`;a.querySelector('.save').onclick=()=>{saved.has(n.id)?saved.delete(n.id):saved.add(n.id);$('result').textContent='';render()};return a}));$('saved').replaceChildren(...data.filter(n=>saved.has(n.id)).map(n=>{let l=document.createElement('li');l.textContent=n.topic+': '+n.quote;return l}));$('hint').hidden=!!saved.size}
$('topic').onchange=render;$('sentiment').onchange=render;$('reset').onclick=()=>{$('topic').value='all';$('sentiment').value='all';render()};$('review').onclick=()=>{$('result').textContent=saved.size?`${saved.size} authored notes ready for local review. No analysis has been generated.`:'Save a note before reviewing.'};$('theme').onclick=()=>{const dark=$('theme').getAttribute('aria-pressed')!=='true';$('theme').setAttribute('aria-pressed',dark);document.documentElement.dataset.theme=dark?'dark':'light'};render();
</script>
</body></html>

代码参考

  • 将其保存为 index.html,并与 wanda.css 和 wanda-theme.css 放在一起。

wanda.css — 使用真实主题角色进行组合

响应式卡片和笔记本布局使用已发布的自定义属性。

css
*{box-sizing:border-box}body{margin:0;background:var(--global-background);color:var(--global-foreground);font:16px/1.5 system-ui,sans-serif}main{padding:32px}header{display:flex;align-items:start;justify-content:space-between;gap:24px;border-bottom:1px solid var(--dimmed-1);padding-bottom:24px}h1{font-size:32px;line-height:1.25;margin:8px 0 16px}h2{font-size:20px;margin:0}h3{font-size:18px}.eyebrow,footer{font-size:12px}p{margin:8px 0 16px}.filters{display:flex;flex-wrap:wrap;gap:16px;align-items:center;margin:24px 0}label{display:flex;gap:8px;align-items:center}button,select{background:var(--global-background);color:var(--global-foreground);font:inherit;padding:8px 16px;min-height:44px;border:1px solid var(--dimmed-2);border-radius:8px}button{cursor:pointer}.workspace{display:grid;grid-template-columns:1.7fr 1fr;gap:32px}.section-heading{display:flex;justify-content:space-between;gap:16px;margin-bottom:16px}#count{font-size:14px}article{padding:24px;border:1px solid var(--dimmed-1);border-radius:16px;margin-bottom:16px}.tags{display:flex;gap:8px;font-size:12px}.tags span{padding:4px 8px;background:var(--highlight-gray-background);color:var(--highlight-gray-foreground);border-radius:4px}.tags .positive{background:var(--highlight-green-background);color:var(--highlight-green-foreground)}.tags .negative{background:var(--highlight-red-background);color:var(--highlight-red-foreground)}.tags .mixed{background:var(--highlight-yellow-background);color:var(--highlight-yellow-foreground)}blockquote{margin:16px 0;font-size:20px;line-height:1.4}details{font-size:14px;margin:16px 0}summary{cursor:pointer;color:var(--global-interactive-text)}.save{font-size:14px}.save[aria-pressed=true]{border-color:var(--global-interactive-text);color:var(--global-interactive-text)}aside{background:var(--dimmed-0);padding:24px;border-radius:16px;align-self:start}aside p,aside li{font-size:14px}aside ul{padding-left:20px}aside li{margin:16px 0}.cta{background:var(--cta-default);color:var(--cta-foreground);border-color:var(--cta-default)}.cta:hover{background:var(--cta-dark)}button:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid var(--global-interactive-text);outline-offset:3px}footer{border-top:1px solid var(--dimmed-1);padding-top:16px;margin-top:32px}#empty{padding:24px;background:var(--dimmed-0);border-radius:16px}[hidden]{display:none!important}@media(max-width:767px){main{padding:16px}.workspace{grid-template-columns:1fr;gap:24px}header{display:block}header button{margin-top:8px}.filters label{width:100%;justify-content:space-between}.filters select{flex:1}article{padding:16px}h1{font-size:28px}.section-heading{align-items:center}}

代码参考

  • 主题值来自已安装的包,而非人为构造的调色板。
04

Wonderflow Wanda 设计系统 AI Agent 设置

实现起点

本地预览打包了相同的已发布主题 CSS。HTML 应用无需 PostCSS 或 React。

sh
npm install @wonderflow/[email protected]
cp node_modules/@wonderflow/themes/dist/themes.css wanda-theme.css
# Save the complete index.html and wanda.css examples beside that file.
python3 -m http.server 8080

适用于你项目的提示词

Agent 提示词
使用完整的原始 HTML 示例,构建一个采用 Wanda 16.0.0 主题角色的反馈笔记本。保留 AND 筛选、明确显示的五条笔记总数、展开的上下文、已保存状态的持久性,以及过期审查结果的清除逻辑。将构建时使用的 token() 与 CSS 变量分开,并且绝不要把编写的观察内容呈现为客户研究。
05

Wonderflow Wanda 设计系统来源与范围

一项使用 Wanda themes 和 tokens 16.0.0 的 OpenDesign 应用研究。界面为原创 HTML,并非 Wanda 原生 React 运行时。所有引述均为编写的样本内容,不代表客户证据。