@wzrhine/tokens 0.0.0-stage → 0.2.0

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.
@@ -0,0 +1,406 @@
1
+ /**
2
+ * Machine-readable index of the CSS custom properties defined in `tokens.css`.
3
+ * Tests assert that every token listed here exists in each theme, and the
4
+ * showcase renders foundations from this list instead of copying values.
5
+ */
6
+ export type ThemeName = 'light' | 'dark';
7
+ export type DensityName = 'comfortable' | 'compact';
8
+ export interface TokenGroup {
9
+ id: string;
10
+ label: string;
11
+ description: string;
12
+ tokens: readonly TokenEntry[];
13
+ }
14
+ export interface TokenEntry {
15
+ name: `--rl-${string}`;
16
+ role: string;
17
+ }
18
+ export declare const colorGroups: readonly [{
19
+ readonly id: "background";
20
+ readonly label: "Background";
21
+ readonly description: "页面与容器层级。用明度差表达层级,而不是阴影。";
22
+ readonly tokens: readonly [{
23
+ readonly name: "--rl-bg-canvas";
24
+ readonly role: "页面底色";
25
+ }, {
26
+ readonly name: "--rl-bg-surface";
27
+ readonly role: "内容表面";
28
+ }, {
29
+ readonly name: "--rl-bg-subtle";
30
+ readonly role: "次级区域 / 中性徽标";
31
+ }, {
32
+ readonly name: "--rl-bg-raised";
33
+ readonly role: "浮起表面";
34
+ }, {
35
+ readonly name: "--rl-bg-hover";
36
+ readonly role: "中性悬停";
37
+ }, {
38
+ readonly name: "--rl-bg-pressed";
39
+ readonly role: "中性按压";
40
+ }, {
41
+ readonly name: "--rl-bg-inverse";
42
+ readonly role: "深墨填充";
43
+ }, {
44
+ readonly name: "--rl-inverse-hover";
45
+ readonly role: "深墨填充悬停";
46
+ }, {
47
+ readonly name: "--rl-bg-disabled";
48
+ readonly role: "禁用填充";
49
+ }, {
50
+ readonly name: "--rl-bg-readonly";
51
+ readonly role: "只读字段";
52
+ }];
53
+ }, {
54
+ readonly id: "foreground";
55
+ readonly label: "Foreground";
56
+ readonly description: "文本层级。正文默认使用 primary,不以彩色文字为默认。";
57
+ readonly tokens: readonly [{
58
+ readonly name: "--rl-fg-primary";
59
+ readonly role: "主文本";
60
+ }, {
61
+ readonly name: "--rl-fg-muted";
62
+ readonly role: "次级文本";
63
+ }, {
64
+ readonly name: "--rl-fg-subtle";
65
+ readonly role: "元信息 / 编号";
66
+ }, {
67
+ readonly name: "--rl-fg-inverse";
68
+ readonly role: "深墨填充上的文本";
69
+ }, {
70
+ readonly name: "--rl-fg-on-accent";
71
+ readonly role: "信号橙填充上的文本";
72
+ }, {
73
+ readonly name: "--rl-fg-on-danger";
74
+ readonly role: "危险色填充上的文本";
75
+ }, {
76
+ readonly name: "--rl-fg-disabled";
77
+ readonly role: "禁用文本";
78
+ }];
79
+ }, {
80
+ readonly id: "border";
81
+ readonly label: "Border";
82
+ readonly description: "subtle 仅作装饰分隔;可交互边界使用 strong。";
83
+ readonly tokens: readonly [{
84
+ readonly name: "--rl-border-subtle";
85
+ readonly role: "装饰分隔线";
86
+ }, {
87
+ readonly name: "--rl-border-default";
88
+ readonly role: "容器轮廓";
89
+ }, {
90
+ readonly name: "--rl-border-strong";
91
+ readonly role: "控件边界(≥3:1)";
92
+ }];
93
+ }, {
94
+ readonly id: "signal";
95
+ readonly label: "Research Signal";
96
+ readonly description: "小面积使用的研究橙。每个视图只保留一处主要信号。";
97
+ readonly tokens: readonly [{
98
+ readonly name: "--rl-accent";
99
+ readonly role: "信号填充";
100
+ }, {
101
+ readonly name: "--rl-accent-hover";
102
+ readonly role: "信号悬停";
103
+ }, {
104
+ readonly name: "--rl-accent-subtle";
105
+ readonly role: "选中底色";
106
+ }, {
107
+ readonly name: "--rl-accent-text";
108
+ readonly role: "浅底上的强调文字";
109
+ }, {
110
+ readonly name: "--rl-accent-amber";
111
+ readonly role: "档案辅助标记(装饰)";
112
+ }];
113
+ }, {
114
+ readonly id: "status";
115
+ readonly label: "Status";
116
+ readonly description: "业务状态色。必须与文字同时出现,不能只靠颜色。";
117
+ readonly tokens: readonly [{
118
+ readonly name: "--rl-info";
119
+ readonly role: "信息";
120
+ }, {
121
+ readonly name: "--rl-info-subtle";
122
+ readonly role: "信息底色";
123
+ }, {
124
+ readonly name: "--rl-success";
125
+ readonly role: "完成";
126
+ }, {
127
+ readonly name: "--rl-success-subtle";
128
+ readonly role: "完成底色";
129
+ }, {
130
+ readonly name: "--rl-warning";
131
+ readonly role: "注意";
132
+ }, {
133
+ readonly name: "--rl-warning-subtle";
134
+ readonly role: "注意底色";
135
+ }, {
136
+ readonly name: "--rl-danger";
137
+ readonly role: "错误 / 高风险";
138
+ }, {
139
+ readonly name: "--rl-danger-hover";
140
+ readonly role: "危险填充悬停 / 按压";
141
+ }, {
142
+ readonly name: "--rl-danger-subtle";
143
+ readonly role: "错误底色";
144
+ }];
145
+ }, {
146
+ readonly id: "category";
147
+ readonly label: "Category";
148
+ readonly description: "分类辅助色,必须和可读标签一起使用。";
149
+ readonly tokens: readonly [{
150
+ readonly name: "--rl-category-1";
151
+ readonly role: "分类 1";
152
+ }, {
153
+ readonly name: "--rl-category-2";
154
+ readonly role: "分类 2";
155
+ }, {
156
+ readonly name: "--rl-category-3";
157
+ readonly role: "分类 3";
158
+ }, {
159
+ readonly name: "--rl-category-4";
160
+ readonly role: "分类 4";
161
+ }, {
162
+ readonly name: "--rl-category-5";
163
+ readonly role: "分类 5";
164
+ }, {
165
+ readonly name: "--rl-category-6";
166
+ readonly role: "分类 6";
167
+ }, {
168
+ readonly name: "--rl-category-7";
169
+ readonly role: "分类 7";
170
+ }, {
171
+ readonly name: "--rl-category-8";
172
+ readonly role: "分类 8";
173
+ }];
174
+ }, {
175
+ readonly id: "focus";
176
+ readonly label: "Focus";
177
+ readonly description: "焦点色独立于品牌橙与危险色。";
178
+ readonly tokens: readonly [{
179
+ readonly name: "--rl-focus";
180
+ readonly role: "焦点环";
181
+ }];
182
+ }];
183
+ export declare const typeRoles: readonly [{
184
+ readonly name: "display";
185
+ readonly token: "--rl-type-display";
186
+ readonly spec: "36 / 44 · 600";
187
+ readonly usage: "展示标题";
188
+ }, {
189
+ readonly name: "heading-1";
190
+ readonly token: "--rl-type-heading-1";
191
+ readonly spec: "28 / 36 · 600";
192
+ readonly usage: "页面标题";
193
+ }, {
194
+ readonly name: "heading-2";
195
+ readonly token: "--rl-type-heading-2";
196
+ readonly spec: "22 / 30 · 600";
197
+ readonly usage: "一级内容标题";
198
+ }, {
199
+ readonly name: "heading-3";
200
+ readonly token: "--rl-type-heading-3";
201
+ readonly spec: "18 / 26 · 600";
202
+ readonly usage: "面板标题";
203
+ }, {
204
+ readonly name: "body";
205
+ readonly token: "--rl-type-body";
206
+ readonly spec: "16 / 24 · 400";
207
+ readonly usage: "正文、表单";
208
+ }, {
209
+ readonly name: "body-sm";
210
+ readonly token: "--rl-type-body-sm";
211
+ readonly spec: "14 / 21 · 400";
212
+ readonly usage: "紧凑信息";
213
+ }, {
214
+ readonly name: "label";
215
+ readonly token: "--rl-type-label";
216
+ readonly spec: "14 / 20 · 600";
217
+ readonly usage: "控件文字";
218
+ }, {
219
+ readonly name: "meta";
220
+ readonly token: "--rl-type-meta";
221
+ readonly spec: "12 / 18 · 500";
222
+ readonly usage: "辅助标签,不用于长正文";
223
+ }, {
224
+ readonly name: "mono";
225
+ readonly token: "--rl-type-mono";
226
+ readonly spec: "12 / 18 · 500";
227
+ readonly usage: "编号、时间、单位";
228
+ }];
229
+ export declare const spaceScale: readonly [{
230
+ readonly token: "--rl-space-0";
231
+ readonly px: 0;
232
+ }, {
233
+ readonly token: "--rl-space-1";
234
+ readonly px: 4;
235
+ }, {
236
+ readonly token: "--rl-space-2";
237
+ readonly px: 8;
238
+ }, {
239
+ readonly token: "--rl-space-3";
240
+ readonly px: 12;
241
+ }, {
242
+ readonly token: "--rl-space-4";
243
+ readonly px: 16;
244
+ }, {
245
+ readonly token: "--rl-space-6";
246
+ readonly px: 24;
247
+ }, {
248
+ readonly token: "--rl-space-8";
249
+ readonly px: 32;
250
+ }, {
251
+ readonly token: "--rl-space-12";
252
+ readonly px: 48;
253
+ }, {
254
+ readonly token: "--rl-space-16";
255
+ readonly px: 64;
256
+ }];
257
+ export declare const radiusScale: readonly [{
258
+ readonly token: "--rl-radius-none";
259
+ readonly usage: "表格、分隔区块";
260
+ }, {
261
+ readonly token: "--rl-radius-xs";
262
+ readonly usage: "徽标、标签";
263
+ }, {
264
+ readonly token: "--rl-radius-sm";
265
+ readonly usage: "按钮、默认表面";
266
+ }, {
267
+ readonly token: "--rl-radius-md";
268
+ readonly usage: "表单控件";
269
+ }, {
270
+ readonly token: "--rl-radius-lg";
271
+ readonly usage: "浮层(M2)";
272
+ }];
273
+ export declare const borderWidths: readonly [{
274
+ readonly token: "--rl-border-width";
275
+ readonly usage: "默认边框";
276
+ }, {
277
+ readonly token: "--rl-border-width-strong";
278
+ readonly usage: "强调轮廓 / 选中";
279
+ }, {
280
+ readonly token: "--rl-focus-width";
281
+ readonly usage: "焦点环宽度";
282
+ }, {
283
+ readonly token: "--rl-focus-offset";
284
+ readonly usage: "焦点环偏移";
285
+ }];
286
+ export declare const densityTokens: readonly [{
287
+ readonly token: "--rl-control-height-sm";
288
+ readonly usage: "小号控件高度";
289
+ }, {
290
+ readonly token: "--rl-control-height-md";
291
+ readonly usage: "默认控件高度";
292
+ }, {
293
+ readonly token: "--rl-control-height-lg";
294
+ readonly usage: "大号控件高度";
295
+ }, {
296
+ readonly token: "--rl-control-padding-x-sm";
297
+ readonly usage: "小号控件水平内距";
298
+ }, {
299
+ readonly token: "--rl-control-padding-x-md";
300
+ readonly usage: "默认控件水平内距";
301
+ }, {
302
+ readonly token: "--rl-control-padding-x-lg";
303
+ readonly usage: "大号控件水平内距";
304
+ }, {
305
+ readonly token: "--rl-control-gap";
306
+ readonly usage: "控件内图标与文字间距";
307
+ }, {
308
+ readonly token: "--rl-surface-padding";
309
+ readonly usage: "表面默认内距";
310
+ }, {
311
+ readonly token: "--rl-badge-height-sm";
312
+ readonly usage: "小号徽标高度(非点击目标)";
313
+ }, {
314
+ readonly token: "--rl-badge-height-md";
315
+ readonly usage: "默认徽标高度(非点击目标)";
316
+ }, {
317
+ readonly token: "--rl-indicator-size";
318
+ readonly usage: "状态圆点";
319
+ }, {
320
+ readonly token: "--rl-field-label-width";
321
+ readonly usage: "行内字段标签列宽";
322
+ }, {
323
+ readonly token: "--rl-dialog-width-sm";
324
+ readonly usage: "小号对话框宽度";
325
+ }, {
326
+ readonly token: "--rl-dialog-width-md";
327
+ readonly usage: "默认对话框宽度";
328
+ }, {
329
+ readonly token: "--rl-dialog-width-lg";
330
+ readonly usage: "大号对话框宽度";
331
+ }, {
332
+ readonly token: "--rl-tooltip-max-width";
333
+ readonly usage: "提示最大宽度";
334
+ }, {
335
+ readonly token: "--rl-popup-max-height";
336
+ readonly usage: "下拉列表最大高度";
337
+ }, {
338
+ readonly token: "--rl-popup-offset";
339
+ readonly usage: "浮层与触发器间距";
340
+ }, {
341
+ readonly token: "--rl-popover-width-sm";
342
+ readonly usage: "小号弹出面板宽度";
343
+ }, {
344
+ readonly token: "--rl-popover-width-md";
345
+ readonly usage: "默认弹出面板宽度";
346
+ }, {
347
+ readonly token: "--rl-popover-width-lg";
348
+ readonly usage: "大号弹出面板宽度";
349
+ }, {
350
+ readonly token: "--rl-menu-min-width";
351
+ readonly usage: "菜单最小宽度";
352
+ }, {
353
+ readonly token: "--rl-toast-width";
354
+ readonly usage: "通知宽度";
355
+ }, {
356
+ readonly token: "--rl-orbit-size";
357
+ readonly usage: "轨道示意图尺寸(展示效果)";
358
+ }];
359
+ /** Duration tokens in milliseconds. Source of truth for CSS (`--rl-motion-*`) and motion/react presets. */
360
+ export declare const motionDurations: {
361
+ readonly instant: 0;
362
+ readonly press: 80;
363
+ readonly fast: 120;
364
+ readonly base: 200;
365
+ readonly panel: 280;
366
+ readonly scene: 420;
367
+ readonly showcase: 700;
368
+ };
369
+ export type MotionDurationName = keyof typeof motionDurations;
370
+ export declare const motionUsage: Record<MotionDurationName, string>;
371
+ export declare const motionTokens: {
372
+ token: "--rl-motion-instant" | "--rl-motion-press" | "--rl-motion-fast" | "--rl-motion-base" | "--rl-motion-panel" | "--rl-motion-scene" | "--rl-motion-showcase";
373
+ name: "instant" | "press" | "fast" | "base" | "panel" | "scene" | "showcase";
374
+ ms: 0 | 80 | 120 | 200 | 280 | 420 | 700;
375
+ }[];
376
+ /** Cubic-bezier control points. `linear` is reserved for real progress feedback. */
377
+ export declare const motionEasings: {
378
+ readonly out: readonly [0.16, 1, 0.3, 1];
379
+ readonly inOut: readonly [0.65, 0, 0.35, 1];
380
+ };
381
+ export declare const easingTokens: readonly [{
382
+ readonly token: "--rl-ease-out";
383
+ readonly name: "out";
384
+ readonly points: readonly [0.16, 1, 0.3, 1];
385
+ readonly usage: "默认:进入、反馈";
386
+ }, {
387
+ readonly token: "--rl-ease-in-out";
388
+ readonly name: "inOut";
389
+ readonly points: readonly [0.65, 0, 0.35, 1];
390
+ readonly usage: "位置交换、往返";
391
+ }];
392
+ /** Period for indeterminate loops (spinner). Disabled entirely under reduced motion. */
393
+ export declare const motionLoopMs = 900;
394
+ /** Tokens whose value must be redefined by the dark theme. */
395
+ export declare const themedTokens: readonly string[];
396
+ export type ContrastLevel = 'text' | 'large-text' | 'non-text';
397
+ export interface ContrastPair {
398
+ fg: `--rl-${string}`;
399
+ bg: `--rl-${string}`;
400
+ level: ContrastLevel;
401
+ usage: string;
402
+ }
403
+ export declare const minimumContrast: Record<ContrastLevel, number>;
404
+ /** Pairings the components actually render. Each is verified in both themes. */
405
+ export declare const contrastPairs: readonly ContrastPair[];
406
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FkB,CAAC;AAE3C,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUZ,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUb,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAMd,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;EAKf,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBhB,CAAC;AAEX,2GAA2G;AAC3G,eAAO,MAAM,eAAe;;;;;;;;CAQlB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE9D,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAQ1D,CAAC;AAEF,eAAO,MAAM,YAAY;;;;GAItB,CAAC;AAEJ,oFAAoF;AACpF,eAAO,MAAM,aAAa;;;CAGoD,CAAC;AAE/E,eAAO,MAAM,YAAY;;;;;;;;;;EAGf,CAAC;AAEX,wFAAwF;AACxF,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,8DAA8D;AAC9D,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAEzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,MAAM,EAAE,CAAC;IACrB,EAAE,EAAE,QAAQ,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIzD,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,aAAa,EAAE,SAAS,YAAY,EA2ChD,CAAC"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Machine-readable index of the CSS custom properties defined in `tokens.css`.
3
+ * Tests assert that every token listed here exists in each theme, and the
4
+ * showcase renders foundations from this list instead of copying values.
5
+ */
6
+ export const colorGroups = [
7
+ {
8
+ id: 'background',
9
+ label: 'Background',
10
+ description: '页面与容器层级。用明度差表达层级,而不是阴影。',
11
+ tokens: [
12
+ { name: '--rl-bg-canvas', role: '页面底色' },
13
+ { name: '--rl-bg-surface', role: '内容表面' },
14
+ { name: '--rl-bg-subtle', role: '次级区域 / 中性徽标' },
15
+ { name: '--rl-bg-raised', role: '浮起表面' },
16
+ { name: '--rl-bg-hover', role: '中性悬停' },
17
+ { name: '--rl-bg-pressed', role: '中性按压' },
18
+ { name: '--rl-bg-inverse', role: '深墨填充' },
19
+ { name: '--rl-inverse-hover', role: '深墨填充悬停' },
20
+ { name: '--rl-bg-disabled', role: '禁用填充' },
21
+ { name: '--rl-bg-readonly', role: '只读字段' },
22
+ ],
23
+ },
24
+ {
25
+ id: 'foreground',
26
+ label: 'Foreground',
27
+ description: '文本层级。正文默认使用 primary,不以彩色文字为默认。',
28
+ tokens: [
29
+ { name: '--rl-fg-primary', role: '主文本' },
30
+ { name: '--rl-fg-muted', role: '次级文本' },
31
+ { name: '--rl-fg-subtle', role: '元信息 / 编号' },
32
+ { name: '--rl-fg-inverse', role: '深墨填充上的文本' },
33
+ { name: '--rl-fg-on-accent', role: '信号橙填充上的文本' },
34
+ { name: '--rl-fg-on-danger', role: '危险色填充上的文本' },
35
+ { name: '--rl-fg-disabled', role: '禁用文本' },
36
+ ],
37
+ },
38
+ {
39
+ id: 'border',
40
+ label: 'Border',
41
+ description: 'subtle 仅作装饰分隔;可交互边界使用 strong。',
42
+ tokens: [
43
+ { name: '--rl-border-subtle', role: '装饰分隔线' },
44
+ { name: '--rl-border-default', role: '容器轮廓' },
45
+ { name: '--rl-border-strong', role: '控件边界(≥3:1)' },
46
+ ],
47
+ },
48
+ {
49
+ id: 'signal',
50
+ label: 'Research Signal',
51
+ description: '小面积使用的研究橙。每个视图只保留一处主要信号。',
52
+ tokens: [
53
+ { name: '--rl-accent', role: '信号填充' },
54
+ { name: '--rl-accent-hover', role: '信号悬停' },
55
+ { name: '--rl-accent-subtle', role: '选中底色' },
56
+ { name: '--rl-accent-text', role: '浅底上的强调文字' },
57
+ { name: '--rl-accent-amber', role: '档案辅助标记(装饰)' },
58
+ ],
59
+ },
60
+ {
61
+ id: 'status',
62
+ label: 'Status',
63
+ description: '业务状态色。必须与文字同时出现,不能只靠颜色。',
64
+ tokens: [
65
+ { name: '--rl-info', role: '信息' },
66
+ { name: '--rl-info-subtle', role: '信息底色' },
67
+ { name: '--rl-success', role: '完成' },
68
+ { name: '--rl-success-subtle', role: '完成底色' },
69
+ { name: '--rl-warning', role: '注意' },
70
+ { name: '--rl-warning-subtle', role: '注意底色' },
71
+ { name: '--rl-danger', role: '错误 / 高风险' },
72
+ { name: '--rl-danger-hover', role: '危险填充悬停 / 按压' },
73
+ { name: '--rl-danger-subtle', role: '错误底色' },
74
+ ],
75
+ },
76
+ {
77
+ id: 'category',
78
+ label: 'Category',
79
+ description: '分类辅助色,必须和可读标签一起使用。',
80
+ tokens: [
81
+ { name: '--rl-category-1', role: '分类 1' },
82
+ { name: '--rl-category-2', role: '分类 2' },
83
+ { name: '--rl-category-3', role: '分类 3' },
84
+ { name: '--rl-category-4', role: '分类 4' },
85
+ { name: '--rl-category-5', role: '分类 5' },
86
+ { name: '--rl-category-6', role: '分类 6' },
87
+ { name: '--rl-category-7', role: '分类 7' },
88
+ { name: '--rl-category-8', role: '分类 8' },
89
+ ],
90
+ },
91
+ {
92
+ id: 'focus',
93
+ label: 'Focus',
94
+ description: '焦点色独立于品牌橙与危险色。',
95
+ tokens: [{ name: '--rl-focus', role: '焦点环' }],
96
+ },
97
+ ];
98
+ export const typeRoles = [
99
+ { name: 'display', token: '--rl-type-display', spec: '36 / 44 · 600', usage: '展示标题' },
100
+ { name: 'heading-1', token: '--rl-type-heading-1', spec: '28 / 36 · 600', usage: '页面标题' },
101
+ { name: 'heading-2', token: '--rl-type-heading-2', spec: '22 / 30 · 600', usage: '一级内容标题' },
102
+ { name: 'heading-3', token: '--rl-type-heading-3', spec: '18 / 26 · 600', usage: '面板标题' },
103
+ { name: 'body', token: '--rl-type-body', spec: '16 / 24 · 400', usage: '正文、表单' },
104
+ { name: 'body-sm', token: '--rl-type-body-sm', spec: '14 / 21 · 400', usage: '紧凑信息' },
105
+ { name: 'label', token: '--rl-type-label', spec: '14 / 20 · 600', usage: '控件文字' },
106
+ { name: 'meta', token: '--rl-type-meta', spec: '12 / 18 · 500', usage: '辅助标签,不用于长正文' },
107
+ { name: 'mono', token: '--rl-type-mono', spec: '12 / 18 · 500', usage: '编号、时间、单位' },
108
+ ];
109
+ export const spaceScale = [
110
+ { token: '--rl-space-0', px: 0 },
111
+ { token: '--rl-space-1', px: 4 },
112
+ { token: '--rl-space-2', px: 8 },
113
+ { token: '--rl-space-3', px: 12 },
114
+ { token: '--rl-space-4', px: 16 },
115
+ { token: '--rl-space-6', px: 24 },
116
+ { token: '--rl-space-8', px: 32 },
117
+ { token: '--rl-space-12', px: 48 },
118
+ { token: '--rl-space-16', px: 64 },
119
+ ];
120
+ export const radiusScale = [
121
+ { token: '--rl-radius-none', usage: '表格、分隔区块' },
122
+ { token: '--rl-radius-xs', usage: '徽标、标签' },
123
+ { token: '--rl-radius-sm', usage: '按钮、默认表面' },
124
+ { token: '--rl-radius-md', usage: '表单控件' },
125
+ { token: '--rl-radius-lg', usage: '浮层(M2)' },
126
+ ];
127
+ export const borderWidths = [
128
+ { token: '--rl-border-width', usage: '默认边框' },
129
+ { token: '--rl-border-width-strong', usage: '强调轮廓 / 选中' },
130
+ { token: '--rl-focus-width', usage: '焦点环宽度' },
131
+ { token: '--rl-focus-offset', usage: '焦点环偏移' },
132
+ ];
133
+ export const densityTokens = [
134
+ { token: '--rl-control-height-sm', usage: '小号控件高度' },
135
+ { token: '--rl-control-height-md', usage: '默认控件高度' },
136
+ { token: '--rl-control-height-lg', usage: '大号控件高度' },
137
+ { token: '--rl-control-padding-x-sm', usage: '小号控件水平内距' },
138
+ { token: '--rl-control-padding-x-md', usage: '默认控件水平内距' },
139
+ { token: '--rl-control-padding-x-lg', usage: '大号控件水平内距' },
140
+ { token: '--rl-control-gap', usage: '控件内图标与文字间距' },
141
+ { token: '--rl-surface-padding', usage: '表面默认内距' },
142
+ { token: '--rl-badge-height-sm', usage: '小号徽标高度(非点击目标)' },
143
+ { token: '--rl-badge-height-md', usage: '默认徽标高度(非点击目标)' },
144
+ { token: '--rl-indicator-size', usage: '状态圆点' },
145
+ { token: '--rl-field-label-width', usage: '行内字段标签列宽' },
146
+ { token: '--rl-dialog-width-sm', usage: '小号对话框宽度' },
147
+ { token: '--rl-dialog-width-md', usage: '默认对话框宽度' },
148
+ { token: '--rl-dialog-width-lg', usage: '大号对话框宽度' },
149
+ { token: '--rl-tooltip-max-width', usage: '提示最大宽度' },
150
+ { token: '--rl-popup-max-height', usage: '下拉列表最大高度' },
151
+ { token: '--rl-popup-offset', usage: '浮层与触发器间距' },
152
+ { token: '--rl-popover-width-sm', usage: '小号弹出面板宽度' },
153
+ { token: '--rl-popover-width-md', usage: '默认弹出面板宽度' },
154
+ { token: '--rl-popover-width-lg', usage: '大号弹出面板宽度' },
155
+ { token: '--rl-menu-min-width', usage: '菜单最小宽度' },
156
+ { token: '--rl-toast-width', usage: '通知宽度' },
157
+ { token: '--rl-orbit-size', usage: '轨道示意图尺寸(展示效果)' },
158
+ ];
159
+ /** Duration tokens in milliseconds. Source of truth for CSS (`--rl-motion-*`) and motion/react presets. */
160
+ export const motionDurations = {
161
+ instant: 0,
162
+ press: 80,
163
+ fast: 120,
164
+ base: 200,
165
+ panel: 280,
166
+ scene: 420,
167
+ showcase: 700,
168
+ };
169
+ export const motionUsage = {
170
+ instant: '减动时的不必要布局位移',
171
+ press: '按压反馈',
172
+ fast: 'hover / focus 过渡',
173
+ base: '标签、选中与反馈',
174
+ panel: '普通面板 / 详情层',
175
+ scene: '档案视图身份连续',
176
+ showcase: '仅用户主动触发的演示场景',
177
+ };
178
+ export const motionTokens = Object.keys(motionDurations).map((name) => ({
179
+ token: `--rl-motion-${name}`,
180
+ name,
181
+ ms: motionDurations[name],
182
+ }));
183
+ /** Cubic-bezier control points. `linear` is reserved for real progress feedback. */
184
+ export const motionEasings = {
185
+ out: [0.16, 1, 0.3, 1],
186
+ inOut: [0.65, 0, 0.35, 1],
187
+ };
188
+ export const easingTokens = [
189
+ { token: '--rl-ease-out', name: 'out', points: motionEasings.out, usage: '默认:进入、反馈' },
190
+ { token: '--rl-ease-in-out', name: 'inOut', points: motionEasings.inOut, usage: '位置交换、往返' },
191
+ ];
192
+ /** Period for indeterminate loops (spinner). Disabled entirely under reduced motion. */
193
+ export const motionLoopMs = 900;
194
+ /** Tokens whose value must be redefined by the dark theme. */
195
+ export const themedTokens = colorGroups.flatMap((group) => group.tokens.map((token) => token.name));
196
+ export const minimumContrast = {
197
+ text: 4.5,
198
+ 'large-text': 3,
199
+ 'non-text': 3,
200
+ };
201
+ /** Pairings the components actually render. Each is verified in both themes. */
202
+ export const contrastPairs = [
203
+ { fg: '--rl-fg-primary', bg: '--rl-bg-canvas', level: 'text', usage: '正文 / 画布' },
204
+ { fg: '--rl-fg-primary', bg: '--rl-bg-surface', level: 'text', usage: '正文 / 表面' },
205
+ { fg: '--rl-fg-primary', bg: '--rl-bg-subtle', level: 'text', usage: '中性徽标' },
206
+ { fg: '--rl-fg-primary', bg: '--rl-bg-hover', level: 'text', usage: '次级按钮悬停' },
207
+ { fg: '--rl-fg-muted', bg: '--rl-bg-canvas', level: 'text', usage: '次级文本 / 画布' },
208
+ { fg: '--rl-fg-muted', bg: '--rl-bg-surface', level: 'text', usage: '次级文本 / 表面' },
209
+ { fg: '--rl-fg-subtle', bg: '--rl-bg-surface', level: 'text', usage: '元信息 / 表面' },
210
+ { fg: '--rl-fg-subtle', bg: '--rl-bg-canvas', level: 'text', usage: '元信息 / 画布' },
211
+ { fg: '--rl-fg-subtle', bg: '--rl-bg-subtle', level: 'text', usage: '元信息 / 选中导航、代码标题' },
212
+ { fg: '--rl-fg-muted', bg: '--rl-bg-subtle', level: 'text', usage: '次级文本 / 次级区域' },
213
+ { fg: '--rl-fg-muted', bg: '--rl-bg-hover', level: 'text', usage: '次级文本 / 悬停' },
214
+ { fg: '--rl-fg-primary', bg: '--rl-bg-pressed', level: 'text', usage: '次级按钮按压' },
215
+ { fg: '--rl-fg-inverse', bg: '--rl-bg-inverse', level: 'text', usage: 'Primary 按钮' },
216
+ { fg: '--rl-fg-inverse', bg: '--rl-inverse-hover', level: 'text', usage: 'Primary 按钮悬停' },
217
+ { fg: '--rl-fg-on-accent', bg: '--rl-accent', level: 'text', usage: 'Accent 按钮' },
218
+ { fg: '--rl-fg-on-accent', bg: '--rl-accent-hover', level: 'text', usage: 'Accent 按钮悬停' },
219
+ { fg: '--rl-accent-text', bg: '--rl-bg-canvas', level: 'text', usage: '强调文字 / 画布' },
220
+ { fg: '--rl-accent-text', bg: '--rl-bg-surface', level: 'text', usage: '强调文字 / 表面' },
221
+ { fg: '--rl-fg-primary', bg: '--rl-accent-subtle', level: 'text', usage: '选中项文字' },
222
+ { fg: '--rl-info', bg: '--rl-info-subtle', level: 'text', usage: 'Info 徽标' },
223
+ { fg: '--rl-success', bg: '--rl-success-subtle', level: 'text', usage: 'Success 徽标' },
224
+ { fg: '--rl-warning', bg: '--rl-warning-subtle', level: 'text', usage: 'Warning 徽标' },
225
+ { fg: '--rl-danger', bg: '--rl-danger-subtle', level: 'text', usage: 'Danger 徽标' },
226
+ { fg: '--rl-border-strong', bg: '--rl-bg-surface', level: 'non-text', usage: '控件边界 / 表面' },
227
+ { fg: '--rl-border-strong', bg: '--rl-bg-canvas', level: 'non-text', usage: '控件边界 / 画布' },
228
+ { fg: '--rl-focus', bg: '--rl-bg-canvas', level: 'non-text', usage: '焦点环 / 画布' },
229
+ { fg: '--rl-focus', bg: '--rl-bg-surface', level: 'non-text', usage: '焦点环 / 表面' },
230
+ { fg: '--rl-accent', bg: '--rl-bg-surface', level: 'non-text', usage: '信号标记 / 表面' },
231
+ { fg: '--rl-fg-primary', bg: '--rl-bg-readonly', level: 'text', usage: '只读字段值' },
232
+ { fg: '--rl-border-strong', bg: '--rl-bg-readonly', level: 'non-text', usage: '只读字段边界' },
233
+ { fg: '--rl-border-strong', bg: '--rl-bg-raised', level: 'non-text', usage: '控件边界 / 浮层' },
234
+ { fg: '--rl-fg-muted', bg: '--rl-bg-raised', level: 'text', usage: '次级文本 / 浮层' },
235
+ { fg: '--rl-fg-subtle', bg: '--rl-bg-raised', level: 'text', usage: '占位符 / 浮层' },
236
+ { fg: '--rl-danger', bg: '--rl-bg-surface', level: 'text', usage: '字段错误文本 / 表面' },
237
+ { fg: '--rl-danger', bg: '--rl-bg-canvas', level: 'text', usage: '字段错误文本 / 画布' },
238
+ { fg: '--rl-danger', bg: '--rl-bg-surface', level: 'non-text', usage: '无效字段边界' },
239
+ { fg: '--rl-fg-on-danger', bg: '--rl-danger', level: 'text', usage: '危险菜单项高亮' },
240
+ { fg: '--rl-fg-on-danger', bg: '--rl-danger-hover', level: 'text', usage: '危险按钮悬停 / 按压' },
241
+ { fg: '--rl-info', bg: '--rl-bg-raised', level: 'non-text', usage: '通知状态条 / 图标' },
242
+ { fg: '--rl-success', bg: '--rl-bg-raised', level: 'non-text', usage: '通知状态条 / 图标' },
243
+ { fg: '--rl-warning', bg: '--rl-bg-raised', level: 'non-text', usage: '通知状态条 / 图标' },
244
+ { fg: '--rl-danger', bg: '--rl-bg-raised', level: 'text', usage: '危险菜单项 / 通知' },
245
+ ];
246
+ //# sourceMappingURL=manifest.js.map