forma-diagrams 0.5.2

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 (109) hide show
  1. package/Dockerfile +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -0
  4. package/THIRD_PARTY_NOTICES.md +20 -0
  5. package/bin/forma +3 -0
  6. package/deploy/.env.example +11 -0
  7. package/deploy/Caddyfile +4 -0
  8. package/deploy/compose.yml +38 -0
  9. package/dist/assets/IBMPlexSans-Regular-Bl2SjS7V.ttf +0 -0
  10. package/dist/assets/IBMPlexSans-SemiBold-B9auKknr.ttf +0 -0
  11. package/dist/assets/elk.bundled-Y7ymokgr.js +24 -0
  12. package/dist/assets/index-_kg9cdik.css +1 -0
  13. package/dist/assets/index-al0xDdTG.js +452 -0
  14. package/dist/fonts/IBMPlexSans-Regular.ttf +0 -0
  15. package/dist/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  16. package/dist/fonts/OFL.txt +93 -0
  17. package/dist/index.html +14 -0
  18. package/dist/licenses/FORMA_LICENSE.txt +21 -0
  19. package/dist/licenses/THIRD_PARTY_LICENSES.txt +11601 -0
  20. package/docs/api.md +41 -0
  21. package/docs/decisions/001-foundation.md +57 -0
  22. package/docs/decisions/002-composition-and-human-edits.md +47 -0
  23. package/docs/decisions/003-general-composition.md +30 -0
  24. package/docs/decisions/004-library-and-distribution.md +33 -0
  25. package/docs/decisions/005-organizational-hosting.md +33 -0
  26. package/docs/decisions/006-hosted-agent-access.md +25 -0
  27. package/docs/format.md +132 -0
  28. package/docs/gallery.md +73 -0
  29. package/docs/images/architecture.png +0 -0
  30. package/docs/images/editor.png +0 -0
  31. package/docs/images/gallery/architecture.png +0 -0
  32. package/docs/images/gallery/decision.png +0 -0
  33. package/docs/images/gallery/development-signal.png +0 -0
  34. package/docs/images/gallery/development.png +0 -0
  35. package/docs/images/gallery/editor-roundtrip.png +0 -0
  36. package/docs/images/gallery/entities.png +0 -0
  37. package/docs/images/gallery/mindmap.png +0 -0
  38. package/docs/images/gallery/organization.png +0 -0
  39. package/docs/images/gallery/timeline.png +0 -0
  40. package/docs/images/release.png +0 -0
  41. package/docs/install.md +50 -0
  42. package/docs/plans/mvp.md +24 -0
  43. package/docs/self-hosting.md +167 -0
  44. package/docs/verification-v2.md +41 -0
  45. package/docs/verification-v3.md +16 -0
  46. package/docs/verification-v4.1.md +35 -0
  47. package/docs/verification-v4.2.md +20 -0
  48. package/docs/verification-v4.3.md +5 -0
  49. package/docs/verification-v4.md +31 -0
  50. package/docs/verification-v5.1.md +7 -0
  51. package/docs/verification-v5.2.md +7 -0
  52. package/docs/verification-v5.md +7 -0
  53. package/docs/verification.md +91 -0
  54. package/examples/design-systems/atelier.json +53 -0
  55. package/examples/design-systems/signal.json +53 -0
  56. package/examples/gallery/architecture.forma.json +178 -0
  57. package/examples/gallery/decision.forma.json +182 -0
  58. package/examples/gallery/development-signal.forma.json +299 -0
  59. package/examples/gallery/development.forma.json +299 -0
  60. package/examples/gallery/entities.forma.json +123 -0
  61. package/examples/gallery/mindmap.forma.json +158 -0
  62. package/examples/gallery/organization.forma.json +151 -0
  63. package/examples/gallery/timeline.forma.json +138 -0
  64. package/examples/platform.forma.json +116 -0
  65. package/examples/release.forma.json +58 -0
  66. package/examples/roundtrip/agent-continued.forma.json +310 -0
  67. package/examples/roundtrip/agent-patch.json +7 -0
  68. package/examples/roundtrip/human-edited.forma.json +309 -0
  69. package/package.json +81 -0
  70. package/packages/cli/bin.mjs +3 -0
  71. package/packages/cli/src/agent-access.ts +232 -0
  72. package/packages/cli/src/blob-store.ts +241 -0
  73. package/packages/cli/src/file-library.ts +179 -0
  74. package/packages/cli/src/google.ts +51 -0
  75. package/packages/cli/src/hosted.ts +498 -0
  76. package/packages/cli/src/http.ts +67 -0
  77. package/packages/cli/src/index.ts +397 -0
  78. package/packages/cli/src/mcp.ts +114 -0
  79. package/packages/cli/src/remote.ts +228 -0
  80. package/packages/cli/src/server.ts +69 -0
  81. package/packages/cli/src/signed-cookie.ts +42 -0
  82. package/packages/core/src/align.ts +237 -0
  83. package/packages/core/src/document.ts +408 -0
  84. package/packages/core/src/font-metrics.json +1 -0
  85. package/packages/core/src/geometry.ts +463 -0
  86. package/packages/core/src/index.ts +12 -0
  87. package/packages/core/src/inspect.ts +230 -0
  88. package/packages/core/src/layout.ts +450 -0
  89. package/packages/core/src/render.ts +182 -0
  90. package/packages/core/src/resolve-style.ts +29 -0
  91. package/packages/core/src/scene.ts +40 -0
  92. package/packages/core/src/styles.ts +122 -0
  93. package/packages/core/src/text.ts +81 -0
  94. package/packages/core/src/theme.ts +33 -0
  95. package/public/fonts/IBMPlexSans-Regular.ttf +0 -0
  96. package/public/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  97. package/public/fonts/OFL.txt +93 -0
  98. package/schema/design-system.v1.schema.json +734 -0
  99. package/schema/forma.v1.schema.json +273 -0
  100. package/schema/forma.v2.schema.json +1756 -0
  101. package/skills/forma/SKILL.md +20 -0
  102. package/skills/forma/references/composition.md +11 -0
  103. package/skills/forma/references/hosted.md +28 -0
  104. package/skills/forma-architecture/SKILL.md +14 -0
  105. package/skills/forma-entities/SKILL.md +14 -0
  106. package/skills/forma-flow/SKILL.md +14 -0
  107. package/skills/forma-mindmap/SKILL.md +14 -0
  108. package/skills/forma-organization/SKILL.md +14 -0
  109. package/skills/forma-timeline/SKILL.md +14 -0
@@ -0,0 +1,151 @@
1
+ {
2
+ "description": "03 / ORGANIZATION Reporting lines show accountability; descriptions show the work.",
3
+ "edges": [
4
+ {
5
+ "id": "head-design",
6
+ "source": "head",
7
+ "style": "solid",
8
+ "target": "design"
9
+ },
10
+ {
11
+ "id": "head-eng",
12
+ "source": "head",
13
+ "style": "solid",
14
+ "target": "eng"
15
+ },
16
+ {
17
+ "id": "design-designers",
18
+ "source": "design",
19
+ "style": "solid",
20
+ "target": "designers"
21
+ },
22
+ {
23
+ "id": "eng-platform",
24
+ "source": "eng",
25
+ "style": "solid",
26
+ "target": "platform"
27
+ },
28
+ {
29
+ "id": "eng-product",
30
+ "source": "eng",
31
+ "style": "solid",
32
+ "target": "product"
33
+ }
34
+ ],
35
+ "groups": [],
36
+ "layout": {
37
+ "direction": "DOWN",
38
+ "spacing": "comfortable"
39
+ },
40
+ "nodes": [
41
+ {
42
+ "description": "Product & engineering",
43
+ "emphasis": "normal",
44
+ "id": "head",
45
+ "kind": "service",
46
+ "label": "Head of product",
47
+ "role": "emphasis",
48
+ "style": {
49
+ "width": 240
50
+ }
51
+ },
52
+ {
53
+ "description": "Research · interaction",
54
+ "emphasis": "normal",
55
+ "id": "design",
56
+ "kind": "service",
57
+ "label": "Design lead"
58
+ },
59
+ {
60
+ "description": "Delivery · reliability",
61
+ "emphasis": "normal",
62
+ "id": "eng",
63
+ "kind": "service",
64
+ "label": "Engineering lead"
65
+ },
66
+ {
67
+ "description": "Experience quality",
68
+ "emphasis": "normal",
69
+ "id": "designers",
70
+ "kind": "service",
71
+ "label": "Product designers",
72
+ "role": "quiet"
73
+ },
74
+ {
75
+ "description": "Shared infrastructure",
76
+ "emphasis": "normal",
77
+ "id": "platform",
78
+ "kind": "service",
79
+ "label": "Platform team",
80
+ "role": "quiet"
81
+ },
82
+ {
83
+ "description": "Customer outcomes",
84
+ "emphasis": "normal",
85
+ "id": "product",
86
+ "kind": "service",
87
+ "label": "Product team",
88
+ "role": "quiet"
89
+ }
90
+ ],
91
+ "presentation": {
92
+ "designSystem": {
93
+ "canvas": {
94
+ "background": "#f7f5ef",
95
+ "border": "#d8ded4",
96
+ "secondary": "#69736b",
97
+ "text": "#242c29"
98
+ },
99
+ "edge": {
100
+ "arrowEnd": "none",
101
+ "stroke": "#64776a",
102
+ "strokeWidth": 1.6
103
+ },
104
+ "group": {
105
+ "dash": "solid",
106
+ "fill": "#eeeee5",
107
+ "radius": 4,
108
+ "stroke": "#cdd3c6",
109
+ "text": "#526849"
110
+ },
111
+ "id": "atelier",
112
+ "name": "Atelier / editorial",
113
+ "node": {
114
+ "fill": "#fffef9",
115
+ "fontFamily": "IBM Plex Sans",
116
+ "fontSize": 16,
117
+ "padding": 22,
118
+ "radius": 2,
119
+ "secondary": "#657367",
120
+ "shape": "rect",
121
+ "stroke": "#c7d0c3",
122
+ "text": "#243b30"
123
+ },
124
+ "revision": "1.0.0",
125
+ "roles": {
126
+ "caution": {
127
+ "fill": "#fae4b6",
128
+ "stroke": "#d8b977"
129
+ },
130
+ "emphasis": {
131
+ "fill": "#dce9b9",
132
+ "stroke": "#a7be78"
133
+ },
134
+ "quiet": {
135
+ "fill": "#eeeee8",
136
+ "stroke": "#d0d3c9"
137
+ }
138
+ },
139
+ "spacing": {
140
+ "layer": 80,
141
+ "node": 44
142
+ },
143
+ "version": 1
144
+ },
145
+ "nodes": {},
146
+ "theme": "paper"
147
+ },
148
+ "title": "A small team with explicit ownership",
149
+ "type": "diagram",
150
+ "version": 2
151
+ }
@@ -0,0 +1,138 @@
1
+ {
2
+ "description": "05 / ROADMAP Equal spacing denotes phases, not elapsed calendar time.",
3
+ "edges": [
4
+ {
5
+ "id": "discover-prototype",
6
+ "source": "discover",
7
+ "style": "solid",
8
+ "target": "prototype"
9
+ },
10
+ {
11
+ "id": "prototype-build",
12
+ "source": "prototype",
13
+ "style": "solid",
14
+ "target": "build"
15
+ },
16
+ {
17
+ "id": "build-launch",
18
+ "source": "build",
19
+ "style": "solid",
20
+ "target": "launch"
21
+ }
22
+ ],
23
+ "groups": [],
24
+ "layout": {
25
+ "direction": "RIGHT",
26
+ "mode": "grid",
27
+ "spacing": "comfortable"
28
+ },
29
+ "nodes": [
30
+ {
31
+ "description": "Weeks 1–2\nInterviews & evidence",
32
+ "emphasis": "normal",
33
+ "id": "discover",
34
+ "kind": "service",
35
+ "label": "01 / Discover",
36
+ "placement": {
37
+ "column": 0,
38
+ "row": 0
39
+ }
40
+ },
41
+ {
42
+ "description": "Weeks 3–4\nTest the riskiest idea",
43
+ "emphasis": "normal",
44
+ "id": "prototype",
45
+ "kind": "service",
46
+ "label": "02 / Prototype",
47
+ "placement": {
48
+ "column": 1,
49
+ "row": 0
50
+ }
51
+ },
52
+ {
53
+ "description": "Weeks 5–8\nDeliver in small slices",
54
+ "emphasis": "normal",
55
+ "id": "build",
56
+ "kind": "service",
57
+ "label": "03 / Build",
58
+ "placement": {
59
+ "column": 2,
60
+ "row": 0
61
+ },
62
+ "role": "emphasis"
63
+ },
64
+ {
65
+ "description": "Week 9\nMeasure & learn",
66
+ "emphasis": "normal",
67
+ "id": "launch",
68
+ "kind": "service",
69
+ "label": "04 / Launch",
70
+ "placement": {
71
+ "column": 3,
72
+ "row": 0
73
+ },
74
+ "role": "caution"
75
+ }
76
+ ],
77
+ "presentation": {
78
+ "designSystem": {
79
+ "canvas": {
80
+ "background": "#f7f5ef",
81
+ "border": "#d8ded4",
82
+ "secondary": "#69736b",
83
+ "text": "#242c29"
84
+ },
85
+ "edge": {
86
+ "arrowEnd": "filled",
87
+ "stroke": "#64776a",
88
+ "strokeWidth": 1.6
89
+ },
90
+ "group": {
91
+ "dash": "solid",
92
+ "fill": "#eeeee5",
93
+ "radius": 4,
94
+ "stroke": "#cdd3c6",
95
+ "text": "#526849"
96
+ },
97
+ "id": "atelier",
98
+ "name": "Atelier / editorial",
99
+ "node": {
100
+ "fill": "#fffef9",
101
+ "fontFamily": "IBM Plex Sans",
102
+ "fontSize": 16,
103
+ "padding": 22,
104
+ "radius": 2,
105
+ "secondary": "#657367",
106
+ "shape": "rect",
107
+ "stroke": "#c7d0c3",
108
+ "text": "#243b30",
109
+ "width": 210
110
+ },
111
+ "revision": "1.0.0",
112
+ "roles": {
113
+ "caution": {
114
+ "fill": "#fae4b6",
115
+ "stroke": "#d8b977"
116
+ },
117
+ "emphasis": {
118
+ "fill": "#dce9b9",
119
+ "stroke": "#a7be78"
120
+ },
121
+ "quiet": {
122
+ "fill": "#eeeee8",
123
+ "stroke": "#d0d3c9"
124
+ }
125
+ },
126
+ "spacing": {
127
+ "layer": 88,
128
+ "node": 48
129
+ },
130
+ "version": 1
131
+ },
132
+ "nodes": {},
133
+ "theme": "paper"
134
+ },
135
+ "title": "A deliberate path from discovery to launch",
136
+ "type": "diagram",
137
+ "version": 2
138
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "version": 1,
3
+ "title": "A considered cloud architecture",
4
+ "description": "From the first request to the last mile. A resilient, event-driven platform.",
5
+ "type": "architecture",
6
+ "layout": {
7
+ "direction": "RIGHT",
8
+ "spacing": "comfortable"
9
+ },
10
+ "nodes": [
11
+ {
12
+ "id": "web",
13
+ "label": "Web application",
14
+ "description": "The customer experience",
15
+ "kind": "client",
16
+ "group": "experience"
17
+ },
18
+ {
19
+ "id": "gateway",
20
+ "label": "API gateway",
21
+ "description": "Authenticate \u00b7 route \u00b7 protect",
22
+ "kind": "service",
23
+ "group": "services",
24
+ "emphasis": "primary"
25
+ },
26
+ {
27
+ "id": "orders",
28
+ "label": "Order service",
29
+ "description": "Business logic & orchestration",
30
+ "kind": "service",
31
+ "group": "services"
32
+ },
33
+ {
34
+ "id": "events",
35
+ "label": "Event bus",
36
+ "description": "Decoupled, durable messaging",
37
+ "kind": "queue",
38
+ "group": "data"
39
+ },
40
+ {
41
+ "id": "database",
42
+ "label": "Primary database",
43
+ "description": "The source of truth",
44
+ "kind": "database",
45
+ "group": "data"
46
+ },
47
+ {
48
+ "id": "worker",
49
+ "label": "Background worker",
50
+ "description": "Notifications & fulfillment",
51
+ "kind": "process",
52
+ "group": "services"
53
+ }
54
+ ],
55
+ "edges": [
56
+ {
57
+ "id": "request",
58
+ "source": "web",
59
+ "target": "gateway",
60
+ "label": "HTTPS"
61
+ },
62
+ {
63
+ "id": "route",
64
+ "source": "gateway",
65
+ "target": "orders",
66
+ "label": "REST"
67
+ },
68
+ {
69
+ "id": "publish",
70
+ "source": "orders",
71
+ "target": "events",
72
+ "label": "publish"
73
+ },
74
+ {
75
+ "id": "persist",
76
+ "source": "orders",
77
+ "target": "database",
78
+ "label": "read / write"
79
+ },
80
+ {
81
+ "id": "consume",
82
+ "source": "worker",
83
+ "target": "events",
84
+ "label": "subscribe",
85
+ "style": "dashed"
86
+ },
87
+ {
88
+ "id": "async",
89
+ "source": "gateway",
90
+ "target": "worker",
91
+ "label": "async",
92
+ "style": "dashed"
93
+ }
94
+ ],
95
+ "groups": [
96
+ {
97
+ "id": "experience",
98
+ "label": "Experience",
99
+ "color": "slate"
100
+ },
101
+ {
102
+ "id": "services",
103
+ "label": "Application",
104
+ "color": "blue"
105
+ },
106
+ {
107
+ "id": "data",
108
+ "label": "Data & messaging",
109
+ "color": "teal"
110
+ }
111
+ ],
112
+ "presentation": {
113
+ "theme": "paper",
114
+ "nodes": {}
115
+ }
116
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "version": 1,
3
+ "title": "Ship with confidence",
4
+ "description": "A small, deliberate release process. Every change earns its way to production.",
5
+ "type": "flow",
6
+ "layout": { "direction": "RIGHT", "spacing": "comfortable" },
7
+ "nodes": [
8
+ {
9
+ "id": "commit",
10
+ "label": "Open a pull request",
11
+ "description": "A focused, reviewable change",
12
+ "kind": "process"
13
+ },
14
+ {
15
+ "id": "checks",
16
+ "label": "Run the checks",
17
+ "description": "Types, tests & security",
18
+ "kind": "process",
19
+ "emphasis": "primary"
20
+ },
21
+ {
22
+ "id": "review",
23
+ "label": "Ready to ship?",
24
+ "description": "Review and verify",
25
+ "kind": "decision"
26
+ },
27
+ {
28
+ "id": "deploy",
29
+ "label": "Deploy to production",
30
+ "description": "Roll out with observability",
31
+ "kind": "service"
32
+ },
33
+ {
34
+ "id": "revise",
35
+ "label": "Refine the change",
36
+ "description": "Address feedback & retry",
37
+ "kind": "process"
38
+ }
39
+ ],
40
+ "edges": [
41
+ { "id": "e1", "source": "commit", "target": "checks" },
42
+ { "id": "e2", "source": "checks", "target": "review" },
43
+ { "id": "e3", "source": "review", "target": "deploy", "label": "Approved" },
44
+ {
45
+ "id": "e4",
46
+ "source": "review",
47
+ "target": "revise",
48
+ "label": "Needs work",
49
+ "style": "dashed"
50
+ },
51
+ { "id": "e5", "source": "revise", "target": "checks", "label": "Try again", "style": "dashed" }
52
+ ],
53
+ "groups": [],
54
+ "presentation": {
55
+ "theme": "paper",
56
+ "nodes": { "deploy": { "color": "teal" }, "revise": { "color": "amber" } }
57
+ }
58
+ }