@echelon-foundry/design-system 0.8.0 → 0.9.0-main.252.1
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/CHANGELOG.md +15 -0
- package/contracts/color-contract.json +1814 -0
- package/dist/all.css +82 -2
- package/dist/brands/echelon.css +16 -0
- package/dist/brands/example-harbor.css +16 -0
- package/dist/build-metrics.json +5 -5
- package/dist/components.css +5 -1
- package/dist/foundations.css +1 -1
- package/dist/icons/registry.json +1 -1
- package/dist/marketing/forma-all.css +83 -3
- package/dist/marketing/forma-echelon-marketing.css +78 -2
- package/dist/marketing/forma-marketing-theme-echelon.css +1 -1
- package/dist/marketing/forma-marketing.css +78 -2
- package/dist/marketing/forma-marketing.manifest.json +9 -9
- package/dist/marketing/forma-marketing.sha256 +4 -4
- package/dist/tokens.css +76 -0
- package/docs/BRANDING.md +6 -3
- package/docs/COLOR.md +77 -0
- package/package.json +13 -3
- package/schemas/brand-manifest.schema.json +1 -1
- package/tokens/echelon.tokens.json +252 -0
- package/tools/color-contract/build.mjs +16 -0
- package/tools/color-contract/cli.mjs +26 -0
- package/tools/color-contract/index.mjs +170 -0
package/dist/tokens.css
CHANGED
|
@@ -159,6 +159,10 @@
|
|
|
159
159
|
--ef-color-control-track: #686d68;
|
|
160
160
|
--ef-color-focus-gap: #f2efe7;
|
|
161
161
|
--ef-color-focus-ring: #171a18;
|
|
162
|
+
--ef-color-status-danger: #a13a2c;
|
|
163
|
+
--ef-color-status-info: #2d5f86;
|
|
164
|
+
--ef-color-status-success: #2e6a45;
|
|
165
|
+
--ef-color-status-warning: #86560f;
|
|
162
166
|
--ef-color-surface-inverse: #202421;
|
|
163
167
|
--ef-color-surface-inverse-secondary: #3a403c;
|
|
164
168
|
--ef-color-surface-primary: #f2efe7;
|
|
@@ -180,6 +184,10 @@
|
|
|
180
184
|
--ef-color-control-track: #686d68;
|
|
181
185
|
--ef-color-focus-gap: #171a18;
|
|
182
186
|
--ef-color-focus-ring: #f2efe7;
|
|
187
|
+
--ef-color-status-danger: #ef9a8b;
|
|
188
|
+
--ef-color-status-info: #90b9dc;
|
|
189
|
+
--ef-color-status-success: #8cc49f;
|
|
190
|
+
--ef-color-status-warning: #ddb266;
|
|
183
191
|
--ef-color-surface-inverse: #f2efe7;
|
|
184
192
|
--ef-color-surface-inverse-secondary: #e3e0d7;
|
|
185
193
|
--ef-color-surface-primary: #171a18;
|
|
@@ -201,6 +209,10 @@
|
|
|
201
209
|
--ef-color-control-track: #555555;
|
|
202
210
|
--ef-color-focus-gap: #ffffff;
|
|
203
211
|
--ef-color-focus-ring: #005ea8;
|
|
212
|
+
--ef-color-status-danger: #a13a2c;
|
|
213
|
+
--ef-color-status-info: #2d5f86;
|
|
214
|
+
--ef-color-status-success: #2e6a45;
|
|
215
|
+
--ef-color-status-warning: #86560f;
|
|
204
216
|
--ef-color-surface-inverse: #161616;
|
|
205
217
|
--ef-color-surface-inverse-secondary: #303030;
|
|
206
218
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -221,6 +233,10 @@
|
|
|
221
233
|
--ef-color-control-track: #555555;
|
|
222
234
|
--ef-color-focus-gap: #ffffff;
|
|
223
235
|
--ef-color-focus-ring: #315f8c;
|
|
236
|
+
--ef-color-status-danger: #a13a2c;
|
|
237
|
+
--ef-color-status-info: #2d5f86;
|
|
238
|
+
--ef-color-status-success: #2e6a45;
|
|
239
|
+
--ef-color-status-warning: #86560f;
|
|
224
240
|
--ef-color-surface-inverse: #161616;
|
|
225
241
|
--ef-color-surface-inverse-secondary: #303030;
|
|
226
242
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -241,6 +257,10 @@
|
|
|
241
257
|
--ef-color-control-track: #50636d;
|
|
242
258
|
--ef-color-focus-gap: #f8fafb;
|
|
243
259
|
--ef-color-focus-ring: #005ea8;
|
|
260
|
+
--ef-color-status-danger: #a13a2c;
|
|
261
|
+
--ef-color-status-info: #2d5f86;
|
|
262
|
+
--ef-color-status-success: #2e6a45;
|
|
263
|
+
--ef-color-status-warning: #86560f;
|
|
244
264
|
--ef-color-surface-inverse: #17242b;
|
|
245
265
|
--ef-color-surface-inverse-secondary: #303030;
|
|
246
266
|
--ef-color-surface-primary: #f8fafb;
|
|
@@ -261,6 +281,10 @@
|
|
|
261
281
|
--ef-color-control-track: #555555;
|
|
262
282
|
--ef-color-focus-gap: #ffffff;
|
|
263
283
|
--ef-color-focus-ring: #175f8f;
|
|
284
|
+
--ef-color-status-danger: #a13a2c;
|
|
285
|
+
--ef-color-status-info: #2d5f86;
|
|
286
|
+
--ef-color-status-success: #2e6a45;
|
|
287
|
+
--ef-color-status-warning: #86560f;
|
|
264
288
|
--ef-color-surface-inverse: #161616;
|
|
265
289
|
--ef-color-surface-inverse-secondary: #303030;
|
|
266
290
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -281,6 +305,10 @@
|
|
|
281
305
|
--ef-color-control-track: #50636d;
|
|
282
306
|
--ef-color-focus-gap: #f4f7f8;
|
|
283
307
|
--ef-color-focus-ring: #245d7a;
|
|
308
|
+
--ef-color-status-danger: #a13a2c;
|
|
309
|
+
--ef-color-status-info: #2d5f86;
|
|
310
|
+
--ef-color-status-success: #2e6a45;
|
|
311
|
+
--ef-color-status-warning: #86560f;
|
|
284
312
|
--ef-color-surface-inverse: #17252b;
|
|
285
313
|
--ef-color-surface-inverse-secondary: #303030;
|
|
286
314
|
--ef-color-surface-primary: #f4f7f8;
|
|
@@ -301,6 +329,10 @@
|
|
|
301
329
|
--ef-color-control-track: #686d68;
|
|
302
330
|
--ef-color-focus-gap: #171a18;
|
|
303
331
|
--ef-color-focus-ring: #f2efe7;
|
|
332
|
+
--ef-color-status-danger: #ef9a8b;
|
|
333
|
+
--ef-color-status-info: #90b9dc;
|
|
334
|
+
--ef-color-status-success: #8cc49f;
|
|
335
|
+
--ef-color-status-warning: #ddb266;
|
|
304
336
|
--ef-color-surface-inverse: #f2efe7;
|
|
305
337
|
--ef-color-surface-inverse-secondary: #e3e0d7;
|
|
306
338
|
--ef-color-surface-primary: #171a18;
|
|
@@ -321,6 +353,10 @@
|
|
|
321
353
|
--ef-color-control-track: #686d68;
|
|
322
354
|
--ef-color-focus-gap: #12191d;
|
|
323
355
|
--ef-color-focus-ring: #e8f1f4;
|
|
356
|
+
--ef-color-status-danger: #ef9a8b;
|
|
357
|
+
--ef-color-status-info: #90b9dc;
|
|
358
|
+
--ef-color-status-success: #8cc49f;
|
|
359
|
+
--ef-color-status-warning: #ddb266;
|
|
324
360
|
--ef-color-surface-inverse: #e8f1f4;
|
|
325
361
|
--ef-color-surface-inverse-secondary: #e3e0d7;
|
|
326
362
|
--ef-color-surface-primary: #12191d;
|
|
@@ -341,6 +377,10 @@
|
|
|
341
377
|
--ef-color-control-track: #686d68;
|
|
342
378
|
--ef-color-focus-gap: #101619;
|
|
343
379
|
--ef-color-focus-ring: #e7eef0;
|
|
380
|
+
--ef-color-status-danger: #ef9a8b;
|
|
381
|
+
--ef-color-status-info: #90b9dc;
|
|
382
|
+
--ef-color-status-success: #8cc49f;
|
|
383
|
+
--ef-color-status-warning: #ddb266;
|
|
344
384
|
--ef-color-surface-inverse: #e7eef0;
|
|
345
385
|
--ef-color-surface-inverse-secondary: #e3e0d7;
|
|
346
386
|
--ef-color-surface-primary: #101619;
|
|
@@ -361,6 +401,10 @@
|
|
|
361
401
|
--ef-color-control-track: #555555;
|
|
362
402
|
--ef-color-focus-gap: #ffffff;
|
|
363
403
|
--ef-color-focus-ring: #000000;
|
|
404
|
+
--ef-color-status-danger: #a13a2c;
|
|
405
|
+
--ef-color-status-info: #2d5f86;
|
|
406
|
+
--ef-color-status-success: #2e6a45;
|
|
407
|
+
--ef-color-status-warning: #86560f;
|
|
364
408
|
--ef-color-surface-inverse: #000000;
|
|
365
409
|
--ef-color-surface-inverse-secondary: #303030;
|
|
366
410
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -381,6 +425,10 @@
|
|
|
381
425
|
--ef-color-control-track: #555555;
|
|
382
426
|
--ef-color-focus-gap: #ffffff;
|
|
383
427
|
--ef-color-focus-ring: #161616;
|
|
428
|
+
--ef-color-status-danger: #a13a2c;
|
|
429
|
+
--ef-color-status-info: #2d5f86;
|
|
430
|
+
--ef-color-status-success: #2e6a45;
|
|
431
|
+
--ef-color-status-warning: #86560f;
|
|
384
432
|
--ef-color-surface-inverse: #161616;
|
|
385
433
|
--ef-color-surface-inverse-secondary: #303030;
|
|
386
434
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -401,6 +449,10 @@
|
|
|
401
449
|
--ef-color-control-track: #555555;
|
|
402
450
|
--ef-color-focus-gap: #eeeeee;
|
|
403
451
|
--ef-color-focus-ring: #161616;
|
|
452
|
+
--ef-color-status-danger: #a13a2c;
|
|
453
|
+
--ef-color-status-info: #2d5f86;
|
|
454
|
+
--ef-color-status-success: #2e6a45;
|
|
455
|
+
--ef-color-status-warning: #86560f;
|
|
404
456
|
--ef-color-surface-inverse: #161616;
|
|
405
457
|
--ef-color-surface-inverse-secondary: #303030;
|
|
406
458
|
--ef-color-surface-primary: #eeeeee;
|
|
@@ -421,6 +473,10 @@
|
|
|
421
473
|
--ef-color-control-track: #555555;
|
|
422
474
|
--ef-color-focus-gap: #f1f0e5;
|
|
423
475
|
--ef-color-focus-ring: #20281f;
|
|
476
|
+
--ef-color-status-danger: #a13a2c;
|
|
477
|
+
--ef-color-status-info: #2d5f86;
|
|
478
|
+
--ef-color-status-success: #2e6a45;
|
|
479
|
+
--ef-color-status-warning: #86560f;
|
|
424
480
|
--ef-color-surface-inverse: #20281f;
|
|
425
481
|
--ef-color-surface-inverse-secondary: #303030;
|
|
426
482
|
--ef-color-surface-primary: #f1f0e5;
|
|
@@ -441,6 +497,10 @@
|
|
|
441
497
|
--ef-color-control-track: #555555;
|
|
442
498
|
--ef-color-focus-gap: #f6f4ef;
|
|
443
499
|
--ef-color-focus-ring: #161616;
|
|
500
|
+
--ef-color-status-danger: #a13a2c;
|
|
501
|
+
--ef-color-status-info: #2d5f86;
|
|
502
|
+
--ef-color-status-success: #2e6a45;
|
|
503
|
+
--ef-color-status-warning: #86560f;
|
|
444
504
|
--ef-color-surface-inverse: #161616;
|
|
445
505
|
--ef-color-surface-inverse-secondary: #303030;
|
|
446
506
|
--ef-color-surface-primary: #f6f4ef;
|
|
@@ -461,6 +521,10 @@
|
|
|
461
521
|
--ef-color-control-track: #555555;
|
|
462
522
|
--ef-color-focus-gap: #ffffff;
|
|
463
523
|
--ef-color-focus-ring: #9c2f25;
|
|
524
|
+
--ef-color-status-danger: #a13a2c;
|
|
525
|
+
--ef-color-status-info: #2d5f86;
|
|
526
|
+
--ef-color-status-success: #2e6a45;
|
|
527
|
+
--ef-color-status-warning: #86560f;
|
|
464
528
|
--ef-color-surface-inverse: #161616;
|
|
465
529
|
--ef-color-surface-inverse-secondary: #303030;
|
|
466
530
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -481,6 +545,10 @@
|
|
|
481
545
|
--ef-color-control-track: #555555;
|
|
482
546
|
--ef-color-focus-gap: #f7f2e7;
|
|
483
547
|
--ef-color-focus-ring: #211d18;
|
|
548
|
+
--ef-color-status-danger: #a13a2c;
|
|
549
|
+
--ef-color-status-info: #2d5f86;
|
|
550
|
+
--ef-color-status-success: #2e6a45;
|
|
551
|
+
--ef-color-status-warning: #86560f;
|
|
484
552
|
--ef-color-surface-inverse: #211d18;
|
|
485
553
|
--ef-color-surface-inverse-secondary: #303030;
|
|
486
554
|
--ef-color-surface-primary: #f7f2e7;
|
|
@@ -501,6 +569,10 @@
|
|
|
501
569
|
--ef-color-control-track: #555555;
|
|
502
570
|
--ef-color-focus-gap: #ffffff;
|
|
503
571
|
--ef-color-focus-ring: #7a3f70;
|
|
572
|
+
--ef-color-status-danger: #a13a2c;
|
|
573
|
+
--ef-color-status-info: #2d5f86;
|
|
574
|
+
--ef-color-status-success: #2e6a45;
|
|
575
|
+
--ef-color-status-warning: #86560f;
|
|
504
576
|
--ef-color-surface-inverse: #161616;
|
|
505
577
|
--ef-color-surface-inverse-secondary: #303030;
|
|
506
578
|
--ef-color-surface-primary: #ffffff;
|
|
@@ -521,6 +593,10 @@
|
|
|
521
593
|
--ef-color-control-track: #555555;
|
|
522
594
|
--ef-color-focus-gap: #f3eadc;
|
|
523
595
|
--ef-color-focus-ring: #29231c;
|
|
596
|
+
--ef-color-status-danger: #a13a2c;
|
|
597
|
+
--ef-color-status-info: #2d5f86;
|
|
598
|
+
--ef-color-status-success: #2e6a45;
|
|
599
|
+
--ef-color-status-warning: #86560f;
|
|
524
600
|
--ef-color-surface-inverse: #29231c;
|
|
525
601
|
--ef-color-surface-inverse-secondary: #303030;
|
|
526
602
|
--ef-color-surface-primary: #f3eadc;
|
package/docs/BRANDING.md
CHANGED
|
@@ -125,9 +125,12 @@ Ordo / domain
|
|
|
125
125
|
|
|
126
126
|
## Accessibility
|
|
127
127
|
|
|
128
|
-
The brand compiler
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
The brand compiler validates the relationships that are most likely to make a
|
|
129
|
+
branded interface unreadable: primary and secondary text, text on secondary
|
|
130
|
+
surfaces, inverse text, primary/secondary accents, focus rings, and every
|
|
131
|
+
declared status role. Shipped brands override success, warning, danger, and
|
|
132
|
+
info; a third-party 1.0 manifest may omit them and inherit the active core
|
|
133
|
+
theme, preserving schema compatibility.
|
|
131
134
|
|
|
132
135
|
A failed brand does not get a best-effort output. Fix the manifest and compile
|
|
133
136
|
again.
|
package/docs/COLOR.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Semantic color contract
|
|
2
|
+
|
|
3
|
+
Forma 0.9.0 publishes its machine-readable color vocabulary at
|
|
4
|
+
`contracts/color-contract.json`. The file is generated from the token source,
|
|
5
|
+
shipped brand manifests, and `package.json`; consumers must use the contract
|
|
6
|
+
from the exact Forma version they pin. The manifest separates public
|
|
7
|
+
`--ef-color-*` properties from internal component variables, records every
|
|
8
|
+
theme and shipped brand value, and declares supported semantic pairings.
|
|
9
|
+
|
|
10
|
+
Validate application CSS without copying Forma CSS:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx forma-color validate src/**/*.css
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The programmatic API is exported as
|
|
17
|
+
`@echelon-foundry/design-system/color-contract`. `validateCssColorReferences`
|
|
18
|
+
reports the source file, line, column, unsupported name, and supported role.
|
|
19
|
+
Public `--ef-color-*` references and reserved internal color-related prefixes
|
|
20
|
+
are governed; other Forma APIs keep their own contracts. Application variables
|
|
21
|
+
such as `--summa-*` are deliberately ignored. Internal variables reported by
|
|
22
|
+
the validator are not consumer APIs even when they appear in compiled CSS.
|
|
23
|
+
|
|
24
|
+
## Fallback policy
|
|
25
|
+
|
|
26
|
+
An unknown `--ef-*` name is invalid even when `var()` supplies a literal
|
|
27
|
+
fallback. For a known public color token, a six-digit literal fallback is
|
|
28
|
+
allowed only when it exactly repeats that release's light-theme value. This
|
|
29
|
+
narrow exception supports loading a standalone Forma layer; it is not a way to
|
|
30
|
+
invent a brand or semantic value. Prefer no literal fallback when the complete
|
|
31
|
+
Forma stylesheet is loaded.
|
|
32
|
+
|
|
33
|
+
## Supported pairings
|
|
34
|
+
|
|
35
|
+
The manifest is the canonical exhaustive table. In summary:
|
|
36
|
+
|
|
37
|
+
| Meaning | Foreground | Surface or boundary | Non-color requirement |
|
|
38
|
+
| --- | --- | --- | --- |
|
|
39
|
+
| Primary action | `text-inverse` | `surface-inverse` | visible label and native action semantics |
|
|
40
|
+
| Secondary action | `text-primary` | `surface-primary`, `border-functional` | visible label and boundary |
|
|
41
|
+
| Link | `accent-primary` | `surface-primary` | underline or link context; Forma re-pairs links on secondary surfaces |
|
|
42
|
+
| Selection/current | `text-inverse` | `surface-inverse` | native checked/selected state or `aria-current` |
|
|
43
|
+
| Notice/pending/unknown | `status-info` | `surface-primary` | explicit state text plus glyph, border, or accessible name |
|
|
44
|
+
| Warning | `status-warning` | `surface-primary` | explicit state text plus glyph, border, or accessible name |
|
|
45
|
+
| Danger | `status-danger` | `surface-primary` | explicit state text plus glyph, border, or accessible name |
|
|
46
|
+
| Success | `status-success` | `surface-primary` | explicit state text plus glyph, border, or accessible name |
|
|
47
|
+
| Disabled | `text-primary` | `surface-secondary`, dashed `border-functional` | native `disabled`; opacity is supplemental |
|
|
48
|
+
| Focus | `focus-ring` | effective rendered surface, separated by `focus-gap` | keyboard-visible outline geometry |
|
|
49
|
+
|
|
50
|
+
Every shipped theme and brand provides the four status roles. Each status
|
|
51
|
+
foreground is contrast-gated at 4.5:1 on `surface-primary`. In forced colors,
|
|
52
|
+
foreground and status roles project to `CanvasText`, surfaces to `Canvas`, and
|
|
53
|
+
selection to `Highlight`/`HighlightText` where a component owns selection.
|
|
54
|
+
Derived `color-mix()` and translucent colors must be tested after browser
|
|
55
|
+
composition against their effective surface.
|
|
56
|
+
|
|
57
|
+
Categorical and ordinal data-visualization palettes are application-level
|
|
58
|
+
extensions, not Forma primitives. Applications must provide direct labels,
|
|
59
|
+
shapes, patterns, ordered position, or a text/table alternative and validate
|
|
60
|
+
the complete rendered palette. Grayscale and protan/deutan/tritan simulations
|
|
61
|
+
are useful regression screens, not proof of perception or aesthetic quality.
|
|
62
|
+
|
|
63
|
+
## Summa migration
|
|
64
|
+
|
|
65
|
+
The plausible-looking names below have never been public Forma tokens and must
|
|
66
|
+
remain refused, including against the 0.6.1 compatibility fixture:
|
|
67
|
+
|
|
68
|
+
| Unsupported name | Supported role | Required pairing |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| `--ef-color-action-primary` | `--ef-color-surface-inverse` | `--ef-color-text-inverse` |
|
|
71
|
+
| `--ef-color-text-link` | `--ef-color-accent-primary` | `--ef-color-surface-primary` or Forma's secondary-surface link hook |
|
|
72
|
+
| `--ef-color-focus` | `--ef-color-focus-ring` | `--ef-color-focus-gap` on the effective surface |
|
|
73
|
+
| `--ef-color-text-danger` | `--ef-color-status-danger` | `--ef-color-surface-primary` plus explicit error text |
|
|
74
|
+
|
|
75
|
+
A valid token reference proves compatibility only. It does not prove that the
|
|
76
|
+
role is the right product-level palette, emphasis, hierarchy, or cultural
|
|
77
|
+
choice. Those decisions require contextual design review.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@echelon-foundry/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-main.252.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Zero-runtime HTML and CSS design system for Echelon Foundry applications.",
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
"./marketing.css": "./dist/marketing.css",
|
|
24
24
|
"./marketing/*": "./dist/marketing/*",
|
|
25
25
|
"./tokens.json": "./tokens/echelon.tokens.json",
|
|
26
|
+
"./color-contract": "./tools/color-contract/index.mjs",
|
|
27
|
+
"./contracts/color-contract.json": "./contracts/color-contract.json",
|
|
26
28
|
"./figma/components.json": "./figma/component-contracts.json",
|
|
27
29
|
"./contracts/diagram-presentation.json": "./contracts/diagram-presentation.json",
|
|
28
30
|
"./workflow/forma-workflow.schema.json": "./schemas/workflow/1.0/forma-workflow.schema.json",
|
|
@@ -42,6 +44,9 @@
|
|
|
42
44
|
"docs/BRANDING.md",
|
|
43
45
|
"docs/MARKETING-SITES.md",
|
|
44
46
|
"tokens/echelon.tokens.json",
|
|
47
|
+
"tools/color-contract",
|
|
48
|
+
"contracts/color-contract.json",
|
|
49
|
+
"docs/COLOR.md",
|
|
45
50
|
"figma/component-contracts.json",
|
|
46
51
|
"contracts/diagram-presentation.json",
|
|
47
52
|
"schemas/workflow/1.0/forma-workflow.schema.json",
|
|
@@ -62,15 +67,16 @@
|
|
|
62
67
|
"clean": "node tools/clean.mjs",
|
|
63
68
|
"tokens:build": "dotnet run --project tools/TokenCompiler/TokenCompiler.fsproj -- tokens/echelon.tokens.json dist/tokens.css",
|
|
64
69
|
"assets:build": "node tools/build-assets.mjs",
|
|
65
|
-
"build": "npm run clean && npm run tokens:build && npm run brands:build && npm run marketing:theme && npm run assets:build && npm run marketing:build && npm run example:install",
|
|
70
|
+
"build": "npm run clean && npm run tokens:build && npm run brands:build && npm run color:build && npm run marketing:theme && npm run assets:build && npm run marketing:build && npm run example:install",
|
|
66
71
|
"test:tokens": "node --test tests/token-compiler.test.mjs",
|
|
67
72
|
"test:browser": "playwright test",
|
|
68
73
|
"test:a11y": "playwright test tests/browser/accessibility.spec.mjs",
|
|
69
74
|
"test:runtime": "node --test tests/zero-runtime.test.mjs",
|
|
70
75
|
"test:design": "node --test tests/design-contract.test.mjs",
|
|
76
|
+
"test:color": "node --test tests/color-contract.test.mjs",
|
|
71
77
|
"motion:audit": "node tools/motion-audit.mjs",
|
|
72
78
|
"test:motion": "node --test tests/motion-audit.test.mjs tests/motion-gate.test.mjs && node tools/motion-audit.mjs --strict",
|
|
73
|
-
"check": "npm run build && npm run icons:check && npm run test:tokens && npm run test:brands && npm run test:runtime && npm run test:design && npm run test:motion && npm run test:marketing && npm run test:character-grid && npm run test:figma && npm run test:css && npm run test:package && npm run workflow:test && npm run workflow:build && npm run test:workflow-package && npm run test:browser",
|
|
79
|
+
"check": "npm run build && npm run icons:check && npm run test:tokens && npm run test:brands && npm run test:runtime && npm run test:design && npm run test:color && npm run test:motion && npm run test:marketing && npm run test:character-grid && npm run test:figma && npm run test:css && npm run test:package && npm run workflow:test && npm run workflow:build && npm run test:workflow-package && npm run test:browser",
|
|
74
80
|
"site:build": "npm run build && node tools/build-site.mjs",
|
|
75
81
|
"site:test": "node --test tests/site-build.test.mjs tests/catalog-coverage.test.mjs tests/icon-docs.test.mjs tests/catalog-interaction.test.mjs",
|
|
76
82
|
"site:check": "npm run site:build && npm run catalog:check && npm run site:test && npm run site:mobile",
|
|
@@ -80,6 +86,7 @@
|
|
|
80
86
|
"test:css": "node --test tests/css-source.test.mjs tests/dist-css.test.mjs tests/contrast-pairs.test.mjs tests/diagram-contract.test.mjs",
|
|
81
87
|
"test:contrast": "node --test tests/contrast-pairs.test.mjs && playwright test tests/browser/pattern-contrast.spec.mjs --project=chromium",
|
|
82
88
|
"brands:build": "dotnet run --project tools/BrandCompiler/BrandCompiler.fsproj -- brands dist/brands",
|
|
89
|
+
"color:build": "node tools/color-contract/build.mjs",
|
|
83
90
|
"test:brands": "node --test tests/brand-compiler.test.mjs",
|
|
84
91
|
"test:character-grid": "node --test tests/character-grid.test.mjs",
|
|
85
92
|
"marketing:theme": "dotnet run --project tools/TokenCompiler/TokenCompiler.fsproj -- themes/echelon/marketing.tokens.json build/marketing/echelon-marketing.tokens.css --reference tokens/echelon.tokens.json",
|
|
@@ -106,6 +113,9 @@
|
|
|
106
113
|
"@axe-core/playwright": "4.13.0",
|
|
107
114
|
"@playwright/test": "1.63.0"
|
|
108
115
|
},
|
|
116
|
+
"bin": {
|
|
117
|
+
"forma-color": "./tools/color-contract/cli.mjs"
|
|
118
|
+
},
|
|
109
119
|
"publishConfig": {
|
|
110
120
|
"access": "public",
|
|
111
121
|
"provenance": true
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"status": {
|
|
123
123
|
"type": "object",
|
|
124
124
|
"additionalProperties": false,
|
|
125
|
-
"description": "Optional
|
|
125
|
+
"description": "Optional brand overrides for public status roles. Omitted roles inherit from the active core theme; declared values must reach 4.5:1 on the primary surface and accompany a non-color cue.",
|
|
126
126
|
"properties": {
|
|
127
127
|
"success": { "$ref": "#/$defs/hex" },
|
|
128
128
|
"warning": { "$ref": "#/$defs/hex" },
|