@echelon-foundry/design-system 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +29 -0
  2. package/contracts/diagram-presentation.json +109 -0
  3. package/contracts/workflow-capabilities.json +25 -0
  4. package/dist/all.css +175 -3
  5. package/dist/build-metrics.json +32 -4
  6. package/dist/components.css +173 -3
  7. package/dist/foundations.css +2 -0
  8. package/dist/marketing/forma-all.css +176 -4
  9. package/dist/marketing/forma-echelon-marketing.css +3 -1
  10. package/dist/marketing/forma-marketing-theme-echelon.css +1 -1
  11. package/dist/marketing/forma-marketing.css +3 -1
  12. package/dist/marketing/forma-marketing.manifest.json +9 -9
  13. package/dist/marketing/forma-marketing.sha256 +4 -4
  14. package/dist/patterns/bounded-overflow.html +9 -0
  15. package/dist/patterns/button.html +5 -0
  16. package/dist/patterns/container.html +6 -0
  17. package/dist/patterns/date-time-field.html +5 -0
  18. package/dist/patterns/grid.html +5 -0
  19. package/dist/patterns/image-choice.html +2 -2
  20. package/dist/patterns/key-value-list.html +5 -0
  21. package/dist/patterns/section.html +4 -0
  22. package/dist/patterns/skip-link.html +6 -0
  23. package/dist/patterns/split.html +12 -0
  24. package/dist/patterns/surface.html +4 -0
  25. package/dist/patterns/text-field.html +5 -0
  26. package/dist/patterns/text-roles.html +7 -0
  27. package/dist/patterns/textarea.html +5 -0
  28. package/dist/patterns/visually-hidden.html +4 -0
  29. package/docs/MARKETING-SITES.md +1 -1
  30. package/docs/workflow/EMBEDDING.md +148 -0
  31. package/docs/workflow/EXTERNAL-PRODUCERS.md +34 -0
  32. package/docs/workflow/FORMAT.md +196 -0
  33. package/docs/workflow/RENDERING.md +90 -0
  34. package/docs/workflow/REQUIREMENTS-AUDIT-2026-10-01.md +55 -0
  35. package/docs/workflow/VALIDATION.md +91 -0
  36. package/examples/workflows/fixtures.json +101 -0
  37. package/examples/workflows/forma/workflows/accessible.forma-workflow.json +90 -0
  38. package/examples/workflows/forma/workflows/branching.forma-workflow.json +91 -0
  39. package/examples/workflows/forma/workflows/branded.forma-workflow.json +85 -0
  40. package/examples/workflows/forma/workflows/color-mapping.forma-workflow.json +111 -0
  41. package/examples/workflows/forma/workflows/colored.forma-workflow.json +131 -0
  42. package/examples/workflows/forma/workflows/edge-metadata.forma-workflow.json +66 -0
  43. package/examples/workflows/forma/workflows/embedded-edit.forma-workflow.json +117 -0
  44. package/examples/workflows/forma/workflows/embedded-view.forma-workflow.json +93 -0
  45. package/examples/workflows/forma/workflows/extensions.forma-workflow.json +90 -0
  46. package/examples/workflows/forma/workflows/groups.forma-workflow.json +89 -0
  47. package/examples/workflows/forma/workflows/interactive-export.forma-workflow.json +62 -0
  48. package/examples/workflows/forma/workflows/minimal.forma-workflow.json +17 -0
  49. package/examples/workflows/forma/workflows/mobile.forma-workflow.json +80 -0
  50. package/examples/workflows/forma/workflows/multi-step.forma-workflow.json +82 -0
  51. package/examples/workflows/forma/workflows/no-layout.forma-workflow.json +90 -0
  52. package/examples/workflows/forma/workflows/node-metadata.forma-workflow.json +80 -0
  53. package/examples/workflows/forma/workflows/runtime-ports.forma-workflow.json +118 -0
  54. package/examples/workflows/forma/workflows/static-export.forma-workflow.json +77 -0
  55. package/examples/workflows/forma/workflows/swimlanes.forma-workflow.json +130 -0
  56. package/figma/component-contracts.json +140 -0
  57. package/package.json +28 -9
  58. package/patterns/bounded-overflow.html +9 -0
  59. package/patterns/button.html +5 -0
  60. package/patterns/container.html +6 -0
  61. package/patterns/date-time-field.html +5 -0
  62. package/patterns/grid.html +5 -0
  63. package/patterns/image-choice.html +2 -2
  64. package/patterns/key-value-list.html +5 -0
  65. package/patterns/section.html +4 -0
  66. package/patterns/skip-link.html +6 -0
  67. package/patterns/split.html +12 -0
  68. package/patterns/surface.html +4 -0
  69. package/patterns/text-field.html +5 -0
  70. package/patterns/text-roles.html +7 -0
  71. package/patterns/textarea.html +5 -0
  72. package/patterns/visually-hidden.html +4 -0
  73. package/schemas/workflow/1.0/forma-workflow.schema.json +1045 -0
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://forma.echelonfoundry.com/schemas/workflow/1.0/forma-workflow.schema.json",
3
+ "format": "forma-workflow",
4
+ "formatVersion": "1.0.0",
5
+ "id": "no-layout",
6
+ "title": "Crew readiness",
7
+ "description": "Produced without any coordinates; Forma applies its deterministic default layout.",
8
+ "forma": {
9
+ "version": "0.4.0"
10
+ },
11
+ "nodes": [
12
+ {
13
+ "id": "medical",
14
+ "kind": "task",
15
+ "label": "Medical clearance"
16
+ },
17
+ {
18
+ "id": "training",
19
+ "kind": "task",
20
+ "label": "Training sign-off"
21
+ },
22
+ {
23
+ "id": "suits",
24
+ "kind": "task",
25
+ "label": "Suit fit check"
26
+ },
27
+ {
28
+ "id": "merge",
29
+ "kind": "merge",
30
+ "label": "All checks complete"
31
+ },
32
+ {
33
+ "id": "board",
34
+ "kind": "task",
35
+ "label": "Crew readiness board"
36
+ },
37
+ {
38
+ "id": "ready",
39
+ "kind": "end",
40
+ "label": "Crew ready"
41
+ }
42
+ ],
43
+ "edges": [
44
+ {
45
+ "id": "n1",
46
+ "source": {
47
+ "node": "medical"
48
+ },
49
+ "target": {
50
+ "node": "merge"
51
+ }
52
+ },
53
+ {
54
+ "id": "n2",
55
+ "source": {
56
+ "node": "training"
57
+ },
58
+ "target": {
59
+ "node": "merge"
60
+ }
61
+ },
62
+ {
63
+ "id": "n3",
64
+ "source": {
65
+ "node": "suits"
66
+ },
67
+ "target": {
68
+ "node": "merge"
69
+ }
70
+ },
71
+ {
72
+ "id": "n4",
73
+ "source": {
74
+ "node": "merge"
75
+ },
76
+ "target": {
77
+ "node": "board"
78
+ }
79
+ },
80
+ {
81
+ "id": "n5",
82
+ "source": {
83
+ "node": "board"
84
+ },
85
+ "target": {
86
+ "node": "ready"
87
+ }
88
+ }
89
+ ]
90
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "https://forma.echelonfoundry.com/schemas/workflow/1.0/forma-workflow.schema.json",
3
+ "format": "forma-workflow",
4
+ "formatVersion": "1.0.0",
5
+ "id": "node-metadata",
6
+ "title": "Flight software release",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "metadata": {
11
+ "program": "Example mission",
12
+ "classification": "public",
13
+ "revision": 3
14
+ },
15
+ "nodes": [
16
+ {
17
+ "id": "build",
18
+ "kind": "task",
19
+ "label": "Build flight software",
20
+ "metadata": {
21
+ "owner": "FSW team",
22
+ "buildNumber": 4127,
23
+ "requirements": [
24
+ "FSW-12",
25
+ "FSW-31"
26
+ ],
27
+ "verified": true,
28
+ "thresholds": {
29
+ "cpu": 0.7,
30
+ "memory": 0.8
31
+ }
32
+ }
33
+ },
34
+ {
35
+ "id": "qualify",
36
+ "kind": "task",
37
+ "label": "Qualification test",
38
+ "metadata": {
39
+ "owner": "V&V",
40
+ "procedure": "QT-0042",
41
+ "estimateHours": 36.5
42
+ }
43
+ },
44
+ {
45
+ "id": "release",
46
+ "kind": "end",
47
+ "label": "Release to mission",
48
+ "references": [
49
+ {
50
+ "id": "cr",
51
+ "system": "gov.nasa.example.config",
52
+ "type": "Change request",
53
+ "key": "CR-2291",
54
+ "label": "Change request CR-2291",
55
+ "href": "https://example.org/cr/2291"
56
+ }
57
+ ]
58
+ }
59
+ ],
60
+ "edges": [
61
+ {
62
+ "id": "m1",
63
+ "source": {
64
+ "node": "build"
65
+ },
66
+ "target": {
67
+ "node": "qualify"
68
+ }
69
+ },
70
+ {
71
+ "id": "m2",
72
+ "source": {
73
+ "node": "qualify"
74
+ },
75
+ "target": {
76
+ "node": "release"
77
+ }
78
+ }
79
+ ]
80
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "$schema": "https://forma.echelonfoundry.com/schemas/workflow/1.0/forma-workflow.schema.json",
3
+ "format": "forma-workflow",
4
+ "formatVersion": "1.0.0",
5
+ "id": "runtime-ports",
6
+ "title": "Propellant loading",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "tank",
13
+ "kind": "data",
14
+ "label": "Propellant tank",
15
+ "ports": [
16
+ {
17
+ "id": "fill",
18
+ "side": "left",
19
+ "direction": "in",
20
+ "maxConnections": 1
21
+ },
22
+ {
23
+ "id": "vent",
24
+ "side": "top",
25
+ "direction": "out"
26
+ },
27
+ {
28
+ "id": "feed",
29
+ "side": "right",
30
+ "direction": "out"
31
+ }
32
+ ],
33
+ "status": {
34
+ "state": "active",
35
+ "label": "Filling"
36
+ }
37
+ },
38
+ {
39
+ "id": "supply",
40
+ "kind": "external",
41
+ "label": "Ground supply",
42
+ "ports": [
43
+ {
44
+ "id": "out",
45
+ "side": "right",
46
+ "direction": "out"
47
+ }
48
+ ],
49
+ "status": {
50
+ "state": "complete",
51
+ "label": "Connected"
52
+ }
53
+ },
54
+ {
55
+ "id": "engine",
56
+ "kind": "task",
57
+ "label": "Engine chill-down",
58
+ "ports": [
59
+ {
60
+ "id": "in",
61
+ "side": "left",
62
+ "direction": "in"
63
+ }
64
+ ],
65
+ "status": {
66
+ "state": "blocked",
67
+ "label": "Waiting for temperature"
68
+ }
69
+ },
70
+ {
71
+ "id": "vent",
72
+ "kind": "task",
73
+ "label": "Boil-off vent",
74
+ "status": {
75
+ "state": "gov.nasa.example.ops:monitoring",
76
+ "label": "Monitoring"
77
+ }
78
+ }
79
+ ],
80
+ "edges": [
81
+ {
82
+ "id": "r1",
83
+ "source": {
84
+ "node": "supply",
85
+ "port": "out"
86
+ },
87
+ "target": {
88
+ "node": "tank",
89
+ "port": "fill"
90
+ },
91
+ "label": "LOX fill"
92
+ },
93
+ {
94
+ "id": "r2",
95
+ "source": {
96
+ "node": "tank",
97
+ "port": "feed"
98
+ },
99
+ "target": {
100
+ "node": "engine",
101
+ "port": "in"
102
+ },
103
+ "label": "Feed"
104
+ },
105
+ {
106
+ "id": "r3",
107
+ "source": {
108
+ "node": "tank",
109
+ "port": "vent"
110
+ },
111
+ "target": {
112
+ "node": "vent"
113
+ },
114
+ "label": "Vent",
115
+ "line": "dotted"
116
+ }
117
+ ]
118
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "$schema": "https://forma.echelonfoundry.com/schemas/workflow/1.0/forma-workflow.schema.json",
3
+ "format": "forma-workflow",
4
+ "formatVersion": "1.0.0",
5
+ "id": "static-export",
6
+ "title": "Static export reference",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "a",
13
+ "kind": "start",
14
+ "label": "Request",
15
+ "layout": {
16
+ "x": 24,
17
+ "y": 24,
18
+ "width": 200,
19
+ "height": 72
20
+ }
21
+ },
22
+ {
23
+ "id": "b",
24
+ "kind": "task",
25
+ "label": "Review",
26
+ "status": {
27
+ "state": "active"
28
+ },
29
+ "layout": {
30
+ "x": 320,
31
+ "y": 24,
32
+ "width": 200,
33
+ "height": 96
34
+ }
35
+ },
36
+ {
37
+ "id": "c",
38
+ "kind": "end",
39
+ "label": "Done",
40
+ "layout": {
41
+ "x": 616,
42
+ "y": 24,
43
+ "width": 200,
44
+ "height": 72
45
+ }
46
+ }
47
+ ],
48
+ "edges": [
49
+ {
50
+ "id": "s1",
51
+ "source": {
52
+ "node": "a"
53
+ },
54
+ "target": {
55
+ "node": "b"
56
+ }
57
+ },
58
+ {
59
+ "id": "s2",
60
+ "source": {
61
+ "node": "b"
62
+ },
63
+ "target": {
64
+ "node": "c"
65
+ },
66
+ "label": "Approved"
67
+ }
68
+ ],
69
+ "layout": {
70
+ "direction": "right",
71
+ "mode": "authored",
72
+ "canvas": {
73
+ "width": 840,
74
+ "height": 144
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "$schema": "https://forma.echelonfoundry.com/schemas/workflow/1.0/forma-workflow.schema.json",
3
+ "format": "forma-workflow",
4
+ "formatVersion": "1.0.0",
5
+ "id": "swimlanes",
6
+ "title": "Anomaly response",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "detect",
13
+ "kind": "event",
14
+ "label": "Telemetry anomaly"
15
+ },
16
+ {
17
+ "id": "triage",
18
+ "kind": "task",
19
+ "label": "Triage the anomaly"
20
+ },
21
+ {
22
+ "id": "decide",
23
+ "kind": "decision",
24
+ "label": "Safe to continue?"
25
+ },
26
+ {
27
+ "id": "safe",
28
+ "kind": "task",
29
+ "label": "Command safe mode"
30
+ },
31
+ {
32
+ "id": "continue",
33
+ "kind": "end",
34
+ "label": "Resume nominal operations"
35
+ },
36
+ {
37
+ "id": "review",
38
+ "kind": "task",
39
+ "label": "Engineering review"
40
+ }
41
+ ],
42
+ "edges": [
43
+ {
44
+ "id": "s1",
45
+ "source": {
46
+ "node": "detect"
47
+ },
48
+ "target": {
49
+ "node": "triage"
50
+ }
51
+ },
52
+ {
53
+ "id": "s2",
54
+ "source": {
55
+ "node": "triage"
56
+ },
57
+ "target": {
58
+ "node": "decide"
59
+ }
60
+ },
61
+ {
62
+ "id": "s3",
63
+ "source": {
64
+ "node": "decide"
65
+ },
66
+ "target": {
67
+ "node": "continue"
68
+ },
69
+ "label": "Yes"
70
+ },
71
+ {
72
+ "id": "s4",
73
+ "source": {
74
+ "node": "decide"
75
+ },
76
+ "target": {
77
+ "node": "safe"
78
+ },
79
+ "label": "No"
80
+ },
81
+ {
82
+ "id": "s5",
83
+ "source": {
84
+ "node": "safe"
85
+ },
86
+ "target": {
87
+ "node": "review"
88
+ }
89
+ }
90
+ ],
91
+ "groups": [
92
+ {
93
+ "id": "flight",
94
+ "kind": "swimlane",
95
+ "label": "Flight control",
96
+ "members": [
97
+ "detect",
98
+ "triage",
99
+ "decide",
100
+ "continue"
101
+ ]
102
+ },
103
+ {
104
+ "id": "spacecraft",
105
+ "kind": "swimlane",
106
+ "label": "Spacecraft",
107
+ "members": [
108
+ "safe"
109
+ ]
110
+ },
111
+ {
112
+ "id": "engineering",
113
+ "kind": "swimlane",
114
+ "label": "Engineering",
115
+ "members": [
116
+ "review"
117
+ ]
118
+ },
119
+ {
120
+ "id": "response",
121
+ "kind": "phase",
122
+ "label": "Response phase",
123
+ "members": [
124
+ "triage",
125
+ "decide",
126
+ "safe"
127
+ ]
128
+ }
129
+ ]
130
+ }
@@ -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",