@syncedco/motion 0.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 (75) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/CODE_OF_CONDUCT.md +26 -0
  3. package/CONTRIBUTING.md +100 -0
  4. package/LICENSE +22 -0
  5. package/README.md +278 -0
  6. package/SECURITY.md +36 -0
  7. package/SUPPORT.md +38 -0
  8. package/TRADEMARKS.md +14 -0
  9. package/bin/synced-motion.mjs +5 -0
  10. package/dist/astro.d.ts +15 -0
  11. package/dist/astro.js +51 -0
  12. package/dist/astro.js.map +1 -0
  13. package/dist/chunk-24KKECMK.js +281 -0
  14. package/dist/chunk-24KKECMK.js.map +1 -0
  15. package/dist/chunk-3WUVBPYX.js +162 -0
  16. package/dist/chunk-3WUVBPYX.js.map +1 -0
  17. package/dist/chunk-HCWQV65E.js +20 -0
  18. package/dist/chunk-HCWQV65E.js.map +1 -0
  19. package/dist/chunk-JET2MYEG.js +2287 -0
  20. package/dist/chunk-JET2MYEG.js.map +1 -0
  21. package/dist/chunk-KA3OPI4F.js +40 -0
  22. package/dist/chunk-KA3OPI4F.js.map +1 -0
  23. package/dist/chunk-ML7HTCZT.js +642 -0
  24. package/dist/chunk-ML7HTCZT.js.map +1 -0
  25. package/dist/chunk-NIXAEIHN.js +23 -0
  26. package/dist/chunk-NIXAEIHN.js.map +1 -0
  27. package/dist/chunk-VOIQPPQZ.js +299 -0
  28. package/dist/chunk-VOIQPPQZ.js.map +1 -0
  29. package/dist/chunk-WCG7TQSH.js +31 -0
  30. package/dist/chunk-WCG7TQSH.js.map +1 -0
  31. package/dist/cli.js +382 -0
  32. package/dist/cli.js.map +1 -0
  33. package/dist/full.d.ts +13 -0
  34. package/dist/full.js +201 -0
  35. package/dist/full.js.map +1 -0
  36. package/dist/index.d.ts +249 -0
  37. package/dist/index.js +183 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/lenis.d.ts +19 -0
  40. package/dist/lenis.js +7 -0
  41. package/dist/lenis.js.map +1 -0
  42. package/dist/mcp.d.ts +16 -0
  43. package/dist/mcp.js +82 -0
  44. package/dist/mcp.js.map +1 -0
  45. package/dist/plugins.d.ts +14 -0
  46. package/dist/plugins.js +17 -0
  47. package/dist/plugins.js.map +1 -0
  48. package/dist/react.d.ts +7 -0
  49. package/dist/react.js +32 -0
  50. package/dist/react.js.map +1 -0
  51. package/dist/recipes.d.ts +76 -0
  52. package/dist/recipes.js +129 -0
  53. package/dist/recipes.js.map +1 -0
  54. package/dist/styles.css +57 -0
  55. package/dist/styles.css.map +1 -0
  56. package/dist/svelte.d.ts +10 -0
  57. package/dist/svelte.js +30 -0
  58. package/dist/svelte.js.map +1 -0
  59. package/dist/vue.d.ts +13 -0
  60. package/dist/vue.js +35 -0
  61. package/dist/vue.js.map +1 -0
  62. package/dist/wordpress.d.ts +15 -0
  63. package/dist/wordpress.js +49 -0
  64. package/dist/wordpress.js.map +1 -0
  65. package/docs/API.md +176 -0
  66. package/docs/ATTRIBUTE-API.md +358 -0
  67. package/docs/CAPABILITIES.md +82 -0
  68. package/docs/INTEGRATIONS.md +92 -0
  69. package/docs/PERFORMANCE.md +150 -0
  70. package/docs/README.md +35 -0
  71. package/docs/RECIPE-REFERENCE.md +1358 -0
  72. package/docs/RECIPES.md +115 -0
  73. package/docs/TOOLING.md +65 -0
  74. package/docs/WEBFLOW-MIGRATION.md +39 -0
  75. package/package.json +167 -0
@@ -0,0 +1,1358 @@
1
+ <!-- Generated by scripts/build-docs.mjs. Do not edit by hand. -->
2
+ # Recipe reference
3
+
4
+ Every registered recipe, generated from the catalog so it cannot drift from the
5
+ code. 60 recipes across 12 families.
6
+
7
+ Selectors are shown with the documented `data-motion-` prefix. The original
8
+ `data-motion-` names remain fully supported.
9
+
10
+ To explore these interactively, run `npm run gallery`. To query them from a
11
+ script or an agent, use `npx synced-motion catalog --json`.
12
+
13
+ - [Reveals and entrances](#reveals-and-entrances)
14
+ - [Split text and typography](#split-text-and-typography)
15
+ - [Scroll and parallax](#scroll-and-parallax)
16
+ - [Pinned storytelling](#pinned-storytelling)
17
+ - [Horizontal galleries](#horizontal-galleries)
18
+ - [Media, mask and clip](#media-mask-and-clip)
19
+ - [Hover, focus and pointer](#hover-focus-and-pointer)
20
+ - [Navigation and overlays](#navigation-and-overlays)
21
+ - [Loops, progress and ambient](#loops-progress-and-ambient)
22
+ - [FLIP and layout](#flip-and-layout)
23
+ - [SVG, path and morph](#svg-path-and-morph)
24
+ - [Page load and routing](#page-load-and-routing)
25
+
26
+ ## Reveals and entrances
27
+
28
+ ### `reveal-rise`
29
+
30
+ Reveal content upward with opacity. Introduce an element as it enters the viewport.
31
+
32
+ - **Root:** `[data-motion-reveal]`
33
+ - **Triggers:** `viewport`
34
+ - **Performance:** medium
35
+ - **Reduced motion:** final — Preserve the authored readable final state.
36
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
37
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
38
+
39
+ _The root element is the only target._
40
+
41
+ | Parameter | Type | Default | Range |
42
+ | --- | --- | --- | --- |
43
+ | `start` | string | `"top 85%"` | — |
44
+
45
+ ```bash
46
+ npx synced-motion add reveal-rise
47
+ ```
48
+
49
+ ### `reveal-stagger-cascade`
50
+
51
+ Cascade a local group into view. Introduce related items in a readable sequence.
52
+
53
+ - **Root:** `[data-motion-stagger]`
54
+ - **Triggers:** `viewport`
55
+ - **Performance:** medium
56
+ - **Reduced motion:** final — Preserve the authored readable final state.
57
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
58
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
59
+
60
+ | Slot | Selector | Required | Count |
61
+ | --- | --- | --- | --- |
62
+ | `items` | `[data-motion-stagger-item]` | optional | many |
63
+
64
+ | Parameter | Type | Default | Range |
65
+ | --- | --- | --- | --- |
66
+ | `start` | string | `"top 85%"` | — |
67
+
68
+ ```bash
69
+ npx synced-motion add reveal-stagger-cascade
70
+ ```
71
+
72
+ ### `reveal-directional`
73
+
74
+ Reveal content from a semantic direction. Introduce content with a restrained directional offset.
75
+
76
+ - **Root:** `[data-motion-reveal-directional]`
77
+ - **Triggers:** `viewport`
78
+ - **Performance:** medium
79
+ - **Reduced motion:** final — Preserve the authored readable final state.
80
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
81
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
82
+
83
+ _The root element is the only target._
84
+
85
+ _No parameters._
86
+
87
+ ```bash
88
+ npx synced-motion add reveal-directional
89
+ ```
90
+
91
+ ### `reveal-scale-in`
92
+
93
+ Gently scale and fade a focal element into view. Introduce a focal card or media element without changing layout.
94
+
95
+ - **Root:** `[data-motion-reveal-scale]`
96
+ - **Triggers:** `viewport`
97
+ - **Performance:** medium
98
+ - **Reduced motion:** final — Preserve the authored readable final state.
99
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
100
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
101
+
102
+ _The root element is the only target._
103
+
104
+ _No parameters._
105
+
106
+ ```bash
107
+ npx synced-motion add reveal-scale-in
108
+ ```
109
+
110
+ ### `reveal-clip-wipe`
111
+
112
+ Reveal content through a bounded inline clip. Uncover media or editorial content with a directional wipe.
113
+
114
+ - **Root:** `[data-motion-reveal-clip]`
115
+ - **Triggers:** `viewport`
116
+ - **Performance:** medium
117
+ - **Reduced motion:** final — Preserve the authored readable final state.
118
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
119
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
120
+
121
+ | Slot | Selector | Required | Count |
122
+ | --- | --- | --- | --- |
123
+ | `content` | `[data-motion-reveal-clip-content]` | optional | one |
124
+
125
+ _No parameters._
126
+
127
+ ```bash
128
+ npx synced-motion add reveal-clip-wipe
129
+ ```
130
+
131
+ ## Split text and typography
132
+
133
+ ### `split-lines-rise`
134
+
135
+ Split text into responsive lines and reveal it. Give editorial headings a line-by-line entrance.
136
+
137
+ > **Needs SplitText.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
138
+
139
+ - **Root:** `[data-motion-split="lines"]`
140
+ - **Triggers:** `viewport`
141
+ - **Performance:** medium
142
+ - **Reduced motion:** final — Preserve the authored readable final state.
143
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
144
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
145
+
146
+ _The root element is the only target._
147
+
148
+ | Parameter | Type | Default | Range |
149
+ | --- | --- | --- | --- |
150
+ | `start` | string | `"top 85%"` | — |
151
+
152
+ ```bash
153
+ npx synced-motion add split-lines-rise
154
+ ```
155
+
156
+ ### `split-words-cascade`
157
+
158
+ Split text into words and stagger its entrance. Emphasize a statement word by word.
159
+
160
+ > **Needs SplitText.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
161
+
162
+ - **Root:** `[data-motion-split="words"]`
163
+ - **Triggers:** `viewport`
164
+ - **Performance:** medium
165
+ - **Reduced motion:** final — Preserve the authored readable final state.
166
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
167
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
168
+
169
+ _The root element is the only target._
170
+
171
+ | Parameter | Type | Default | Range |
172
+ | --- | --- | --- | --- |
173
+ | `start` | string | `"top 85%"` | — |
174
+
175
+ ```bash
176
+ npx synced-motion add split-words-cascade
177
+ ```
178
+
179
+ ### `split-chars-shimmer`
180
+
181
+ Reveal a statement through a restrained character cascade. Add character-level rhythm to short display text.
182
+
183
+ > **Needs SplitText.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
184
+
185
+ - **Root:** `[data-motion-chars-shimmer]`
186
+ - **Triggers:** `viewport`
187
+ - **Performance:** medium
188
+ - **Reduced motion:** final — Preserve the authored readable final state.
189
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
190
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
191
+
192
+ _The root element is the only target._
193
+
194
+ _No parameters._
195
+
196
+ ```bash
197
+ npx synced-motion add split-chars-shimmer
198
+ ```
199
+
200
+ ### `typewriter-announce`
201
+
202
+ Progressively reveal a short announcement while retaining complete accessible text. Give a short label or announcement a typed entrance.
203
+
204
+ > **Needs SplitText.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
205
+
206
+ - **Root:** `[data-motion-typewriter]`
207
+ - **Triggers:** `viewport`, `load`
208
+ - **Performance:** medium
209
+ - **Reduced motion:** final — Preserve the authored readable final state.
210
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
211
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
212
+
213
+ _The root element is the only target._
214
+
215
+ _No parameters._
216
+
217
+ ```bash
218
+ npx synced-motion add typewriter-announce
219
+ ```
220
+
221
+ ### `text-highlight-sweep`
222
+
223
+ Sweep a visual highlight behind readable text. Emphasize a phrase without replacing its semantic text.
224
+
225
+ - **Root:** `[data-motion-text-highlight]`
226
+ - **Triggers:** `viewport`
227
+ - **Performance:** medium
228
+ - **Reduced motion:** final — Preserve the authored readable final state.
229
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
230
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
231
+
232
+ | Slot | Selector | Required | Count |
233
+ | --- | --- | --- | --- |
234
+ | `mark` | `[data-motion-text-highlight-mark]` | required | one |
235
+
236
+ _No parameters._
237
+
238
+ ```bash
239
+ npx synced-motion add text-highlight-sweep
240
+ ```
241
+
242
+ ## Scroll and parallax
243
+
244
+ ### `scroll-parallax`
245
+
246
+ Scrub a decorative layer against page movement. Add depth to a scene without changing its reading order.
247
+
248
+ - **Root:** `[data-motion-parallax]`
249
+ - **Triggers:** `scroll`
250
+ - **Performance:** medium
251
+ - **Reduced motion:** final — Preserve the authored readable final state.
252
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
253
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
254
+
255
+ _The root element is the only target._
256
+
257
+ _No parameters._
258
+
259
+ ```bash
260
+ npx synced-motion add scroll-parallax
261
+ ```
262
+
263
+ ### `scroll-exit`
264
+
265
+ Move and fade content as its scene leaves. Resolve a section as the next one takes focus.
266
+
267
+ - **Root:** `[data-motion-scroll-exit]`
268
+ - **Triggers:** `scroll`
269
+ - **Performance:** medium
270
+ - **Reduced motion:** final — Preserve the authored readable final state.
271
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
272
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
273
+
274
+ _The root element is the only target._
275
+
276
+ _No parameters._
277
+
278
+ ```bash
279
+ npx synced-motion add scroll-exit
280
+ ```
281
+
282
+ ### `scroll-drift`
283
+
284
+ Drift a decorative layer through a bounded scene. Create subtle scroll-linked atmosphere.
285
+
286
+ - **Root:** `[data-motion-scroll-drift]`
287
+ - **Triggers:** `scroll`
288
+ - **Performance:** medium
289
+ - **Reduced motion:** final — Preserve the authored readable final state.
290
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
291
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
292
+
293
+ | Slot | Selector | Required | Count |
294
+ | --- | --- | --- | --- |
295
+ | `layer` | `[data-motion-drift-layer]` | required | one |
296
+
297
+ _No parameters._
298
+
299
+ ```bash
300
+ npx synced-motion add scroll-drift
301
+ ```
302
+
303
+ ### `scroll-progress-meter`
304
+
305
+ Map local reading progress to a nonessential indicator. Show progress through a long section without controlling navigation.
306
+
307
+ - **Root:** `[data-motion-scroll-progress]`
308
+ - **Triggers:** `scroll`
309
+ - **Performance:** low
310
+ - **Reduced motion:** final — Preserve the authored readable final state.
311
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
312
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
313
+
314
+ | Slot | Selector | Required | Count |
315
+ | --- | --- | --- | --- |
316
+ | `meter` | `[data-motion-scroll-progress-meter]` | required | one |
317
+ | `label` | `[data-motion-scroll-progress-label]` | optional | one |
318
+
319
+ _No parameters._
320
+
321
+ ```bash
322
+ npx synced-motion add scroll-progress-meter
323
+ ```
324
+
325
+ ### `scroll-depth-stack`
326
+
327
+ Introduce stacked cards with restrained depth. Give a grouped card stack depth as it enters the viewport.
328
+
329
+ - **Root:** `[data-motion-scroll-depth-stack]`
330
+ - **Triggers:** `viewport`
331
+ - **Performance:** medium
332
+ - **Reduced motion:** final — Preserve the authored readable final state.
333
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
334
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
335
+
336
+ | Slot | Selector | Required | Count |
337
+ | --- | --- | --- | --- |
338
+ | `cards` | `[data-motion-depth-card]` | required | many |
339
+
340
+ _No parameters._
341
+
342
+ ```bash
343
+ npx synced-motion add scroll-depth-stack
344
+ ```
345
+
346
+ ## Pinned storytelling
347
+
348
+ ### `pinned-steps`
349
+
350
+ Pin a narrative and activate linked panels by scroll progress. Turn sequential content into a controlled scroll story.
351
+
352
+ - **Root:** `[data-motion-scroll-steps]`
353
+ - **Triggers:** `scroll`
354
+ - **Performance:** high
355
+ - **Reduced motion:** final — Preserve the authored readable final state.
356
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
357
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
358
+
359
+ | Slot | Selector | Required | Count |
360
+ | --- | --- | --- | --- |
361
+ | `pin` | `[data-motion-pin-target]` | required | one |
362
+ | `links` | `[data-motion-step-link]` | required | many |
363
+ | `panels` | `[data-motion-step-panel]` | required | many |
364
+
365
+ _No parameters._
366
+
367
+ ```bash
368
+ npx synced-motion add pinned-steps
369
+ ```
370
+
371
+ ### `pinned-statement`
372
+
373
+ Transform an oversized accent into a complete statement. Reveal a large editorial message through scroll.
374
+
375
+ - **Root:** `[data-motion-scroll-statement]`
376
+ - **Triggers:** `scroll`
377
+ - **Performance:** high
378
+ - **Reduced motion:** final — Preserve the authored readable final state.
379
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
380
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
381
+
382
+ | Slot | Selector | Required | Count |
383
+ | --- | --- | --- | --- |
384
+ | `pin` | `[data-motion-statement-pin]` | required | one |
385
+ | `heading` | `[data-motion-statement-heading]` | required | one |
386
+ | `details` | `[data-motion-statement-details]` | required | one |
387
+
388
+ _No parameters._
389
+
390
+ ```bash
391
+ npx synced-motion add pinned-statement
392
+ ```
393
+
394
+ ### `pinned-founder-story`
395
+
396
+ Sequence an editorial story into a metrics scene. Tell a long-form story through coordinated pinned states.
397
+
398
+ > **Needs SplitText.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
399
+
400
+ - **Root:** `[data-motion-founder-scene]`
401
+ - **Triggers:** `scroll`
402
+ - **Performance:** high
403
+ - **Reduced motion:** final — Preserve the authored readable final state.
404
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
405
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
406
+
407
+ | Slot | Selector | Required | Count |
408
+ | --- | --- | --- | --- |
409
+ | `content` | `[data-motion-founder-content]` | required | one |
410
+ | `heading` | `[data-motion-founder-heading]` | required | one |
411
+ | `metrics` | `[data-motion-founder-metrics]` | required | one |
412
+
413
+ _No parameters._
414
+
415
+ ```bash
416
+ npx synced-motion add pinned-founder-story
417
+ ```
418
+
419
+ ### `pinned-chapter-crossfade`
420
+
421
+ Advance narrative chapters around a stable visual anchor. Tell a chaptered story while a visual remains pinned.
422
+
423
+ - **Root:** `[data-motion-pinned-chapters]`
424
+ - **Triggers:** `scroll`
425
+ - **Performance:** high
426
+ - **Reduced motion:** final — Preserve the authored readable final state.
427
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
428
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
429
+
430
+ | Slot | Selector | Required | Count |
431
+ | --- | --- | --- | --- |
432
+ | `pin` | `[data-motion-pin-target]` | required | one |
433
+ | `chapters` | `[data-motion-pinned-chapter]` | required | many |
434
+ | `visuals` | `[data-motion-pinned-visual]` | required | many |
435
+
436
+ _No parameters._
437
+
438
+ ```bash
439
+ npx synced-motion add pinned-chapter-crossfade
440
+ ```
441
+
442
+ ### `pinned-product-explainer`
443
+
444
+ Coordinate product steps with a stable media region. Explain product states in a controlled scroll sequence.
445
+
446
+ - **Root:** `[data-motion-product-explainer]`
447
+ - **Triggers:** `scroll`
448
+ - **Performance:** high
449
+ - **Reduced motion:** final — Preserve the authored readable final state.
450
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
451
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
452
+
453
+ | Slot | Selector | Required | Count |
454
+ | --- | --- | --- | --- |
455
+ | `pin` | `[data-motion-pin-target]` | required | one |
456
+ | `steps` | `[data-motion-product-step]` | required | many |
457
+ | `media` | `[data-motion-product-media]` | required | many |
458
+
459
+ _No parameters._
460
+
461
+ ```bash
462
+ npx synced-motion add pinned-product-explainer
463
+ ```
464
+
465
+ ## Horizontal galleries
466
+
467
+ ### `horizontal-gallery-scrub`
468
+
469
+ Translate a native row through a pinned viewport. Explore an editorial card gallery through vertical scroll.
470
+
471
+ - **Root:** `[data-motion-horizontal-gallery]`
472
+ - **Triggers:** `scroll`
473
+ - **Performance:** high
474
+ - **Reduced motion:** final — Preserve the authored readable final state.
475
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
476
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
477
+
478
+ | Slot | Selector | Required | Count |
479
+ | --- | --- | --- | --- |
480
+ | `track` | `[data-motion-horizontal-track]` | required | one |
481
+ | `cards` | `[data-motion-horizontal-card]` | required | many |
482
+
483
+ _No parameters._
484
+
485
+ ```bash
486
+ npx synced-motion add horizontal-gallery-scrub
487
+ ```
488
+
489
+ ### `horizontal-gallery-snap`
490
+
491
+ Scrub and snap a horizontal card gallery. Create clear chapter stops inside a horizontal scroll scene.
492
+
493
+ - **Root:** `[data-motion-horizontal-snap]`
494
+ - **Triggers:** `scroll`
495
+ - **Performance:** high
496
+ - **Reduced motion:** final — Preserve the authored readable final state.
497
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
498
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
499
+
500
+ | Slot | Selector | Required | Count |
501
+ | --- | --- | --- | --- |
502
+ | `track` | `[data-motion-horizontal-track]` | required | one |
503
+ | `cards` | `[data-motion-horizontal-card]` | required | many |
504
+
505
+ _No parameters._
506
+
507
+ ```bash
508
+ npx synced-motion add horizontal-gallery-snap
509
+ ```
510
+
511
+ ### `horizontal-feature-rail`
512
+
513
+ Move a feature rail and synchronize semantic active states. Present features as an active horizontal editorial sequence.
514
+
515
+ - **Root:** `[data-motion-horizontal-feature-rail]`
516
+ - **Triggers:** `scroll`
517
+ - **Performance:** high
518
+ - **Reduced motion:** final — Preserve the authored readable final state.
519
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
520
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
521
+
522
+ | Slot | Selector | Required | Count |
523
+ | --- | --- | --- | --- |
524
+ | `track` | `[data-motion-horizontal-track]` | required | one |
525
+ | `cards` | `[data-motion-horizontal-card]` | required | many |
526
+ | `labels` | `[data-motion-horizontal-label]` | optional | many |
527
+
528
+ _No parameters._
529
+
530
+ ```bash
531
+ npx synced-motion add horizontal-feature-rail
532
+ ```
533
+
534
+ ### `horizontal-logo-reel`
535
+
536
+ Move partner or case-study marks through a bounded region. Add scroll-linked movement to a readable logo list.
537
+
538
+ - **Root:** `[data-motion-horizontal-logo-reel]`
539
+ - **Triggers:** `scroll`
540
+ - **Performance:** medium
541
+ - **Reduced motion:** final — Preserve the authored readable final state.
542
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
543
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
544
+
545
+ | Slot | Selector | Required | Count |
546
+ | --- | --- | --- | --- |
547
+ | `track` | `[data-motion-horizontal-track]` | required | one |
548
+
549
+ _No parameters._
550
+
551
+ ```bash
552
+ npx synced-motion add horizontal-logo-reel
553
+ ```
554
+
555
+ ### `horizontal-comparison-slider`
556
+
557
+ Reveal equivalent media states with a native range input. Compare before and after media with pointer and keyboard control.
558
+
559
+ - **Root:** `[data-motion-comparison]`
560
+ - **Triggers:** `pointer`, `focus`
561
+ - **Performance:** medium
562
+ - **Reduced motion:** final — Preserve the authored readable final state.
563
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
564
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
565
+
566
+ | Slot | Selector | Required | Count |
567
+ | --- | --- | --- | --- |
568
+ | `after` | `[data-motion-comparison-after]` | required | one |
569
+ | `range` | `[data-motion-comparison-range]` | required | one |
570
+
571
+ _No parameters._
572
+
573
+ ```bash
574
+ npx synced-motion add horizontal-comparison-slider
575
+ ```
576
+
577
+ ## Media, mask and clip
578
+
579
+ ### `media-expand`
580
+
581
+ Expand cropped media while preserving its caption and labels. Turn a compact media preview into an immersive scene.
582
+
583
+ - **Root:** `[data-motion-media-expand]`
584
+ - **Triggers:** `scroll`
585
+ - **Performance:** high
586
+ - **Reduced motion:** final — Preserve the authored readable final state.
587
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
588
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
589
+
590
+ | Slot | Selector | Required | Count |
591
+ | --- | --- | --- | --- |
592
+ | `frame` | `[data-motion-media-expand-frame]` | required | one |
593
+ | `caption` | `[data-motion-media-expand-caption]` | optional | one |
594
+
595
+ _No parameters._
596
+
597
+ ```bash
598
+ npx synced-motion add media-expand
599
+ ```
600
+
601
+ ### `media-clip-reveal`
602
+
603
+ Reveal media through a bounded inline clip. Uncover media without changing its layout box.
604
+
605
+ - **Root:** `[data-motion-media-clip]`
606
+ - **Triggers:** `viewport`
607
+ - **Performance:** medium
608
+ - **Reduced motion:** final — Preserve the authored readable final state.
609
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
610
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
611
+
612
+ | Slot | Selector | Required | Count |
613
+ | --- | --- | --- | --- |
614
+ | `frame` | `[data-motion-media-frame]` | optional | one |
615
+
616
+ _No parameters._
617
+
618
+ ```bash
619
+ npx synced-motion add media-clip-reveal
620
+ ```
621
+
622
+ ### `media-curtain-split`
623
+
624
+ Open two decorative curtains around media. Stage an editorial media reveal with paired curtains.
625
+
626
+ - **Root:** `[data-motion-media-curtain]`
627
+ - **Triggers:** `viewport`
628
+ - **Performance:** medium
629
+ - **Reduced motion:** final — Preserve the authored readable final state.
630
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
631
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
632
+
633
+ | Slot | Selector | Required | Count |
634
+ | --- | --- | --- | --- |
635
+ | `start` | `[data-motion-curtain-start]` | required | one |
636
+ | `end` | `[data-motion-curtain-end]` | required | one |
637
+
638
+ _No parameters._
639
+
640
+ ```bash
641
+ npx synced-motion add media-curtain-split
642
+ ```
643
+
644
+ ### `image-focus-pan`
645
+
646
+ Scrub a restrained image focal movement through a scene. Add depth to decorative media while retaining its authored focal point.
647
+
648
+ - **Root:** `[data-motion-image-focus-pan]`
649
+ - **Triggers:** `scroll`
650
+ - **Performance:** medium
651
+ - **Reduced motion:** final — Preserve the authored readable final state.
652
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
653
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
654
+
655
+ | Slot | Selector | Required | Count |
656
+ | --- | --- | --- | --- |
657
+ | `image` | `[data-motion-focus-image]` | optional | one |
658
+
659
+ _No parameters._
660
+
661
+ ```bash
662
+ npx synced-motion add image-focus-pan
663
+ ```
664
+
665
+ ### `video-poster-play`
666
+
667
+ Transition a poster into native video playback. Start an accessible controlled video from a poster action.
668
+
669
+ - **Root:** `[data-motion-video-poster]`
670
+ - **Triggers:** `click`
671
+ - **Performance:** medium
672
+ - **Reduced motion:** final — Preserve the authored readable final state.
673
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
674
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
675
+
676
+ | Slot | Selector | Required | Count |
677
+ | --- | --- | --- | --- |
678
+ | `trigger` | `[data-motion-video-trigger]` | required | one |
679
+ | `video` | `[data-motion-video-element]` | required | one |
680
+
681
+ _No parameters._
682
+
683
+ ```bash
684
+ npx synced-motion add video-poster-play
685
+ ```
686
+
687
+ ## Hover, focus and pointer
688
+
689
+ ### `hover-media-switch`
690
+
691
+ Synchronize pointer and keyboard focus with media state. Preview related media from a semantic list of triggers.
692
+
693
+ - **Root:** `[data-motion-hover-group]`
694
+ - **Triggers:** `hover`, `focus`
695
+ - **Performance:** low
696
+ - **Reduced motion:** final — Preserve the authored readable final state.
697
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
698
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
699
+
700
+ | Slot | Selector | Required | Count |
701
+ | --- | --- | --- | --- |
702
+ | `triggers` | `[data-motion-hover-key]` | required | many |
703
+ | `media` | `[data-motion-hover-media]` | required | many |
704
+
705
+ _No parameters._
706
+
707
+ ```bash
708
+ npx synced-motion add hover-media-switch
709
+ ```
710
+
711
+ ### `expand-panels`
712
+
713
+ Expand one panel from pointer or keyboard focus. Explore a compact group while keeping every panel accessible.
714
+
715
+ - **Root:** `[data-motion-expand-group]`
716
+ - **Triggers:** `hover`, `focus`
717
+ - **Performance:** low
718
+ - **Reduced motion:** final — Preserve the authored readable final state.
719
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
720
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
721
+
722
+ | Slot | Selector | Required | Count |
723
+ | --- | --- | --- | --- |
724
+ | `panels` | `[data-motion-expand-panel]` | required | many |
725
+
726
+ _No parameters._
727
+
728
+ ```bash
729
+ npx synced-motion add expand-panels
730
+ ```
731
+
732
+ ### `hover-lift`
733
+
734
+ Lift a self-contained item on pointer hover or keyboard focus. Give a card or action restrained responsive feedback.
735
+
736
+ - **Root:** `[data-motion-hover-lift]`
737
+ - **Triggers:** `hover`, `focus`
738
+ - **Performance:** low
739
+ - **Reduced motion:** final — Preserve the authored readable final state.
740
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
741
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
742
+
743
+ _The root element is the only target._
744
+
745
+ _No parameters._
746
+
747
+ ```bash
748
+ npx synced-motion add hover-lift
749
+ ```
750
+
751
+ ### `magnetic-action`
752
+
753
+ Draw an action gently toward a fine pointer. Add fine-pointer feedback without changing button semantics.
754
+
755
+ - **Root:** `[data-motion-magnetic]`
756
+ - **Triggers:** `pointer`
757
+ - **Performance:** medium
758
+ - **Reduced motion:** final — Preserve the authored readable final state.
759
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
760
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
761
+
762
+ | Slot | Selector | Required | Count |
763
+ | --- | --- | --- | --- |
764
+ | `action` | `[data-motion-magnetic-action]` | optional | one |
765
+
766
+ _No parameters._
767
+
768
+ ```bash
769
+ npx synced-motion add magnetic-action
770
+ ```
771
+
772
+ ### `pointer-spotlight`
773
+
774
+ Move a decorative spotlight inside a bounded region. Add local pointer atmosphere without affecting interaction.
775
+
776
+ - **Root:** `[data-motion-pointer-spotlight]`
777
+ - **Triggers:** `pointer`
778
+ - **Performance:** medium
779
+ - **Reduced motion:** final — Preserve the authored readable final state.
780
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
781
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
782
+
783
+ | Slot | Selector | Required | Count |
784
+ | --- | --- | --- | --- |
785
+ | `spotlight` | `[data-motion-spotlight]` | required | one |
786
+
787
+ _No parameters._
788
+
789
+ ```bash
790
+ npx synced-motion add pointer-spotlight
791
+ ```
792
+
793
+ ## Navigation and overlays
794
+
795
+ ### `accessible-menu`
796
+
797
+ Animate a controlled menu without weakening its keyboard behavior. Open and close a navigation overlay with managed focus.
798
+
799
+ - **Root:** `[data-motion-menu]`
800
+ - **Triggers:** `click`, `focus`
801
+ - **Performance:** medium
802
+ - **Reduced motion:** final — Preserve the authored readable final state.
803
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
804
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
805
+
806
+ | Slot | Selector | Required | Count |
807
+ | --- | --- | --- | --- |
808
+ | `trigger` | `[data-motion-menu-trigger]` | required | one |
809
+ | `panel` | `[data-motion-menu-panel]` | required | one |
810
+ | `items` | `[data-motion-menu-item]` | required | many |
811
+
812
+ _No parameters._
813
+
814
+ ```bash
815
+ npx synced-motion add accessible-menu
816
+ ```
817
+
818
+ ### `dialog-overlay`
819
+
820
+ Present a native dialog with a restrained entrance and focus return. Open modal content without replacing native dialog semantics.
821
+
822
+ - **Root:** `[data-motion-dialog-overlay]`
823
+ - **Triggers:** `click`, `focus`
824
+ - **Performance:** medium
825
+ - **Reduced motion:** final — Preserve the authored readable final state.
826
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
827
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
828
+
829
+ | Slot | Selector | Required | Count |
830
+ | --- | --- | --- | --- |
831
+ | `trigger` | `[data-motion-overlay-trigger]` | optional | one |
832
+ | `dialog` | `[data-motion-overlay-dialog]` | required | one |
833
+
834
+ _No parameters._
835
+
836
+ ```bash
837
+ npx synced-motion add dialog-overlay
838
+ ```
839
+
840
+ ### `nav-active-indicator`
841
+
842
+ Move a visual indicator between semantic navigation items. Reinforce current and focused navigation state.
843
+
844
+ - **Root:** `[data-motion-nav-indicator]`
845
+ - **Triggers:** `focus`, `pointer`, `click`
846
+ - **Performance:** medium
847
+ - **Reduced motion:** final — Preserve the authored readable final state.
848
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
849
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
850
+
851
+ | Slot | Selector | Required | Count |
852
+ | --- | --- | --- | --- |
853
+ | `items` | `[data-motion-nav-item]` | required | many |
854
+ | `indicator` | `[data-motion-nav-active-indicator]` | required | one |
855
+
856
+ _No parameters._
857
+
858
+ ```bash
859
+ npx synced-motion add nav-active-indicator
860
+ ```
861
+
862
+ ### `accordion-disclosure`
863
+
864
+ Animate native disclosure content with transform and opacity. Give a native accordion restrained open-state feedback.
865
+
866
+ - **Root:** `[data-motion-accordion-motion]`
867
+ - **Triggers:** `click`
868
+ - **Performance:** low
869
+ - **Reduced motion:** final — Preserve the authored readable final state.
870
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
871
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
872
+
873
+ | Slot | Selector | Required | Count |
874
+ | --- | --- | --- | --- |
875
+ | `panel` | `[data-motion-accordion-panel]` | required | one |
876
+
877
+ _No parameters._
878
+
879
+ ```bash
880
+ npx synced-motion add accordion-disclosure
881
+ ```
882
+
883
+ ### `command-palette`
884
+
885
+ Open a searchable native dialog from a trigger or keyboard shortcut. Provide a fast keyboard-accessible command surface.
886
+
887
+ - **Root:** `[data-motion-command-palette]`
888
+ - **Triggers:** `click`, `focus`
889
+ - **Performance:** medium
890
+ - **Reduced motion:** final — Preserve the authored readable final state.
891
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
892
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
893
+
894
+ | Slot | Selector | Required | Count |
895
+ | --- | --- | --- | --- |
896
+ | `dialog` | `[data-motion-overlay-dialog]` | required | one |
897
+ | `input` | `[data-motion-command-input]` | required | one |
898
+
899
+ _No parameters._
900
+
901
+ ```bash
902
+ npx synced-motion add command-palette
903
+ ```
904
+
905
+ ## Loops, progress and ambient
906
+
907
+ ### `marquee`
908
+
909
+ Run a seamless transform driven content loop. Create a pauseable, reduced-motion-safe horizontal loop.
910
+
911
+ - **Root:** `[data-motion-marquee]`
912
+ - **Triggers:** `load`, `viewport`
913
+ - **Performance:** medium
914
+ - **Reduced motion:** final — Preserve the authored readable final state.
915
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
916
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
917
+
918
+ | Slot | Selector | Required | Count |
919
+ | --- | --- | --- | --- |
920
+ | `track` | `[data-motion-marquee-track]` | required | one |
921
+
922
+ _No parameters._
923
+
924
+ ```bash
925
+ npx synced-motion add marquee
926
+ ```
927
+
928
+ ### `counter-value`
929
+
930
+ Count a readable value toward its authored result. Emphasize a metric without replacing its accessible output.
931
+
932
+ - **Root:** `[data-motion-counter]`
933
+ - **Triggers:** `viewport`
934
+ - **Performance:** medium
935
+ - **Reduced motion:** final — Preserve the authored readable final state.
936
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
937
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
938
+
939
+ | Slot | Selector | Required | Count |
940
+ | --- | --- | --- | --- |
941
+ | `value` | `[data-motion-counter-value]` | optional | one |
942
+
943
+ _No parameters._
944
+
945
+ ```bash
946
+ npx synced-motion add counter-value
947
+ ```
948
+
949
+ ### `progress-ring`
950
+
951
+ Draw an SVG progress ring to a bounded value. Show nonessential progress with a readable text equivalent.
952
+
953
+ > **Needs DrawSVGPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
954
+
955
+ - **Root:** `[data-motion-progress-ring]`
956
+ - **Triggers:** `viewport`
957
+ - **Performance:** medium
958
+ - **Reduced motion:** final — Preserve the authored readable final state.
959
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
960
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
961
+
962
+ | Slot | Selector | Required | Count |
963
+ | --- | --- | --- | --- |
964
+ | `ring` | `[data-motion-progress-ring-value]` | required | one |
965
+ | `label` | `[data-motion-progress-ring-label]` | optional | one |
966
+
967
+ _No parameters._
968
+
969
+ ```bash
970
+ npx synced-motion add progress-ring
971
+ ```
972
+
973
+ ### `ambient-float`
974
+
975
+ Float a decorative element while it is in view. Add restrained ambient movement without changing layout.
976
+
977
+ - **Root:** `[data-motion-ambient-float]`
978
+ - **Triggers:** `viewport`
979
+ - **Performance:** medium
980
+ - **Reduced motion:** final — Preserve the authored readable final state.
981
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
982
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
983
+
984
+ _The root element is the only target._
985
+
986
+ _No parameters._
987
+
988
+ ```bash
989
+ npx synced-motion add ambient-float
990
+ ```
991
+
992
+ ### `looping-logo-belt`
993
+
994
+ Loop a duplicated logo track with viewport pausing. Present partner marks in a continuous reduced-motion-safe belt.
995
+
996
+ - **Root:** `[data-motion-logo-belt]`
997
+ - **Triggers:** `load`, `viewport`
998
+ - **Performance:** medium
999
+ - **Reduced motion:** final — Preserve the authored readable final state.
1000
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1001
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1002
+
1003
+ | Slot | Selector | Required | Count |
1004
+ | --- | --- | --- | --- |
1005
+ | `track` | `[data-motion-logo-belt-track]` | required | one |
1006
+
1007
+ _No parameters._
1008
+
1009
+ ```bash
1010
+ npx synced-motion add looping-logo-belt
1011
+ ```
1012
+
1013
+ ## FLIP and layout
1014
+
1015
+ ### `flip-list-reorder`
1016
+
1017
+ Animate application-owned list reordering through FLIP. Preserve spatial context when a semantic list changes order.
1018
+
1019
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1020
+
1021
+ - **Root:** `[data-motion-flip-list]`
1022
+ - **Triggers:** `state`
1023
+ - **Performance:** high
1024
+ - **Reduced motion:** final — Preserve the authored readable final state.
1025
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1026
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1027
+
1028
+ | Slot | Selector | Required | Count |
1029
+ | --- | --- | --- | --- |
1030
+ | `items` | `[data-motion-flip-item]` | required | many |
1031
+
1032
+ _No parameters._
1033
+
1034
+ ```bash
1035
+ npx synced-motion add flip-list-reorder
1036
+ ```
1037
+
1038
+ ### `flip-card-to-detail`
1039
+
1040
+ Expand a card detail while retaining spatial continuity. Reveal card detail from a native action without disorienting layout jumps.
1041
+
1042
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1043
+
1044
+ - **Root:** `[data-motion-flip-card]`
1045
+ - **Triggers:** `click`
1046
+ - **Performance:** high
1047
+ - **Reduced motion:** final — Preserve the authored readable final state.
1048
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1049
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1050
+
1051
+ | Slot | Selector | Required | Count |
1052
+ | --- | --- | --- | --- |
1053
+ | `trigger` | `[data-motion-flip-card-trigger]` | required | one |
1054
+ | `detail` | `[data-motion-flip-card-detail]` | required | one |
1055
+
1056
+ _No parameters._
1057
+
1058
+ ```bash
1059
+ npx synced-motion add flip-card-to-detail
1060
+ ```
1061
+
1062
+ ### `flip-filter-grid`
1063
+
1064
+ Animate a semantic filtered grid between result sets. Keep items spatially understandable while native filter controls update results.
1065
+
1066
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1067
+
1068
+ - **Root:** `[data-motion-flip-filter]`
1069
+ - **Triggers:** `click`
1070
+ - **Performance:** high
1071
+ - **Reduced motion:** final — Preserve the authored readable final state.
1072
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1073
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1074
+
1075
+ | Slot | Selector | Required | Count |
1076
+ | --- | --- | --- | --- |
1077
+ | `controls` | `[data-motion-filter-control]` | required | many |
1078
+ | `items` | `[data-motion-filter-item]` | required | many |
1079
+
1080
+ _No parameters._
1081
+
1082
+ ```bash
1083
+ npx synced-motion add flip-filter-grid
1084
+ ```
1085
+
1086
+ ### `flip-nav-indicator`
1087
+
1088
+ Move an inert indicator between semantic navigation items. Reinforce navigation focus and current state without changing semantics.
1089
+
1090
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1091
+
1092
+ - **Root:** `[data-motion-flip-nav]`
1093
+ - **Triggers:** `focus`, `click`
1094
+ - **Performance:** medium
1095
+ - **Reduced motion:** final — Preserve the authored readable final state.
1096
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1097
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1098
+
1099
+ | Slot | Selector | Required | Count |
1100
+ | --- | --- | --- | --- |
1101
+ | `items` | `[data-motion-flip-nav-item]` | required | many |
1102
+ | `indicator` | `[data-motion-flip-nav-indicator]` | required | one |
1103
+
1104
+ _No parameters._
1105
+
1106
+ ```bash
1107
+ npx synced-motion add flip-nav-indicator
1108
+ ```
1109
+
1110
+ ### `layout-accordion-grid`
1111
+
1112
+ Animate one expanded grid item while controls retain native semantics. Explore dense content with clear spatial continuity.
1113
+
1114
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1115
+
1116
+ - **Root:** `[data-motion-layout-accordion-grid]`
1117
+ - **Triggers:** `click`
1118
+ - **Performance:** high
1119
+ - **Reduced motion:** final — Preserve the authored readable final state.
1120
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1121
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1122
+
1123
+ | Slot | Selector | Required | Count |
1124
+ | --- | --- | --- | --- |
1125
+ | `items` | `[data-motion-layout-item]` | required | many |
1126
+ | `triggers` | `[data-motion-layout-trigger]` | required | many |
1127
+
1128
+ _No parameters._
1129
+
1130
+ ```bash
1131
+ npx synced-motion add layout-accordion-grid
1132
+ ```
1133
+
1134
+ ## SVG, path and morph
1135
+
1136
+ ### `svg-line-draw`
1137
+
1138
+ Draw stroked SVG geometry as it enters the viewport. Introduce explanatory line art without hiding its meaning.
1139
+
1140
+ > **Needs DrawSVGPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1141
+
1142
+ - **Root:** `[data-motion-svg-line-draw]`
1143
+ - **Triggers:** `viewport`
1144
+ - **Performance:** medium
1145
+ - **Reduced motion:** final — Preserve the authored readable final state.
1146
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1147
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1148
+
1149
+ _The root element is the only target._
1150
+
1151
+ _No parameters._
1152
+
1153
+ ```bash
1154
+ npx synced-motion add svg-line-draw
1155
+ ```
1156
+
1157
+ ### `svg-path-morph`
1158
+
1159
+ Morph between compatible SVG path states from a native action. Show a meaningful visual state change in a compact illustration.
1160
+
1161
+ > **Needs MorphSVGPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1162
+
1163
+ - **Root:** `[data-motion-svg-morph]`
1164
+ - **Triggers:** `click`
1165
+ - **Performance:** medium
1166
+ - **Reduced motion:** final — Preserve the authored readable final state.
1167
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1168
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1169
+
1170
+ | Slot | Selector | Required | Count |
1171
+ | --- | --- | --- | --- |
1172
+ | `source` | `[data-motion-svg-morph-source]` | required | one |
1173
+ | `target` | `[data-motion-svg-morph-target]` | required | one |
1174
+ | `trigger` | `[data-motion-svg-trigger]` | required | one |
1175
+
1176
+ _No parameters._
1177
+
1178
+ ```bash
1179
+ npx synced-motion add svg-path-morph
1180
+ ```
1181
+
1182
+ ### `svg-icon-state`
1183
+
1184
+ Morph a controlled icon between two pressed states. Reinforce a button state without replacing its accessible name.
1185
+
1186
+ > **Needs MorphSVGPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1187
+
1188
+ - **Root:** `[data-motion-svg-icon-state]`
1189
+ - **Triggers:** `click`
1190
+ - **Performance:** medium
1191
+ - **Reduced motion:** final — Preserve the authored readable final state.
1192
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1193
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1194
+
1195
+ | Slot | Selector | Required | Count |
1196
+ | --- | --- | --- | --- |
1197
+ | `source` | `[data-motion-svg-icon-source]` | required | one |
1198
+ | `target` | `[data-motion-svg-icon-target]` | required | one |
1199
+ | `trigger` | `[data-motion-svg-trigger]` | required | one |
1200
+
1201
+ _No parameters._
1202
+
1203
+ ```bash
1204
+ npx synced-motion add svg-icon-state
1205
+ ```
1206
+
1207
+ ### `svg-orbit`
1208
+
1209
+ Move a decorative subject along an authored SVG path. Connect scroll progress to a bounded explanatory path.
1210
+
1211
+ > **Needs MotionPathPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1212
+
1213
+ - **Root:** `[data-motion-svg-orbit]`
1214
+ - **Triggers:** `scroll`
1215
+ - **Performance:** high
1216
+ - **Reduced motion:** final — Preserve the authored readable final state.
1217
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1218
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1219
+
1220
+ | Slot | Selector | Required | Count |
1221
+ | --- | --- | --- | --- |
1222
+ | `subject` | `[data-motion-svg-orbit-subject]` | required | one |
1223
+ | `path` | `[data-motion-svg-orbit-path]` | required | one |
1224
+
1225
+ _No parameters._
1226
+
1227
+ ```bash
1228
+ npx synced-motion add svg-orbit
1229
+ ```
1230
+
1231
+ ### `svg-signature-reveal`
1232
+
1233
+ Draw a multi-stroke signature in authored order. Reveal a decorative signature while leaving the complete mark available without motion.
1234
+
1235
+ > **Needs DrawSVGPlugin.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1236
+
1237
+ - **Root:** `[data-motion-svg-signature]`
1238
+ - **Triggers:** `viewport`
1239
+ - **Performance:** medium
1240
+ - **Reduced motion:** final — Preserve the authored readable final state.
1241
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1242
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1243
+
1244
+ _The root element is the only target._
1245
+
1246
+ _No parameters._
1247
+
1248
+ ```bash
1249
+ npx synced-motion add svg-signature-reveal
1250
+ ```
1251
+
1252
+ ## Page load and routing
1253
+
1254
+ ### `page-load-hero`
1255
+
1256
+ Sequence local hero content after the page becomes interactive. Establish hierarchy with a restrained initial page entrance.
1257
+
1258
+ - **Root:** `[data-motion-page-load-hero]`
1259
+ - **Triggers:** `load`
1260
+ - **Performance:** medium
1261
+ - **Reduced motion:** final — Preserve the authored readable final state.
1262
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1263
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1264
+
1265
+ | Slot | Selector | Required | Count |
1266
+ | --- | --- | --- | --- |
1267
+ | `items` | `[data-motion-page-load-item]` | required | many |
1268
+
1269
+ _No parameters._
1270
+
1271
+ ```bash
1272
+ npx synced-motion add page-load-hero
1273
+ ```
1274
+
1275
+ ### `page-load-brand-mark`
1276
+
1277
+ Introduce a local brand mark without blocking content. Give a brand signature a short, nonblocking entrance.
1278
+
1279
+ - **Root:** `[data-motion-page-load-brand]`
1280
+ - **Triggers:** `load`
1281
+ - **Performance:** medium
1282
+ - **Reduced motion:** final — Preserve the authored readable final state.
1283
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1284
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1285
+
1286
+ | Slot | Selector | Required | Count |
1287
+ | --- | --- | --- | --- |
1288
+ | `mark` | `[data-motion-brand-mark]` | optional | one |
1289
+
1290
+ _No parameters._
1291
+
1292
+ ```bash
1293
+ npx synced-motion add page-load-brand-mark
1294
+ ```
1295
+
1296
+ ### `route-fade`
1297
+
1298
+ Coordinate outgoing and incoming route regions through a scoped event. Soften application-owned route replacement without owning navigation.
1299
+
1300
+ - **Root:** `[data-motion-route-fade]`
1301
+ - **Triggers:** `route`
1302
+ - **Performance:** medium
1303
+ - **Reduced motion:** final — Preserve the authored readable final state.
1304
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1305
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1306
+
1307
+ | Slot | Selector | Required | Count |
1308
+ | --- | --- | --- | --- |
1309
+ | `outgoing` | `[data-motion-route-outgoing]` | optional | one |
1310
+ | `incoming` | `[data-motion-route-incoming]` | optional | one |
1311
+
1312
+ _No parameters._
1313
+
1314
+ ```bash
1315
+ npx synced-motion add route-fade
1316
+ ```
1317
+
1318
+ ### `route-shared-media`
1319
+
1320
+ Animate application-owned shared media placement through FLIP. Preserve visual continuity while a router changes page structure.
1321
+
1322
+ > **Needs Flip.** Import from `@syncedco/motion/full`, or pass the plugin through `dependencies`.
1323
+
1324
+ - **Root:** `[data-motion-route-shared-media]`
1325
+ - **Triggers:** `route`
1326
+ - **Performance:** high
1327
+ - **Reduced motion:** final — Preserve the authored readable final state.
1328
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1329
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1330
+
1331
+ | Slot | Selector | Required | Count |
1332
+ | --- | --- | --- | --- |
1333
+ | `media` | `[data-motion-shared-media]` | required | many |
1334
+
1335
+ _No parameters._
1336
+
1337
+ ```bash
1338
+ npx synced-motion add route-shared-media
1339
+ ```
1340
+
1341
+ ### `route-scroll-restore`
1342
+
1343
+ Restore application-provided scroll position after route completion. Keep route navigation position predictable and refresh scroll measurements.
1344
+
1345
+ - **Root:** `[data-motion-route-scroll-restore]`
1346
+ - **Triggers:** `route`
1347
+ - **Performance:** medium
1348
+ - **Reduced motion:** final — Preserve the authored readable final state.
1349
+ - **Without JavaScript:** Content and controls remain available in their authored final state.
1350
+ - **Accessibility:** Motion does not change document order; interactive semantics remain native.
1351
+
1352
+ _The root element is the only target._
1353
+
1354
+ _No parameters._
1355
+
1356
+ ```bash
1357
+ npx synced-motion add route-scroll-restore
1358
+ ```