@echelon-foundry/design-system 0.11.0 → 0.12.0-main.262.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 +28 -0
- package/contracts/color-contract.json +1 -1
- package/contracts/diagram-presentation.json +9 -5
- package/dist/icons/registry.json +1 -1
- package/dist/marketing/forma-all.css +1 -1
- package/dist/marketing/forma-echelon-marketing.css +1 -1
- package/dist/marketing/forma-marketing-theme-echelon.css +1 -1
- package/dist/marketing/forma-marketing.css +1 -1
- package/dist/marketing/forma-marketing.manifest.json +6 -6
- package/dist/marketing/forma-marketing.sha256 +4 -4
- package/dist/runtime.js +1 -1
- package/docs/workflow/FORMAT.md +1 -1
- package/docs/workflow/VALIDATION.md +50 -1
- package/examples/workflows/forma/workflows/colored.forma-workflow.json +1 -1
- package/package.json +2 -2
- package/schemas/workflow/1.0/forma-workflow.schema.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,34 @@ published as GitHub release tarballs
|
|
|
7
7
|
and to npm. Earlier releases are described in `docs/CONSUMING-FORMA.md` and
|
|
8
8
|
`HANDOFF.md`.
|
|
9
9
|
|
|
10
|
+
## @echelon-foundry/forma-workflow 1.2.0
|
|
11
|
+
|
|
12
|
+
Minor release of the workflow package (and `EchelonFoundry.Forma.Workflow` 1.2.0): it ships the Forma 0.12.0 engine. **Behaviour change: validation is stricter.** Documents that validated under 1.1.0 can now fail with `A11Y-NONTEXT-CONTRAST` (WCAG 1.4.11, 3:1), and `render` refuses documents that fail validation. Added: `token:status-warning|danger|success|info` diagram colours, `ValidationOptions.Theme` and `--theme` on `validate`/`render`. No element, class, attribute or token was removed or renamed (QD-004), so this is a minor release, as Forma 0.12.0 was. See 0.12.0 below for the migration.
|
|
13
|
+
|
|
14
|
+
## 0.12.0
|
|
15
|
+
|
|
16
|
+
Minor release: diagram non-text contrast and status tokens.
|
|
17
|
+
|
|
18
|
+
**Behaviour change: workflow validation is stricter.** Diagram non-text contrast (R7-REM-009, `.praxis/inbox/documents/2026-10-29-R7-REM-009-diagram-nontext-contrast.md`).
|
|
19
|
+
Documents that validated before can now fail with `A11Y-NONTEXT-CONTRAST`, and `forma-workflow render` refuses them (exit 1). The status tokens are additive.
|
|
20
|
+
|
|
21
|
+
### Migration
|
|
22
|
+
- Prefer Forma tokens for outlines and connectors: `token:status-*` or `token:border-functional` follow the theme and are not judged by the document rule.
|
|
23
|
+
- If the host pins a theme, pass it: `--theme light|dark` on `validate` and `render`, or `ValidationOptions.Theme` with `Validation.loadWith`. Default-surface contrast is then judged for that theme only.
|
|
24
|
+
- Otherwise adjust literal colours to reach 3:1 against the light (`#f2efe7`) and dark (`#171a18`) surfaces, or against the node's literal fill.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **Status colour tokens in the workflow vocabulary.** `token:status-warning`, `token:status-danger`, `token:status-success` and `token:status-info` are accepted wherever a workflow colour is (`fill`, `stroke`, `accent`, `foreground`, edge `stroke`, palette slots) and render to `var(--ef-color-status-*)`. The workflow schema enum and `contracts/diagram-presentation.json` list them. An application can draw an attention outline with a Forma token instead of a brand literal.
|
|
28
|
+
- **Validation rule `A11Y-NONTEXT-CONTRAST`** (error, accessibility; WCAG 1.4.11, 3:1). Literal (or literal-palette) colours on nodes, groups, legend swatches and edges. Without an authored fill, strokes, accents, legend swatches and edge strokes are judged against both default surfaces, light `#f2efe7` and dark `#171a18`, and the weaker theme is named; a pinned host theme (`--theme`, `ValidationOptions`) limits this to that theme's surface. With a literal fill, the accent must reach 3:1 against the fill; the stroke is reported only when it is below 3:1 against the fill and neither stroke nor fill reaches 3:1 against a default surface, so borderless filled shapes stay valid. Token values and token/literal mixes are not judged by the document rule; `tests/nontext-contrast.test.mjs` checks every status token and `border-functional` at 3:1 on surface-primary and surface-secondary in every shipped theme and brand. Rehearsal 6 regression: Causa's `#e9a23b` outline on `#f5f3ed` measured 1.95:1 and passed validation. See `docs/workflow/VALIDATION.md`, "Non-text contrast".
|
|
29
|
+
- **Contract.** `contracts/diagram-presentation.json` marks `fill`, `stroke`, `accent` and `connectorStroke` `"contrast": "consumer"` (as `foreground` already was): colours set through the CSS custom properties bypass document validation and must be measured by the application.
|
|
30
|
+
- **Browser regression.** `tests/browser/diagram-nontext-contrast.spec.mjs` measures real Forma.Workflow output (golden documents in `tests/fixtures/workflow-nontext/`, checked by the F# suite) in Chromium: status-token outlines, a diamond node and an edge reach 3:1 in light, dark and forced colours; the Rehearsal 6 document is reported by the validator and measures below 3:1.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- **Validation is stricter** (see Migration above).
|
|
34
|
+
- **`Validation.loadWith` / `ofJsonWith` / `semanticWith`** take `ValidationOptions` (`{ Theme }`); `load`, `ofJson` and `semantic` keep their behaviour with no pinned theme. The CLI's `validate` accepts `--theme`, and `render --theme` now also scopes validation.
|
|
35
|
+
- `examples/workflows/forma/workflows/colored.forma-workflow.json`: connector `c2` stroke `#2f5fb3` → `#3d6cc0`. The old value is 2.85:1 on the dark surface and is now an `A11Y-NONTEXT-CONTRAST` error. Existing documents with literal colours may newly fail this rule.
|
|
36
|
+
|
|
37
|
+
|
|
10
38
|
## 0.11.0
|
|
11
39
|
|
|
12
40
|
Minor release: typography roles (EII-F, `.praxis/inbox/documents/2026-10-28-EII-F-typography-roles.md`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "forma.color-contract/1.0.0",
|
|
3
|
-
"formaVersion": "0.
|
|
3
|
+
"formaVersion": "0.12.0",
|
|
4
4
|
"validationScope": "CSS var() references to --ef-color-* plus reserved internal color-related prefixes; other Forma APIs are governed by their own contracts.",
|
|
5
5
|
"compatibility": {
|
|
6
6
|
"policy": "Validate with the contract shipped by the pinned Forma package version.",
|
|
@@ -65,11 +65,11 @@
|
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
67
|
"appearanceProperties": {
|
|
68
|
-
"fill": { "customProperty": "--ef-diagram-fill", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "--ef-color-surface-primary", "group": "transparent", "legend": "--ef-color-surface-primary" } },
|
|
69
|
-
"stroke": { "customProperty": "--ef-diagram-stroke", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "--ef-color-border-functional", "group": "--ef-color-border-functional", "legend": "--ef-color-border-functional" }, "print": "Authored stroke prints; otherwise black." },
|
|
70
|
-
"accent": { "customProperty": "--ef-diagram-accent", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "stroke", "group": "stroke", "legend": "stroke" } },
|
|
68
|
+
"fill": { "customProperty": "--ef-diagram-fill", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "--ef-color-surface-primary", "group": "transparent", "legend": "--ef-color-surface-primary" }, "contrast": "consumer" },
|
|
69
|
+
"stroke": { "customProperty": "--ef-diagram-stroke", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "--ef-color-border-functional", "group": "--ef-color-border-functional", "legend": "--ef-color-border-functional" }, "print": "Authored stroke prints; otherwise black.", "contrast": "consumer" },
|
|
70
|
+
"accent": { "customProperty": "--ef-diagram-accent", "appliesTo": ["node", "group", "legend"], "syntax": "color", "default": { "node": "stroke", "group": "stroke", "legend": "stroke" }, "contrast": "consumer" },
|
|
71
71
|
"foreground": { "customProperty": "--ef-diagram-foreground", "appliesTo": ["node", "group"], "syntax": "color", "default": { "node": "--ef-color-text-primary", "group": "--ef-color-text-primary" }, "contrast": "consumer" },
|
|
72
|
-
"connectorStroke": { "customProperty": "--ef-diagram-connector-stroke", "appliesTo": ["connector"], "syntax": "color", "default": { "connector": "--ef-color-border-functional" } },
|
|
72
|
+
"connectorStroke": { "customProperty": "--ef-diagram-connector-stroke", "appliesTo": ["connector"], "syntax": "color", "default": { "connector": "--ef-color-border-functional" }, "contrast": "consumer" },
|
|
73
73
|
"connectorWidth": { "customProperty": "--ef-diagram-connector-width", "appliesTo": ["connector"], "syntax": "number", "range": [1, 8], "default": { "connector": "2" } }
|
|
74
74
|
},
|
|
75
75
|
"geometryProperties": {
|
|
@@ -97,7 +97,11 @@
|
|
|
97
97
|
"--ef-color-surface-secondary",
|
|
98
98
|
"--ef-color-surface-inverse",
|
|
99
99
|
"--ef-color-text-primary",
|
|
100
|
-
"--ef-color-text-secondary"
|
|
100
|
+
"--ef-color-text-secondary",
|
|
101
|
+
"--ef-color-status-warning",
|
|
102
|
+
"--ef-color-status-danger",
|
|
103
|
+
"--ef-color-status-success",
|
|
104
|
+
"--ef-color-status-info"
|
|
101
105
|
],
|
|
102
106
|
"reset": "Remove the custom property to restore the Forma default (FMD-RESOLVE-006)."
|
|
103
107
|
},
|
package/dist/icons/registry.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Forma 0.
|
|
1
|
+
/*! Forma 0.12.0 | forma-all.css | bundle echelon-marketing
|
|
2
2
|
Complete Forma surface (application components, assessment, and marketing layers) for sites that also present Forma application patterns such as data grids or status lozenges.
|
|
3
3
|
Generated by tools/PresentationBundler. Do not edit; pin by version and sha256. */
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Forma 0.
|
|
1
|
+
/*! Forma 0.12.0 | forma-echelon-marketing.css | bundle echelon-marketing
|
|
2
2
|
Single-file Echelon marketing presentation: forma-marketing.css followed by the Echelon theme. Most sites load only this file.
|
|
3
3
|
Generated by tools/PresentationBundler. Do not edit; pin by version and sha256. */
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Forma 0.
|
|
1
|
+
/*! Forma 0.12.0 | forma-marketing-theme-echelon.css | bundle echelon-marketing
|
|
2
2
|
Echelon Marketing Theme: compiled theme tokens and theme hooks. Load after forma-marketing.css.
|
|
3
3
|
Generated by tools/PresentationBundler. Do not edit; pin by version and sha256. */
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Forma 0.
|
|
1
|
+
/*! Forma 0.12.0 | forma-marketing.css | bundle echelon-marketing
|
|
2
2
|
Brand-neutral marketing layer: core tokens, role defaults, Forma foundations, marketing foundations, components, and layouts.
|
|
3
3
|
Generated by tools/PresentationBundler. Do not edit; pin by version and sha256. */
|
|
4
4
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"forma": "0.
|
|
3
|
+
"forma": "0.12.0",
|
|
4
4
|
"bundle": "echelon-marketing",
|
|
5
5
|
"description": "Forma presentation artifacts for Echelon marketing sites. Every artifact is a single self-contained CSS file with no imports or relative URLs.",
|
|
6
|
-
"releaseTag": "v0.
|
|
6
|
+
"releaseTag": "v0.12.0",
|
|
7
7
|
"artifacts": [
|
|
8
8
|
{
|
|
9
9
|
"file": "forma-marketing.css",
|
|
10
10
|
"description": "Brand-neutral marketing layer: core tokens, role defaults, Forma foundations, marketing foundations, components, and layouts.",
|
|
11
11
|
"bytes": 92562,
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "e945b2e9f5396108446be83c8b0af50b64487b5749fc35a05e3b8582090dbd5f",
|
|
13
13
|
"sources": [
|
|
14
14
|
"dist/tokens.css",
|
|
15
15
|
"src/marketing/roles.css",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"file": "forma-marketing-theme-echelon.css",
|
|
24
24
|
"description": "Echelon Marketing Theme: compiled theme tokens and theme hooks. Load after forma-marketing.css.",
|
|
25
25
|
"bytes": 6296,
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "495b81a7dae75204ac9fcd2531754a2e0fa6e912009430d78d97d87807104402",
|
|
27
27
|
"sources": [
|
|
28
28
|
"build/marketing/echelon-marketing.tokens.css",
|
|
29
29
|
"themes/echelon/marketing.css"
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"file": "forma-echelon-marketing.css",
|
|
34
34
|
"description": "Single-file Echelon marketing presentation: forma-marketing.css followed by the Echelon theme. Most sites load only this file.",
|
|
35
35
|
"bytes": 98702,
|
|
36
|
-
"sha256": "
|
|
36
|
+
"sha256": "f93946ab2401d3a65f10ce96bbea8c830ad1c239bcc412c8f7906dfba8f6616c",
|
|
37
37
|
"sources": [
|
|
38
38
|
"artifact:forma-marketing.css",
|
|
39
39
|
"artifact:forma-marketing-theme-echelon.css"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"file": "forma-all.css",
|
|
44
44
|
"description": "Complete Forma surface (application components, assessment, and marketing layers) for sites that also present Forma application patterns such as data grids or status lozenges.",
|
|
45
45
|
"bytes": 342064,
|
|
46
|
-
"sha256": "
|
|
46
|
+
"sha256": "8126a388b0563f6d7f40a84058035bfd6cd62e966c181ff3c055f530bc2cc32c",
|
|
47
47
|
"sources": [
|
|
48
48
|
"dist/all.css"
|
|
49
49
|
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
e945b2e9f5396108446be83c8b0af50b64487b5749fc35a05e3b8582090dbd5f forma-marketing.css
|
|
2
|
+
495b81a7dae75204ac9fcd2531754a2e0fa6e912009430d78d97d87807104402 forma-marketing-theme-echelon.css
|
|
3
|
+
f93946ab2401d3a65f10ce96bbea8c830ad1c239bcc412c8f7906dfba8f6616c forma-echelon-marketing.css
|
|
4
|
+
8126a388b0563f6d7f40a84058035bfd6cd62e966c181ff3c055f530bc2cc32c forma-all.css
|
package/dist/runtime.js
CHANGED
|
@@ -52,6 +52,6 @@ export function registerEchelonRuntime(name, metadata, target = globalThis) {
|
|
|
52
52
|
return installEchelonRuntimeRegistrar(target)?.(name, metadata);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
export const FORMA_VERSION = "0.
|
|
55
|
+
export const FORMA_VERSION = "0.12.0";
|
|
56
56
|
|
|
57
57
|
if (typeof window !== "undefined") registerEchelonRuntime("forma", { version: FORMA_VERSION }, window);
|
package/docs/workflow/FORMAT.md
CHANGED
|
@@ -104,7 +104,7 @@ saving.
|
|
|
104
104
|
| `kindLabel` | Display text for the kind. Optional for core kinds. |
|
|
105
105
|
| `label`, `description` | Visible text. |
|
|
106
106
|
| `variant` | Forma shape: `rectangle`, `rounded`, `pill`, `ellipse` or `diamond`. Presentation only; a shape never implies a kind. |
|
|
107
|
-
| `color` | `fill`, `stroke`, `accent` and `foreground`. Each is a `#rrggbb` literal, a Forma token (`token:accent-primary`
|
|
107
|
+
| `color` | `fill`, `stroke`, `accent` and `foreground`. Each is a `#rrggbb` literal, a Forma token or a palette slot (`palette:finance`). Tokens: `token:accent-primary`, `token:accent-secondary`, `token:border-functional`, `token:border-subtle`, `token:surface-primary`, `token:surface-secondary`, `token:surface-inverse`, `token:text-primary`, `token:text-secondary`, and the status roles `token:status-warning`, `token:status-danger`, `token:status-success` and `token:status-info` (render to `var(--ef-color-status-*)`; use them for attention outlines instead of a brand literal). |
|
|
108
108
|
| `status` | `{ "state": "active", "label": "In progress", "detail": "...", "updatedAt": "..." }`. Core states are `none`, `pending`, `ready`, `active`, `waiting`, `complete`, `blocked`, `failed`, `skipped`, `cancelled` and `unknown`. A namespaced state needs a `label`. |
|
|
109
109
|
| `ports` | Connection points: `id`, `side` (`top`, `right`, `bottom`, `left`), `direction` (`in`, `out`, `inout`), `label`, `maxConnections`. |
|
|
110
110
|
| `references` | Domain references: `id`, `system` (a namespace), `type`, `key`, `label` and `href`. Forma displays them and never dereferences them. |
|
|
@@ -84,8 +84,57 @@ JSON Schema validator enforces it, so there is no hand-maintained copy.
|
|
|
84
84
|
| Groups | `GROUP-MISSING-MEMBER`, `GROUP-MISSING-PARENT`, `GROUP-CYCLE`, `GROUP-LANE-CONFLICT` |
|
|
85
85
|
| Extensions | `EXT-RESERVED` (and the schema's namespace and object rules) |
|
|
86
86
|
| Compatibility | `COMPAT-UNAVAILABLE`, `COMPAT-UNKNOWN-CAPABILITY` |
|
|
87
|
-
| Accessibility (static) | `A11Y-TITLE`, `A11Y-NAME`, `A11Y-CONTRAST` (authored text colour against fill below 4.5:1), `A11Y-BRANCH-LABEL`, `A11Y-LEGEND` |
|
|
87
|
+
| Accessibility (static) | `A11Y-TITLE`, `A11Y-NAME`, `A11Y-CONTRAST` (authored text colour against fill below 4.5:1), `A11Y-NONTEXT-CONTRAST` (non-text indicators below 3:1, WCAG 1.4.11; see below), `A11Y-BRANCH-LABEL`, `A11Y-LEGEND` |
|
|
88
88
|
| Security | `SEC-UNSAFE-URL` (anything other than http, https, mailto or relative; also control characters and leading spaces), `SEC-BIDI-CONTROL` |
|
|
89
89
|
| Semantics (warnings) | `SEM-DECISION-BRANCHES`, `SEM-START-INCOMING`, `SEM-END-OUTGOING`, `LAYOUT-PARTIAL` |
|
|
90
90
|
|
|
91
91
|
Errors decide the class. Warnings and notes do not.
|
|
92
|
+
|
|
93
|
+
### Non-text contrast (`A11Y-NONTEXT-CONTRAST`)
|
|
94
|
+
|
|
95
|
+
The rule judges literal colours (`#rrggbb`, or a palette slot holding one) on
|
|
96
|
+
nodes, groups, legend swatches and edges against the 3:1 minimum of WCAG 1.4.11:
|
|
97
|
+
|
|
98
|
+
- **No authored fill.** The shape is drawn on the default surface, so its
|
|
99
|
+
stroke and accent are judged against both default surfaces: light `#f2efe7`
|
|
100
|
+
and dark `#171a18` (`--ef-color-surface-primary` in the compiled light theme
|
|
101
|
+
and in the dark theme, including `prefers-color-scheme: dark`). The weaker
|
|
102
|
+
theme is reported and named. Legend swatches and edge strokes are judged the
|
|
103
|
+
same way.
|
|
104
|
+
- **Pinned host theme.** When the host pins a theme (`--theme light|dark` on
|
|
105
|
+
`forma-workflow validate` and `render`, or `ValidationOptions.Theme` with
|
|
106
|
+
`Validation.loadWith`), default-surface comparisons use that theme's surface
|
|
107
|
+
only. Without a pinned theme the host follows `prefers-color-scheme`, so
|
|
108
|
+
both surfaces apply. Any other theme name is judged against both.
|
|
109
|
+
- **Literal fill.** The accent is an indicator and must reach 3:1 against the
|
|
110
|
+
fill. The stroke is the shape's boundary: it is reported when it is below
|
|
111
|
+
3:1 against the fill *and* neither the stroke nor the fill reaches 3:1
|
|
112
|
+
against a default surface. A borderless filled shape (stroke equal to fill)
|
|
113
|
+
is valid wherever its fill stands out from the surface.
|
|
114
|
+
|
|
115
|
+
**Limits.** The rule cannot know which theme a token resolves in, so it does
|
|
116
|
+
not judge token values, token-backed palette slots, token fills, or
|
|
117
|
+
token/literal mixes (a token stroke on a literal fill, a literal stroke on a
|
|
118
|
+
token fill). Forma's own token pairs (every `status-*` token and
|
|
119
|
+
`border-functional` on `surface-primary` and `surface-secondary`, in every
|
|
120
|
+
shipped theme and brand) are covered by `tests/nontext-contrast.test.mjs`.
|
|
121
|
+
Only `#f2efe7` and `#171a18` are used as default surfaces. Literal colours
|
|
122
|
+
are judged against them, not against the surface of another Forma theme
|
|
123
|
+
(for example `high-contrast`, `warm-earth` or `dark-technical`) or a brand an
|
|
124
|
+
application applies; those surfaces are approximated by the light and dark
|
|
125
|
+
defaults.
|
|
126
|
+
|
|
127
|
+
The browser regression for this rule measures real Forma.Workflow output: the
|
|
128
|
+
sources and golden HTML and findings files live in
|
|
129
|
+
`tests/fixtures/workflow-nontext/`, and the F# suite checks them byte for
|
|
130
|
+
byte. After an intended change to the renderer or the rule, regenerate them
|
|
131
|
+
with `FORMA_UPDATE_GOLDEN=1 dotnet run --project tests/workflow/Forma.Workflow.Tests -c Release`.
|
|
132
|
+
|
|
133
|
+
**CSS custom properties bypass validation.** Colours an application sets
|
|
134
|
+
directly through `--ef-diagram-stroke`, `--ef-diagram-accent`,
|
|
135
|
+
`--ef-diagram-fill`, `--ef-diagram-connector-stroke` or
|
|
136
|
+
`--ef-diagram-foreground` never pass through the document, so no finding is
|
|
137
|
+
produced; `contracts/diagram-presentation.json` marks them
|
|
138
|
+
`"contrast": "consumer"`. An application that colours diagrams that way must
|
|
139
|
+
measure the result in its own browser tests (computed border colour against
|
|
140
|
+
computed background, as `tests/browser/diagram-nontext-contrast.spec.mjs` does).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@echelon-foundry/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0-main.262.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Zero-component-runtime HTML and CSS design system for Echelon Foundry applications.",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"site:mobile": "playwright test --config=playwright.site.config.mjs",
|
|
87
87
|
"pack:verify": "npm run build && npm pack --dry-run",
|
|
88
88
|
"test:package": "node --test tests/package-contract.test.mjs tests/conformance-package.test.mjs",
|
|
89
|
-
"test:css": "node --test tests/css-source.test.mjs tests/dist-css.test.mjs tests/contrast-pairs.test.mjs tests/diagram-contract.test.mjs",
|
|
89
|
+
"test:css": "node --test tests/css-source.test.mjs tests/dist-css.test.mjs tests/contrast-pairs.test.mjs tests/nontext-contrast.test.mjs tests/diagram-contract.test.mjs",
|
|
90
90
|
"test:contrast": "node --test tests/contrast-pairs.test.mjs && playwright test tests/browser/pattern-contrast.spec.mjs --project=chromium",
|
|
91
91
|
"brands:build": "dotnet run --project tools/BrandCompiler/BrandCompiler.fsproj -- brands dist/brands",
|
|
92
92
|
"color:build": "node tools/color-contract/build.mjs",
|
|
@@ -259,7 +259,11 @@
|
|
|
259
259
|
"token:surface-secondary",
|
|
260
260
|
"token:surface-inverse",
|
|
261
261
|
"token:text-primary",
|
|
262
|
-
"token:text-secondary"
|
|
262
|
+
"token:text-secondary",
|
|
263
|
+
"token:status-warning",
|
|
264
|
+
"token:status-danger",
|
|
265
|
+
"token:status-success",
|
|
266
|
+
"token:status-info"
|
|
263
267
|
]
|
|
264
268
|
}
|
|
265
269
|
]
|