@echelon-foundry/design-system 0.3.0 → 0.4.0-main.222.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/README.md +29 -0
- package/contracts/diagram-presentation.json +109 -0
- package/contracts/machine-operability.json +48 -0
- package/contracts/workflow-capabilities.json +25 -0
- package/dist/all.css +175 -3
- package/dist/build-metrics.json +33 -5
- package/dist/components.css +173 -3
- package/dist/foundations.css +2 -0
- package/dist/marketing/forma-all.css +176 -4
- package/dist/marketing/forma-echelon-marketing.css +3 -1
- package/dist/marketing/forma-marketing-theme-echelon.css +1 -1
- package/dist/marketing/forma-marketing.css +3 -1
- package/dist/marketing/forma-marketing.manifest.json +9 -9
- package/dist/marketing/forma-marketing.sha256 +4 -4
- package/dist/patterns/bounded-overflow.html +9 -0
- package/dist/patterns/button.html +5 -0
- package/dist/patterns/container.html +6 -0
- package/dist/patterns/date-time-field.html +5 -0
- package/dist/patterns/grid.html +5 -0
- package/dist/patterns/image-choice.html +2 -2
- package/dist/patterns/key-value-list.html +5 -0
- package/dist/patterns/section.html +4 -0
- package/dist/patterns/skip-link.html +6 -0
- package/dist/patterns/spatial-canvas.html +2 -2
- package/dist/patterns/split.html +12 -0
- package/dist/patterns/surface.html +4 -0
- package/dist/patterns/text-field.html +5 -0
- package/dist/patterns/text-roles.html +7 -0
- package/dist/patterns/textarea.html +5 -0
- package/dist/patterns/visually-hidden.html +4 -0
- package/docs/MARKETING-SITES.md +1 -1
- package/docs/workflow/EMBEDDING.md +148 -0
- package/docs/workflow/EXTERNAL-PRODUCERS.md +34 -0
- package/docs/workflow/FORMAT.md +196 -0
- package/docs/workflow/RENDERING.md +90 -0
- package/docs/workflow/REQUIREMENTS-AUDIT-2026-10-01.md +55 -0
- package/docs/workflow/VALIDATION.md +91 -0
- package/examples/workflows/fixtures.json +101 -0
- package/examples/workflows/forma/workflows/accessible.forma-workflow.json +90 -0
- package/examples/workflows/forma/workflows/branching.forma-workflow.json +91 -0
- package/examples/workflows/forma/workflows/branded.forma-workflow.json +85 -0
- package/examples/workflows/forma/workflows/color-mapping.forma-workflow.json +111 -0
- package/examples/workflows/forma/workflows/colored.forma-workflow.json +131 -0
- package/examples/workflows/forma/workflows/edge-metadata.forma-workflow.json +66 -0
- package/examples/workflows/forma/workflows/embedded-edit.forma-workflow.json +117 -0
- package/examples/workflows/forma/workflows/embedded-view.forma-workflow.json +93 -0
- package/examples/workflows/forma/workflows/extensions.forma-workflow.json +90 -0
- package/examples/workflows/forma/workflows/groups.forma-workflow.json +89 -0
- package/examples/workflows/forma/workflows/interactive-export.forma-workflow.json +62 -0
- package/examples/workflows/forma/workflows/minimal.forma-workflow.json +17 -0
- package/examples/workflows/forma/workflows/mobile.forma-workflow.json +80 -0
- package/examples/workflows/forma/workflows/multi-step.forma-workflow.json +82 -0
- package/examples/workflows/forma/workflows/no-layout.forma-workflow.json +90 -0
- package/examples/workflows/forma/workflows/node-metadata.forma-workflow.json +80 -0
- package/examples/workflows/forma/workflows/runtime-ports.forma-workflow.json +118 -0
- package/examples/workflows/forma/workflows/static-export.forma-workflow.json +77 -0
- package/examples/workflows/forma/workflows/swimlanes.forma-workflow.json +130 -0
- package/figma/component-contracts.json +140 -0
- package/package.json +33 -10
- package/patterns/bounded-overflow.html +9 -0
- package/patterns/button.html +5 -0
- package/patterns/container.html +6 -0
- package/patterns/date-time-field.html +5 -0
- package/patterns/grid.html +5 -0
- package/patterns/image-choice.html +2 -2
- package/patterns/key-value-list.html +5 -0
- package/patterns/section.html +4 -0
- package/patterns/skip-link.html +6 -0
- package/patterns/spatial-canvas.html +2 -2
- package/patterns/split.html +12 -0
- package/patterns/surface.html +4 -0
- package/patterns/text-field.html +5 -0
- package/patterns/text-roles.html +7 -0
- package/patterns/textarea.html +5 -0
- package/patterns/visually-hidden.html +4 -0
- package/schemas/workflow/1.0/forma-workflow.schema.json +1045 -0
package/README.md
CHANGED
|
@@ -37,6 +37,15 @@ npm run site:check
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
The generated GitHub Pages artifact is written to `site-dist/`.
|
|
40
|
+
The site is generated from the component catalog: canonical markup in
|
|
41
|
+
`patterns/`, one documentation entry per component in `catalog/components/`,
|
|
42
|
+
and CSS hooks derived from the built stylesheet. Every component page has the
|
|
43
|
+
same sections (purpose, live examples with copyable HTML, a mobile example in a
|
|
44
|
+
real narrow viewport, API, states, accessibility, responsive behavior, motion,
|
|
45
|
+
usage guidance and related components). See
|
|
46
|
+
[docs/CATALOG-AUTHORING.md](docs/CATALOG-AUTHORING.md) to document a component
|
|
47
|
+
and [docs/COMPONENT-INVENTORY.md](docs/COMPONENT-INVENTORY.md) for the full
|
|
48
|
+
inventory, planned components and known issues.
|
|
40
49
|
Agent usage rules are in [docs/AGENT-USAGE.md](docs/AGENT-USAGE.md).
|
|
41
50
|
|
|
42
51
|
|
|
@@ -114,6 +123,26 @@ Workflow/diagram items may also carry authored fill, border/stroke, accent, conn
|
|
|
114
123
|
|
|
115
124
|
See `requirements/OBJECT-METADATA-AND-DIAGRAM-PRESENTATION.md`.
|
|
116
125
|
|
|
126
|
+
## Portable workflows
|
|
127
|
+
|
|
128
|
+
Forma owns the portable workflow standard (`.forma-workflow.json`): a versioned
|
|
129
|
+
JSON Schema, independent validation, deterministic layout, static HTML
|
|
130
|
+
rendering, and the embeddable `<forma-workflow>` renderer and editor. None of it
|
|
131
|
+
needs Forma Studio.
|
|
132
|
+
|
|
133
|
+
| Need | Use |
|
|
134
|
+
|---|---|
|
|
135
|
+
| The format | [`docs/workflow/FORMAT.md`](docs/workflow/FORMAT.md), schema [`schemas/workflow/1.0/forma-workflow.schema.json`](schemas/workflow/1.0/forma-workflow.schema.json) |
|
|
136
|
+
| Validate in CI or from an agent | `forma-workflow validate --json` ([`docs/workflow/VALIDATION.md`](docs/workflow/VALIDATION.md)) |
|
|
137
|
+
| Static or complete-document HTML | `forma-workflow render` ([`docs/workflow/RENDERING.md`](docs/workflow/RENDERING.md)) |
|
|
138
|
+
| Embed a viewer or editor | `@echelon-foundry/forma-workflow` ([`docs/workflow/EMBEDDING.md`](docs/workflow/EMBEDDING.md), [`examples/workflow-embedding`](examples/workflow-embedding)) |
|
|
139
|
+
| Produce workflows elsewhere | [`docs/workflow/EXTERNAL-PRODUCERS.md`](docs/workflow/EXTERNAL-PRODUCERS.md) |
|
|
140
|
+
| Reference fixtures | [`examples/workflows/`](examples/workflows/) |
|
|
141
|
+
|
|
142
|
+
The design-system package stays zero-runtime. The editor ships separately; see
|
|
143
|
+
[ADR-0006](docs/decisions/ADR-0006-portable-workflow-capability.md). Run
|
|
144
|
+
`npm run workflow:check` for the full workflow test suite.
|
|
145
|
+
|
|
117
146
|
## Figma
|
|
118
147
|
|
|
119
148
|
Forma treats Figma as a design and developer-consumption surface, not as a
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"contract": "forma.diagram-presentation",
|
|
4
|
+
"contractVersion": "2.1.0",
|
|
5
|
+
"stylesheet": "components.css",
|
|
6
|
+
"decision": "docs/decisions/ADR-0004-diagram-presentation-boundary.md",
|
|
7
|
+
"requirements": "requirements/OBJECT-METADATA-AND-DIAGRAM-PRESENTATION.md",
|
|
8
|
+
"ownership": {
|
|
9
|
+
"forma": ["surface", "node", "group", "connector", "connectorLabel", "marker", "relations", "legend", "valueState", "port", "status", "description", "membership"],
|
|
10
|
+
"consumer": ["geometry", "routing", "semanticKind", "metadataValues", "metadataVisibility", "namedStyles", "paletteSlots", "metadataMappings", "appearancePrecedence", "membership", "portPlacement", "statusValues"],
|
|
11
|
+
"editorOnly": ["selection", "handles", "guides", "routePreview", "marquee", "dragTargets", "connectionTargets", "minimap", "validationOverlay"],
|
|
12
|
+
"editorOnlyRule": "Editor-only adorners never use ef-diagram* classes and never appear in exported output."
|
|
13
|
+
},
|
|
14
|
+
"elements": {
|
|
15
|
+
"surface": { "element": "figure", "class": "ef-diagram", "parts": { "viewport": "ef-diagram__viewport", "canvas": "ef-diagram__canvas", "wires": "ef-diagram__wires" } },
|
|
16
|
+
"node": {
|
|
17
|
+
"element": "article",
|
|
18
|
+
"class": "ef-diagram-node",
|
|
19
|
+
"regions": { "kind": "ef-diagram-node__kind", "label": "ef-diagram-node__label", "description": "ef-diagram-node__description", "metadata": "ef-diagram-node__meta" },
|
|
20
|
+
"statusAttribute": "data-ef-status",
|
|
21
|
+
"statusCues": { "active": "outer ring", "blocked": "double border", "failed": "double border", "skipped": "dashed border", "cancelled": "dashed border", "pending": "dotted border", "waiting": "dotted border" },
|
|
22
|
+
"statusRule": "Status is text in the node metadata (dt Status, dd label). data-ef-status selects only a secondary non-colour cue; other values render no cue.",
|
|
23
|
+
"shapeAttribute": "data-ef-shape",
|
|
24
|
+
"shapes": ["rectangle", "rounded", "pill", "ellipse", "diamond"],
|
|
25
|
+
"defaultShape": "rectangle",
|
|
26
|
+
"shapeNotes": { "diamond": "Square box (aspect-ratio 1); content sits in the inscribed square, so give it enough width for the label." },
|
|
27
|
+
"geometry": ["x", "y", "w", "h"],
|
|
28
|
+
"appearance": ["fill", "stroke", "accent", "foreground"]
|
|
29
|
+
},
|
|
30
|
+
"group": {
|
|
31
|
+
"element": "div",
|
|
32
|
+
"class": "ef-diagram-group",
|
|
33
|
+
"regions": { "header": "ef-diagram-group__header", "kind": "ef-diagram-group__kind", "label": "ef-diagram-group__label" },
|
|
34
|
+
"variantAttribute": "data-ef-group",
|
|
35
|
+
"variants": ["group", "lane", "phase"],
|
|
36
|
+
"defaultVariant": "group",
|
|
37
|
+
"lineAttribute": "data-ef-line",
|
|
38
|
+
"lineStyles": ["solid", "dashed", "dotted"],
|
|
39
|
+
"geometry": ["x", "y", "w", "h"],
|
|
40
|
+
"appearance": ["fill", "stroke", "accent", "foreground"],
|
|
41
|
+
"paintOrder": "Place groups first in the canvas so they paint beneath connectors and nodes.",
|
|
42
|
+
"membership": "Consumer data. Canvas overlap never implies membership."
|
|
43
|
+
},
|
|
44
|
+
"connector": {
|
|
45
|
+
"element": "path",
|
|
46
|
+
"class": "ef-diagram-connector",
|
|
47
|
+
"lineAttribute": "data-ef-line",
|
|
48
|
+
"lineStyles": ["solid", "dashed", "dotted"],
|
|
49
|
+
"defaultLineStyle": "solid",
|
|
50
|
+
"markers": { "class": "ef-diagram-marker", "kinds": ["arrow"], "attachment": ["marker-start", "marker-end"] },
|
|
51
|
+
"appearance": ["connectorStroke", "connectorWidth"]
|
|
52
|
+
},
|
|
53
|
+
"port": { "element": "span", "class": "ef-diagram-port", "parent": "ef-diagram-node", "label": "ef-diagram-port__label", "sideAttribute": "data-ef-side", "sides": ["top", "right", "bottom", "left"], "directionAttribute": "data-ef-direction", "directions": ["in", "out", "inout"], "directionCue": "in: square, out: circle, inout: diamond", "offset": "--ef-diagram-port-offset", "rule": "A port is a marker. The relationship list names the port in text when a connector uses it." },
|
|
54
|
+
"membership": { "element": "dl", "class": "ef-diagram__membership", "rule": "One dt per group, lane or phase; its dd lists members in reading order. Canvas overlap never implies membership." },
|
|
55
|
+
"connectorLabel": { "element": "span", "class": "ef-diagram-connector__label", "geometry": ["x", "y"] },
|
|
56
|
+
"relations": { "element": "ol", "class": "ef-diagram__relations", "rule": "One text item per connector, in reading order." },
|
|
57
|
+
"legend": { "element": "dl", "class": "ef-diagram-legend", "swatch": "ef-diagram-legend__swatch", "appearance": ["fill", "stroke", "accent"] },
|
|
58
|
+
"valueState": {
|
|
59
|
+
"element": "span",
|
|
60
|
+
"class": "ef-diagram-value-state",
|
|
61
|
+
"stateAttribute": "data-ef-value-state",
|
|
62
|
+
"states": ["default", "derived", "source-bound", "unknown", "unavailable", "invalid"],
|
|
63
|
+
"explicit": "Explicit values carry no tag.",
|
|
64
|
+
"rule": "The tag text carries the meaning; the border style is secondary."
|
|
65
|
+
}
|
|
66
|
+
},
|
|
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" } },
|
|
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" } },
|
|
73
|
+
"connectorWidth": { "customProperty": "--ef-diagram-connector-width", "appliesTo": ["connector"], "syntax": "number", "range": [1, 8], "default": { "connector": "2" } }
|
|
74
|
+
},
|
|
75
|
+
"geometryProperties": {
|
|
76
|
+
"x": "--ef-diagram-x",
|
|
77
|
+
"y": "--ef-diagram-y",
|
|
78
|
+
"w": "--ef-diagram-w",
|
|
79
|
+
"h": "--ef-diagram-h",
|
|
80
|
+
"canvasWidth": "--ef-diagram-canvas-w",
|
|
81
|
+
"canvasHeight": "--ef-diagram-canvas-h",
|
|
82
|
+
"portOffset": "--ef-diagram-port-offset",
|
|
83
|
+
"unit": "px",
|
|
84
|
+
"axes": "physical (does not mirror in right-to-left documents)"
|
|
85
|
+
},
|
|
86
|
+
"color": {
|
|
87
|
+
"paint": "solid",
|
|
88
|
+
"literalSyntax": "#rrggbb",
|
|
89
|
+
"literalNote": "Consumers normalize literals to lowercase six-digit hex; alpha, gradients, blend modes and filters are not part of this contract (FMD-PAINT-001..003).",
|
|
90
|
+
"tokenReferences": [
|
|
91
|
+
"--ef-color-accent-primary",
|
|
92
|
+
"--ef-color-accent-secondary",
|
|
93
|
+
"--ef-color-border-functional",
|
|
94
|
+
"--ef-color-border-subtle",
|
|
95
|
+
"--ef-color-surface-primary",
|
|
96
|
+
"--ef-color-surface-secondary",
|
|
97
|
+
"--ef-color-surface-inverse",
|
|
98
|
+
"--ef-color-text-primary",
|
|
99
|
+
"--ef-color-text-secondary"
|
|
100
|
+
],
|
|
101
|
+
"reset": "Remove the custom property to restore the Forma default (FMD-RESOLVE-006)."
|
|
102
|
+
},
|
|
103
|
+
"fallbacks": {
|
|
104
|
+
"forcedColors": "Nodes, groups, swatches and labels use Canvas/CanvasText; connectors and markers use CanvasText. Kind text, shape, line style and value-state text remain.",
|
|
105
|
+
"print": "Viewport stops scrolling; nodes avoid page breaks; authored strokes and accents print; unauthored boundaries print black.",
|
|
106
|
+
"backgroundsDisabled": "Every shape and group has a real border, so boundaries survive when fills are dropped.",
|
|
107
|
+
"grayscale": "Meaning is carried by kind text, labels, line style, the relationship list and the legend text, never by hue."
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "forma-machine-operability",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"referenceAutomation": "Playwright",
|
|
5
|
+
"toolNeutral": true,
|
|
6
|
+
"principle": "Every human-operable action has a deterministic semantically discoverable machine-operable path to the same authoritative application state.",
|
|
7
|
+
"locatorPriority": [
|
|
8
|
+
"role-and-accessible-name",
|
|
9
|
+
"native-label-id-name-value-or-url-target",
|
|
10
|
+
"documented-application-owned-stable-object-identity",
|
|
11
|
+
"documented-public-state-hook-for-inspection"
|
|
12
|
+
],
|
|
13
|
+
"completionSignals": [
|
|
14
|
+
"native-state-change",
|
|
15
|
+
"documented-public-state-change",
|
|
16
|
+
"navigation-or-url-change",
|
|
17
|
+
"live-or-status-output",
|
|
18
|
+
"authoritative-application-state-rendered-into-the-dom"
|
|
19
|
+
],
|
|
20
|
+
"directManipulation": {
|
|
21
|
+
"coordinateGestureMayBeConvenience": true,
|
|
22
|
+
"semanticEquivalentRequiredForMeaningfulStateChanges": true,
|
|
23
|
+
"examples": [
|
|
24
|
+
"move-buttons",
|
|
25
|
+
"named-commands",
|
|
26
|
+
"keyboard-actions",
|
|
27
|
+
"form-controls",
|
|
28
|
+
"application-or-limen-command-surface"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"forbiddenAsOnlyPublicPath": [
|
|
32
|
+
"hard-coded-screen-coordinates",
|
|
33
|
+
"image-recognition",
|
|
34
|
+
"hover-only-actions",
|
|
35
|
+
"pointer-only-actions",
|
|
36
|
+
"generated-css-class-locators",
|
|
37
|
+
"dom-position-or-nth-child-locators",
|
|
38
|
+
"fixed-sleep-completion",
|
|
39
|
+
"color-only-state",
|
|
40
|
+
"animation-only-state",
|
|
41
|
+
"closed-shadow-dom-hiding-required-interaction"
|
|
42
|
+
],
|
|
43
|
+
"authority": {
|
|
44
|
+
"forma": "semantic markup, accessible naming, public structure and presentation-state hooks",
|
|
45
|
+
"applicationOrLimen": "behavior beyond native HTML and application state synchronization",
|
|
46
|
+
"ordoOrDomain": "legality, capabilities, obligations, permissions and consequential transitions"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"contract": "forma.workflow-capabilities",
|
|
4
|
+
"contractVersion": "1.0.0",
|
|
5
|
+
"formatVersions": ["1.0.0"],
|
|
6
|
+
"formaVersion": "0.4.0",
|
|
7
|
+
"decision": "docs/decisions/ADR-0006-portable-workflow-capability.md",
|
|
8
|
+
"requirements": "requirements/PORTABLE-WORKFLOW-INTERCHANGE.md",
|
|
9
|
+
"rule": "A workflow targeting a Forma version earlier than a capability's 'since' version, or requiring a capability this list does not contain, is valid format using unavailable Forma capabilities.",
|
|
10
|
+
"capabilities": {
|
|
11
|
+
"workflow.core": { "since": "0.4.0", "description": "Nodes, edges, labels, kinds, descriptions and the accessible relationship list." },
|
|
12
|
+
"workflow.shapes": { "since": "0.4.0", "description": "Node variants rectangle, rounded, pill, ellipse and diamond (diagram contract 2.0.0)." },
|
|
13
|
+
"workflow.color": { "since": "0.4.0", "description": "Authored fill, stroke, accent, foreground and connector stroke as tokens or literals." },
|
|
14
|
+
"workflow.palette": { "since": "0.4.0", "description": "Named palette slots referenced as palette:<slot>." },
|
|
15
|
+
"workflow.groups": { "since": "0.4.0", "description": "Groups and containers with explicit membership." },
|
|
16
|
+
"workflow.swimlanes": { "since": "0.4.0", "description": "Swimlanes and phases." },
|
|
17
|
+
"workflow.ports": { "since": "0.4.0", "description": "Named connection points on node sides (diagram contract 2.1.0)." },
|
|
18
|
+
"workflow.status": { "since": "0.4.0", "description": "Semantic status shown as text on nodes, edges and groups (diagram contract 2.1.0)." },
|
|
19
|
+
"workflow.references": { "since": "0.4.0", "description": "Typed domain references displayed as text or links." },
|
|
20
|
+
"workflow.interactions": { "since": "0.4.0", "description": "Declarative interaction intents reported to the host." },
|
|
21
|
+
"workflow.legend": { "since": "0.4.0", "description": "A key explaining authored colour and line meaning." },
|
|
22
|
+
"workflow.layout": { "since": "0.4.0", "description": "Authored geometry, waypoints and the deterministic default layout." },
|
|
23
|
+
"workflow.embed": { "since": "0.4.0", "description": "The @echelon-foundry/forma-workflow embeddable renderer and editor." }
|
|
24
|
+
}
|
|
25
|
+
}
|
package/dist/all.css
CHANGED
|
@@ -642,6 +642,8 @@
|
|
|
642
642
|
|
|
643
643
|
.ef-stack { display: flex; flex-direction: column; gap: var(--ef-stack-gap, var(--ef-primitive-spacing-4, 1rem)); }
|
|
644
644
|
.ef-cluster { display: flex; flex-wrap: wrap; gap: var(--ef-cluster-gap, var(--ef-primitive-spacing-3, 0.75rem)); align-items: center; }
|
|
645
|
+
/* .ef-actions (catalog: button) is an application-layer row of related actions; it was styled only in marketing.css (forma#93 gap). */
|
|
646
|
+
.ef-actions { display: flex; flex-wrap: wrap; gap: var(--ef-primitive-spacing-3, 0.75rem); align-items: center; }
|
|
645
647
|
.ef-grid { display: grid; gap: var(--ef-grid-gap, var(--ef-primitive-spacing-4, 1rem)); grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ef-grid-min, 16rem)), 1fr)); }
|
|
646
648
|
.ef-section { padding-block: var(--ef-section-space, var(--ef-primitive-spacing-7, 3rem)); }
|
|
647
649
|
.ef-surface { min-inline-size: 0; padding: var(--ef-surface-space, var(--ef-primitive-spacing-5, 1.5rem)); background: var(--ef-color-surface-secondary, #e3e0d7); color: var(--ef-color-text-on-secondary-surface, #3a403c); border: 1px solid var(--ef-color-border-subtle, #e3e0d7); }
|
|
@@ -774,6 +776,8 @@
|
|
|
774
776
|
font-size: 0.8125rem;
|
|
775
777
|
line-height: 1.4;
|
|
776
778
|
}
|
|
779
|
+
/* On a secondary surface, text-secondary falls below 4.5:1; use the surface's own text colour (forma#93). */
|
|
780
|
+
.ef-surface .ef-field__description { color: var(--ef-color-text-on-secondary-surface, #3a403c); }
|
|
777
781
|
|
|
778
782
|
/* Motion model vocabulary --------------------------------------------- */
|
|
779
783
|
/*
|
|
@@ -5079,6 +5083,8 @@
|
|
|
5079
5083
|
* node: --ef-diagram-fill, --ef-diagram-stroke, --ef-diagram-accent,
|
|
5080
5084
|
* --ef-diagram-foreground
|
|
5081
5085
|
* connector: --ef-diagram-connector-stroke, --ef-diagram-connector-width
|
|
5086
|
+
* group: the node properties plus --ef-diagram-h (M2, forma#88)
|
|
5087
|
+
* The machine-readable contract is contracts/diagram-presentation.json.
|
|
5082
5088
|
* Non-color cues: the visible node kind text, data-ef-shape, data-ef-line and
|
|
5083
5089
|
* the textual relationship list. Focus never reads authored color.
|
|
5084
5090
|
*/
|
|
@@ -5123,6 +5129,46 @@
|
|
|
5123
5129
|
}
|
|
5124
5130
|
.ef-diagram-node[data-ef-shape="rounded"] { border-radius: var(--ef-primitive-spacing-3, 0.75rem); }
|
|
5125
5131
|
.ef-diagram-node[data-ef-shape="pill"] { border-radius: 999px; padding-inline: var(--ef-primitive-spacing-5, 1.5rem); }
|
|
5132
|
+
/*
|
|
5133
|
+
* FMD-M2 (forma#88). Ellipse and diamond keep a real border (never a
|
|
5134
|
+
* background-only shape) so the boundary survives backgrounds-off print and
|
|
5135
|
+
* forced colors. --ef-diagram-h is an optional minimum height.
|
|
5136
|
+
*/
|
|
5137
|
+
.ef-diagram-node { min-block-size: var(--ef-diagram-h, auto); }
|
|
5138
|
+
.ef-diagram-node[data-ef-shape="ellipse"] {
|
|
5139
|
+
border-radius: 50%;
|
|
5140
|
+
border-inline-start-width: 2px;
|
|
5141
|
+
border-block-end: 6px solid var(--ef-diagram-node-accent);
|
|
5142
|
+
padding: var(--ef-primitive-spacing-4, 1rem) calc(var(--ef-diagram-w, 12rem) * 0.14);
|
|
5143
|
+
place-content: center;
|
|
5144
|
+
text-align: center;
|
|
5145
|
+
}
|
|
5146
|
+
.ef-diagram-node[data-ef-shape="ellipse"] .ef-diagram-node__meta,
|
|
5147
|
+
.ef-diagram-node[data-ef-shape="diamond"] .ef-diagram-node__meta { grid-template-columns: auto auto; justify-content: center; text-align: start; }
|
|
5148
|
+
/*
|
|
5149
|
+
* A square box whose ::before is the diamond; the content sits in the
|
|
5150
|
+
* inscribed square. Padding is derived from --ef-diagram-w because percentage
|
|
5151
|
+
* padding would resolve against the canvas, not the node.
|
|
5152
|
+
*/
|
|
5153
|
+
.ef-diagram-node[data-ef-shape="diamond"] {
|
|
5154
|
+
aspect-ratio: 1;
|
|
5155
|
+
padding: calc(var(--ef-diagram-w, 12rem) * 0.2);
|
|
5156
|
+
border: 0;
|
|
5157
|
+
background: transparent;
|
|
5158
|
+
place-content: center;
|
|
5159
|
+
text-align: center;
|
|
5160
|
+
isolation: isolate;
|
|
5161
|
+
}
|
|
5162
|
+
.ef-diagram-node[data-ef-shape="diamond"]::before {
|
|
5163
|
+
content: "";
|
|
5164
|
+
position: absolute;
|
|
5165
|
+
inset: 14.645%;
|
|
5166
|
+
z-index: -1;
|
|
5167
|
+
transform: rotate(45deg);
|
|
5168
|
+
border: 2px solid var(--ef-diagram-node-stroke);
|
|
5169
|
+
border-left: 6px solid var(--ef-diagram-node-accent);
|
|
5170
|
+
background: var(--ef-diagram-node-fill);
|
|
5171
|
+
}
|
|
5126
5172
|
.ef-diagram-node :where(h3, p, dl, dd) { margin: 0; color: inherit; max-inline-size: none; }
|
|
5127
5173
|
.ef-diagram-node__label { font-size: 1rem; line-height: 1.25; }
|
|
5128
5174
|
.ef-diagram-node a { color: inherit; }
|
|
@@ -5167,20 +5213,146 @@
|
|
|
5167
5213
|
vertical-align: middle;
|
|
5168
5214
|
}
|
|
5169
5215
|
|
|
5216
|
+
/*
|
|
5217
|
+
* Groups, lanes and phases (FMD-M2). A boundary with a visible text label,
|
|
5218
|
+
* painted beneath connectors and nodes (place it first in the canvas).
|
|
5219
|
+
* Membership is consumer data: overlap on the canvas never implies it, so the
|
|
5220
|
+
* consumer states membership in text (node metadata or the relationship list).
|
|
5221
|
+
* Kind is text in __kind; data-ef-group only selects the presentation.
|
|
5222
|
+
*/
|
|
5223
|
+
.ef-diagram-group {
|
|
5224
|
+
--ef-diagram-group-fill: var(--ef-diagram-fill, transparent);
|
|
5225
|
+
--ef-diagram-group-stroke: var(--ef-diagram-stroke, var(--ef-color-border-functional, #3a403c));
|
|
5226
|
+
--ef-diagram-group-accent: var(--ef-diagram-accent, var(--ef-diagram-group-stroke));
|
|
5227
|
+
--ef-diagram-group-foreground: var(--ef-diagram-foreground, var(--ef-color-text-primary, #171a18));
|
|
5228
|
+
position: absolute;
|
|
5229
|
+
left: var(--ef-diagram-x, 0);
|
|
5230
|
+
top: var(--ef-diagram-y, 0);
|
|
5231
|
+
inline-size: var(--ef-diagram-w, 20rem);
|
|
5232
|
+
block-size: var(--ef-diagram-h, 10rem);
|
|
5233
|
+
box-sizing: border-box;
|
|
5234
|
+
margin: 0;
|
|
5235
|
+
border: 2px solid var(--ef-diagram-group-stroke);
|
|
5236
|
+
border-block-start: 6px solid var(--ef-diagram-group-accent);
|
|
5237
|
+
background: var(--ef-diagram-group-fill);
|
|
5238
|
+
color: var(--ef-diagram-group-foreground);
|
|
5239
|
+
}
|
|
5240
|
+
.ef-diagram-group[data-ef-line="dashed"] { border-style: dashed; border-block-start-style: solid; }
|
|
5241
|
+
.ef-diagram-group[data-ef-line="dotted"] { border-style: dotted; border-block-start-style: solid; }
|
|
5242
|
+
.ef-diagram-group[data-ef-group="lane"] { border-block-start-width: 2px; border-inline-start-width: 6px; border-inline-start-color: var(--ef-diagram-group-accent); border-inline-start-style: solid; }
|
|
5243
|
+
.ef-diagram-group__header {
|
|
5244
|
+
display: flex;
|
|
5245
|
+
flex-wrap: wrap;
|
|
5246
|
+
gap: 0 var(--ef-primitive-spacing-2, 0.5rem);
|
|
5247
|
+
align-items: baseline;
|
|
5248
|
+
margin: 0;
|
|
5249
|
+
padding: var(--ef-primitive-spacing-1, 0.25rem) var(--ef-primitive-spacing-2, 0.5rem);
|
|
5250
|
+
color: inherit;
|
|
5251
|
+
font-size: 0.875rem;
|
|
5252
|
+
overflow-wrap: anywhere;
|
|
5253
|
+
}
|
|
5254
|
+
.ef-diagram-group__kind { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
|
|
5255
|
+
.ef-diagram-group__label { font-weight: 700; }
|
|
5256
|
+
|
|
5257
|
+
/*
|
|
5258
|
+
* Metadata value state (FMD-SCHEMA-006/007). The state is text; the border
|
|
5259
|
+
* style is a secondary cue. Explicit values carry no tag.
|
|
5260
|
+
*/
|
|
5261
|
+
.ef-diagram-value-state {
|
|
5262
|
+
display: inline-block;
|
|
5263
|
+
margin-inline-start: var(--ef-primitive-spacing-1, 0.25rem);
|
|
5264
|
+
padding: 0 var(--ef-primitive-spacing-1, 0.25rem);
|
|
5265
|
+
border: 1px dashed currentColor;
|
|
5266
|
+
font-size: 0.75rem;
|
|
5267
|
+
font-style: normal;
|
|
5268
|
+
font-weight: 400;
|
|
5269
|
+
line-height: 1.4;
|
|
5270
|
+
text-transform: none;
|
|
5271
|
+
letter-spacing: normal;
|
|
5272
|
+
vertical-align: baseline;
|
|
5273
|
+
}
|
|
5274
|
+
.ef-diagram-value-state[data-ef-value-state="unknown"],
|
|
5275
|
+
.ef-diagram-value-state[data-ef-value-state="unavailable"] { border-style: dotted; }
|
|
5276
|
+
.ef-diagram-value-state[data-ef-value-state="invalid"] { border-style: solid; border-width: 2px; font-weight: 700; }
|
|
5277
|
+
.ef-diagram-value-state[data-ef-value-state="source-bound"] { border-style: double; border-width: 3px; }
|
|
5278
|
+
|
|
5170
5279
|
@media (forced-colors: active) {
|
|
5171
|
-
.ef-diagram-node, .ef-diagram-legend__swatch { border-color: CanvasText; background: Canvas; color: CanvasText; }
|
|
5280
|
+
.ef-diagram-node, .ef-diagram-legend__swatch, .ef-diagram-group { border-color: CanvasText; background: Canvas; color: CanvasText; }
|
|
5281
|
+
.ef-diagram-node[data-ef-shape="diamond"] { background: transparent; }
|
|
5282
|
+
.ef-diagram-node[data-ef-shape="diamond"]::before { border-color: CanvasText; background: Canvas; }
|
|
5172
5283
|
.ef-diagram-connector { stroke: CanvasText; }
|
|
5173
5284
|
.ef-diagram-marker { fill: CanvasText; }
|
|
5174
5285
|
.ef-diagram-connector__label { background: Canvas; color: CanvasText; }
|
|
5175
5286
|
}
|
|
5176
5287
|
|
|
5177
|
-
/*
|
|
5288
|
+
/*
|
|
5289
|
+
* Print (color, grayscale and backgrounds-off). Authored strokes and accents
|
|
5290
|
+
* stay, since borders print even when backgrounds are disabled. Without an
|
|
5291
|
+
* authored stroke, boundaries print black. Kinds, labels, line styles and
|
|
5292
|
+
* the relationship list carry meaning when fills disappear.
|
|
5293
|
+
*/
|
|
5178
5294
|
@media print {
|
|
5179
5295
|
.ef-diagram__viewport { overflow: visible; border-color: #000; }
|
|
5180
|
-
.ef-diagram-node { break-inside: avoid;
|
|
5296
|
+
.ef-diagram-node { break-inside: avoid; --ef-diagram-node-stroke: var(--ef-diagram-stroke, #000); }
|
|
5297
|
+
.ef-diagram-group { --ef-diagram-group-stroke: var(--ef-diagram-stroke, #000); }
|
|
5181
5298
|
.ef-diagram { break-inside: avoid; }
|
|
5182
5299
|
}
|
|
5183
5300
|
|
|
5301
|
+
/*
|
|
5302
|
+
* Diagram contract 2.1.0 (workflow capability, forma#93; ADR-0006): ports,
|
|
5303
|
+
* node status, node description and the membership list. Presentation only.
|
|
5304
|
+
* Ports are connection-point markers placed by the consumer on a node side
|
|
5305
|
+
* (data-ef-side) at an offset along it (--ef-diagram-port-offset, a
|
|
5306
|
+
* percentage). Status is text in the node's metadata; data-ef-status only
|
|
5307
|
+
* selects a secondary, non-colour cue (outline, border style).
|
|
5308
|
+
*/
|
|
5309
|
+
.ef-diagram-node__description { font-size: 0.875rem; line-height: 1.35; overflow-wrap: anywhere; }
|
|
5310
|
+
.ef-diagram-port {
|
|
5311
|
+
position: absolute;
|
|
5312
|
+
inline-size: 0.75rem;
|
|
5313
|
+
block-size: 0.75rem;
|
|
5314
|
+
box-sizing: border-box;
|
|
5315
|
+
border: 2px solid var(--ef-diagram-node-stroke, var(--ef-color-border-functional, #3a403c));
|
|
5316
|
+
border-radius: 50%;
|
|
5317
|
+
background: var(--ef-color-surface-primary, #f2efe7);
|
|
5318
|
+
transform: translate(-50%, -50%);
|
|
5319
|
+
}
|
|
5320
|
+
.ef-diagram-port[data-ef-side="top"] { left: var(--ef-diagram-port-offset, 50%); top: 0; }
|
|
5321
|
+
.ef-diagram-port[data-ef-side="bottom"] { left: var(--ef-diagram-port-offset, 50%); top: 100%; }
|
|
5322
|
+
.ef-diagram-port[data-ef-side="left"] { left: 0; top: var(--ef-diagram-port-offset, 50%); }
|
|
5323
|
+
.ef-diagram-port[data-ef-side="right"] { left: 100%; top: var(--ef-diagram-port-offset, 50%); }
|
|
5324
|
+
.ef-diagram-port[data-ef-direction="in"] { border-radius: 0; }
|
|
5325
|
+
.ef-diagram-port[data-ef-direction="inout"] { border-radius: 2px; transform: translate(-50%, -50%) rotate(45deg); }
|
|
5326
|
+
.ef-diagram-port__label {
|
|
5327
|
+
position: absolute;
|
|
5328
|
+
inset-block-start: 100%;
|
|
5329
|
+
inset-inline-start: 50%;
|
|
5330
|
+
transform: translateX(-50%);
|
|
5331
|
+
padding: 0 0.125rem;
|
|
5332
|
+
background: var(--ef-color-surface-primary, #f2efe7);
|
|
5333
|
+
color: var(--ef-color-text-primary, #171a18);
|
|
5334
|
+
font-size: 0.6875rem;
|
|
5335
|
+
line-height: 1.2;
|
|
5336
|
+
white-space: nowrap;
|
|
5337
|
+
}
|
|
5338
|
+
.ef-diagram-node[data-ef-status="active"] { box-shadow: 0 0 0 3px var(--ef-color-surface-primary, #f2efe7), 0 0 0 6px var(--ef-diagram-node-stroke); }
|
|
5339
|
+
.ef-diagram-node[data-ef-status="blocked"],
|
|
5340
|
+
.ef-diagram-node[data-ef-status="failed"] { border-style: double; border-width: 4px; border-inline-start-width: 6px; }
|
|
5341
|
+
.ef-diagram-node[data-ef-status="skipped"],
|
|
5342
|
+
.ef-diagram-node[data-ef-status="cancelled"] { border-style: dashed; border-inline-start-style: solid; }
|
|
5343
|
+
.ef-diagram-node[data-ef-status="pending"],
|
|
5344
|
+
.ef-diagram-node[data-ef-status="waiting"] { border-style: dotted; border-inline-start-style: solid; }
|
|
5345
|
+
.ef-diagram__membership { display: grid; grid-template-columns: minmax(0, max-content) minmax(0, 1fr); gap: var(--ef-primitive-spacing-1, 0.25rem) var(--ef-primitive-spacing-3, 0.75rem); margin: 0; }
|
|
5346
|
+
.ef-diagram__membership :where(dt) { font-weight: 700; overflow-wrap: anywhere; }
|
|
5347
|
+
.ef-diagram__membership :where(dd) { margin: 0; overflow-wrap: anywhere; }
|
|
5348
|
+
@media (max-width: 30rem) {
|
|
5349
|
+
.ef-diagram__membership { grid-template-columns: minmax(0, 1fr); }
|
|
5350
|
+
}
|
|
5351
|
+
@media (forced-colors: active) {
|
|
5352
|
+
.ef-diagram-port, .ef-diagram-port__label { border-color: CanvasText; background: Canvas; color: CanvasText; }
|
|
5353
|
+
.ef-diagram-node[data-ef-status="active"] { box-shadow: none; outline: 3px solid CanvasText; outline-offset: 3px; }
|
|
5354
|
+
}
|
|
5355
|
+
|
|
5184
5356
|
/* BEGIN generated: character-grid coordinates (tools/character-grid-css.mjs) */
|
|
5185
5357
|
.ef-character-grid[data-ef-rows="1"] { --ef-grid-rows: 1; }
|
|
5186
5358
|
.ef-character-grid[data-ef-rows="2"] { --ef-grid-rows: 2; }
|
package/dist/build-metrics.json
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"patterns/badge.html",
|
|
16
16
|
"patterns/best-worst.html",
|
|
17
17
|
"patterns/binary-choice.html",
|
|
18
|
+
"patterns/bounded-overflow.html",
|
|
19
|
+
"patterns/button.html",
|
|
18
20
|
"patterns/callout.html",
|
|
19
21
|
"patterns/card-grid.html",
|
|
20
22
|
"patterns/character-grid-3270.html",
|
|
@@ -37,11 +39,13 @@
|
|
|
37
39
|
"patterns/comparison-pairs.html",
|
|
38
40
|
"patterns/composer.html",
|
|
39
41
|
"patterns/conflict-review.html",
|
|
42
|
+
"patterns/container.html",
|
|
40
43
|
"patterns/conversation.html",
|
|
41
44
|
"patterns/cta.html",
|
|
42
45
|
"patterns/dashboard-grid.html",
|
|
43
46
|
"patterns/data-grid.html",
|
|
44
47
|
"patterns/date-range.html",
|
|
48
|
+
"patterns/date-time-field.html",
|
|
45
49
|
"patterns/dense-ledger.html",
|
|
46
50
|
"patterns/diagnostic-status.html",
|
|
47
51
|
"patterns/diagram.html",
|
|
@@ -68,6 +72,7 @@
|
|
|
68
72
|
"patterns/focus-stage.html",
|
|
69
73
|
"patterns/frame.html",
|
|
70
74
|
"patterns/freshness.html",
|
|
75
|
+
"patterns/grid.html",
|
|
71
76
|
"patterns/handoff-summary.html",
|
|
72
77
|
"patterns/hero.html",
|
|
73
78
|
"patterns/hierarchical-choice.html",
|
|
@@ -75,6 +80,7 @@
|
|
|
75
80
|
"patterns/hierarchy-tree.html",
|
|
76
81
|
"patterns/identifier.html",
|
|
77
82
|
"patterns/image-choice.html",
|
|
83
|
+
"patterns/key-value-list.html",
|
|
78
84
|
"patterns/landmark-region.html",
|
|
79
85
|
"patterns/lane-board.html",
|
|
80
86
|
"patterns/marketing-shell.html",
|
|
@@ -119,6 +125,7 @@
|
|
|
119
125
|
"patterns/scroll-progress.html",
|
|
120
126
|
"patterns/search.html",
|
|
121
127
|
"patterns/section-heading.html",
|
|
128
|
+
"patterns/section.html",
|
|
122
129
|
"patterns/security-blockers.html",
|
|
123
130
|
"patterns/security-evidence-age.html",
|
|
124
131
|
"patterns/security-evidence-chain.html",
|
|
@@ -135,20 +142,26 @@
|
|
|
135
142
|
"patterns/site-footer.html",
|
|
136
143
|
"patterns/site-header.html",
|
|
137
144
|
"patterns/skeleton.html",
|
|
145
|
+
"patterns/skip-link.html",
|
|
138
146
|
"patterns/slider.html",
|
|
139
147
|
"patterns/spatial-canvas.html",
|
|
140
148
|
"patterns/special-choice.html",
|
|
141
149
|
"patterns/spinner.html",
|
|
142
150
|
"patterns/split-pane.html",
|
|
151
|
+
"patterns/split.html",
|
|
143
152
|
"patterns/stack.html",
|
|
144
153
|
"patterns/state-survivability.html",
|
|
145
154
|
"patterns/status-lozenge.html",
|
|
146
155
|
"patterns/steps.html",
|
|
156
|
+
"patterns/surface.html",
|
|
147
157
|
"patterns/survey-progress.html",
|
|
148
158
|
"patterns/switch.html",
|
|
149
159
|
"patterns/switcher.html",
|
|
150
160
|
"patterns/symbol-rating.html",
|
|
151
161
|
"patterns/tabs.html",
|
|
162
|
+
"patterns/text-field.html",
|
|
163
|
+
"patterns/text-roles.html",
|
|
164
|
+
"patterns/textarea.html",
|
|
152
165
|
"patterns/timeline.html",
|
|
153
166
|
"patterns/toast.html",
|
|
154
167
|
"patterns/tooltip.html",
|
|
@@ -156,6 +169,7 @@
|
|
|
156
169
|
"patterns/validation-message.html",
|
|
157
170
|
"patterns/validation-summary.html",
|
|
158
171
|
"patterns/verification-frame.html",
|
|
172
|
+
"patterns/visually-hidden.html",
|
|
159
173
|
"patterns/wizard.html",
|
|
160
174
|
"patterns/work-queue.html",
|
|
161
175
|
"patterns/workspace-shell.html",
|
|
@@ -163,13 +177,13 @@
|
|
|
163
177
|
"tokens.css"
|
|
164
178
|
],
|
|
165
179
|
"bytes": {
|
|
166
|
-
"all.css":
|
|
180
|
+
"all.css": 309758,
|
|
167
181
|
"assessment.css": 34482,
|
|
168
182
|
"brands/echelon.css": 3621,
|
|
169
183
|
"brands/example-harbor.css": 3637,
|
|
170
184
|
"brands/index.json": 335,
|
|
171
|
-
"components.css":
|
|
172
|
-
"foundations.css":
|
|
185
|
+
"components.css": 198383,
|
|
186
|
+
"foundations.css": 10893,
|
|
173
187
|
"marketing.css": 45073,
|
|
174
188
|
"patterns/active-filter-summary.html": 532,
|
|
175
189
|
"patterns/alert.html": 384,
|
|
@@ -178,6 +192,8 @@
|
|
|
178
192
|
"patterns/badge.html": 411,
|
|
179
193
|
"patterns/best-worst.html": 1268,
|
|
180
194
|
"patterns/binary-choice.html": 652,
|
|
195
|
+
"patterns/bounded-overflow.html": 596,
|
|
196
|
+
"patterns/button.html": 187,
|
|
181
197
|
"patterns/callout.html": 1408,
|
|
182
198
|
"patterns/card-grid.html": 1032,
|
|
183
199
|
"patterns/character-grid-3270.html": 4693,
|
|
@@ -200,11 +216,13 @@
|
|
|
200
216
|
"patterns/comparison-pairs.html": 770,
|
|
201
217
|
"patterns/composer.html": 1074,
|
|
202
218
|
"patterns/conflict-review.html": 854,
|
|
219
|
+
"patterns/container.html": 245,
|
|
203
220
|
"patterns/conversation.html": 1009,
|
|
204
221
|
"patterns/cta.html": 597,
|
|
205
222
|
"patterns/dashboard-grid.html": 590,
|
|
206
223
|
"patterns/data-grid.html": 1316,
|
|
207
224
|
"patterns/date-range.html": 519,
|
|
225
|
+
"patterns/date-time-field.html": 367,
|
|
208
226
|
"patterns/dense-ledger.html": 526,
|
|
209
227
|
"patterns/diagnostic-status.html": 303,
|
|
210
228
|
"patterns/diagram.html": 4260,
|
|
@@ -231,13 +249,15 @@
|
|
|
231
249
|
"patterns/focus-stage.html": 377,
|
|
232
250
|
"patterns/frame.html": 365,
|
|
233
251
|
"patterns/freshness.html": 187,
|
|
252
|
+
"patterns/grid.html": 305,
|
|
234
253
|
"patterns/handoff-summary.html": 686,
|
|
235
254
|
"patterns/hero.html": 1066,
|
|
236
255
|
"patterns/hierarchical-choice.html": 919,
|
|
237
256
|
"patterns/hierarchical-multi-choice.html": 1086,
|
|
238
257
|
"patterns/hierarchy-tree.html": 480,
|
|
239
258
|
"patterns/identifier.html": 617,
|
|
240
|
-
"patterns/image-choice.html":
|
|
259
|
+
"patterns/image-choice.html": 1813,
|
|
260
|
+
"patterns/key-value-list.html": 238,
|
|
241
261
|
"patterns/landmark-region.html": 265,
|
|
242
262
|
"patterns/lane-board.html": 710,
|
|
243
263
|
"patterns/marketing-shell.html": 2405,
|
|
@@ -282,6 +302,7 @@
|
|
|
282
302
|
"patterns/scroll-progress.html": 446,
|
|
283
303
|
"patterns/search.html": 385,
|
|
284
304
|
"patterns/section-heading.html": 528,
|
|
305
|
+
"patterns/section.html": 190,
|
|
285
306
|
"patterns/security-blockers.html": 399,
|
|
286
307
|
"patterns/security-evidence-age.html": 370,
|
|
287
308
|
"patterns/security-evidence-chain.html": 432,
|
|
@@ -298,20 +319,26 @@
|
|
|
298
319
|
"patterns/site-footer.html": 702,
|
|
299
320
|
"patterns/site-header.html": 922,
|
|
300
321
|
"patterns/skeleton.html": 354,
|
|
322
|
+
"patterns/skip-link.html": 186,
|
|
301
323
|
"patterns/slider.html": 403,
|
|
302
|
-
"patterns/spatial-canvas.html":
|
|
324
|
+
"patterns/spatial-canvas.html": 976,
|
|
303
325
|
"patterns/special-choice.html": 568,
|
|
304
326
|
"patterns/spinner.html": 175,
|
|
305
327
|
"patterns/split-pane.html": 348,
|
|
328
|
+
"patterns/split.html": 344,
|
|
306
329
|
"patterns/stack.html": 353,
|
|
307
330
|
"patterns/state-survivability.html": 999,
|
|
308
331
|
"patterns/status-lozenge.html": 358,
|
|
309
332
|
"patterns/steps.html": 287,
|
|
333
|
+
"patterns/surface.html": 206,
|
|
310
334
|
"patterns/survey-progress.html": 446,
|
|
311
335
|
"patterns/switch.html": 506,
|
|
312
336
|
"patterns/switcher.html": 386,
|
|
313
337
|
"patterns/symbol-rating.html": 1493,
|
|
314
338
|
"patterns/tabs.html": 741,
|
|
339
|
+
"patterns/text-field.html": 359,
|
|
340
|
+
"patterns/text-roles.html": 396,
|
|
341
|
+
"patterns/textarea.html": 387,
|
|
315
342
|
"patterns/timeline.html": 902,
|
|
316
343
|
"patterns/toast.html": 525,
|
|
317
344
|
"patterns/tooltip.html": 2188,
|
|
@@ -319,6 +346,7 @@
|
|
|
319
346
|
"patterns/validation-message.html": 180,
|
|
320
347
|
"patterns/validation-summary.html": 530,
|
|
321
348
|
"patterns/verification-frame.html": 1245,
|
|
349
|
+
"patterns/visually-hidden.html": 144,
|
|
322
350
|
"patterns/wizard.html": 817,
|
|
323
351
|
"patterns/work-queue.html": 971,
|
|
324
352
|
"patterns/workspace-shell.html": 479,
|