@kumwe/studio-testkit 0.1.0-alpha.8 → 0.1.0-beta.3

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 (72) hide show
  1. package/README.md +79 -19
  2. package/THIRD_PARTY_NOTICES.md +9 -0
  3. package/conformance/authoring-web/non-drag-move-equivalence.json +199 -0
  4. package/conformance/renderer-web/blob-default-deny.json +62 -0
  5. package/conformance/renderer-web/chart-fallback.json +54 -0
  6. package/conformance/renderer-web/complete-catalog.json +649 -0
  7. package/conformance/renderer-web/escaped-heading.json +43 -0
  8. package/conformance/renderer-web/interactive-behaviors.json +284 -0
  9. package/conformance/renderer-web/presentation-capabilities.json +104 -0
  10. package/conformance/renderer-web/responsive-grid.json +48 -0
  11. package/conformance/renderer-web/security-fallbacks.json +184 -0
  12. package/conformance/rich-text/advanced.first-party.json +67 -0
  13. package/corpus-manifest.json +190 -2
  14. package/dist/contextual-conformance.d.ts +81 -0
  15. package/dist/contextual-conformance.d.ts.map +1 -0
  16. package/dist/contextual-conformance.js +1 -0
  17. package/dist/host-testbed.d.ts +47 -4
  18. package/dist/host-testbed.d.ts.map +1 -1
  19. package/dist/host-testbed.js +1 -742
  20. package/dist/http-authoring-contract.d.ts +3 -0
  21. package/dist/http-authoring-contract.d.ts.map +1 -0
  22. package/dist/http-authoring-contract.js +1 -0
  23. package/dist/http-host-adapter.d.ts +12 -64
  24. package/dist/http-host-adapter.d.ts.map +1 -1
  25. package/dist/http-host-adapter.js +1 -256
  26. package/dist/http-host-responder.d.ts +58 -0
  27. package/dist/http-host-responder.d.ts.map +1 -0
  28. package/dist/http-host-responder.js +1 -0
  29. package/dist/index.d.ts +49 -3
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -174
  32. package/dist/web-conformance.d.ts +112 -0
  33. package/dist/web-conformance.d.ts.map +1 -0
  34. package/dist/web-conformance.js +1 -0
  35. package/fixtures/authoring-message-catalog.en.json +1093 -0
  36. package/fixtures/authoring-save.plan.example.json +48 -0
  37. package/fixtures/authoring-session.example.json +212 -0
  38. package/fixtures/authoring-target.example.json +34 -0
  39. package/fixtures/host-operations.example.json +77 -0
  40. package/fixtures/plugin.example.json +12 -0
  41. package/fixtures/reusable-content-type.example.json +26 -0
  42. package/fixtures/studio-deployment.hosted.example.json +152 -0
  43. package/fixtures/studio-deployment.standalone.example.json +9 -0
  44. package/invalid/authoring-save.plan-missing-coordinates.json +16 -0
  45. package/invalid/authoring-save.plan-missing-successor-context.json +28 -0
  46. package/invalid/authoring-save.request-plan-missing-successor-context.json +26 -0
  47. package/invalid/authoring-session.missing-entry-state.json +9 -0
  48. package/invalid/authoring-target.missing-resource-types.json +24 -0
  49. package/invalid/binding-projection-vector.unknown-status.json +85 -0
  50. package/invalid/host-error.retry-delay-without-retry.json +16 -0
  51. package/invalid/host-error.retry-delay-wrong-category.json +16 -0
  52. package/invalid/host-error.revision-without-conflict.json +16 -0
  53. package/invalid/reusable-content-type.entry-values.json +32 -0
  54. package/invalid/studio-chart.script-config.json +10 -0
  55. package/invalid/studio-deployment.long-lived-token.json +24 -0
  56. package/invalid/studio-deployment.missing-required.json +5 -0
  57. package/invalid/studio-deployment.unknown-member.json +15 -0
  58. package/invalid/studio-drawing.svg-payload.json +10 -0
  59. package/invalid/studio-money.float.json +8 -0
  60. package/invalid/studio-presentation.css-injection.json +8 -0
  61. package/invalid/studio-table.html-cell.json +8 -0
  62. package/package.json +8 -4
  63. package/studio-release.json +35 -0
  64. package/vectors/authoring-http/transport-matrix.json +237 -0
  65. package/vectors/binding-projection/app-content-fields.resolved.json +286 -0
  66. package/vectors/binding-projection/field-removed.diagnostic.json +135 -0
  67. package/vectors/binding-projection/model-revision-mismatch.diagnostic.json +124 -0
  68. package/vectors/host/model.get.stored.json +37 -0
  69. package/vectors/host/model.list.authorized.json +31 -0
  70. package/dist/host-testbed.js.map +0 -1
  71. package/dist/http-host-adapter.js.map +0 -1
  72. package/dist/index.js.map +0 -1
@@ -0,0 +1,284 @@
1
+ {
2
+ "id": "renderer-web/interactive-behaviors",
3
+ "coverage": {
4
+ "blockTypes": [
5
+ "studio.core/accordion",
6
+ "studio.core/accordion-item",
7
+ "studio.core/countdown",
8
+ "studio.core/dialog",
9
+ "studio.core/gallery",
10
+ "studio.core/navigation",
11
+ "studio.core/navigation-item",
12
+ "studio.core/notice",
13
+ "studio.core/popover",
14
+ "studio.core/tab",
15
+ "studio.core/tabs"
16
+ ],
17
+ "behaviors": [
18
+ "accordion-native",
19
+ "countdown",
20
+ "dialog",
21
+ "lightbox",
22
+ "navigation-disclosure",
23
+ "notice-dismiss",
24
+ "popover",
25
+ "slideshow",
26
+ "tabs"
27
+ ],
28
+ "presentation": [],
29
+ "security": []
30
+ },
31
+ "roots": [
32
+ {
33
+ "authoring": { "mode": "structural" },
34
+ "bindings": {},
35
+ "id": "behavior-accordion",
36
+ "properties": { "allow-multiple": false },
37
+ "slots": {
38
+ "items": [
39
+ {
40
+ "authoring": { "mode": "structural" },
41
+ "bindings": {},
42
+ "id": "behavior-accordion-item",
43
+ "properties": { "expanded": false },
44
+ "slots": { "content": [] },
45
+ "type": "studio.core/accordion-item",
46
+ "version": "1.0.0"
47
+ }
48
+ ]
49
+ },
50
+ "type": "studio.core/accordion",
51
+ "version": "1.0.0"
52
+ },
53
+ {
54
+ "authoring": { "mode": "structural" },
55
+ "bindings": {},
56
+ "id": "behavior-tabs",
57
+ "properties": { "activation": "automatic" },
58
+ "slots": {
59
+ "items": [
60
+ {
61
+ "authoring": { "mode": "structural" },
62
+ "bindings": {},
63
+ "id": "behavior-tab",
64
+ "properties": {},
65
+ "slots": { "content": [] },
66
+ "type": "studio.core/tab",
67
+ "version": "1.0.0"
68
+ }
69
+ ]
70
+ },
71
+ "type": "studio.core/tabs",
72
+ "version": "1.0.0"
73
+ },
74
+ {
75
+ "authoring": { "mode": "structural" },
76
+ "bindings": {},
77
+ "id": "behavior-dialog",
78
+ "properties": { "modal": true, "presentation": "offcanvas" },
79
+ "slots": { "content": [] },
80
+ "type": "studio.core/dialog",
81
+ "version": "1.0.0"
82
+ },
83
+ {
84
+ "authoring": { "mode": "structural" },
85
+ "bindings": {},
86
+ "id": "behavior-popover",
87
+ "properties": { "dismiss-on-blur": true, "placement": "top", "presentation": "tooltip" },
88
+ "slots": { "content": [] },
89
+ "type": "studio.core/popover",
90
+ "version": "1.0.0"
91
+ },
92
+ {
93
+ "authoring": { "mode": "content" },
94
+ "bindings": {},
95
+ "id": "behavior-notice",
96
+ "properties": { "dismissible": true, "tone": "success" },
97
+ "slots": {},
98
+ "type": "studio.core/notice",
99
+ "version": "1.0.0"
100
+ },
101
+ {
102
+ "authoring": { "mode": "content" },
103
+ "bindings": {},
104
+ "id": "behavior-gallery",
105
+ "properties": {
106
+ "autoplay": false,
107
+ "columns": 1,
108
+ "lightbox": true,
109
+ "presentation": "slideshow"
110
+ },
111
+ "slots": {},
112
+ "type": "studio.core/gallery",
113
+ "version": "1.0.0"
114
+ },
115
+ {
116
+ "authoring": { "mode": "content" },
117
+ "bindings": {},
118
+ "id": "behavior-countdown",
119
+ "properties": { "display": "compact", "expired-behavior": "message" },
120
+ "slots": {},
121
+ "type": "studio.core/countdown",
122
+ "version": "1.0.0"
123
+ },
124
+ {
125
+ "authoring": { "mode": "structural" },
126
+ "bindings": {},
127
+ "id": "behavior-navigation",
128
+ "properties": { "presentation": "dropnav" },
129
+ "slots": {
130
+ "items": [
131
+ {
132
+ "authoring": { "mode": "structural" },
133
+ "bindings": {},
134
+ "id": "behavior-navigation-parent",
135
+ "properties": { "current": false, "href": "" },
136
+ "slots": {
137
+ "children": [
138
+ {
139
+ "authoring": { "mode": "structural" },
140
+ "bindings": {},
141
+ "id": "behavior-navigation-child",
142
+ "properties": { "current": false, "href": "/child" },
143
+ "slots": { "children": [] },
144
+ "type": "studio.core/navigation-item",
145
+ "version": "1.0.0"
146
+ }
147
+ ]
148
+ },
149
+ "type": "studio.core/navigation-item",
150
+ "version": "1.0.0"
151
+ }
152
+ ]
153
+ },
154
+ "type": "studio.core/navigation",
155
+ "version": "1.0.0"
156
+ }
157
+ ],
158
+ "bindings": [
159
+ { "nodeId": "behavior-accordion-item", "port": "title", "value": "Question" },
160
+ { "nodeId": "behavior-tab", "port": "title", "value": "Tab" },
161
+ { "nodeId": "behavior-dialog", "port": "trigger-label", "value": "Open" },
162
+ { "nodeId": "behavior-dialog", "port": "title", "value": "Panel" },
163
+ { "nodeId": "behavior-popover", "port": "trigger-label", "value": "Hint" },
164
+ { "nodeId": "behavior-notice", "port": "title", "value": "Saved" },
165
+ {
166
+ "nodeId": "behavior-notice",
167
+ "port": "content",
168
+ "value": {
169
+ "type": "doc",
170
+ "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Done" }] }]
171
+ }
172
+ },
173
+ {
174
+ "nodeId": "behavior-gallery",
175
+ "port": "items",
176
+ "value": [
177
+ {
178
+ "contractVersion": "0.1-draft",
179
+ "kind": "media-reference",
180
+ "assetId": "slide",
181
+ "usage": "studio.media/content",
182
+ "accessibility": { "mode": "informative", "altText": "Slide" }
183
+ }
184
+ ]
185
+ },
186
+ { "nodeId": "behavior-countdown", "port": "target", "value": "2099-01-01T00:00:00.000Z" },
187
+ { "nodeId": "behavior-countdown", "port": "completion-message", "value": "Complete" },
188
+ { "nodeId": "behavior-navigation", "port": "label", "value": "Main" },
189
+ { "nodeId": "behavior-navigation-parent", "port": "label", "value": "Parent" },
190
+ { "nodeId": "behavior-navigation-child", "port": "label", "value": "Child" }
191
+ ],
192
+ "media": [
193
+ {
194
+ "assetId": "slide",
195
+ "src": "https://cdn.example.test/slide.jpg",
196
+ "altText": "Slide",
197
+ "mediaType": "image/jpeg"
198
+ }
199
+ ],
200
+ "expect": {
201
+ "activationMarkers": [
202
+ "data-studio-scope",
203
+ "data-studio-node",
204
+ "data-studio-tabs",
205
+ "data-studio-tabs-activation",
206
+ "data-studio-tab-list",
207
+ "data-studio-tab",
208
+ "data-studio-tab-panel",
209
+ "data-studio-dialog",
210
+ "data-studio-dialog-modal",
211
+ "data-studio-dialog-presentation",
212
+ "data-studio-dialog-trigger",
213
+ "data-studio-dialog-panel",
214
+ "data-studio-dialog-close",
215
+ "data-studio-popover",
216
+ "data-studio-popover-presentation",
217
+ "data-studio-popover-dismiss-on-blur",
218
+ "data-studio-popover-trigger",
219
+ "data-studio-popover-panel",
220
+ "data-studio-notice",
221
+ "data-studio-notice-dismiss",
222
+ "data-studio-slideshow-autoplay",
223
+ "data-studio-slide",
224
+ "data-studio-slide-previous",
225
+ "data-studio-slide-next",
226
+ "data-studio-lightbox-open",
227
+ "data-studio-countdown",
228
+ "data-studio-countdown-display",
229
+ "data-studio-countdown-expired-behavior",
230
+ "data-studio-countdown-value",
231
+ "data-studio-countdown-complete",
232
+ "data-studio-navigation",
233
+ "data-studio-navigation-item",
234
+ "data-studio-navigation-toggle",
235
+ "data-studio-navigation-children"
236
+ ],
237
+ "cssBytes": 6401,
238
+ "cssSha256": "86032042d65963c4bbbcf4c32c98213bfd19045b899c05de496a84be43b6d23e",
239
+ "htmlBytes": 4389,
240
+ "htmlSha256": "ad9479263ec2c7534f9605522ec103a1b491f7d4a48b97b04fc8af05712c590f",
241
+ "publicStyleAsset": {
242
+ "path": "assets/studio-public-86032042d65963c4.min.css",
243
+ "role": "public-style",
244
+ "mediaType": "text/css",
245
+ "bytes": 6401,
246
+ "budgetBytes": 262144,
247
+ "contentHash": "86032042d65963c4bbbcf4c32c98213bfd19045b899c05de496a84be43b6d23e",
248
+ "integrity": "sha256-hgMgQtZZY8S7vPTDLJghO/0ZBFuJnAXeSWqEvkO20j4=",
249
+ "minified": true
250
+ },
251
+ "htmlContains": [
252
+ "<details>",
253
+ "data-studio-tabs",
254
+ "data-studio-tabs-activation=\"automatic\"",
255
+ "data-studio-dialog-modal=\"true\"",
256
+ "data-studio-dialog-presentation=\"offcanvas\"",
257
+ "data-studio-popover-presentation=\"tooltip\"",
258
+ "role=\"tooltip\"",
259
+ "data-studio-popover-dismiss-on-blur=\"true\"",
260
+ "data-studio-notice-dismiss",
261
+ "data-studio-slideshow-autoplay=\"false\"",
262
+ "data-studio-lightbox-open",
263
+ "data-studio-countdown",
264
+ "data-studio-countdown-display=\"compact\"",
265
+ "data-studio-countdown-expired-behavior=\"message\"",
266
+ "datetime=\"2099-01-01T00:00:00.000Z\"",
267
+ "data-studio-navigation-toggle",
268
+ "<ul><li data-studio-navigation-item data-studio-block=\"navigation-item\" data-studio-node=\"behavior-navigation-parent\"",
269
+ "<ul data-studio-navigation-children><li data-studio-navigation-item data-studio-block=\"navigation-item\" data-studio-node=\"behavior-navigation-child\""
270
+ ],
271
+ "htmlExcludes": ["<script", "onclick=", "javascript:"],
272
+ "cssContains": ["data-studio-dialog-presentation", "data-studio-lightbox-dialog"],
273
+ "enhancements": [
274
+ "tabs",
275
+ "dialog",
276
+ "popover",
277
+ "notice",
278
+ "slideshow",
279
+ "lightbox",
280
+ "countdown",
281
+ "navigation"
282
+ ]
283
+ }
284
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "id": "renderer-web/presentation-capabilities",
3
+ "coverage": {
4
+ "blockTypes": ["studio.core/heading"],
5
+ "behaviors": [],
6
+ "presentation": [
7
+ "alignment",
8
+ "inverse",
9
+ "markers",
10
+ "motion",
11
+ "position",
12
+ "print",
13
+ "responsive-visibility",
14
+ "scrolling",
15
+ "sizing",
16
+ "spacing"
17
+ ],
18
+ "security": []
19
+ },
20
+ "roots": [
21
+ {
22
+ "authoring": { "mode": "content" },
23
+ "bindings": {},
24
+ "id": "presentation",
25
+ "properties": {
26
+ "level": 2,
27
+ "design": {
28
+ "align": "center",
29
+ "animation": "slide",
30
+ "height": "viewport",
31
+ "inverse": true,
32
+ "margin": "comfortable",
33
+ "marker": "check",
34
+ "padding": "spacious",
35
+ "position": "sticky",
36
+ "print": "hide",
37
+ "scrolling": "snap",
38
+ "visibility": { "compact": "hidden", "medium": "visible", "expanded": "hidden" },
39
+ "width": "full"
40
+ }
41
+ },
42
+ "slots": {},
43
+ "type": "studio.core/heading",
44
+ "version": "1.0.0"
45
+ }
46
+ ],
47
+ "bindings": [{ "nodeId": "presentation", "port": "text", "value": "Presentation" }],
48
+ "media": [],
49
+ "context": {
50
+ "scopedStyles": {
51
+ "presentation": {
52
+ "rules": [
53
+ {
54
+ "target": "self",
55
+ "declarations": { "font-weight": "700", "color": "#123456" }
56
+ }
57
+ ]
58
+ }
59
+ }
60
+ },
61
+ "expect": {
62
+ "activationMarkers": [],
63
+ "cssBytes": 6396,
64
+ "cssSha256": "71a06ec1f946881ef7b3dd0a2ce40281b749c70d5a2244c90e35191c2364e774",
65
+ "htmlBytes": 588,
66
+ "htmlSha256": "6a2e806f511a09bac4508c13ae6a91d0bb6e0456e740255c09f4740e70cf1350",
67
+ "publicStyleAsset": {
68
+ "path": "assets/studio-public-71a06ec1f946881e.min.css",
69
+ "role": "public-style",
70
+ "mediaType": "text/css",
71
+ "bytes": 6396,
72
+ "budgetBytes": 262144,
73
+ "contentHash": "71a06ec1f946881ef7b3dd0a2ce40281b749c70d5a2244c90e35191c2364e774",
74
+ "integrity": "sha256-caBuwflGiB73s90KLOQCgbdJxw1aIkTJDjUZHCNk53Q=",
75
+ "minified": true
76
+ },
77
+ "htmlContains": [
78
+ "data-studio-align=\"center\"",
79
+ "data-studio-animation=\"slide\"",
80
+ "data-studio-height=\"viewport\"",
81
+ "data-studio-inverse=\"true\"",
82
+ "data-studio-margin=\"comfortable\"",
83
+ "data-studio-marker=\"check\"",
84
+ "data-studio-padding=\"spacious\"",
85
+ "data-studio-position=\"sticky\"",
86
+ "data-studio-print=\"hide\"",
87
+ "data-studio-scroll=\"snap\"",
88
+ "data-studio-visible-compact=\"hidden\"",
89
+ "data-studio-visible-medium=\"visible\"",
90
+ "data-studio-visible-expanded=\"hidden\"",
91
+ "data-studio-width=\"full\""
92
+ ],
93
+ "htmlExcludes": ["style=", "<script"],
94
+ "cssContains": [
95
+ "data-studio-position=sticky",
96
+ "color:#123456;font-weight:700",
97
+ "data-studio-motion",
98
+ "@media print",
99
+ "width>=48rem",
100
+ "width>=75rem"
101
+ ],
102
+ "enhancements": ["motion"]
103
+ }
104
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "id": "renderer-web/responsive-grid",
3
+ "coverage": {
4
+ "blockTypes": ["studio.core/grid"],
5
+ "behaviors": [],
6
+ "presentation": ["sizing"],
7
+ "security": []
8
+ },
9
+ "roots": [
10
+ {
11
+ "authoring": { "mode": "structural" },
12
+ "bindings": {},
13
+ "id": "grid",
14
+ "properties": { "collapse": "stack", "columns": 1 },
15
+ "responsive": { "columns": { "medium": 2, "expanded": 4 } },
16
+ "slots": { "items": [] },
17
+ "type": "studio.core/grid",
18
+ "version": "1.0.0"
19
+ }
20
+ ],
21
+ "bindings": [],
22
+ "media": [],
23
+ "expect": {
24
+ "activationMarkers": [],
25
+ "cssBytes": 6431,
26
+ "cssSha256": "bfb9fa95aad407e06ae5ec49a5863341df1079aa56e2f515935a68d987760952",
27
+ "htmlBytes": 154,
28
+ "htmlSha256": "4bca41bccfa6449af8b716b896bea4d3b7b5f26de4492c76d3b7e55a704c4fda",
29
+ "publicStyleAsset": {
30
+ "path": "assets/studio-public-bfb9fa95aad407e0.min.css",
31
+ "role": "public-style",
32
+ "mediaType": "text/css",
33
+ "bytes": 6431,
34
+ "budgetBytes": 262144,
35
+ "contentHash": "bfb9fa95aad407e06ae5ec49a5863341df1079aa56e2f515935a68d987760952",
36
+ "integrity": "sha256-v7n6larUB+Bq5exJpYYzQd8QeapW4vUVk1po2Yd2CVI=",
37
+ "minified": true
38
+ },
39
+ "htmlContains": ["data-studio-layout=\"grid\""],
40
+ "htmlExcludes": ["<script"],
41
+ "cssContains": [
42
+ "--studio-columns-compact:1",
43
+ "--studio-columns-medium:2",
44
+ "--studio-columns-expanded:4"
45
+ ],
46
+ "enhancements": []
47
+ }
48
+ }
@@ -0,0 +1,184 @@
1
+ {
2
+ "id": "renderer-web/security-fallbacks",
3
+ "coverage": {
4
+ "blockTypes": [
5
+ "studio.core/call-to-action",
6
+ "studio.core/chart",
7
+ "studio.core/heading",
8
+ "studio.core/image",
9
+ "studio.core/table"
10
+ ],
11
+ "behaviors": [],
12
+ "presentation": [],
13
+ "security": ["active-media-deny", "escaped-text", "safe-url-deny", "typed-data-fallback"]
14
+ },
15
+ "context": { "allowBlobMedia": true },
16
+ "roots": [
17
+ {
18
+ "authoring": { "mode": "content" },
19
+ "bindings": {},
20
+ "id": "security-heading",
21
+ "properties": { "level": 2 },
22
+ "slots": {},
23
+ "type": "studio.core/heading",
24
+ "version": "1.0.0"
25
+ },
26
+ {
27
+ "authoring": { "mode": "content" },
28
+ "bindings": {},
29
+ "id": "security-action",
30
+ "properties": { "appearance": "primary", "href": "javascript:alert(1)" },
31
+ "slots": {},
32
+ "type": "studio.core/call-to-action",
33
+ "version": "1.0.0"
34
+ },
35
+ {
36
+ "authoring": { "mode": "content" },
37
+ "bindings": {},
38
+ "id": "security-blob-image",
39
+ "properties": { "fit": "cover", "loading": "lazy" },
40
+ "slots": {},
41
+ "type": "studio.core/image",
42
+ "version": "1.0.0"
43
+ },
44
+ {
45
+ "authoring": { "mode": "content" },
46
+ "bindings": {},
47
+ "id": "security-svg-image",
48
+ "properties": { "fit": "cover", "loading": "lazy" },
49
+ "slots": {},
50
+ "type": "studio.core/image",
51
+ "version": "1.0.0"
52
+ },
53
+ {
54
+ "authoring": { "mode": "content" },
55
+ "bindings": {},
56
+ "id": "security-data-image",
57
+ "properties": { "fit": "cover", "loading": "lazy" },
58
+ "slots": {},
59
+ "type": "studio.core/image",
60
+ "version": "1.0.0"
61
+ },
62
+ {
63
+ "authoring": { "mode": "content" },
64
+ "bindings": {},
65
+ "id": "security-chart",
66
+ "properties": {},
67
+ "slots": {},
68
+ "type": "studio.core/chart",
69
+ "version": "1.0.0"
70
+ },
71
+ {
72
+ "authoring": { "mode": "content" },
73
+ "bindings": {},
74
+ "id": "security-table",
75
+ "properties": {},
76
+ "slots": {},
77
+ "type": "studio.core/table",
78
+ "version": "1.0.0"
79
+ }
80
+ ],
81
+ "bindings": [
82
+ { "nodeId": "security-heading", "port": "text", "value": "<script>alert(1)</script>" },
83
+ { "nodeId": "security-action", "port": "label", "value": "Unsafe" },
84
+ {
85
+ "nodeId": "security-blob-image",
86
+ "port": "asset",
87
+ "value": {
88
+ "contractVersion": "0.1-draft",
89
+ "kind": "media-reference",
90
+ "assetId": "safe-blob",
91
+ "usage": "studio.media/content",
92
+ "accessibility": { "mode": "informative", "altText": "Local" }
93
+ }
94
+ },
95
+ {
96
+ "nodeId": "security-svg-image",
97
+ "port": "asset",
98
+ "value": {
99
+ "contractVersion": "0.1-draft",
100
+ "kind": "media-reference",
101
+ "assetId": "active-svg",
102
+ "usage": "studio.media/content",
103
+ "accessibility": { "mode": "informative", "altText": "SVG" }
104
+ }
105
+ },
106
+ {
107
+ "nodeId": "security-data-image",
108
+ "port": "asset",
109
+ "value": {
110
+ "contractVersion": "0.1-draft",
111
+ "kind": "media-reference",
112
+ "assetId": "data-image",
113
+ "usage": "studio.media/content",
114
+ "accessibility": { "mode": "informative", "altText": "Data" }
115
+ }
116
+ },
117
+ {
118
+ "nodeId": "security-chart",
119
+ "port": "chart",
120
+ "value": {
121
+ "type": "bar",
122
+ "labels": ["A"],
123
+ "datasets": [{ "label": "Bad", "values": [1, 2] }]
124
+ }
125
+ },
126
+ {
127
+ "nodeId": "security-table",
128
+ "port": "table",
129
+ "value": { "columns": ["A", "B"], "rows": [["one"]] }
130
+ }
131
+ ],
132
+ "media": [
133
+ {
134
+ "assetId": "safe-blob",
135
+ "src": "blob:https://studio.example.test/123e4567-e89b-12d3-a456-426614174000",
136
+ "altText": "Local",
137
+ "mediaType": "image/png"
138
+ },
139
+ {
140
+ "assetId": "active-svg",
141
+ "src": "blob:https://studio.example.test/223e4567-e89b-12d3-a456-426614174000",
142
+ "altText": "SVG",
143
+ "mediaType": "image/svg+xml"
144
+ },
145
+ {
146
+ "assetId": "data-image",
147
+ "src": "data:image/png;base64,AAAA",
148
+ "altText": "Data",
149
+ "mediaType": "image/png"
150
+ }
151
+ ],
152
+ "expect": {
153
+ "activationMarkers": [],
154
+ "cssBytes": 6320,
155
+ "cssSha256": "8d4d00dfa489396dc0a4207b3d1efa207d7658e325c9db4bba2e74b91a607649",
156
+ "htmlBytes": 1339,
157
+ "htmlSha256": "f9e941b82644e72291cba1689063aade40b653ee83bf16860af560e8f613bbd3",
158
+ "publicStyleAsset": {
159
+ "path": "assets/studio-public-8d4d00dfa489396d.min.css",
160
+ "role": "public-style",
161
+ "mediaType": "text/css",
162
+ "bytes": 6320,
163
+ "budgetBytes": 262144,
164
+ "contentHash": "8d4d00dfa489396dc0a4207b3d1efa207d7658e325c9db4bba2e74b91a607649",
165
+ "integrity": "sha256-jU0A36SJOW3ApCB7PR76IH12WOMlydtLui50uRpgdkk=",
166
+ "minified": true
167
+ },
168
+ "htmlContains": [
169
+ "&lt;script&gt;alert(1)&lt;/script&gt;",
170
+ "blob:https://studio.example.test/123e4567-e89b-12d3-a456-426614174000",
171
+ "Chart data unavailable",
172
+ "Table data unavailable",
173
+ "Image unavailable"
174
+ ],
175
+ "htmlExcludes": [
176
+ "<script",
177
+ "javascript:",
178
+ "data:image",
179
+ "223e4567-e89b-12d3-a456-426614174000"
180
+ ],
181
+ "cssContains": ["prefers-reduced-motion"],
182
+ "enhancements": []
183
+ }
184
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "description": "First-party callout, checklist, table and inert-code nodes project through their canonical semantic leaves without carrying Editor.js state.",
3
+ "document": {
4
+ "type": "doc",
5
+ "content": [
6
+ {
7
+ "type": "callout",
8
+ "attrs": { "tone": "warning" },
9
+ "content": [
10
+ {
11
+ "type": "paragraph",
12
+ "content": [
13
+ {
14
+ "type": "text",
15
+ "text": "Mind the gap",
16
+ "marks": [{ "type": "highlight", "attrs": { "tone": "accent" } }]
17
+ }
18
+ ]
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "type": "checklist",
24
+ "content": [
25
+ {
26
+ "type": "checklistItem",
27
+ "attrs": { "checked": true, "level": 0 },
28
+ "content": [{ "type": "text", "text": "Done" }]
29
+ },
30
+ {
31
+ "type": "checklistItem",
32
+ "attrs": { "checked": false, "level": 1 },
33
+ "content": [{ "type": "text", "text": "Nested" }]
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "type": "table",
39
+ "attrs": { "header": true },
40
+ "content": [
41
+ {
42
+ "type": "tableRow",
43
+ "content": [
44
+ {
45
+ "type": "tableCell",
46
+ "content": [{ "type": "text", "text": "Name" }]
47
+ }
48
+ ]
49
+ }
50
+ ]
51
+ },
52
+ { "type": "codeBlock", "attrs": { "language": "typescript" }, "text": "const n = 42;" }
53
+ ]
54
+ },
55
+ "projection": [
56
+ {
57
+ "type": "paragraph",
58
+ "text": "Mind the gap",
59
+ "spans": [{ "start": 0, "end": 12, "marks": ["highlight"] }],
60
+ "embeds": []
61
+ },
62
+ { "type": "checklistItem", "text": "Done", "spans": [], "embeds": [] },
63
+ { "type": "checklistItem", "text": "Nested", "spans": [], "embeds": [] },
64
+ { "type": "tableCell", "text": "Name", "spans": [], "embeds": [] },
65
+ { "type": "codeBlock", "text": "const n = 42;", "spans": [], "embeds": [] }
66
+ ]
67
+ }