sketchmark 2.0.0 → 2.1.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 (132) hide show
  1. package/ANIMATABLE_MATRIX.md +177 -0
  2. package/KERNEL_SPEC.md +412 -0
  3. package/PACKS.md +81 -0
  4. package/PRESETS.md +182 -0
  5. package/README.md +274 -188
  6. package/bin/editor-ui.cjs +2285 -0
  7. package/bin/preview-ui.cjs +74 -0
  8. package/bin/sketchmark.cjs +648 -2008
  9. package/dist/src/animatable.d.ts +21 -0
  10. package/dist/src/animatable.js +439 -0
  11. package/dist/src/builders/index.d.ts +1 -11
  12. package/dist/src/builders/index.js +1 -19
  13. package/dist/src/diagnostics.js +1 -64
  14. package/dist/src/edit.d.ts +27 -0
  15. package/dist/src/edit.js +162 -0
  16. package/dist/src/index.d.ts +4 -13
  17. package/dist/src/index.js +4 -13
  18. package/dist/src/keyframes.d.ts +48 -0
  19. package/dist/src/keyframes.js +182 -0
  20. package/dist/src/motion.d.ts +4 -0
  21. package/dist/src/motion.js +262 -0
  22. package/dist/src/normalize.js +120 -151
  23. package/dist/src/presets/characters.d.ts +15 -0
  24. package/dist/src/presets/characters.js +113 -0
  25. package/dist/src/presets/compose.d.ts +5 -0
  26. package/dist/src/presets/compose.js +80 -0
  27. package/dist/src/presets/effects.d.ts +40 -0
  28. package/dist/src/presets/effects.js +79 -0
  29. package/dist/src/presets/helpers.d.ts +33 -0
  30. package/dist/src/presets/helpers.js +165 -0
  31. package/dist/src/presets/index.d.ts +9 -0
  32. package/dist/src/presets/index.js +48 -0
  33. package/dist/src/presets/motions.d.ts +33 -0
  34. package/dist/src/presets/motions.js +75 -0
  35. package/dist/src/presets/scenes.d.ts +35 -0
  36. package/dist/src/presets/scenes.js +134 -0
  37. package/dist/src/presets/shapes.d.ts +71 -0
  38. package/dist/src/presets/shapes.js +96 -0
  39. package/dist/src/presets/transitions.d.ts +29 -0
  40. package/dist/src/presets/transitions.js +113 -0
  41. package/dist/src/presets/types.d.ts +34 -0
  42. package/dist/src/presets/types.js +2 -0
  43. package/dist/src/render/html.js +1 -4
  44. package/dist/src/render/svg.d.ts +2 -2
  45. package/dist/src/render/svg.js +86 -82
  46. package/dist/src/render/three-html.js +67 -113
  47. package/dist/src/scenes.js +1 -0
  48. package/dist/src/schema.js +218 -280
  49. package/dist/src/shapes/builtins.js +11 -47
  50. package/dist/src/shapes/common.js +12 -11
  51. package/dist/src/shapes/registry.d.ts +0 -1
  52. package/dist/src/shapes/registry.js +0 -4
  53. package/dist/src/shapes/types.d.ts +1 -3
  54. package/dist/src/types.d.ts +57 -288
  55. package/dist/src/utils.d.ts +2 -11
  56. package/dist/src/utils.js +13 -70
  57. package/dist/src/validate.js +321 -275
  58. package/dist/tests/run.js +576 -510
  59. package/examples/1730642890464.jpg +0 -0
  60. package/examples/app-screen.svg +1 -0
  61. package/examples/app-screen.visual.json +503 -0
  62. package/examples/dashboard-table.svg +1 -0
  63. package/examples/dashboard-table.visual.json +708 -0
  64. package/examples/dev-docs.svg +1 -0
  65. package/examples/dev-docs.visual.json +248 -0
  66. package/examples/explainer.mp4 +0 -0
  67. package/examples/explainer.visual.json +1713 -0
  68. package/examples/group-origin-effects-lab-check.svg +1 -0
  69. package/examples/group-origin-effects-lab.visual.json +1880 -0
  70. package/examples/image-clip-radius.visual.json +271 -0
  71. package/examples/make-app-screen.cjs +368 -0
  72. package/examples/make-dashboard-table.cjs +277 -0
  73. package/examples/make-dev-docs.cjs +233 -0
  74. package/examples/make-explainer.cjs +438 -0
  75. package/examples/make-group-origin-effects-lab.cjs +370 -0
  76. package/examples/make-image-clip-radius.cjs +169 -0
  77. package/examples/make-modal-dialog.cjs +355 -0
  78. package/examples/make-origin-effects-lab.cjs +311 -0
  79. package/examples/make-preset-character-motion.cjs +32 -0
  80. package/examples/make-presets-demo.cjs +30 -0
  81. package/examples/make-pricing.cjs +286 -0
  82. package/examples/make-product-demo.cjs +468 -0
  83. package/examples/make-product-hero.cjs +223 -0
  84. package/examples/make-release-notes.cjs +333 -0
  85. package/examples/make-settings-panel.cjs +435 -0
  86. package/examples/make-split-preview.cjs +248 -0
  87. package/examples/make-storyboard.cjs +215 -0
  88. package/examples/make-transcript.cjs +234 -0
  89. package/examples/make-typography-test.cjs +397 -0
  90. package/examples/make-ui-demo-explainer.cjs +1094 -0
  91. package/examples/make-ui-flow.cjs +762 -0
  92. package/examples/make-walkthrough.cjs +815 -0
  93. package/examples/modal-dialog.svg +1 -0
  94. package/examples/modal-dialog.visual.json +239 -0
  95. package/examples/origin-effects-lab-check.svg +1 -0
  96. package/examples/origin-effects-lab.visual.json +1412 -0
  97. package/examples/preset-character-motion.visual.json +949 -0
  98. package/examples/presets-demo.visual.json +787 -0
  99. package/examples/pricing.svg +1 -0
  100. package/examples/pricing.visual.json +652 -0
  101. package/examples/product-demo.mp4 +0 -0
  102. package/examples/product-demo.visual.json +866 -0
  103. package/examples/product-hero.svg +1 -0
  104. package/examples/product-hero.visual.json +242 -0
  105. package/examples/release-notes.svg +1 -0
  106. package/examples/release-notes.visual.json +467 -0
  107. package/examples/settings-panel.svg +1 -0
  108. package/examples/settings-panel.visual.json +501 -0
  109. package/examples/split-preview.svg +1 -0
  110. package/examples/split-preview.visual.json +124 -0
  111. package/examples/storyboard.svg +1 -0
  112. package/examples/storyboard.visual.json +312 -0
  113. package/examples/transcript.svg +1 -0
  114. package/examples/transcript.visual.json +407 -0
  115. package/examples/typography-indent-check.svg +1 -0
  116. package/examples/typography-lineheight-0.svg +1 -0
  117. package/examples/typography-lineheight-2.svg +1 -0
  118. package/examples/typography-test-check.svg +1 -0
  119. package/examples/typography-test.svg +1 -0
  120. package/examples/typography-test.visual.json +757 -0
  121. package/examples/ui-demo-explainer-billing.svg +1 -0
  122. package/examples/ui-demo-explainer-check.svg +1 -0
  123. package/examples/ui-demo-explainer-save.svg +1 -0
  124. package/examples/ui-demo-explainer-toggle.svg +1 -0
  125. package/examples/ui-demo-explainer.mp4 +0 -0
  126. package/examples/ui-demo-explainer.visual.json +2597 -0
  127. package/examples/ui-flow.mp4 +0 -0
  128. package/examples/ui-flow.visual.json +1211 -0
  129. package/examples/walkthrough.mp4 +0 -0
  130. package/examples/walkthrough.visual.json +1372 -0
  131. package/package.json +52 -52
  132. package/schema/visual.schema.json +1086 -930
@@ -0,0 +1,757 @@
1
+ {
2
+ "version": 1,
3
+ "canvas": {
4
+ "width": 1000,
5
+ "height": 920,
6
+ "background": "#ffffff",
7
+ "duration": 8,
8
+ "fps": 30
9
+ },
10
+ "elements": [
11
+ {
12
+ "id": "headline",
13
+ "type": "text",
14
+ "x": 500,
15
+ "y": 56,
16
+ "text": "Typography Stress Test",
17
+ "align": "center",
18
+ "valign": "top",
19
+ "fontSize": 40,
20
+ "fontFamily": "Inter, system-ui, sans-serif",
21
+ "weight": 700,
22
+ "fill": "#0f172a",
23
+ "timeline": {
24
+ "tracks": {
25
+ "fontSize": {
26
+ "keyframes": [
27
+ {
28
+ "time": 0,
29
+ "value": 40,
30
+ "out": {
31
+ "type": "cubicBezier",
32
+ "x1": 0.25,
33
+ "y1": 0.1,
34
+ "x2": 0.25,
35
+ "y2": 1
36
+ }
37
+ },
38
+ {
39
+ "time": 1.6,
40
+ "value": 46,
41
+ "out": {
42
+ "type": "cubicBezier",
43
+ "x1": 0.25,
44
+ "y1": 0.1,
45
+ "x2": 0.25,
46
+ "y2": 1
47
+ }
48
+ },
49
+ {
50
+ "time": 3.3,
51
+ "value": 36,
52
+ "out": {
53
+ "type": "cubicBezier",
54
+ "x1": 0.25,
55
+ "y1": 0.1,
56
+ "x2": 0.25,
57
+ "y2": 1
58
+ }
59
+ },
60
+ {
61
+ "time": 4.8,
62
+ "value": 44,
63
+ "out": {
64
+ "type": "cubicBezier",
65
+ "x1": 0.25,
66
+ "y1": 0.1,
67
+ "x2": 0.25,
68
+ "y2": 1
69
+ }
70
+ },
71
+ {
72
+ "time": 6.5,
73
+ "value": 40
74
+ }
75
+ ]
76
+ },
77
+ "letterSpacing": {
78
+ "keyframes": [
79
+ {
80
+ "time": 0,
81
+ "value": 0,
82
+ "out": {
83
+ "type": "cubicBezier",
84
+ "x1": 0.25,
85
+ "y1": 0.1,
86
+ "x2": 0.25,
87
+ "y2": 1
88
+ }
89
+ },
90
+ {
91
+ "time": 1.6,
92
+ "value": 1.5,
93
+ "out": {
94
+ "type": "cubicBezier",
95
+ "x1": 0.25,
96
+ "y1": 0.1,
97
+ "x2": 0.25,
98
+ "y2": 1
99
+ }
100
+ },
101
+ {
102
+ "time": 3.3,
103
+ "value": 4,
104
+ "out": {
105
+ "type": "cubicBezier",
106
+ "x1": 0.25,
107
+ "y1": 0.1,
108
+ "x2": 0.25,
109
+ "y2": 1
110
+ }
111
+ },
112
+ {
113
+ "time": 4.8,
114
+ "value": 0.8,
115
+ "out": {
116
+ "type": "cubicBezier",
117
+ "x1": 0.25,
118
+ "y1": 0.1,
119
+ "x2": 0.25,
120
+ "y2": 1
121
+ }
122
+ },
123
+ {
124
+ "time": 6.5,
125
+ "value": 0
126
+ }
127
+ ]
128
+ },
129
+ "weight": {
130
+ "keyframes": [
131
+ {
132
+ "time": 0,
133
+ "value": 700
134
+ },
135
+ {
136
+ "time": 2.2,
137
+ "value": 300
138
+ },
139
+ {
140
+ "time": 4.4,
141
+ "value": 700
142
+ },
143
+ {
144
+ "time": 6.5,
145
+ "value": 700
146
+ }
147
+ ]
148
+ }
149
+ }
150
+ }
151
+ },
152
+ {
153
+ "id": "subtitle",
154
+ "type": "text",
155
+ "x": 500,
156
+ "y": 112,
157
+ "text": "Demonstrating multiple alignment modes, text styles, and layout patterns\nin a single cohesive document without visual overlap.",
158
+ "align": "center",
159
+ "valign": "top",
160
+ "fontSize": 16,
161
+ "fontFamily": "Inter, system-ui, sans-serif",
162
+ "weight": 400,
163
+ "lineHeight": 1.55,
164
+ "fill": "#475569",
165
+ "maxWidth": 856,
166
+ "timeline": {
167
+ "tracks": {
168
+ "lineHeight": {
169
+ "keyframes": [
170
+ {
171
+ "time": 0,
172
+ "value": 1.55,
173
+ "out": {
174
+ "type": "cubicBezier",
175
+ "x1": 0.25,
176
+ "y1": 0.1,
177
+ "x2": 0.25,
178
+ "y2": 1
179
+ }
180
+ },
181
+ {
182
+ "time": 2,
183
+ "value": 1.9,
184
+ "out": {
185
+ "type": "cubicBezier",
186
+ "x1": 0.25,
187
+ "y1": 0.1,
188
+ "x2": 0.25,
189
+ "y2": 1
190
+ }
191
+ },
192
+ {
193
+ "time": 4.2,
194
+ "value": 1.3,
195
+ "out": {
196
+ "type": "cubicBezier",
197
+ "x1": 0.25,
198
+ "y1": 0.1,
199
+ "x2": 0.25,
200
+ "y2": 1
201
+ }
202
+ },
203
+ {
204
+ "time": 6.4,
205
+ "value": 1.55
206
+ }
207
+ ]
208
+ }
209
+ }
210
+ }
211
+ },
212
+ {
213
+ "id": "divider-1",
214
+ "type": "path",
215
+ "d": "M 72 176 L 928 176",
216
+ "stroke": "#e2e8f0",
217
+ "strokeWidth": 1,
218
+ "fill": "none"
219
+ },
220
+ {
221
+ "id": "para-heading",
222
+ "type": "text",
223
+ "x": 72,
224
+ "y": 216,
225
+ "text": "Overview",
226
+ "align": "left",
227
+ "valign": "top",
228
+ "fontSize": 20,
229
+ "fontFamily": "Inter, system-ui, sans-serif",
230
+ "weight": 700,
231
+ "fill": "#0f172a"
232
+ },
233
+ {
234
+ "id": "para-body",
235
+ "type": "text",
236
+ "x": 72,
237
+ "y": 248,
238
+ "text": "This document tests the render kernel's ability to handle diverse typographic\nscenarios. Each section exercises a different combination of alignment, weight,\nsize, and line height. The goal is to verify that spacing remains predictable\nand that no elements collide regardless of content length or style variation.",
239
+ "align": "left",
240
+ "valign": "top",
241
+ "fontSize": 14,
242
+ "fontFamily": "Inter, system-ui, sans-serif",
243
+ "weight": 400,
244
+ "lineHeight": 1.7,
245
+ "fill": "#334155",
246
+ "maxWidth": 856,
247
+ "timeline": {
248
+ "tracks": {
249
+ "letterSpacing": {
250
+ "keyframes": [
251
+ {
252
+ "time": 0,
253
+ "value": 0,
254
+ "out": {
255
+ "type": "cubicBezier",
256
+ "x1": 0.25,
257
+ "y1": 0.1,
258
+ "x2": 0.25,
259
+ "y2": 1
260
+ }
261
+ },
262
+ {
263
+ "time": 2.6,
264
+ "value": 0.6,
265
+ "out": {
266
+ "type": "cubicBezier",
267
+ "x1": 0.25,
268
+ "y1": 0.1,
269
+ "x2": 0.25,
270
+ "y2": 1
271
+ }
272
+ },
273
+ {
274
+ "time": 5.1,
275
+ "value": 0.15,
276
+ "out": {
277
+ "type": "cubicBezier",
278
+ "x1": 0.25,
279
+ "y1": 0.1,
280
+ "x2": 0.25,
281
+ "y2": 1
282
+ }
283
+ },
284
+ {
285
+ "time": 7,
286
+ "value": 0
287
+ }
288
+ ]
289
+ }
290
+ }
291
+ }
292
+ },
293
+ {
294
+ "id": "list-heading",
295
+ "type": "text",
296
+ "x": 72,
297
+ "y": 358,
298
+ "text": "Validation Checklist",
299
+ "align": "left",
300
+ "valign": "top",
301
+ "fontSize": 20,
302
+ "fontFamily": "Inter, system-ui, sans-serif",
303
+ "weight": 700,
304
+ "fill": "#0f172a"
305
+ },
306
+ {
307
+ "id": "list-num-0",
308
+ "type": "text",
309
+ "x": 72,
310
+ "y": 390,
311
+ "text": "1.",
312
+ "align": "left",
313
+ "valign": "top",
314
+ "fontSize": 14,
315
+ "fontFamily": "Inter, system-ui, sans-serif",
316
+ "weight": 600,
317
+ "fill": "#2563eb"
318
+ },
319
+ {
320
+ "id": "list-item-0",
321
+ "type": "text",
322
+ "x": 96,
323
+ "y": 390,
324
+ "text": "Confirm that centered text remains horizontally balanced at all font sizes.",
325
+ "align": "left",
326
+ "valign": "top",
327
+ "fontSize": 14,
328
+ "fontFamily": "Inter, system-ui, sans-serif",
329
+ "weight": 400,
330
+ "fill": "#334155",
331
+ "maxWidth": 832
332
+ },
333
+ {
334
+ "id": "list-num-1",
335
+ "type": "text",
336
+ "x": 72,
337
+ "y": 418,
338
+ "text": "2.",
339
+ "align": "left",
340
+ "valign": "top",
341
+ "fontSize": 14,
342
+ "fontFamily": "Inter, system-ui, sans-serif",
343
+ "weight": 600,
344
+ "fill": "#2563eb"
345
+ },
346
+ {
347
+ "id": "list-item-1",
348
+ "type": "text",
349
+ "x": 96,
350
+ "y": 418,
351
+ "text": "Verify left-aligned blocks maintain consistent left edge across line breaks.",
352
+ "align": "left",
353
+ "valign": "top",
354
+ "fontSize": 14,
355
+ "fontFamily": "Inter, system-ui, sans-serif",
356
+ "weight": 400,
357
+ "fill": "#334155",
358
+ "maxWidth": 832
359
+ },
360
+ {
361
+ "id": "list-num-2",
362
+ "type": "text",
363
+ "x": 72,
364
+ "y": 446,
365
+ "text": "3.",
366
+ "align": "left",
367
+ "valign": "top",
368
+ "fontSize": 14,
369
+ "fontFamily": "Inter, system-ui, sans-serif",
370
+ "weight": 600,
371
+ "fill": "#2563eb"
372
+ },
373
+ {
374
+ "id": "list-item-2",
375
+ "type": "text",
376
+ "x": 96,
377
+ "y": 446,
378
+ "text": "Check that right-aligned notes anchor correctly without drifting.",
379
+ "align": "left",
380
+ "valign": "top",
381
+ "fontSize": 14,
382
+ "fontFamily": "Inter, system-ui, sans-serif",
383
+ "weight": 400,
384
+ "fill": "#334155",
385
+ "maxWidth": 832
386
+ },
387
+ {
388
+ "id": "list-num-3",
389
+ "type": "text",
390
+ "x": 72,
391
+ "y": 474,
392
+ "text": "4.",
393
+ "align": "left",
394
+ "valign": "top",
395
+ "fontSize": 14,
396
+ "fontFamily": "Inter, system-ui, sans-serif",
397
+ "weight": 600,
398
+ "fill": "#2563eb"
399
+ },
400
+ {
401
+ "id": "list-item-3",
402
+ "type": "text",
403
+ "x": 96,
404
+ "y": 474,
405
+ "text": "Ensure code blocks preserve whitespace and monospace character width.",
406
+ "align": "left",
407
+ "valign": "top",
408
+ "fontSize": 14,
409
+ "fontFamily": "Inter, system-ui, sans-serif",
410
+ "weight": 400,
411
+ "fill": "#334155",
412
+ "maxWidth": 832
413
+ },
414
+ {
415
+ "id": "list-num-4",
416
+ "type": "text",
417
+ "x": 72,
418
+ "y": 502,
419
+ "text": "5.",
420
+ "align": "left",
421
+ "valign": "top",
422
+ "fontSize": 14,
423
+ "fontFamily": "Inter, system-ui, sans-serif",
424
+ "weight": 600,
425
+ "fill": "#2563eb"
426
+ },
427
+ {
428
+ "id": "list-item-4",
429
+ "type": "text",
430
+ "x": 96,
431
+ "y": 502,
432
+ "text": "Validate that pill components center their labels within fixed bounds.",
433
+ "align": "left",
434
+ "valign": "top",
435
+ "fontSize": 14,
436
+ "fontFamily": "Inter, system-ui, sans-serif",
437
+ "weight": 400,
438
+ "fill": "#334155",
439
+ "maxWidth": 832
440
+ },
441
+ {
442
+ "id": "code-bg",
443
+ "type": "path",
444
+ "d": "M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z",
445
+ "fill": "#1e293b",
446
+ "stroke": "none",
447
+ "timeline": {
448
+ "tracks": {
449
+ "position": {
450
+ "keyframes": [
451
+ {
452
+ "time": 0,
453
+ "value": [
454
+ -5,
455
+ -23
456
+ ],
457
+ "out": {
458
+ "type": "graph",
459
+ "points": [
460
+ [
461
+ 0,
462
+ 0
463
+ ],
464
+ [
465
+ 1,
466
+ 1
467
+ ]
468
+ ]
469
+ }
470
+ }
471
+ ]
472
+ }
473
+ }
474
+ }
475
+ },
476
+ {
477
+ "id": "code-text",
478
+ "type": "text",
479
+ "x": 92,
480
+ "y": 582,
481
+ "text": "function validateLayout(elements) {\n const bounds = elements.map(el => getBounds(el));\n for (let i = 0; i < bounds.length; i++) {\n for (let j = i + 1; j < bounds.length; j++) {\n if (intersects(bounds[i], bounds[j])) {\n return { valid: false, collision: [i, j] };\n }\n }\n }\n return { valid: true };\n}",
482
+ "align": "left",
483
+ "valign": "top",
484
+ "fontSize": 12,
485
+ "fontFamily": "JetBrains Mono, Fira Code, monospace",
486
+ "weight": 400,
487
+ "lineHeight": 1.55,
488
+ "fill": "#e2e8f0",
489
+ "maxWidth": 816,
490
+ "timeline": {
491
+ "tracks": {
492
+ "fontFamily": {
493
+ "keyframes": [
494
+ {
495
+ "time": 0,
496
+ "value": "JetBrains Mono, Fira Code, monospace"
497
+ },
498
+ {
499
+ "time": 5.2,
500
+ "value": "JetBrains Mono, Fira Code, monospace"
501
+ }
502
+ ]
503
+ },
504
+ "position": {
505
+ "keyframes": [
506
+ {
507
+ "time": 0,
508
+ "value": [
509
+ 77,
510
+ 552
511
+ ],
512
+ "out": {
513
+ "type": "graph",
514
+ "points": [
515
+ [
516
+ 0,
517
+ 0
518
+ ],
519
+ [
520
+ 1,
521
+ 1
522
+ ]
523
+ ]
524
+ }
525
+ }
526
+ ]
527
+ }
528
+ }
529
+ }
530
+ },
531
+ {
532
+ "id": "note-text",
533
+ "type": "text",
534
+ "x": 928,
535
+ "y": 790,
536
+ "text": "Note: All measurements are in logical pixels.\nActual rendering may vary by display density.",
537
+ "align": "right",
538
+ "valign": "top",
539
+ "fontSize": 12,
540
+ "fontFamily": "Inter, system-ui, sans-serif",
541
+ "weight": 400,
542
+ "lineHeight": 1.5,
543
+ "fill": "#94a3b8",
544
+ "maxWidth": 320,
545
+ "timeline": {
546
+ "tracks": {
547
+ "fontSize": {
548
+ "keyframes": [
549
+ {
550
+ "time": 0,
551
+ "value": 12,
552
+ "out": {
553
+ "type": "cubicBezier",
554
+ "x1": 0.25,
555
+ "y1": 0.1,
556
+ "x2": 0.25,
557
+ "y2": 1
558
+ }
559
+ },
560
+ {
561
+ "time": 2.5,
562
+ "value": 14,
563
+ "out": {
564
+ "type": "cubicBezier",
565
+ "x1": 0.25,
566
+ "y1": 0.1,
567
+ "x2": 0.25,
568
+ "y2": 1
569
+ }
570
+ },
571
+ {
572
+ "time": 5.3,
573
+ "value": 12
574
+ }
575
+ ]
576
+ },
577
+ "letterSpacing": {
578
+ "keyframes": [
579
+ {
580
+ "time": 0,
581
+ "value": 0,
582
+ "out": {
583
+ "type": "cubicBezier",
584
+ "x1": 0.25,
585
+ "y1": 0.1,
586
+ "x2": 0.25,
587
+ "y2": 1
588
+ }
589
+ },
590
+ {
591
+ "time": 2.5,
592
+ "value": 1.2,
593
+ "out": {
594
+ "type": "cubicBezier",
595
+ "x1": 0.25,
596
+ "y1": 0.1,
597
+ "x2": 0.25,
598
+ "y2": 1
599
+ }
600
+ },
601
+ {
602
+ "time": 5.3,
603
+ "value": 0.2,
604
+ "out": {
605
+ "type": "cubicBezier",
606
+ "x1": 0.25,
607
+ "y1": 0.1,
608
+ "x2": 0.25,
609
+ "y2": 1
610
+ }
611
+ },
612
+ {
613
+ "time": 7.1,
614
+ "value": 0
615
+ }
616
+ ]
617
+ }
618
+ }
619
+ }
620
+ },
621
+ {
622
+ "id": "pill-bg-0",
623
+ "type": "path",
624
+ "d": "M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z",
625
+ "fill": "#f1f5f9",
626
+ "stroke": "#cbd5e1",
627
+ "strokeWidth": 1
628
+ },
629
+ {
630
+ "id": "pill-text-0",
631
+ "type": "text",
632
+ "x": 392,
633
+ "y": 856,
634
+ "text": "Centered",
635
+ "align": "center",
636
+ "valign": "middle",
637
+ "fontSize": 12,
638
+ "fontFamily": "Inter, system-ui, sans-serif",
639
+ "weight": 500,
640
+ "fill": "#475569",
641
+ "timeline": {
642
+ "tracks": {
643
+ "weight": {
644
+ "keyframes": [
645
+ {
646
+ "time": 0,
647
+ "value": 500
648
+ },
649
+ {
650
+ "time": 1.8,
651
+ "value": 700
652
+ },
653
+ {
654
+ "time": 4.1,
655
+ "value": 300
656
+ },
657
+ {
658
+ "time": 6.2,
659
+ "value": 500
660
+ }
661
+ ]
662
+ }
663
+ }
664
+ }
665
+ },
666
+ {
667
+ "id": "pill-bg-1",
668
+ "type": "path",
669
+ "d": "M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z",
670
+ "fill": "#f1f5f9",
671
+ "stroke": "#cbd5e1",
672
+ "strokeWidth": 1
673
+ },
674
+ {
675
+ "id": "pill-text-1",
676
+ "type": "text",
677
+ "x": 500,
678
+ "y": 856,
679
+ "text": "Balanced",
680
+ "align": "center",
681
+ "valign": "middle",
682
+ "fontSize": 12,
683
+ "fontFamily": "Inter, system-ui, sans-serif",
684
+ "weight": 500,
685
+ "fill": "#475569",
686
+ "timeline": {
687
+ "tracks": {
688
+ "weight": {
689
+ "keyframes": [
690
+ {
691
+ "time": 0,
692
+ "value": 500
693
+ },
694
+ {
695
+ "time": 1.98,
696
+ "value": 700
697
+ },
698
+ {
699
+ "time": 4.279999999999999,
700
+ "value": 300
701
+ },
702
+ {
703
+ "time": 6.38,
704
+ "value": 500
705
+ }
706
+ ]
707
+ }
708
+ }
709
+ }
710
+ },
711
+ {
712
+ "id": "pill-bg-2",
713
+ "type": "path",
714
+ "d": "M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z",
715
+ "fill": "#f1f5f9",
716
+ "stroke": "#cbd5e1",
717
+ "strokeWidth": 1
718
+ },
719
+ {
720
+ "id": "pill-text-2",
721
+ "type": "text",
722
+ "x": 608,
723
+ "y": 856,
724
+ "text": "Verified",
725
+ "align": "center",
726
+ "valign": "middle",
727
+ "fontSize": 12,
728
+ "fontFamily": "Inter, system-ui, sans-serif",
729
+ "weight": 500,
730
+ "fill": "#475569",
731
+ "timeline": {
732
+ "tracks": {
733
+ "weight": {
734
+ "keyframes": [
735
+ {
736
+ "time": 0,
737
+ "value": 500
738
+ },
739
+ {
740
+ "time": 2.16,
741
+ "value": 700
742
+ },
743
+ {
744
+ "time": 4.46,
745
+ "value": 300
746
+ },
747
+ {
748
+ "time": 6.5600000000000005,
749
+ "value": 500
750
+ }
751
+ ]
752
+ }
753
+ }
754
+ }
755
+ }
756
+ ]
757
+ }