政府与公共服务 · 新资源

Alberta 设计系统.

使用 Alberta 的原生 Web Components 与已发布的设计令牌,构建一份完整的准备清单,具备无障碍选项、派生进度和诚实的审核反馈。

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

Alberta 设计系统 界面预览

选择彼此独立的任务,查看进度,进行本地审阅,并清除原生控件。

查看准备清单打开完整示例
@abgov/web-components 3.0.0 中的原生 goa-checkbox 和 goa-button;沿用应用原有状态,并回退到 Arial。 · 实现参考
02

Alberta 设计系统 设计参考

@abgov/web-components 3.0.0 中实际导出的浅色主题 CSS;未捆绑授权的 Acumin 字体。

浅色主题的交互与状态角色

来源
名称 / 规则值 / 配置用途
--goa-color-interactive-default#006dcc 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-interactive-hover#045092 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-interactive-focus#006dcc 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-text-defaultvar(--goa-color-greyscale-black)这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-greyscale-100#f2f0f0 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-emergency-default#da291c 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-success-default#006f4c 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。
--goa-color-success-light#d8f7e6 这些值取自深色主题覆盖样式之前固定版本 3.0.0 的样式表。请根据预期状态使用语义角色。

间距与圆角规格

来源
名称 / 规则值 / 配置用途
--goa-space-3xs.125rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-2xs.25rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-xs.5rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-s.75rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-m1rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-l1.5rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-xl2rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-2xl3rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-space-3xl4rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-border-radius-xs.25rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-border-radius-s.375rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-border-radius-m.5rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。
--goa-border-radius-l.625rem已发布的间距或圆角基础令牌。应用采用双栏布局的断点是自行设定的布局选择。

排版基础令牌

来源
名称 / 规则值 / 配置用途
--goa-font-family-sansacumin-variable, helvetica-neue, arial, sans-serif此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-2.875rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-31rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-41.125rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-61.5rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-82rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-size-92.5rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-line-height-31.5rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-line-height-62.5rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-line-height-73rem此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-weight-regular400此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
--goa-font-weight-bold700此处记录了官方导出的字体系列;公开示例有意回退到 Arial,不会重新分发受授权限制的 Acumin 字体文件。
03

Alberta 设计系统 完整指南

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

DESIGN-alberta.md

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

下载指南

Alberta 设计系统 Web 组件与版本边界

从实际运行的实现开始

此示例运行 @abgov/web-components 3.0.0。导入其 JavaScript 会注册自定义元素,导入 index.css 则会提供全局设计令牌层。原始 HTML API 使用 goa 前缀元素;React 示例使用 Goab 封装组件,其事件接口有所不同。不要将 React 中的 onChange 属性直接复制到原始自定义元素上。

摘自本 OpenDesign 指南

区分软件包版本与设计版本

软件包版本和组件样式版本不是同一个字段。有些控件规定了独立的 version 属性。此示例保留固定软件包版本的默认值,不会在引用另一组设计令牌值时,悄然切换样式版本。表格记录了此构建实际使用的浅色主题导出值。

Alberta 设计系统 角色、节奏与排版

用颜色表达状态

主要操作和进度强调色使用交互默认角色。审核未通过时,显示紧急提示文字和有用的操作说明;本地审核完成后,则使用成功色作为辅助界面表面。成功色表示本地审核状态,并不代表已向政府服务提交申请。文字标签和数字计数也传达相同信息,不依赖颜色来表达。

说明字体边界

已发布的字体系列以 Acumin 开头,样式表还包含托管在外部的字体声明。预览使用明确指定的 Arial 回退字体,并移除这些远程字体请求;它不会重新分发 Acumin。设计令牌参考保留了真实的字体系列名称,以便获授权的服务加载已批准的品牌字体。从回退字体切换到授权字体后,请重新检查文本换行情况。

Alberta 设计系统 复选框标签与说明

彼此独立的任务使用独立选项

四个原生 goa-checkbox 控件用于表示可按任意顺序审核的准备事项。每个控件都有唯一名称、可见文本,以及说明其用途的描述。使用单选控件会暗示只能选择一项,不符合此任务的实际情况。实际服务必须以经过调研的说明替换虚构的准备内容。

  • 为每个复选框设置稳定且唯一的名称。
  • 保持可见标签简洁,描述则应具体明确。
  • 只有在多选有意义时才使用独立复选框。

读取自定义事件载荷

原始 Web 组件会触发 _change 事件,并在 event.detail 中包含 name、checked 和 value。应用使用 checked 布尔值更新所选索引的 Set。它不会根据标签文本推断状态,也不要求用户点击尺寸很小的内部输入框。因此,点击可见标签和使用键盘选择会触发相同的状态转换。

Alberta 设计系统 进度与审核状态

根据所选项计算进度

计数和原生 HTML 进度元素都由同一个 Set 计算得出。选择两项时会显示四项中的两项;清除控件后,两个指示器都会归零。进度元素带有无障碍名称,旁边的状态文本则明确显示计数。此处不会模拟上传、网络请求或完成计时器。

编辑后使旧的审核摘要失效

Alberta 设计系统 响应式清单布局

确保任务与上下文清晰易读

桌面布局将清单放在辅助进度面板旁边。窄屏时,面板会按文档顺序排在控件之后。任务标签保持易读的字号,描述会自然换行并显示在标签下方。侧边面板的蓝色线条起到克制的指引作用,不会造成另一个相互争夺注意力的操作。

保留交互目标

组件库提供复选框和按钮的交互样式。应用 CSS 负责控制间距和周围的网格布局,不会替换原生的点击区域。两个操作按钮在小屏幕上可以换行。审核是主要操作;清除所选项在视觉上较次要,不会让人误以为它是实际应用中的下一步。

Alberta 设计系统 完整清单实现

运行完整源码

创建一个 Vite vanilla 项目,安装固定版本的 web-components 软件包,并保存提供的入口文件和 CSS。保留根挂载元素。JavaScript 包含全部四项自定义任务、原生事件绑定、计算得出的计数,以及审核和重置状态转换。无需账户、私有端点或外部数据集。

  1. 安装 @abgov/web-components 3.0.0,并导入 JavaScript 和 index.css。
  2. 保存完整入口文件和带有根挂载元素的 alberta.css。
  3. 选择多个任务并检查计算得出的进度。
  4. 检查、编辑所选项,然后清除所有原生选项。

将组件事件与清单规则分开

以原生 _change 事件中的 event.detail.checked 作为选择状态的唯一依据。React 封装组件的属性与原生 goa-checkbox 事件属于两套不同的接口;若在二者之间直接复制处理函数而不调整其载荷,进度显示就可能与界面上可见的复选框不同步。

清单中的“至少选择一项”属于应用层面的策略,而非复选框的内置规则。请从同一个选择集合(Set)推导条目数量、进度值和评审文本。执行“清除所选”时,除重置该 Set 外,还要重置每个自定义元素的 checked 属性。编辑某个选择时应立即作废旧评审,使其无法描述先前的选择。真实的服务流程可能允许清单未填写完整;请先确定这一策略,再把进度设为强制门禁。

Alberta 设计系统组件示例

main.js —— 完整的原生清单

涵盖全部注册逻辑、预置任务内容、选择处理以及评审与重置的状态转换。

javascript
import '@abgov/web-components';
import '@abgov/web-components/index.css';
import './alberta.css';
document.getElementById('root').innerHTML=`<main><p class="eyebrow">ALBERTA DESIGN SYSTEM / COMPONENT STUDY</p><h1>Prepare a submission</h1><p class="lead">Track an original sample checklist. These preparation steps are illustrative, not eligibility rules for a government program.</p><div class="workspace"><section aria-labelledby="tasks-heading"><h2 id="tasks-heading">Your preparation checklist</h2><p>Check each item when you have reviewed it.</p><div id="tasks"></div><div class="actions"><goa-button id="review">Review checklist</goa-button><goa-button id="reset" type="tertiary">Clear selections</goa-button></div><p id="error" role="alert" hidden>Select at least one item before reviewing.</p><section id="result" hidden tabindex="-1" aria-labelledby="result-heading"><h3 id="result-heading">Local review</h3><p id="result-text"></p></section></section><aside><p class="eyebrow">YOUR PROGRESS</p><strong id="total">0 of 4</strong><progress id="progress" value="0" max="4" aria-label="Reviewed preparation items"></progress><p id="status" role="status">No items reviewed yet.</p><h3>What happens next</h3><p>Your selections stay only in this page. Review summarizes your progress; it does not submit an application.</p><ul><li>Use the real service’s current instructions.</li><li>Do not enter personal information in a public example.</li><li>Recheck the summary after changing a selection.</li></ul></aside></div></main>`;
const labels=['Read the service instructions','Identify questions to ask','Check your own supporting information','Choose a time to complete the task'];const selected=new Set();const $=id=>document.getElementById(id);const controls=labels.map((text,i)=>{const el=document.createElement('goa-checkbox');el.setAttribute('name','step-'+i);el.setAttribute('text',text);el.setAttribute('description',['Understand the actual task before collecting information.','Record anything that needs clarification from the service.','Use the real service’s requirements, not this sample list.','Leave enough time to review the information you provide.'][i]);el.addEventListener('_change',e=>{e.detail.checked?selected.add(i):selected.delete(i);update()});$('tasks').append(el);return el});function update(){$('total').textContent=selected.size+' of 4';$('progress').value=selected.size;$('status').textContent=selected.size===4?'All sample items reviewed.':selected.size+' sample items reviewed.';$('result').hidden=true;$('error').hidden=true}$('review').addEventListener('_click',()=>{if(!selected.size){$('error').hidden=false;controls[0].shadowRoot.querySelector('input')?.focus();return}$('result-text').textContent=selected.size+' reviewed: '+[...selected].sort().map(i=>labels[i]).join('; ')+'. This is a local summary only.';$('result').hidden=false;$('result').focus()});$('reset').addEventListener('_click',()=>{selected.clear();controls.forEach(el=>el.setAttribute('checked','false'));update()});

代码参考

  • 原生自定义元素使用 _change 与 _click 事件;切勿替换为 React 封装组件的回调。

alberta.css —— 任务布局与显式字体回退

围绕原生控件构建的原创响应式版式。

css
main{padding:32px;max-width:1200px;margin:auto}.eyebrow{font-size:14px;letter-spacing:.06em;font-weight:700}h1{margin:16px 0 24px}.lead{max-width:65ch}.workspace{display:grid;grid-template-columns:1.5fr 1fr;gap:48px;margin-top:40px}h2{margin-top:0}goa-checkbox{display:block;margin-bottom:24px}.actions{display:flex;flex-wrap:wrap;gap:16px;margin-top:32px}aside{padding:24px;background:var(--goa-color-greyscale-100);border-top:4px solid var(--goa-color-interactive-default);align-self:start}aside strong{display:block;font:var(--goa-typography-heading-l)}progress{display:block;width:100%;height:12px;margin:24px 0;accent-color:var(--goa-color-interactive-default)}aside li{margin:12px 0}#error{margin-top:24px;color:var(--goa-color-emergency-default)}#result{margin-top:24px;padding:24px;border-left:4px solid var(--goa-color-success-default);background:var(--goa-color-success-light)}#result h3{margin-top:0}[hidden]{display:none!important}@media(max-width:760px){main{padding:20px}.workspace{grid-template-columns:1fr;gap:32px}h1{font-size:32px;line-height:1.2}}

/* Public specimen font fallback; load approved Acumin only where licensed. */
:root{--goa-font-family-sans:Arial,sans-serif;--goa-font-family-mono:monospace;}

代码参考

  • 本地预览省略了未使用的外部字体引入。完整包的样式表可能包含外部字体声明;此处通过覆盖声明将本研究限定为 Arial。
04

Alberta 设计系统 Agent 设置

实现起点

这些锁定版本的原生控件已在本地浏览器中测试,未接入提交后端。

sh
npm create vite@latest alberta-checklist -- --template vanilla
cd alberta-checklist
npm install
npm install @abgov/[email protected]
# Replace src/main.js and add src/alberta.css. Keep <div id="root"></div>.
npm run dev

适用于你项目的提示词

Agent 提示词
使用 web-components 3.0.0、真实的语义化 CSS 角色以及明确的字体授权边界来构建 Alberta 准备清单。使用原生复选框的描述,从选择状态推导进度,拒绝空评审,在编辑后清除过时摘要并重置实际控件。所有结果均保留在本地,预置任务仅作示例说明。
05

Alberta 设计系统 来源与范围

这是一项 OpenDesign 组件研究,运行 Alberta web components 3.0.0,并显式回退至 Arial 字体。预置任务均为虚构内容,不构成政府资格认定或提交要求。