@echelon-foundry/design-system 0.3.0-main.216.1 → 0.3.0-main.217.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 +9 -0
- package/dist/build-metrics.json +29 -1
- 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/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/figma/component-contracts.json +140 -0
- package/package.json +6 -4
- 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/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/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
|
|
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",
|
|
@@ -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
324
|
"patterns/spatial-canvas.html": 951,
|
|
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,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="ef-bounded-overflow" role="region" aria-label="Quarterly totals by region" tabindex="0">
|
|
2
|
+
<table>
|
|
3
|
+
<thead><tr><th scope="col">Region</th><th scope="col">Q1</th><th scope="col">Q2</th><th scope="col">Q3</th><th scope="col">Q4</th><th scope="col">Year</th></tr></thead>
|
|
4
|
+
<tbody>
|
|
5
|
+
<tr><th scope="row">North America</th><td>1,204,000</td><td>1,318,500</td><td>1,402,250</td><td>1,511,000</td><td>5,435,750</td></tr>
|
|
6
|
+
<tr><th scope="row">Europe</th><td>904,100</td><td>931,000</td><td>1,010,400</td><td>1,120,900</td><td>3,966,400</td></tr>
|
|
7
|
+
</tbody>
|
|
8
|
+
</table>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="date-time-field-due">Due date</label>
|
|
3
|
+
<span class="ef-field__description" id="date-time-field-due-description">The browser supplies its own date picker; typing the date also works.</span>
|
|
4
|
+
<input id="date-time-field-due" name="due" type="date" aria-describedby="date-time-field-due-description">
|
|
5
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<ul class="ef-grid" aria-label="Environments" role="list">
|
|
2
|
+
<li class="ef-surface"><h3>Production</h3><p>12 services, all reporting.</p></li>
|
|
3
|
+
<li class="ef-surface"><h3>Staging</h3><p>12 services, 1 deploying.</p></li>
|
|
4
|
+
<li class="ef-surface"><h3>Development</h3><p>9 services, 3 idle.</p></li>
|
|
5
|
+
</ul>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<label class="ef-choice ef-choice--media">
|
|
5
5
|
<input type="radio" name="layout-choice" value="compact" required>
|
|
6
6
|
<span class="ef-choice__media">
|
|
7
|
-
<img src="/
|
|
7
|
+
<img width="160" height="90" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 90'%3E%3Crect width='160' height='90' fill='%23e3e0d7'/%3E%3Crect x='10' y='10' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='21' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='32' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='43' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='54' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='65' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='76' width='140' height='8' fill='%23686d68'/%3E%3C/svg%3E" alt="">
|
|
8
8
|
</span>
|
|
9
9
|
<span class="ef-choice__content">
|
|
10
10
|
<strong>Compact layout</strong>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<label class="ef-choice ef-choice--media">
|
|
16
16
|
<input type="radio" name="layout-choice" value="spacious">
|
|
17
17
|
<span class="ef-choice__media">
|
|
18
|
-
<img src="/
|
|
18
|
+
<img width="160" height="90" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 90'%3E%3Crect width='160' height='90' fill='%23e3e0d7'/%3E%3Crect x='10' y='10' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='34' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='58' width='140' height='8' fill='%23686d68'/%3E%3C/svg%3E" alt="">
|
|
19
19
|
</span>
|
|
20
20
|
<span class="ef-choice__content">
|
|
21
21
|
<strong>Spacious layout</strong>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<div class="ef-site">
|
|
2
|
+
<div class="ef-split">
|
|
3
|
+
<div>
|
|
4
|
+
<h2>Install</h2>
|
|
5
|
+
<p>The primary region takes the available space. The supporting region wraps below it when the row runs out of room.</p>
|
|
6
|
+
</div>
|
|
7
|
+
<aside aria-label="Requirements">
|
|
8
|
+
<h3>Requirements</h3>
|
|
9
|
+
<p>Node 22 or later.</p>
|
|
10
|
+
</aside>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="text-field-email">Work email</label>
|
|
3
|
+
<span class="ef-field__description" id="text-field-email-description">We send sign-in links to this address.</span>
|
|
4
|
+
<input id="text-field-email" name="email" type="email" autocomplete="email" aria-describedby="text-field-email-description" required>
|
|
5
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div class="ef-site">
|
|
2
|
+
<p class="ef-eyebrow">Release 0.3</p>
|
|
3
|
+
<h2>Faster onboarding for new teams</h2>
|
|
4
|
+
<p class="ef-lead">A lead paragraph introduces the section in one or two sentences.</p>
|
|
5
|
+
<blockquote class="ef-statement"><p>Forma keeps behavior in the application and presentation in the design system.</p></blockquote>
|
|
6
|
+
<span class="ef-component-kicker">Component kicker</span>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="textarea-summary">Change summary</label>
|
|
3
|
+
<span class="ef-field__description" id="textarea-summary-description">Describe what changed and why. Plain text, up to 500 characters.</span>
|
|
4
|
+
<textarea id="textarea-summary" name="summary" rows="4" maxlength="500" aria-describedby="textarea-summary-description"></textarea>
|
|
5
|
+
</div>
|
package/docs/MARKETING-SITES.md
CHANGED
|
@@ -314,7 +314,7 @@ Keep the `@v<version>` of the Forma actions equal to the version in
|
|
|
314
314
|
3. Add it in Forma:
|
|
315
315
|
- pattern HTML;
|
|
316
316
|
- CSS in `src/marketing/` using role tokens only;
|
|
317
|
-
-
|
|
317
|
+
- a catalog entry in `catalog/components/<slug>.mjs` (see `docs/CATALOG-AUTHORING.md`);
|
|
318
318
|
- tests (structure, browser, axe, 320 px);
|
|
319
319
|
- a gap entry closed in `requirements/MARKETING-PRESENTATION.md`.
|
|
320
320
|
4. Release it. The sites then upgrade (question 7) and remove any local
|
|
@@ -100,6 +100,26 @@
|
|
|
100
100
|
"status": "requires-published-figma-component"
|
|
101
101
|
}
|
|
102
102
|
},
|
|
103
|
+
{
|
|
104
|
+
"id": "bounded-overflow",
|
|
105
|
+
"figmaName": "Forma / Bounded Overflow",
|
|
106
|
+
"source": "patterns/bounded-overflow.html",
|
|
107
|
+
"codeConnect": {
|
|
108
|
+
"id": "Forma/bounded-overflow",
|
|
109
|
+
"nodeUrl": null,
|
|
110
|
+
"status": "requires-published-figma-component"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "button",
|
|
115
|
+
"figmaName": "Forma / Button",
|
|
116
|
+
"source": "patterns/button.html",
|
|
117
|
+
"codeConnect": {
|
|
118
|
+
"id": "Forma/button",
|
|
119
|
+
"nodeUrl": null,
|
|
120
|
+
"status": "requires-published-figma-component"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
103
123
|
{
|
|
104
124
|
"id": "callout",
|
|
105
125
|
"figmaName": "Forma / Callout",
|
|
@@ -320,6 +340,16 @@
|
|
|
320
340
|
"status": "requires-published-figma-component"
|
|
321
341
|
}
|
|
322
342
|
},
|
|
343
|
+
{
|
|
344
|
+
"id": "container",
|
|
345
|
+
"figmaName": "Forma / Container",
|
|
346
|
+
"source": "patterns/container.html",
|
|
347
|
+
"codeConnect": {
|
|
348
|
+
"id": "Forma/container",
|
|
349
|
+
"nodeUrl": null,
|
|
350
|
+
"status": "requires-published-figma-component"
|
|
351
|
+
}
|
|
352
|
+
},
|
|
323
353
|
{
|
|
324
354
|
"id": "conversation",
|
|
325
355
|
"figmaName": "Forma / Conversation",
|
|
@@ -370,6 +400,16 @@
|
|
|
370
400
|
"status": "requires-published-figma-component"
|
|
371
401
|
}
|
|
372
402
|
},
|
|
403
|
+
{
|
|
404
|
+
"id": "date-time-field",
|
|
405
|
+
"figmaName": "Forma / Date Time Field",
|
|
406
|
+
"source": "patterns/date-time-field.html",
|
|
407
|
+
"codeConnect": {
|
|
408
|
+
"id": "Forma/date-time-field",
|
|
409
|
+
"nodeUrl": null,
|
|
410
|
+
"status": "requires-published-figma-component"
|
|
411
|
+
}
|
|
412
|
+
},
|
|
373
413
|
{
|
|
374
414
|
"id": "dense-ledger",
|
|
375
415
|
"figmaName": "Forma / Dense Ledger",
|
|
@@ -630,6 +670,16 @@
|
|
|
630
670
|
"status": "requires-published-figma-component"
|
|
631
671
|
}
|
|
632
672
|
},
|
|
673
|
+
{
|
|
674
|
+
"id": "grid",
|
|
675
|
+
"figmaName": "Forma / Grid",
|
|
676
|
+
"source": "patterns/grid.html",
|
|
677
|
+
"codeConnect": {
|
|
678
|
+
"id": "Forma/grid",
|
|
679
|
+
"nodeUrl": null,
|
|
680
|
+
"status": "requires-published-figma-component"
|
|
681
|
+
}
|
|
682
|
+
},
|
|
633
683
|
{
|
|
634
684
|
"id": "handoff-summary",
|
|
635
685
|
"figmaName": "Forma / Handoff Summary",
|
|
@@ -700,6 +750,16 @@
|
|
|
700
750
|
"status": "requires-published-figma-component"
|
|
701
751
|
}
|
|
702
752
|
},
|
|
753
|
+
{
|
|
754
|
+
"id": "key-value-list",
|
|
755
|
+
"figmaName": "Forma / Key Value List",
|
|
756
|
+
"source": "patterns/key-value-list.html",
|
|
757
|
+
"codeConnect": {
|
|
758
|
+
"id": "Forma/key-value-list",
|
|
759
|
+
"nodeUrl": null,
|
|
760
|
+
"status": "requires-published-figma-component"
|
|
761
|
+
}
|
|
762
|
+
},
|
|
703
763
|
{
|
|
704
764
|
"id": "landmark-region",
|
|
705
765
|
"figmaName": "Forma / Landmark Region",
|
|
@@ -1130,6 +1190,16 @@
|
|
|
1130
1190
|
"status": "requires-published-figma-component"
|
|
1131
1191
|
}
|
|
1132
1192
|
},
|
|
1193
|
+
{
|
|
1194
|
+
"id": "section",
|
|
1195
|
+
"figmaName": "Forma / Section",
|
|
1196
|
+
"source": "patterns/section.html",
|
|
1197
|
+
"codeConnect": {
|
|
1198
|
+
"id": "Forma/section",
|
|
1199
|
+
"nodeUrl": null,
|
|
1200
|
+
"status": "requires-published-figma-component"
|
|
1201
|
+
}
|
|
1202
|
+
},
|
|
1133
1203
|
{
|
|
1134
1204
|
"id": "section-heading",
|
|
1135
1205
|
"figmaName": "Forma / Section Heading",
|
|
@@ -1300,6 +1370,16 @@
|
|
|
1300
1370
|
"status": "requires-published-figma-component"
|
|
1301
1371
|
}
|
|
1302
1372
|
},
|
|
1373
|
+
{
|
|
1374
|
+
"id": "skip-link",
|
|
1375
|
+
"figmaName": "Forma / Skip Link",
|
|
1376
|
+
"source": "patterns/skip-link.html",
|
|
1377
|
+
"codeConnect": {
|
|
1378
|
+
"id": "Forma/skip-link",
|
|
1379
|
+
"nodeUrl": null,
|
|
1380
|
+
"status": "requires-published-figma-component"
|
|
1381
|
+
}
|
|
1382
|
+
},
|
|
1303
1383
|
{
|
|
1304
1384
|
"id": "slider",
|
|
1305
1385
|
"figmaName": "Forma / Slider",
|
|
@@ -1340,6 +1420,16 @@
|
|
|
1340
1420
|
"status": "requires-published-figma-component"
|
|
1341
1421
|
}
|
|
1342
1422
|
},
|
|
1423
|
+
{
|
|
1424
|
+
"id": "split",
|
|
1425
|
+
"figmaName": "Forma / Split",
|
|
1426
|
+
"source": "patterns/split.html",
|
|
1427
|
+
"codeConnect": {
|
|
1428
|
+
"id": "Forma/split",
|
|
1429
|
+
"nodeUrl": null,
|
|
1430
|
+
"status": "requires-published-figma-component"
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1343
1433
|
{
|
|
1344
1434
|
"id": "split-pane",
|
|
1345
1435
|
"figmaName": "Forma / Split Pane",
|
|
@@ -1390,6 +1480,16 @@
|
|
|
1390
1480
|
"status": "requires-published-figma-component"
|
|
1391
1481
|
}
|
|
1392
1482
|
},
|
|
1483
|
+
{
|
|
1484
|
+
"id": "surface",
|
|
1485
|
+
"figmaName": "Forma / Surface",
|
|
1486
|
+
"source": "patterns/surface.html",
|
|
1487
|
+
"codeConnect": {
|
|
1488
|
+
"id": "Forma/surface",
|
|
1489
|
+
"nodeUrl": null,
|
|
1490
|
+
"status": "requires-published-figma-component"
|
|
1491
|
+
}
|
|
1492
|
+
},
|
|
1393
1493
|
{
|
|
1394
1494
|
"id": "survey-progress",
|
|
1395
1495
|
"figmaName": "Forma / Survey Progress",
|
|
@@ -1440,6 +1540,36 @@
|
|
|
1440
1540
|
"status": "requires-published-figma-component"
|
|
1441
1541
|
}
|
|
1442
1542
|
},
|
|
1543
|
+
{
|
|
1544
|
+
"id": "text-field",
|
|
1545
|
+
"figmaName": "Forma / Text Field",
|
|
1546
|
+
"source": "patterns/text-field.html",
|
|
1547
|
+
"codeConnect": {
|
|
1548
|
+
"id": "Forma/text-field",
|
|
1549
|
+
"nodeUrl": null,
|
|
1550
|
+
"status": "requires-published-figma-component"
|
|
1551
|
+
}
|
|
1552
|
+
},
|
|
1553
|
+
{
|
|
1554
|
+
"id": "text-roles",
|
|
1555
|
+
"figmaName": "Forma / Text Roles",
|
|
1556
|
+
"source": "patterns/text-roles.html",
|
|
1557
|
+
"codeConnect": {
|
|
1558
|
+
"id": "Forma/text-roles",
|
|
1559
|
+
"nodeUrl": null,
|
|
1560
|
+
"status": "requires-published-figma-component"
|
|
1561
|
+
}
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"id": "textarea",
|
|
1565
|
+
"figmaName": "Forma / Textarea",
|
|
1566
|
+
"source": "patterns/textarea.html",
|
|
1567
|
+
"codeConnect": {
|
|
1568
|
+
"id": "Forma/textarea",
|
|
1569
|
+
"nodeUrl": null,
|
|
1570
|
+
"status": "requires-published-figma-component"
|
|
1571
|
+
}
|
|
1572
|
+
},
|
|
1443
1573
|
{
|
|
1444
1574
|
"id": "timeline",
|
|
1445
1575
|
"figmaName": "Forma / Timeline",
|
|
@@ -1510,6 +1640,16 @@
|
|
|
1510
1640
|
"status": "requires-published-figma-component"
|
|
1511
1641
|
}
|
|
1512
1642
|
},
|
|
1643
|
+
{
|
|
1644
|
+
"id": "visually-hidden",
|
|
1645
|
+
"figmaName": "Forma / Visually Hidden",
|
|
1646
|
+
"source": "patterns/visually-hidden.html",
|
|
1647
|
+
"codeConnect": {
|
|
1648
|
+
"id": "Forma/visually-hidden",
|
|
1649
|
+
"nodeUrl": null,
|
|
1650
|
+
"status": "requires-published-figma-component"
|
|
1651
|
+
}
|
|
1652
|
+
},
|
|
1513
1653
|
{
|
|
1514
1654
|
"id": "wizard",
|
|
1515
1655
|
"figmaName": "Forma / Wizard",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@echelon-foundry/design-system",
|
|
3
|
-
"version": "0.3.0-main.
|
|
3
|
+
"version": "0.3.0-main.217.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Zero-runtime HTML and CSS design system for Echelon Foundry applications.",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"test:motion": "node --test tests/motion-audit.test.mjs tests/motion-gate.test.mjs && node tools/motion-audit.mjs --strict",
|
|
48
48
|
"check": "npm run build && npm run test:tokens && npm run test:brands && npm run test:runtime && 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 test:browser",
|
|
49
49
|
"site:build": "npm run build && node tools/build-site.mjs",
|
|
50
|
-
"site:test": "node --test tests/site-build.test.mjs",
|
|
51
|
-
"site:check": "npm run site:build && npm run site:test && npm run site:mobile",
|
|
50
|
+
"site:test": "node --test tests/site-build.test.mjs tests/catalog-coverage.test.mjs",
|
|
51
|
+
"site:check": "npm run site:build && npm run catalog:check && npm run site:test && npm run site:mobile",
|
|
52
52
|
"site:mobile": "playwright test --config=playwright.site.config.mjs",
|
|
53
53
|
"pack:verify": "npm run build && npm pack --dry-run",
|
|
54
54
|
"test:package": "node --test tests/package-contract.test.mjs",
|
|
@@ -62,7 +62,9 @@
|
|
|
62
62
|
"example:install": "mkdir -p build/example && cp examples/echelon-marketing-site/forma.lock build/example/forma.lock && bash actions/install-presentation/install.sh --lock build/example/forma.lock --source dist/marketing --update --output examples/echelon-marketing-site/assets/forma",
|
|
63
63
|
"policy:check": "dotnet run --project tools/SiteCssPolicy/SiteCssPolicy.fsproj --",
|
|
64
64
|
"release:check": "npm run build && npm run test:tokens && npm run test:brands && npm run test:runtime && npm run test:motion && npm run test:marketing && npm run test:character-grid && npm run test:css && npm run test:package && playwright test tests/browser/marketing.spec.mjs && npm run site:check",
|
|
65
|
-
"test:figma": "node --test tests/figma-contract.test.mjs"
|
|
65
|
+
"test:figma": "node --test tests/figma-contract.test.mjs",
|
|
66
|
+
"catalog:check": "node tools/catalog/validate.mjs && node tools/catalog/inventory.mjs --check",
|
|
67
|
+
"catalog:inventory": "node tools/catalog/inventory.mjs"
|
|
66
68
|
},
|
|
67
69
|
"devDependencies": {
|
|
68
70
|
"@axe-core/playwright": "4.13.0",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="ef-bounded-overflow" role="region" aria-label="Quarterly totals by region" tabindex="0">
|
|
2
|
+
<table>
|
|
3
|
+
<thead><tr><th scope="col">Region</th><th scope="col">Q1</th><th scope="col">Q2</th><th scope="col">Q3</th><th scope="col">Q4</th><th scope="col">Year</th></tr></thead>
|
|
4
|
+
<tbody>
|
|
5
|
+
<tr><th scope="row">North America</th><td>1,204,000</td><td>1,318,500</td><td>1,402,250</td><td>1,511,000</td><td>5,435,750</td></tr>
|
|
6
|
+
<tr><th scope="row">Europe</th><td>904,100</td><td>931,000</td><td>1,010,400</td><td>1,120,900</td><td>3,966,400</td></tr>
|
|
7
|
+
</tbody>
|
|
8
|
+
</table>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="date-time-field-due">Due date</label>
|
|
3
|
+
<span class="ef-field__description" id="date-time-field-due-description">The browser supplies its own date picker; typing the date also works.</span>
|
|
4
|
+
<input id="date-time-field-due" name="due" type="date" aria-describedby="date-time-field-due-description">
|
|
5
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<ul class="ef-grid" aria-label="Environments" role="list">
|
|
2
|
+
<li class="ef-surface"><h3>Production</h3><p>12 services, all reporting.</p></li>
|
|
3
|
+
<li class="ef-surface"><h3>Staging</h3><p>12 services, 1 deploying.</p></li>
|
|
4
|
+
<li class="ef-surface"><h3>Development</h3><p>9 services, 3 idle.</p></li>
|
|
5
|
+
</ul>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<label class="ef-choice ef-choice--media">
|
|
5
5
|
<input type="radio" name="layout-choice" value="compact" required>
|
|
6
6
|
<span class="ef-choice__media">
|
|
7
|
-
<img src="/
|
|
7
|
+
<img width="160" height="90" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 90'%3E%3Crect width='160' height='90' fill='%23e3e0d7'/%3E%3Crect x='10' y='10' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='21' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='32' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='43' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='54' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='65' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='76' width='140' height='8' fill='%23686d68'/%3E%3C/svg%3E" alt="">
|
|
8
8
|
</span>
|
|
9
9
|
<span class="ef-choice__content">
|
|
10
10
|
<strong>Compact layout</strong>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<label class="ef-choice ef-choice--media">
|
|
16
16
|
<input type="radio" name="layout-choice" value="spacious">
|
|
17
17
|
<span class="ef-choice__media">
|
|
18
|
-
<img src="/
|
|
18
|
+
<img width="160" height="90" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 90'%3E%3Crect width='160' height='90' fill='%23e3e0d7'/%3E%3Crect x='10' y='10' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='34' width='140' height='8' fill='%23686d68'/%3E%3Crect x='10' y='58' width='140' height='8' fill='%23686d68'/%3E%3C/svg%3E" alt="">
|
|
19
19
|
</span>
|
|
20
20
|
<span class="ef-choice__content">
|
|
21
21
|
<strong>Spacious layout</strong>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<div class="ef-site">
|
|
2
|
+
<div class="ef-split">
|
|
3
|
+
<div>
|
|
4
|
+
<h2>Install</h2>
|
|
5
|
+
<p>The primary region takes the available space. The supporting region wraps below it when the row runs out of room.</p>
|
|
6
|
+
</div>
|
|
7
|
+
<aside aria-label="Requirements">
|
|
8
|
+
<h3>Requirements</h3>
|
|
9
|
+
<p>Node 22 or later.</p>
|
|
10
|
+
</aside>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="text-field-email">Work email</label>
|
|
3
|
+
<span class="ef-field__description" id="text-field-email-description">We send sign-in links to this address.</span>
|
|
4
|
+
<input id="text-field-email" name="email" type="email" autocomplete="email" aria-describedby="text-field-email-description" required>
|
|
5
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div class="ef-site">
|
|
2
|
+
<p class="ef-eyebrow">Release 0.3</p>
|
|
3
|
+
<h2>Faster onboarding for new teams</h2>
|
|
4
|
+
<p class="ef-lead">A lead paragraph introduces the section in one or two sentences.</p>
|
|
5
|
+
<blockquote class="ef-statement"><p>Forma keeps behavior in the application and presentation in the design system.</p></blockquote>
|
|
6
|
+
<span class="ef-component-kicker">Component kicker</span>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="ef-field">
|
|
2
|
+
<label class="ef-field__label" for="textarea-summary">Change summary</label>
|
|
3
|
+
<span class="ef-field__description" id="textarea-summary-description">Describe what changed and why. Plain text, up to 500 characters.</span>
|
|
4
|
+
<textarea id="textarea-summary" name="summary" rows="4" maxlength="500" aria-describedby="textarea-summary-description"></textarea>
|
|
5
|
+
</div>
|