@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,66 @@
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": "edge-metadata",
6
+ "title": "Data handoff",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "instrument",
13
+ "kind": "data",
14
+ "label": "Instrument data"
15
+ },
16
+ {
17
+ "id": "pipeline",
18
+ "kind": "task",
19
+ "label": "Processing pipeline"
20
+ },
21
+ {
22
+ "id": "archive",
23
+ "kind": "external",
24
+ "label": "Public archive"
25
+ }
26
+ ],
27
+ "edges": [
28
+ {
29
+ "id": "d1",
30
+ "source": {
31
+ "node": "instrument"
32
+ },
33
+ "target": {
34
+ "node": "pipeline"
35
+ },
36
+ "kind": "data",
37
+ "label": "Raw frames",
38
+ "metadata": {
39
+ "format": "FITS",
40
+ "rateMbps": 12.5,
41
+ "encrypted": false
42
+ }
43
+ },
44
+ {
45
+ "id": "d2",
46
+ "source": {
47
+ "node": "pipeline"
48
+ },
49
+ "target": {
50
+ "node": "archive"
51
+ },
52
+ "kind": "message",
53
+ "label": "Calibrated products",
54
+ "metadata": {
55
+ "latencyHours": 48,
56
+ "schema": {
57
+ "name": "products",
58
+ "version": "2.1"
59
+ }
60
+ },
61
+ "status": {
62
+ "state": "waiting"
63
+ }
64
+ }
65
+ ]
66
+ }
@@ -0,0 +1,117 @@
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": "embedded-edit",
6
+ "title": "Experiment proposal",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "metadata": {
11
+ "lab": "Microgravity research"
12
+ },
13
+ "nodes": [
14
+ {
15
+ "id": "draft",
16
+ "kind": "task",
17
+ "label": "Draft proposal",
18
+ "ports": [
19
+ {
20
+ "id": "out",
21
+ "side": "right",
22
+ "direction": "out"
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "id": "peer",
28
+ "kind": "task",
29
+ "label": "Peer review",
30
+ "ports": [
31
+ {
32
+ "id": "in",
33
+ "side": "left",
34
+ "direction": "in"
35
+ },
36
+ {
37
+ "id": "accepted",
38
+ "side": "right",
39
+ "direction": "out",
40
+ "label": "Accepted"
41
+ },
42
+ {
43
+ "id": "revise",
44
+ "side": "bottom",
45
+ "direction": "out",
46
+ "label": "Revise"
47
+ }
48
+ ],
49
+ "interaction": {
50
+ "action": "command",
51
+ "command": "com.example.lab:open-review",
52
+ "label": "Open review"
53
+ }
54
+ },
55
+ {
56
+ "id": "schedule",
57
+ "kind": "end",
58
+ "label": "Schedule on station",
59
+ "references": [
60
+ {
61
+ "id": "slot",
62
+ "system": "com.example.lab",
63
+ "type": "Station slot",
64
+ "key": "ISS-INC-74-12"
65
+ }
66
+ ],
67
+ "interaction": {
68
+ "action": "navigate",
69
+ "target": {
70
+ "reference": "slot"
71
+ },
72
+ "label": "Open slot"
73
+ }
74
+ }
75
+ ],
76
+ "edges": [
77
+ {
78
+ "id": "p1",
79
+ "source": {
80
+ "node": "draft",
81
+ "port": "out"
82
+ },
83
+ "target": {
84
+ "node": "peer",
85
+ "port": "in"
86
+ }
87
+ },
88
+ {
89
+ "id": "p2",
90
+ "source": {
91
+ "node": "peer",
92
+ "port": "accepted"
93
+ },
94
+ "target": {
95
+ "node": "schedule"
96
+ },
97
+ "label": "Accepted"
98
+ },
99
+ {
100
+ "id": "p3",
101
+ "source": {
102
+ "node": "peer",
103
+ "port": "revise"
104
+ },
105
+ "target": {
106
+ "node": "draft"
107
+ },
108
+ "label": "Revise",
109
+ "line": "dashed"
110
+ }
111
+ ],
112
+ "extensions": {
113
+ "com.example.lab": {
114
+ "proposalId": "MGR-77"
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,93 @@
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": "embedded-view",
6
+ "title": "Sample return",
7
+ "description": "Runtime state projected onto a read-only workflow.",
8
+ "forma": {
9
+ "version": "0.4.0"
10
+ },
11
+ "nodes": [
12
+ {
13
+ "id": "collect",
14
+ "kind": "start",
15
+ "label": "Collect sample",
16
+ "status": {
17
+ "state": "complete"
18
+ }
19
+ },
20
+ {
21
+ "id": "seal",
22
+ "kind": "task",
23
+ "label": "Seal container",
24
+ "status": {
25
+ "state": "complete"
26
+ }
27
+ },
28
+ {
29
+ "id": "ascend",
30
+ "kind": "task",
31
+ "label": "Ascent to orbit",
32
+ "status": {
33
+ "state": "active",
34
+ "label": "In progress",
35
+ "detail": "Burn 2 of 3"
36
+ }
37
+ },
38
+ {
39
+ "id": "transfer",
40
+ "kind": "task",
41
+ "label": "Transfer to return vehicle",
42
+ "status": {
43
+ "state": "pending"
44
+ }
45
+ },
46
+ {
47
+ "id": "land",
48
+ "kind": "end",
49
+ "label": "Earth landing",
50
+ "status": {
51
+ "state": "pending"
52
+ }
53
+ }
54
+ ],
55
+ "edges": [
56
+ {
57
+ "id": "v1",
58
+ "source": {
59
+ "node": "collect"
60
+ },
61
+ "target": {
62
+ "node": "seal"
63
+ }
64
+ },
65
+ {
66
+ "id": "v2",
67
+ "source": {
68
+ "node": "seal"
69
+ },
70
+ "target": {
71
+ "node": "ascend"
72
+ }
73
+ },
74
+ {
75
+ "id": "v3",
76
+ "source": {
77
+ "node": "ascend"
78
+ },
79
+ "target": {
80
+ "node": "transfer"
81
+ }
82
+ },
83
+ {
84
+ "id": "v4",
85
+ "source": {
86
+ "node": "transfer"
87
+ },
88
+ "target": {
89
+ "node": "land"
90
+ }
91
+ }
92
+ ]
93
+ }
@@ -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": "extensions",
6
+ "title": "Range safety coordination",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "request",
13
+ "kind": "start",
14
+ "label": "Range request",
15
+ "extensions": {
16
+ "gov.nasa.example.range": {
17
+ "rangeId": "ER-1",
18
+ "window": {
19
+ "open": "2026-11-02T10:00:00Z",
20
+ "close": "2026-11-02T14:00:00Z"
21
+ }
22
+ }
23
+ }
24
+ },
25
+ {
26
+ "id": "approve",
27
+ "kind": "task",
28
+ "label": "Range approval",
29
+ "extensions": {
30
+ "com.example.scheduler": {
31
+ "priority": 2,
32
+ "tags": [
33
+ "range",
34
+ "safety"
35
+ ],
36
+ "nested": {
37
+ "deep": {
38
+ "value": [
39
+ 1,
40
+ 2,
41
+ {
42
+ "x": true
43
+ }
44
+ ]
45
+ }
46
+ }
47
+ }
48
+ }
49
+ },
50
+ {
51
+ "id": "done",
52
+ "kind": "end",
53
+ "label": "Range confirmed"
54
+ }
55
+ ],
56
+ "edges": [
57
+ {
58
+ "id": "x1",
59
+ "source": {
60
+ "node": "request"
61
+ },
62
+ "target": {
63
+ "node": "approve"
64
+ },
65
+ "extensions": {
66
+ "com.example.scheduler": {
67
+ "lagMinutes": 15
68
+ }
69
+ }
70
+ },
71
+ {
72
+ "id": "x2",
73
+ "source": {
74
+ "node": "approve"
75
+ },
76
+ "target": {
77
+ "node": "done"
78
+ }
79
+ }
80
+ ],
81
+ "extensions": {
82
+ "com.example.scheduler": {
83
+ "calendar": "range-ops",
84
+ "version": "7.3.1"
85
+ },
86
+ "org.example.audit": {
87
+ "retainDays": 3650
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,89 @@
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": "groups",
6
+ "title": "Ground systems checkout",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "power",
13
+ "kind": "task",
14
+ "label": "Power-on test"
15
+ },
16
+ {
17
+ "id": "comms",
18
+ "kind": "task",
19
+ "label": "Communications check"
20
+ },
21
+ {
22
+ "id": "fuel",
23
+ "kind": "task",
24
+ "label": "Propellant loading rehearsal"
25
+ },
26
+ {
27
+ "id": "report",
28
+ "kind": "end",
29
+ "label": "Checkout report"
30
+ }
31
+ ],
32
+ "edges": [
33
+ {
34
+ "id": "g1",
35
+ "source": {
36
+ "node": "power"
37
+ },
38
+ "target": {
39
+ "node": "comms"
40
+ }
41
+ },
42
+ {
43
+ "id": "g2",
44
+ "source": {
45
+ "node": "comms"
46
+ },
47
+ "target": {
48
+ "node": "report"
49
+ }
50
+ },
51
+ {
52
+ "id": "g3",
53
+ "source": {
54
+ "node": "fuel"
55
+ },
56
+ "target": {
57
+ "node": "report"
58
+ }
59
+ }
60
+ ],
61
+ "groups": [
62
+ {
63
+ "id": "avionics",
64
+ "kind": "container",
65
+ "label": "Avionics",
66
+ "members": [
67
+ "power",
68
+ "comms"
69
+ ],
70
+ "parent": "vehicle"
71
+ },
72
+ {
73
+ "id": "propulsion",
74
+ "kind": "group",
75
+ "label": "Propulsion",
76
+ "members": [
77
+ "fuel"
78
+ ],
79
+ "line": "dashed",
80
+ "parent": "vehicle"
81
+ },
82
+ {
83
+ "id": "vehicle",
84
+ "kind": "group",
85
+ "label": "Vehicle systems",
86
+ "description": "Contains the avionics and propulsion groups."
87
+ }
88
+ ]
89
+ }
@@ -0,0 +1,62 @@
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": "interactive-export",
6
+ "title": "Interactive export reference",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "a",
13
+ "kind": "start",
14
+ "label": "Request",
15
+ "interaction": {
16
+ "action": "inspect"
17
+ }
18
+ },
19
+ {
20
+ "id": "b",
21
+ "kind": "task",
22
+ "label": "Review",
23
+ "interaction": {
24
+ "action": "command",
25
+ "command": "com.example.host:approve",
26
+ "label": "Approve"
27
+ }
28
+ },
29
+ {
30
+ "id": "c",
31
+ "kind": "end",
32
+ "label": "Done",
33
+ "interaction": {
34
+ "action": "navigate",
35
+ "target": {
36
+ "url": "https://example.org/done"
37
+ },
38
+ "label": "Open record"
39
+ }
40
+ }
41
+ ],
42
+ "edges": [
43
+ {
44
+ "id": "i1",
45
+ "source": {
46
+ "node": "a"
47
+ },
48
+ "target": {
49
+ "node": "b"
50
+ }
51
+ },
52
+ {
53
+ "id": "i2",
54
+ "source": {
55
+ "node": "b"
56
+ },
57
+ "target": {
58
+ "node": "c"
59
+ }
60
+ }
61
+ ]
62
+ }
@@ -0,0 +1,17 @@
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": "minimal",
6
+ "title": "Minimal workflow",
7
+ "forma": {
8
+ "version": "0.4.0"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "start",
13
+ "kind": "start",
14
+ "label": "Start"
15
+ }
16
+ ]
17
+ }
@@ -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": "mobile",
6
+ "title": "Countdown checklist",
7
+ "description": "A narrow, top-to-bottom workflow intended for phone screens.",
8
+ "forma": {
9
+ "version": "0.4.0"
10
+ },
11
+ "nodes": [
12
+ {
13
+ "id": "t60",
14
+ "kind": "task",
15
+ "label": "T-60 minutes: crew strapped in",
16
+ "layout": {
17
+ "size": "compact"
18
+ }
19
+ },
20
+ {
21
+ "id": "t30",
22
+ "kind": "task",
23
+ "label": "T-30 minutes: hatch closed",
24
+ "layout": {
25
+ "size": "compact"
26
+ }
27
+ },
28
+ {
29
+ "id": "t10",
30
+ "kind": "task",
31
+ "label": "T-10 minutes: terminal count",
32
+ "layout": {
33
+ "size": "compact"
34
+ }
35
+ },
36
+ {
37
+ "id": "t0",
38
+ "kind": "end",
39
+ "label": "Liftoff",
40
+ "layout": {
41
+ "size": "compact"
42
+ }
43
+ }
44
+ ],
45
+ "edges": [
46
+ {
47
+ "id": "t1",
48
+ "source": {
49
+ "node": "t60"
50
+ },
51
+ "target": {
52
+ "node": "t30"
53
+ }
54
+ },
55
+ {
56
+ "id": "t2",
57
+ "source": {
58
+ "node": "t30"
59
+ },
60
+ "target": {
61
+ "node": "t10"
62
+ }
63
+ },
64
+ {
65
+ "id": "t3",
66
+ "source": {
67
+ "node": "t10"
68
+ },
69
+ "target": {
70
+ "node": "t0"
71
+ }
72
+ }
73
+ ],
74
+ "layout": {
75
+ "direction": "down"
76
+ },
77
+ "presentation": {
78
+ "density": "compact"
79
+ }
80
+ }
@@ -0,0 +1,82 @@
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": "multi-step",
6
+ "title": "Payload integration",
7
+ "description": "Steps that take a payload from delivery to launch-site shipment.",
8
+ "forma": {
9
+ "version": "0.4.0"
10
+ },
11
+ "nodes": [
12
+ {
13
+ "id": "receive",
14
+ "kind": "start",
15
+ "label": "Payload arrives"
16
+ },
17
+ {
18
+ "id": "inspect",
19
+ "kind": "task",
20
+ "label": "Receiving inspection"
21
+ },
22
+ {
23
+ "id": "integrate",
24
+ "kind": "task",
25
+ "label": "Mechanical integration"
26
+ },
27
+ {
28
+ "id": "test",
29
+ "kind": "task",
30
+ "label": "Functional test"
31
+ },
32
+ {
33
+ "id": "ship",
34
+ "kind": "end",
35
+ "label": "Ready for launch site"
36
+ }
37
+ ],
38
+ "edges": [
39
+ {
40
+ "id": "e1",
41
+ "source": {
42
+ "node": "receive"
43
+ },
44
+ "target": {
45
+ "node": "inspect"
46
+ }
47
+ },
48
+ {
49
+ "id": "e2",
50
+ "source": {
51
+ "node": "inspect"
52
+ },
53
+ "target": {
54
+ "node": "integrate"
55
+ }
56
+ },
57
+ {
58
+ "id": "e3",
59
+ "source": {
60
+ "node": "integrate"
61
+ },
62
+ "target": {
63
+ "node": "test"
64
+ }
65
+ },
66
+ {
67
+ "id": "e4",
68
+ "source": {
69
+ "node": "test"
70
+ },
71
+ "target": {
72
+ "node": "ship"
73
+ }
74
+ }
75
+ ],
76
+ "provenance": {
77
+ "producer": {
78
+ "name": "Forma reference fixtures",
79
+ "version": "1.0.0"
80
+ }
81
+ }
82
+ }