agentcss 0.11.10 → 0.11.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/01-tokens/page.css +79 -0
- package/02-primitives/button/demo.html +5 -15
- package/02-primitives/card/demo.html +3 -13
- package/02-primitives/choice/demo.html +1 -0
- package/02-primitives/combobox/demo.html +38 -0
- package/02-primitives/date-range/demo.html +36 -0
- package/02-primitives/input/demo.html +5 -16
- package/02-primitives/popover/README.md +15 -0
- package/02-primitives/popover/demo.html +45 -0
- package/02-primitives/progress/demo.html +25 -0
- package/02-primitives/select/demo.html +46 -0
- package/02-primitives/skeleton/demo.html +28 -0
- package/03-patterns/content/demo.html +20 -0
- package/03-patterns/drawer/demo.html +36 -0
- package/03-patterns/dropdown/demo.html +39 -0
- package/03-patterns/list/demo.html +56 -0
- package/03-patterns/nav/demo.html +38 -1
- package/03-patterns/pagination/demo.html +40 -0
- package/03-patterns/reveal/demo.html +24 -0
- package/03-patterns/states/demo.html +25 -1
- package/03-patterns/tooltip/demo.html +27 -0
- package/03-patterns/tree/demo.html +43 -0
- package/04-recipes/analysis-report/demo.html +38 -0
- package/04-recipes/data-showcase/README.md +1 -0
- package/04-recipes/data-showcase/demo.html +29 -0
- package/04-recipes/detail-page/demo.html +28 -0
- package/04-recipes/report/demo.html +24 -0
- package/04-recipes/table/README.md +22 -0
- package/04-recipes/table/demo.html +39 -0
- package/CHANGELOG.md +131 -0
- package/CONTRIBUTING.md +11 -1
- package/ai/components.json +38 -10
- package/dist/01-tokens/page.css +1 -1
- package/dist/COSTS.md +1 -1
- package/index.html +1 -1
- package/package.json +1 -1
|
@@ -102,6 +102,28 @@ python -m http.server 8000
|
|
|
102
102
|
# http://127.0.0.1:8000/04-recipes/table/demo.html
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
## 配色:与本库 `list` 的约定**不同**(已知,未统一)
|
|
106
|
+
|
|
107
|
+
| 组件 | 类名 | 约定 |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| `table` | `num--pos` / `num--neg` | **会计约定**:正 = 绿、负 = 红(负数即"红字") |
|
|
110
|
+
| `list` | `list__value--up` / `--down` | **市场约定**:涨 = 红、跌 = 绿(A 股惯例) |
|
|
111
|
+
|
|
112
|
+
两种约定并存不是笔误,是因为两处的数是两种东西:
|
|
113
|
+
|
|
114
|
+
- 表格里多是**量**(营收、毛利率、净利润)—— 负数是"红字",会计惯例;
|
|
115
|
+
- 列表里多是**涨跌**(涨跌幅、日变动)—— A 股惯例是涨红跌绿。
|
|
116
|
+
|
|
117
|
+
⚠️ **真正的麻烦在这里**:把「涨跌幅」这一列塞进 `table` 时,两种约定会打架 ——
|
|
118
|
+
负的涨跌幅被渲染成红色,读者第一眼读成"涨"。目前**没有解**:
|
|
119
|
+
|
|
120
|
+
- 加一套 `num--up` / `num--down`(市场约定)是候选,但那会让 `table` 有四组颜色类;
|
|
121
|
+
- 或者由调用方显式指定语义(`data-polarity="market"`),但那要改契约。
|
|
122
|
+
|
|
123
|
+
在决定之前,这一条就写在这儿 —— 一个库里有两种配色约定而不说明,
|
|
124
|
+
比约定本身选错更糟。
|
|
125
|
+
|
|
126
|
+
|
|
105
127
|
## 反例
|
|
106
128
|
|
|
107
129
|
- ❌ **靠数值大小猜语义** —— 不能用"小于 1 就乘 100"。`0.25` 是比例还是普通测量值,
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
<style>
|
|
15
15
|
.toolbar { display: flex; gap: var(--sp-2); margin: 0 0 var(--sp-3); flex-wrap: wrap; }
|
|
16
16
|
.section-note { margin: 0 0 var(--sp-3); }
|
|
17
|
+
.tb-demo { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
|
|
18
|
+
.tb-demo th, .tb-demo td { padding: var(--sp-2) var(--sp-3); text-align: start;
|
|
19
|
+
border-bottom: 1px solid var(--border-decor); }
|
|
20
|
+
.tb-demo th { font-weight: 500; color: var(--text-secondary); font-size: var(--fs-xs); }
|
|
21
|
+
/* 反例专用:把库自动生成的 +/− 关掉,只留颜色(这就是"只靠红绿") */
|
|
22
|
+
.tb-bad .num--pos::before, .tb-bad .num--neg::before { content: none; }
|
|
17
23
|
</style>
|
|
18
24
|
</head>
|
|
19
25
|
<body class="page">
|
|
@@ -86,6 +92,39 @@
|
|
|
86
92
|
</p>
|
|
87
93
|
<div id="escproof"></div>
|
|
88
94
|
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
<h2 class="rule-bottom">对比:错写法 vs 本库写法</h2>
|
|
98
|
+
<div class="cmp">
|
|
99
|
+
<div class="cmp__pane cmp__bad" data-bad="td.num--pos|glyphs|=5">
|
|
100
|
+
<h3>❌ 常见写法:只靠红绿 + 连字符</h3>
|
|
101
|
+
<div class="table tb-bad" aria-hidden="true">
|
|
102
|
+
<table class="tb-demo">
|
|
103
|
+
<thead><tr><th scope="col">板块</th><th scope="col" class="num">涨跌幅</th></tr></thead>
|
|
104
|
+
<tbody>
|
|
105
|
+
<tr><td>半导体</td><td class="num num--neg">-1.05%</td></tr>
|
|
106
|
+
<tr><td>白酒</td><td class="num num--pos">3.21%</td></tr>
|
|
107
|
+
<tr><td>光伏</td><td class="num num--neg">-12.40%</td></tr>
|
|
108
|
+
</tbody>
|
|
109
|
+
</table>
|
|
110
|
+
</div>
|
|
111
|
+
<p class="cmp__why">涨的那行没有 <code>+</code>,跌的用连字符 <code>-</code>:灰度打印、色觉障碍、以及"只扫一列符号"的读法,全都不成立;连字符还比真减号窄,一列数字的个位对不齐。</p>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="cmp__pane cmp__good" data-good="td.num--pos|glyphs|>=6">
|
|
114
|
+
<h3>✅ 本库:符号 + 真减号 <code>−</code></h3>
|
|
115
|
+
<div class="table" aria-hidden="true">
|
|
116
|
+
<table class="tb-demo">
|
|
117
|
+
<thead><tr><th scope="col">板块</th><th scope="col" class="num">涨跌幅</th></tr></thead>
|
|
118
|
+
<tbody>
|
|
119
|
+
<tr><td>半导体</td><td class="num num--neg">1.05%</td></tr>
|
|
120
|
+
<tr><td>白酒</td><td class="num num--pos">3.21%</td></tr>
|
|
121
|
+
<tr><td>光伏</td><td class="num num--neg">12.40%</td></tr>
|
|
122
|
+
</tbody>
|
|
123
|
+
</table>
|
|
124
|
+
</div>
|
|
125
|
+
<p class="cmp__why">颜色是<b>辅助</b>,符号才是信息(WCAG 1.4.1)。符号由 <code>.table .num--pos::before</code> / <code>.num--neg::before</code> 生成 —— 数据里不用手拼 <code>+</code>,也就不会有人漏掉;减号用的是 U+2212,不是连字符。</p>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
89
128
|
</main>
|
|
90
129
|
|
|
91
130
|
<script>
|
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,137 @@
|
|
|
16
16
|
|
|
17
17
|
(无)
|
|
18
18
|
|
|
19
|
+
## [0.11.12] - 2026-10-29
|
|
20
|
+
|
|
21
|
+
**反例从「看得见」走到「量得出」**。0.11.11 把 24 个对照块摆了出来,
|
|
22
|
+
但那只证明了「块在」—— 块里那两栏到底有没有差别,没人验过。
|
|
23
|
+
这一版让每栏写一条数字断言:门禁量它,并且要求两栏的断言**互斥**。
|
|
24
|
+
|
|
25
|
+
### 抓到的真问题:三处「块在、标题对、反例不成立」
|
|
26
|
+
|
|
27
|
+
- `03-patterns/nav` —— 反例栏那条长标题**根本没换行**。`.toc__link` 自带
|
|
28
|
+
`white-space: nowrap`,长标题只是被 `overflow: hidden` 裁掉了,而标题写着
|
|
29
|
+
「允许换行」。量出来两栏高度都是 28.4px,谁也看不出区别。
|
|
30
|
+
- `03-patterns/list` —— 同一形态:`.list__title` 自带 `text-overflow: ellipsis`,
|
|
31
|
+
两栏一模一样,多的那个类名不改变任何结果。
|
|
32
|
+
- `02-primitives/dropdown` —— 上一版就踩过:反例写了 `display: flex`,
|
|
33
|
+
恰好绕开了 `<li>` 的真实 24px 坑。
|
|
34
|
+
|
|
35
|
+
前两处已改成「两栏用同一句长文本,反例真的折行、正例真的省略」。
|
|
36
|
+
第三处的教训写进了 `internal/ERRORS.md` —— 反例的坏必须来自**量过的**坑。
|
|
37
|
+
|
|
38
|
+
### 新增
|
|
39
|
+
|
|
40
|
+
- **`05-audit/demo-claim-gate.js`**:每个 `.cmp` 块的两栏各写一条
|
|
41
|
+
`data-bad` / `data-good`(格式 `选择器|指标|断言`,例 `li.dd-bug|h|<=24`),
|
|
42
|
+
判三件事:① 两栏都写了 ② 各自成立 ③ 两条断言**互斥**。
|
|
43
|
+
③ 是这套判据的关键 —— `>=24` 与 `>=44` 也能双双成立,那什么也证明不了;
|
|
44
|
+
互斥成立,才等于用机器证明了「这两栏不可能是同一个东西」。
|
|
45
|
+
指标 10 个:`count` / `h` / `w` / `lines` / `fs` / `uniq` / `glyphs` /
|
|
46
|
+
`hidden` / `gh` / `gw`(后两个量 hover 前后的尺寸变化)。
|
|
47
|
+
自检 10 条反向控制 + 1 条正例(含"少一栏也必须红"两个方向);
|
|
48
|
+
在真实仓库做过反向验证:把 nav 的修复撤回去,
|
|
49
|
+
门禁立刻报「`a.toc__link` 的 lines 量得 1,断言是 >=2」。
|
|
50
|
+
- 24 个对照块全部写上断言,**24 / 24** 成立。
|
|
51
|
+
- 两块的演示容器宽度钉死(`.cmp .ls-demo` 300px、`.cmp .ar-g` 360px):
|
|
52
|
+
它们演示的是「折行」「列被撑开」这类**由宽度决定**的现象,
|
|
53
|
+
不钉住的话 1440px 下 `list` 的反例根本不折行、`analysis-report` 的正例列宽
|
|
54
|
+
会随视口变宽。现在 393 / 734 / 900 / 1440 四个宽度下量出来的数字一致。
|
|
55
|
+
|
|
56
|
+
### 修
|
|
57
|
+
|
|
58
|
+
- **门禁的临时端口会撞上 Chrome 的禁用端口。** 上一版全量跑到 195/196,
|
|
59
|
+
唯一红的是 `token-resolved`:`net::ERR_UNSAFE_PORT at 127.0.0.1:3659`。
|
|
60
|
+
5 道门禁都用 `listen(0)` 让系统随便给端口,而浏览器有一张
|
|
61
|
+
`kRestrictedPorts` 表(3659 / 4045 / 6000 / 6665–6669 / 10080…)一律拒连 ——
|
|
62
|
+
端口随机 ⇒ 约 1/1000 概率"与你无关地红",而且这种红看着像环境抖动,
|
|
63
|
+
最容易被重跑一次糊过去。现在统一走 `05-audit/safe-listen.js`
|
|
64
|
+
的 `safeListen()`:撞到就重绑,并带 3 条自检(重试分支平时跑不到,
|
|
65
|
+
不主动验一次等于没写)。
|
|
66
|
+
- `demo-counterexample-gate.py` 的可见性判据原来对**整个标签**做
|
|
67
|
+
`\bhidden\b` 子串匹配。新加的 `data-bad=".rv-card|hidden|=1"`(断言指标名
|
|
68
|
+
就叫 hidden)直接把它触发,`reveal` 被误判成「反例块被藏起来了」——
|
|
69
|
+
判据认的是**词**,不是**属性**。改成按属性判,并补一条自检:
|
|
70
|
+
断言里带 hidden 字样必须放行。
|
|
71
|
+
- 门禁总数 194 → **197**(`demo-claim` + 自检 + `port-safe`)。
|
|
72
|
+
|
|
73
|
+
### 已知未覆盖(写在这里,不假装覆盖了)
|
|
74
|
+
|
|
75
|
+
- 10 页仍是 `box bad` 单栏反例,没有成对结构可量 —— 门禁会把条数打出来。
|
|
76
|
+
- 反例**该不该**算错、`cmp__why` 里的文案说得准不准,机器判不了;
|
|
77
|
+
这道门禁判的是「演示物确实在、且两栏真的不同」,不是审美判断。
|
|
78
|
+
- 真机读屏(NVDA / VoiceOver)仍未执行。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## [0.11.11] - 2026-10-29
|
|
83
|
+
|
|
84
|
+
**反例从"写着"走到"看得见"**。0.11.10 让 33 个组件都写清了「什么时候不该用」,
|
|
85
|
+
但那 196 条只存在于 README 的文字里 —— 读者得自己在脑子里把"错的样子"还原出来,
|
|
86
|
+
还原不出来的那部分就等于没写。这一版把反例摆进示例页:**带 demo 的 32 个组件里,
|
|
87
|
+
24 个现在是左右并排的「错写法 / 本库写法」**,每块底下跟一句为什么。
|
|
88
|
+
改之前这个数字是 **10 / 32**(数出来的是 22 个页面缺可见反例)。
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- **22 个组件页新增可见对照块**,覆盖 `02-primitives` 6 个、`03-patterns` 10 个、
|
|
93
|
+
`04-recipes` 5 个,另有 `choice` 的旧反例块补上了标题(没有标题,读者不知道那块在演示什么)。
|
|
94
|
+
现在带 demo 的 32 个组件里,**24 个是并排两栏**(`02-primitives` 9 / `03-patterns` 10 /
|
|
95
|
+
`04-recipes` 5),**8 个沿用既有的 `.box.bad`**(badge / choice / separator / switch /
|
|
96
|
+
accordion / form-validation / overlay / tabs)。每一块的理由都能指回本库的具体位置:
|
|
97
|
+
`button.css` 的一条注释、`combobox.js` 的一个分支、某道门禁守的一条规则
|
|
98
|
+
—— 没有一条是"看起来不专业"这种正确但学不到东西的话。
|
|
99
|
+
- `05-audit/demo-counterexample-gate.py` —— 判「反例能不能被看见」。它和 0.11.10 的
|
|
100
|
+
`do-dont-gate.py` 守的是两层:那边判**写没写**(README 里有没有章节、条目够不够、
|
|
101
|
+
有没有编造标识符),这边判**看不看得见**(demo 里有没有反例块、有没有被 `hidden` 藏起来、
|
|
102
|
+
块后面有没有标题说明它在演示什么)。7 条自检,5 条必须红。
|
|
103
|
+
它的组件名单不另写一份,`importlib` 读 `coverage-gate.py` 的 `LAYOUT_PAGES`
|
|
104
|
+
—— 同一个事实写在两处,早晚有一天两处不一样。
|
|
105
|
+
|
|
106
|
+
### Changed
|
|
107
|
+
|
|
108
|
+
- **`.cmp` 收编进 `01-tokens/page.css`**(此前 `button` / `card` / `input` 三页各写一遍)。
|
|
109
|
+
判据是"语义相同才收":那三页的栅格意图一致(`1.55fr 1fr`)、gap 与断点却三种写法,
|
|
110
|
+
是同一个东西的无意分叉;而 `.row` 15 页 14 种写法**不收** —— 那些是语义不同的东西
|
|
111
|
+
(工具条 / 按钮排 / 元信息行)。不收的理由写在 `page.css` 的注释里,免得下一个人再问一遍。
|
|
112
|
+
- 对照块断点定在 **640px 而不是 720px**:文档页里的活标本 iframe 实测只有 734px 宽,
|
|
113
|
+
720 的断点等于"再窄一点就叠成单栏",而叠成单栏,"并排"这件事本身就不存在了。
|
|
114
|
+
- **栅格改用 `minmax(0, 1fr)`**:第一版照旧三页抄了 `1fr`,结果 4 个页面在 320px /
|
|
115
|
+
834px / RTL 阿拉伯语膨胀后横向溢出 81–155px。`1fr` 的下限是 `auto`(内容最小宽度),
|
|
116
|
+
一栏里有不换行的长串就顶破整页 —— 这条恰恰是 `04-recipes/analysis-report` 那一页
|
|
117
|
+
正在教别人的东西。
|
|
118
|
+
- `a11y-scan.js` 扫描期间跳过 `.cmp__bad`。漏掉这一条的后果不是"少报一个错",
|
|
119
|
+
而是**故意写坏的那一栏会把整页判红** —— 于是没人再敢写反例。
|
|
120
|
+
正例栏不隐藏:它示范的就是"该怎么写",必须能正常操作;反例栏里可交互的元素
|
|
121
|
+
加了 `tabindex="-1"`(`aria-hidden` 只移出无障碍树,**不移出 Tab 序列**)。
|
|
122
|
+
|
|
123
|
+
### 跟着改的门禁(判据本身有问题,不是演示块有问题)
|
|
124
|
+
|
|
125
|
+
- `pagination` 的 ⑤/⑨ 从"全页取样"收紧到 `[data-pagination]`:判「每个页码都有
|
|
126
|
+
aria-label」「槽位数 ≤7」时,那两块**静态**页码条(12 个 vs 6 个槽位)被当成了被测对象
|
|
127
|
+
—— 而它们正是拿来演示这两个数字的。
|
|
128
|
+
- `states-check` 的「空状态给出下一步」:排除反例区,并顺手把"只看第一个空状态"
|
|
129
|
+
改成"看全部"(原来页面里第二个空状态没出口也照样过关,那才是这条判据的真漏洞)。
|
|
130
|
+
- `refs` 的报错行原来只给 `demo.html` —— 库里 6 个同名文件,认不出是哪一个。
|
|
131
|
+
根因是 `commonpath` 在参数含仓库根的 `index.html` 时返回空串、被当成假值,
|
|
132
|
+
于是"显示父目录"那段代码**从来没生效过**。
|
|
133
|
+
|
|
134
|
+
### 性能
|
|
135
|
+
|
|
136
|
+
- CSS 合计预算 124 → **125 KB**(实测 +0.83 KB,剥注释后)。
|
|
137
|
+
这次上调**没有"规定动作"级别的理由**,就是一次功能采购,所以 `perf-gate.py`
|
|
138
|
+
里写明了:下次撞线先删等量未引用规则,再来改这个数字。
|
|
139
|
+
|
|
140
|
+
### 已知未解(写在这里,不假装解决了)
|
|
141
|
+
|
|
142
|
+
- **同一页能看到两套相反的涨跌配色**:`04-recipes/table` 用会计约定(正绿负红),
|
|
143
|
+
`03-patterns/list` 用 A 股约定(涨红跌绿)。这一版**没有改** —— 改颜色语义是破坏性变更,
|
|
144
|
+
得单独一版做迁移说明。现状如实记在 `04-recipes/table/README.md` 里。
|
|
145
|
+
- **真机读屏(NVDA / VoiceOver)仍未执行**。自动化能证明"每个控件有可访问名",
|
|
146
|
+
证明不了"念出来听得懂" —— 后者只能人听。这一项在 `docs/ACCESSIBILITY.md` 里就是那么写的。
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
19
150
|
## [0.11.10] - 2026-10-29
|
|
20
151
|
|
|
21
152
|
### Added
|
package/CONTRIBUTING.md
CHANGED
|
@@ -8,7 +8,8 @@ npm run gate # 全量:含浏览器类
|
|
|
8
8
|
npm run gate:fast # 只跑静态层,不用装浏览器
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
全量是 **
|
|
11
|
+
全量是 **197 道门禁**(本机约 15–20 分钟:组件层要起浏览器,还要逐张比 95 张视觉截图)。
|
|
12
|
+
只想确认没改坏静态契约的话用 `gate:fast`,几秒到几分钟。
|
|
12
13
|
|
|
13
14
|
环境依赖只有一套(Node + Chromium),缺了对应的门禁会**跳过**(跳过不算通过):
|
|
14
15
|
|
|
@@ -111,6 +112,15 @@ fix: <一句话说清改了什么、为什么>
|
|
|
111
112
|
而边界恰恰是组件库最该交付的东西。标题怎么写都行
|
|
112
113
|
(`## 反例` / `## 反模式` / `## 何时不该用` 都认),内容不能省。
|
|
113
114
|
**不要为了过门禁改文案**:判据认的是"这段话在讲不该怎么用",不是你用哪个标题。
|
|
115
|
+
7. **并排对照块(`.cmp`)两栏各写一条能被机器量的断言。**
|
|
116
|
+
写法:`data-bad="选择器|指标|断言"`,例 `data-bad="li.dd-bug|h|<=24"`;
|
|
117
|
+
正例栏同理写 `data-good`。指标与语义见 `05-audit/demo-claim-gate.js` 头部。
|
|
118
|
+
两栏的断言必须**互斥**(不存在一个数能同时满足两边)且各自成立。
|
|
119
|
+
这条规矩是踩出来的:曾有 3 个块"块在、标题对、反例不成立"——
|
|
120
|
+
`nav` 的反例长标题根本没换行(`.toc__link` 自带 `nowrap`,只是被裁掉),
|
|
121
|
+
`list` 同形,`dropdown` 的反例写了 `display:flex` 绕开了真实的 24px 坑。
|
|
122
|
+
只判"块在不在"时,这三处全是绿的。
|
|
123
|
+
⇒ **写不出断言的块,说明那个反例量化不了,那就别摆出来。**
|
|
114
124
|
|
|
115
125
|
## 提 PR 之前
|
|
116
126
|
|
package/ai/components.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"generatedBy": "05-audit/gen-ai-contract.py",
|
|
4
|
-
"libraryVersion": "0.11.
|
|
4
|
+
"libraryVersion": "0.11.12",
|
|
5
5
|
"$comment": "机器可读的组件契约。slots = BEM 元素名(在本库里元素名就是插槽名),states.enum = 组件会在 DOM 上写出的 data-* 取值,states.legacyClass = 仍未收敛到 data 属性的历史状态类(INVARIANT I-8 未达标)。",
|
|
6
6
|
"maturityCriteria": {
|
|
7
7
|
"alpha": "缺 demo.html 或缺 05-audit 下的专属门禁 ⇒ 还没被机器验证过,不要用",
|
|
@@ -330,7 +330,9 @@
|
|
|
330
330
|
},
|
|
331
331
|
"aria": {
|
|
332
332
|
"roles": [],
|
|
333
|
-
"attrs": [
|
|
333
|
+
"attrs": [
|
|
334
|
+
"hidden"
|
|
335
|
+
]
|
|
334
336
|
},
|
|
335
337
|
"usesOtherNamespaces": [],
|
|
336
338
|
"global": null,
|
|
@@ -384,7 +386,10 @@
|
|
|
384
386
|
},
|
|
385
387
|
"aria": {
|
|
386
388
|
"roles": [],
|
|
387
|
-
"attrs": [
|
|
389
|
+
"attrs": [
|
|
390
|
+
"hidden",
|
|
391
|
+
"label"
|
|
392
|
+
]
|
|
388
393
|
},
|
|
389
394
|
"usesOtherNamespaces": [],
|
|
390
395
|
"global": "Drawer",
|
|
@@ -442,7 +447,8 @@
|
|
|
442
447
|
],
|
|
443
448
|
"attrs": [
|
|
444
449
|
"disabled",
|
|
445
|
-
"expanded"
|
|
450
|
+
"expanded",
|
|
451
|
+
"hidden"
|
|
446
452
|
]
|
|
447
453
|
},
|
|
448
454
|
"usesOtherNamespaces": [],
|
|
@@ -605,6 +611,7 @@
|
|
|
605
611
|
"controls",
|
|
606
612
|
"current",
|
|
607
613
|
"expanded",
|
|
614
|
+
"hidden",
|
|
608
615
|
"label"
|
|
609
616
|
]
|
|
610
617
|
},
|
|
@@ -731,6 +738,7 @@
|
|
|
731
738
|
"controls",
|
|
732
739
|
"current",
|
|
733
740
|
"disabled",
|
|
741
|
+
"hidden",
|
|
734
742
|
"label",
|
|
735
743
|
"live"
|
|
736
744
|
]
|
|
@@ -784,7 +792,9 @@
|
|
|
784
792
|
},
|
|
785
793
|
"aria": {
|
|
786
794
|
"roles": [],
|
|
787
|
-
"attrs": [
|
|
795
|
+
"attrs": [
|
|
796
|
+
"hidden"
|
|
797
|
+
]
|
|
788
798
|
},
|
|
789
799
|
"usesOtherNamespaces": [],
|
|
790
800
|
"global": "Reveal",
|
|
@@ -947,7 +957,9 @@
|
|
|
947
957
|
"roles": [
|
|
948
958
|
"tooltip"
|
|
949
959
|
],
|
|
950
|
-
"attrs": [
|
|
960
|
+
"attrs": [
|
|
961
|
+
"hidden"
|
|
962
|
+
]
|
|
951
963
|
},
|
|
952
964
|
"usesOtherNamespaces": [],
|
|
953
965
|
"global": "Tooltip",
|
|
@@ -991,10 +1003,13 @@
|
|
|
991
1003
|
"aria": {
|
|
992
1004
|
"roles": [
|
|
993
1005
|
"group",
|
|
1006
|
+
"tree",
|
|
994
1007
|
"treeitem"
|
|
995
1008
|
],
|
|
996
1009
|
"attrs": [
|
|
997
1010
|
"expanded",
|
|
1011
|
+
"hidden",
|
|
1012
|
+
"label",
|
|
998
1013
|
"selected"
|
|
999
1014
|
]
|
|
1000
1015
|
},
|
|
@@ -1270,6 +1285,7 @@
|
|
|
1270
1285
|
],
|
|
1271
1286
|
"attrs": [
|
|
1272
1287
|
"disabled",
|
|
1288
|
+
"hidden",
|
|
1273
1289
|
"label",
|
|
1274
1290
|
"selected"
|
|
1275
1291
|
]
|
|
@@ -1559,6 +1575,7 @@
|
|
|
1559
1575
|
"attrs": [
|
|
1560
1576
|
"disabled",
|
|
1561
1577
|
"expanded",
|
|
1578
|
+
"hidden",
|
|
1562
1579
|
"selected"
|
|
1563
1580
|
]
|
|
1564
1581
|
},
|
|
@@ -1647,11 +1664,16 @@
|
|
|
1647
1664
|
},
|
|
1648
1665
|
"aria": {
|
|
1649
1666
|
"roles": [
|
|
1650
|
-
"main"
|
|
1667
|
+
"main",
|
|
1668
|
+
"progressbar"
|
|
1651
1669
|
],
|
|
1652
1670
|
"attrs": [
|
|
1653
1671
|
"busy",
|
|
1654
|
-
"hidden"
|
|
1672
|
+
"hidden",
|
|
1673
|
+
"label",
|
|
1674
|
+
"valuemax",
|
|
1675
|
+
"valuemin",
|
|
1676
|
+
"valuenow"
|
|
1655
1677
|
]
|
|
1656
1678
|
},
|
|
1657
1679
|
"usesOtherNamespaces": [
|
|
@@ -1753,6 +1775,7 @@
|
|
|
1753
1775
|
"region"
|
|
1754
1776
|
],
|
|
1755
1777
|
"attrs": [
|
|
1778
|
+
"hidden",
|
|
1756
1779
|
"label"
|
|
1757
1780
|
]
|
|
1758
1781
|
},
|
|
@@ -1794,7 +1817,9 @@
|
|
|
1794
1817
|
},
|
|
1795
1818
|
"aria": {
|
|
1796
1819
|
"roles": [],
|
|
1797
|
-
"attrs": [
|
|
1820
|
+
"attrs": [
|
|
1821
|
+
"hidden"
|
|
1822
|
+
]
|
|
1798
1823
|
},
|
|
1799
1824
|
"usesOtherNamespaces": [
|
|
1800
1825
|
"detail-body__heading",
|
|
@@ -1871,7 +1896,9 @@
|
|
|
1871
1896
|
},
|
|
1872
1897
|
"aria": {
|
|
1873
1898
|
"roles": [],
|
|
1874
|
-
"attrs": [
|
|
1899
|
+
"attrs": [
|
|
1900
|
+
"hidden"
|
|
1901
|
+
]
|
|
1875
1902
|
},
|
|
1876
1903
|
"usesOtherNamespaces": [],
|
|
1877
1904
|
"global": null,
|
|
@@ -1926,6 +1953,7 @@
|
|
|
1926
1953
|
"status"
|
|
1927
1954
|
],
|
|
1928
1955
|
"attrs": [
|
|
1956
|
+
"hidden",
|
|
1929
1957
|
"label",
|
|
1930
1958
|
"live",
|
|
1931
1959
|
"sort"
|
package/dist/01-tokens/page.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.page {margin:0;min-height:100vh;min-height:100dvh;background:var(--paper);color:var(--text-primary);font-family:var(--sans);font-size:var(--fs-base);line-height:var(--lh-base);-webkit-text-size-adjust:100%;padding-block:calc(env(safe-area-inset-top, 0px) + var(--sp-6)) calc(env(safe-area-inset-bottom, 0px) + var(--sp-6));padding-inline:max(env(safe-area-inset-right, 0px), var(--sp-4)) max(env(safe-area-inset-left, 0px), var(--sp-4));}.page *, .page *::before, .page *::after {box-sizing:border-box;}.page .wrap {margin-inline:auto;max-width:min(var(--measure-page), 100%);}.page .wrap--prose {max-width:min(var(--measure-prose), 100%);}.page h1 {font-family:var(--sans);font-size:var(--fs-2xl);font-weight:500;letter-spacing:var(--tracking-title);line-height:var(--lh-tight);margin:0 0 var(--sp-3);max-width:var(--measure-title);}.page h2 {font-size:var(--fs-lg);margin:var(--sp-7) 0 var(--sp-3);}.page .rule-top {border-top:1px solid var(--border-decor);padding-top:var(--sp-4);}.page .rule-bottom {border-bottom:1px solid var(--border-decor);padding-bottom:var(--sp-2);margin-bottom:var(--sp-4);}.page code {font-family:var(--mono);font-size:0.9em;background:var(--surface-sunken);padding:1px 4px;border-radius:var(--r-xs);}.page .box {background:var(--surface);border:1px solid var(--border-decor);border-radius:var(--r-md);padding:var(--sp-5);}.page .box.bad {background:var(--surface-sunken);}
|
|
1
|
+
.page {margin:0;min-height:100vh;min-height:100dvh;background:var(--paper);color:var(--text-primary);font-family:var(--sans);font-size:var(--fs-base);line-height:var(--lh-base);-webkit-text-size-adjust:100%;padding-block:calc(env(safe-area-inset-top, 0px) + var(--sp-6)) calc(env(safe-area-inset-bottom, 0px) + var(--sp-6));padding-inline:max(env(safe-area-inset-right, 0px), var(--sp-4)) max(env(safe-area-inset-left, 0px), var(--sp-4));}.page *, .page *::before, .page *::after {box-sizing:border-box;}.page .wrap {margin-inline:auto;max-width:min(var(--measure-page), 100%);}.page .wrap--prose {max-width:min(var(--measure-prose), 100%);}.page h1 {font-family:var(--sans);font-size:var(--fs-2xl);font-weight:500;letter-spacing:var(--tracking-title);line-height:var(--lh-tight);margin:0 0 var(--sp-3);max-width:var(--measure-title);}.page h2 {font-size:var(--fs-lg);margin:var(--sp-7) 0 var(--sp-3);}.page .rule-top {border-top:1px solid var(--border-decor);padding-top:var(--sp-4);}.page .rule-bottom {border-bottom:1px solid var(--border-decor);padding-bottom:var(--sp-2);margin-bottom:var(--sp-4);}.page code {font-family:var(--mono);font-size:0.9em;background:var(--surface-sunken);padding:1px 4px;border-radius:var(--r-xs);}.page .box {background:var(--surface);border:1px solid var(--border-decor);border-radius:var(--r-md);padding:var(--sp-5);}.page .box.bad {background:var(--surface-sunken);}.page .cmp {display:grid;grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);gap:var(--sp-4);}.page .cmp--wide-first {grid-template-columns:minmax(0, 1.55fr) minmax(0, 1fr);}@media (max-width:640px) {.page .cmp, .page .cmp--wide-first, .page .cmp--clip {grid-template-columns:minmax(0, 1fr);}}.page .cmp__pane {padding:var(--sp-4);border:1px solid var(--border-decor);border-radius:var(--r-md);background:var(--surface-sunken);min-width:0;}.page .cmp--clip .cmp__pane {overflow:hidden;}.page .cmp__pane > h3 {margin:0 0 var(--sp-3);font-size:var(--fs-sm);font-weight:500;}.page .cmp__bad > h3 {color:var(--danger);}.page .cmp__good > h3 {color:var(--success);}.page .cmp__why {margin:var(--sp-3) 0 0;font-size:var(--fs-xs);line-height:1.6;color:var(--text-secondary);}
|
package/dist/COSTS.md
CHANGED
package/index.html
CHANGED