@syncedco/motion 0.1.0 → 0.2.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.
- package/CHANGELOG.md +12 -0
- package/README.md +53 -11
- package/dist/cli.js +110 -20
- package/dist/cli.js.map +1 -1
- package/docs/INTEGRATIONS.md +69 -0
- package/docs/TOOLING.md +25 -2
- package/package.json +19 -5
- package/skills/synced-motion/SKILL.md +136 -0
package/CHANGELOG.md
CHANGED
|
@@ -15,6 +15,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
15
15
|
- **Bundle budgets** in `scripts/check-size.mjs` are part of the contract. They
|
|
16
16
|
are raised deliberately, never quietly.
|
|
17
17
|
|
|
18
|
+
## [0.2.0](https://github.com/SyncedCo/synced-motion/compare/v0.1.0...v0.2.0) (2026-09-25)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* ship an agent skill and install it per agent target ([48a5fcf](https://github.com/SyncedCo/synced-motion/commit/48a5fcf221ca8eb411c57f72db9ae54453da12ac))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **site:** publish every page and use relative links on GitHub Pages ([c1151ba](https://github.com/SyncedCo/synced-motion/commit/c1151bab0f15edc63397267059dee697e438d28d))
|
|
29
|
+
|
|
18
30
|
## [0.1.0] - 2026-09-25
|
|
19
31
|
|
|
20
32
|
Initial release: the recipe schema, compiler, registry and runtime; sixty
|
package/README.md
CHANGED
|
@@ -7,7 +7,12 @@ behaviour, no-JavaScript fallbacks and deterministic cleanup are part of the
|
|
|
7
7
|
contract instead of something you remember to add later.
|
|
8
8
|
|
|
9
9
|
Framework-neutral. No jQuery, no page builder runtime, no generated class
|
|
10
|
-
names. Works in plain HTML, React, Vue, Svelte, Astro and WordPress
|
|
10
|
+
names. Works in plain HTML, React, Vue, Svelte, Astro and WordPress, with any
|
|
11
|
+
CSS, and [pairs naturally with Synced Flow](#pairs-well-with-synced-flow).
|
|
12
|
+
|
|
13
|
+
**[See it live](https://syncedco.github.io/synced-motion/)** ·
|
|
14
|
+
[Browse all sixty recipes](https://syncedco.github.io/synced-motion/gallery/) ·
|
|
15
|
+
[Full-page examples](https://syncedco.github.io/synced-motion/examples/)
|
|
11
16
|
|
|
12
17
|
```bash
|
|
13
18
|
npm install @syncedco/motion gsap
|
|
@@ -44,6 +49,34 @@ Don't know the attribute you need? Ask for it:
|
|
|
44
49
|
npx synced-motion add reveal-rise
|
|
45
50
|
```
|
|
46
51
|
|
|
52
|
+
### No build step
|
|
53
|
+
|
|
54
|
+
For Webflow, a WordPress theme or a plain HTML page, load it from a CDN with an
|
|
55
|
+
import map. Nothing to install.
|
|
56
|
+
|
|
57
|
+
<!-- x-release-please-start-version -->
|
|
58
|
+
```html
|
|
59
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
|
|
60
|
+
<script type="importmap">
|
|
61
|
+
{
|
|
62
|
+
"imports": {
|
|
63
|
+
"@syncedco/motion": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/index.js",
|
|
64
|
+
"gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
|
|
65
|
+
"gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
|
|
66
|
+
"lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
</script>
|
|
70
|
+
<script type="module">
|
|
71
|
+
import { createSyncedMotion } from '@syncedco/motion'
|
|
72
|
+
createSyncedMotion()
|
|
73
|
+
</script>
|
|
74
|
+
```
|
|
75
|
+
<!-- x-release-please-end -->
|
|
76
|
+
|
|
77
|
+
Recipes that need an optional GSAP plugin are covered in
|
|
78
|
+
[Framework and CMS integrations](docs/INTEGRATIONS.md#plain-html-webflow-and-no-build-sites).
|
|
79
|
+
|
|
47
80
|
## What makes it different
|
|
48
81
|
|
|
49
82
|
Most animation libraries hand you a tween and leave the hard parts to you.
|
|
@@ -104,15 +137,14 @@ package as a consumer installs it.
|
|
|
104
137
|
|
|
105
138
|
## Browse the recipes
|
|
106
139
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Search all sixty, inspect their slots and fallbacks, tune bounded parameters,
|
|
112
|
-
simulate reduced motion, and copy the markup. Or read
|
|
140
|
+
**[Open the recipe gallery](https://syncedco.github.io/synced-motion/gallery/)**
|
|
141
|
+
to search all sixty, inspect their slots and fallbacks, tune bounded
|
|
142
|
+
parameters, simulate reduced motion, and copy the markup. Or read
|
|
113
143
|
[the generated reference](docs/RECIPE-REFERENCE.md), which is produced from the
|
|
114
144
|
registry so it cannot drift from the code.
|
|
115
145
|
|
|
146
|
+
Working on this repository? `npm run gallery` runs the same gallery locally.
|
|
147
|
+
|
|
116
148
|
## Command line and agents
|
|
117
149
|
|
|
118
150
|
The CLI and the local MCP server share one side-effect-free service, so an
|
|
@@ -126,10 +158,13 @@ npx synced-motion scan --file src/page.html # find roots, report missing slots
|
|
|
126
158
|
npx synced-motion compose "restrained but cinematic" --file src/page.html
|
|
127
159
|
npx synced-motion doctor
|
|
128
160
|
npx synced-motion mcp # local stdio MCP server
|
|
161
|
+
npx synced-motion agents install --target all # AGENTS.md, CLAUDE.md, skill
|
|
129
162
|
```
|
|
130
163
|
|
|
131
164
|
The MCP server is local and provider-agnostic. It uploads nothing and needs no
|
|
132
|
-
account.
|
|
165
|
+
account. The package also ships an agent skill,
|
|
166
|
+
`skills/synced-motion/SKILL.md`, that teaches an AI agent the recipes, the
|
|
167
|
+
commands and the accessibility contract. See [CLI and MCP tools](docs/TOOLING.md).
|
|
133
168
|
|
|
134
169
|
## Frameworks and CMSs
|
|
135
170
|
|
|
@@ -148,7 +183,8 @@ small lifecycle adapters that keep their runtimes out of the core bundle. See
|
|
|
148
183
|
## Pairs well with Synced Flow
|
|
149
184
|
|
|
150
185
|
Synced Motion works with any CSS — Tailwind, vanilla, CSS modules, your own
|
|
151
|
-
design system. It has no dependency on Synced Flow
|
|
186
|
+
design system. It has no dependency on [Synced Flow](https://docs.syncedflow.dev)
|
|
187
|
+
and never will.
|
|
152
188
|
|
|
153
189
|
That said, the two were built to the same rule, and it shows when you use them
|
|
154
190
|
together: **Flow decides what things look like, Motion decides how they
|
|
@@ -178,8 +214,14 @@ know exactly which package is responsible for what. Motion toggles semantic
|
|
|
178
214
|
state — `data-active`, `aria-current`, `aria-expanded` — and your CSS decides
|
|
179
215
|
how that state looks, which is the same seam whether or not the CSS is Flow's.
|
|
180
216
|
|
|
181
|
-
|
|
182
|
-
|
|
217
|
+
Both packages ship the same kind of AI tooling — a CLI with `--json` output, a
|
|
218
|
+
packaged agent skill and project guidance for `AGENTS.md` — so an agent that
|
|
219
|
+
knows one already knows how to drive the other. Run `synced-flow` commands for
|
|
220
|
+
layout and styling, `synced-motion` commands for animation.
|
|
221
|
+
|
|
222
|
+
Keep brand tokens in `synced-flow.config.mjs`. The
|
|
223
|
+
[live showcase](https://syncedco.github.io/synced-motion/) is built with both,
|
|
224
|
+
and so are the [full-page examples](https://syncedco.github.io/synced-motion/examples/).
|
|
183
225
|
|
|
184
226
|
## Writing your own recipe
|
|
185
227
|
|
package/dist/cli.js
CHANGED
|
@@ -9,12 +9,34 @@ import "./chunk-JET2MYEG.js";
|
|
|
9
9
|
|
|
10
10
|
// src/cli.js
|
|
11
11
|
import { readFileSync as readFileSync2 } from "fs";
|
|
12
|
+
import { relative } from "path";
|
|
12
13
|
|
|
13
14
|
// src/project/setup.js
|
|
14
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
15
|
-
import { resolve } from "path";
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
16
|
+
import { dirname, resolve } from "path";
|
|
17
|
+
import { fileURLToPath } from "url";
|
|
16
18
|
var AGENT_START = "<!-- synced-motion:agent-guidance:start -->";
|
|
17
19
|
var AGENT_END = "<!-- synced-motion:agent-guidance:end -->";
|
|
20
|
+
var MOTION_AGENT_TARGETS = {
|
|
21
|
+
universal: { guidance: "AGENTS.md" },
|
|
22
|
+
claude: { guidance: "CLAUDE.md", skill: ".claude/skills/synced-motion/SKILL.md" }
|
|
23
|
+
};
|
|
24
|
+
function resolveMotionAgentTargets(value = "universal") {
|
|
25
|
+
const requested = String(value).split(",").map((entry) => entry.trim()).filter(Boolean);
|
|
26
|
+
const expanded = requested.flatMap((entry) => entry === "all" ? Object.keys(MOTION_AGENT_TARGETS) : [entry]);
|
|
27
|
+
const unique = [...new Set(expanded)];
|
|
28
|
+
return {
|
|
29
|
+
targets: unique.filter((entry) => entry in MOTION_AGENT_TARGETS),
|
|
30
|
+
unknown: unique.filter((entry) => !(entry in MOTION_AGENT_TARGETS))
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function packagedMotionSkillPath() {
|
|
34
|
+
for (const candidate of ["../skills/synced-motion/SKILL.md", "../../skills/synced-motion/SKILL.md"]) {
|
|
35
|
+
const path = fileURLToPath(new URL(candidate, import.meta.url));
|
|
36
|
+
if (existsSync(path)) return path;
|
|
37
|
+
}
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
18
40
|
var motionConfigTemplate = `export default {
|
|
19
41
|
scan: ['src', 'app', 'pages', 'components', 'templates', 'parts'],
|
|
20
42
|
recipes: [],
|
|
@@ -29,6 +51,7 @@ var motionConfigTemplate = `export default {
|
|
|
29
51
|
var motionAgentGuidance = `${AGENT_START}
|
|
30
52
|
## Synced Motion
|
|
31
53
|
|
|
54
|
+
- Read the packaged skill first: node_modules/@syncedco/motion/skills/synced-motion/SKILL.md
|
|
32
55
|
- Run \`synced-motion catalog --json\` before choosing motion recipes.
|
|
33
56
|
- Use \`synced-motion suggest "<brief>" --json\` and \`synced-motion plan <id...> --json\` before writing animation code.
|
|
34
57
|
- Prefer registered recipes and root-scoped semantic hooks over global selectors.
|
|
@@ -55,7 +78,7 @@ function packageUpdate(existing) {
|
|
|
55
78
|
return `${JSON.stringify(pkg, null, 2)}
|
|
56
79
|
`;
|
|
57
80
|
}
|
|
58
|
-
function planMotionProjectSetup({ cwd = process.cwd(), agents = false } = {}) {
|
|
81
|
+
function planMotionProjectSetup({ cwd = process.cwd(), agents = false, targets = ["universal"] } = {}) {
|
|
59
82
|
const writes = [];
|
|
60
83
|
const configPath = resolve(cwd, "synced-motion.config.mjs");
|
|
61
84
|
if (!existsSync(configPath)) writes.push({ path: configPath, content: motionConfigTemplate, kind: "config" });
|
|
@@ -66,21 +89,47 @@ function planMotionProjectSetup({ cwd = process.cwd(), agents = false } = {}) {
|
|
|
66
89
|
if (content !== current) writes.push({ path: packagePath, content, kind: "package" });
|
|
67
90
|
}
|
|
68
91
|
if (agents) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
92
|
+
for (const target of targets) {
|
|
93
|
+
const { guidance, skill } = MOTION_AGENT_TARGETS[target];
|
|
94
|
+
const guidancePath = resolve(cwd, guidance);
|
|
95
|
+
const current = existsSync(guidancePath) ? readFileSync(guidancePath, "utf8") : "";
|
|
96
|
+
const content = updateManagedSection(current, motionAgentGuidance);
|
|
97
|
+
if (content !== current) writes.push({ path: guidancePath, content, kind: "agents" });
|
|
98
|
+
const source = skill && packagedMotionSkillPath();
|
|
99
|
+
if (source) {
|
|
100
|
+
const skillPath = resolve(cwd, skill);
|
|
101
|
+
const skillContent = readFileSync(source, "utf8");
|
|
102
|
+
const existing = existsSync(skillPath) ? readFileSync(skillPath, "utf8") : void 0;
|
|
103
|
+
if (skillContent !== existing) writes.push({ path: skillPath, content: skillContent, kind: "skill" });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
73
106
|
}
|
|
74
107
|
return { cwd, writes };
|
|
75
108
|
}
|
|
76
109
|
function applyMotionProjectSetup(plan, { dryRun = false } = {}) {
|
|
77
|
-
if (!dryRun)
|
|
110
|
+
if (!dryRun) {
|
|
111
|
+
for (const write of plan.writes) {
|
|
112
|
+
mkdirSync(dirname(write.path), { recursive: true });
|
|
113
|
+
writeFileSync(write.path, write.content);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
78
116
|
return { ...plan, dryRun, changed: plan.writes.length > 0 };
|
|
79
117
|
}
|
|
80
118
|
function motionAgentStatus({ cwd = process.cwd() } = {}) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
119
|
+
const hasGuidance = (file) => {
|
|
120
|
+
const path = resolve(cwd, file);
|
|
121
|
+
return existsSync(path) && readFileSync(path, "utf8").includes(AGENT_START);
|
|
122
|
+
};
|
|
123
|
+
const targets = Object.fromEntries(Object.entries(MOTION_AGENT_TARGETS).map(([name, { guidance, skill }]) => [
|
|
124
|
+
name,
|
|
125
|
+
hasGuidance(guidance) && (!skill || existsSync(resolve(cwd, skill)))
|
|
126
|
+
]));
|
|
127
|
+
return {
|
|
128
|
+
installed: Object.values(targets).some(Boolean),
|
|
129
|
+
path: resolve(cwd, "AGENTS.md"),
|
|
130
|
+
targets,
|
|
131
|
+
skill: packagedMotionSkillPath()
|
|
132
|
+
};
|
|
84
133
|
}
|
|
85
134
|
function doctorMotionProject({ cwd = process.cwd(), service } = {}) {
|
|
86
135
|
const checks = [];
|
|
@@ -157,12 +206,23 @@ slot, using the documented data-motion-* attributes.
|
|
|
157
206
|
summary: "Check project wiring and agent guidance."
|
|
158
207
|
},
|
|
159
208
|
init: {
|
|
160
|
-
usage: "synced-motion init [--agents] [--dry-run] [--json]",
|
|
209
|
+
usage: "synced-motion init [--agents] [--target <name>] [--dry-run] [--json]",
|
|
161
210
|
summary: "Set up Synced Motion in the current project."
|
|
162
211
|
},
|
|
163
212
|
agents: {
|
|
164
|
-
usage: "synced-motion agents install|status [--dry-run] [--json]",
|
|
165
|
-
summary: "Install or inspect agent guidance
|
|
213
|
+
usage: "synced-motion agents install|status [--target <name>] [--dry-run] [--json]",
|
|
214
|
+
summary: "Install or inspect AI agent guidance and the packaged skill.",
|
|
215
|
+
detail: `Targets:
|
|
216
|
+
universal AGENTS.md (default; read by Codex, Cursor, Copilot and most agents)
|
|
217
|
+
claude CLAUDE.md and .claude/skills/synced-motion/SKILL.md
|
|
218
|
+
all every target
|
|
219
|
+
|
|
220
|
+
synced-motion agents install --target claude
|
|
221
|
+
synced-motion agents install --target all`
|
|
222
|
+
},
|
|
223
|
+
skill: {
|
|
224
|
+
usage: "synced-motion skill [--json]",
|
|
225
|
+
summary: "Show the packaged AI agent skill and the core agent commands."
|
|
166
226
|
},
|
|
167
227
|
mcp: {
|
|
168
228
|
usage: "synced-motion mcp",
|
|
@@ -231,6 +291,18 @@ ${result.suggestions.map((entry) => `- ${entry.id}: ${entry.intent}`).join("\n")
|
|
|
231
291
|
Warnings:
|
|
232
292
|
${result.warnings.map((warning) => `- ${warning}`).join("\n")}` : ""}`;
|
|
233
293
|
if (command === "validate") return result.ok ? "pass recipe registry is valid." : `fail ${JSON.stringify(result.issues)}`;
|
|
294
|
+
if (command === "agents") return Object.entries(result.targets).map(([name, ok]) => `${ok ? "pass" : "warn"} ${name}${ok ? "" : `: run synced-motion agents install --target ${name}`}`).join("\n");
|
|
295
|
+
if (command === "skill") return `Synced Motion AI skill
|
|
296
|
+
|
|
297
|
+
Skill file: ${result.path ? relative(process.cwd(), result.path) : "missing from this install"}
|
|
298
|
+
Use it to guide AI agents toward registered recipes, data-motion-* hooks, and the reduced-motion, no-JavaScript and cleanup contract.
|
|
299
|
+
|
|
300
|
+
Project setup:
|
|
301
|
+
synced-motion agents install
|
|
302
|
+
synced-motion agents install --target all
|
|
303
|
+
|
|
304
|
+
Core agent commands:
|
|
305
|
+
${result.commands.map((entry) => ` ${entry}`).join("\n")}`;
|
|
234
306
|
if (command === "doctor") return result.checks.map((check) => `${check.ok ? "pass" : "warn"} ${check.id}${check.fix ? `: ${check.fix}` : ""}`).join("\n");
|
|
235
307
|
return String(result);
|
|
236
308
|
}
|
|
@@ -352,17 +424,35 @@ Needs optional GSAP plugins: ${plugins.join(", ")}.`);
|
|
|
352
424
|
}
|
|
353
425
|
} else if (command === "doctor") {
|
|
354
426
|
result = doctorMotionProject({ cwd: process.cwd(), service });
|
|
355
|
-
} else if (command === "init") {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
427
|
+
} else if (command === "init" || command === "agents") {
|
|
428
|
+
const { targets, unknown } = resolveMotionAgentTargets(options.target === void 0 || options.target === true ? "universal" : options.target);
|
|
429
|
+
if (unknown.length || !targets.length) {
|
|
430
|
+
io.error(`Unknown agent target "${unknown.join(", ") || options.target}". Use universal, claude or all.`);
|
|
431
|
+
return { code: 1 };
|
|
432
|
+
}
|
|
433
|
+
const action = command === "init" ? "install" : positional[0] ?? "status";
|
|
434
|
+
const agents = command === "agents" || Boolean(options.agents) || options.target !== void 0;
|
|
359
435
|
if (action === "status") result = motionAgentStatus({ cwd: process.cwd() });
|
|
360
436
|
else if (action === "install") {
|
|
361
|
-
result = applyMotionProjectSetup(planMotionProjectSetup({ cwd: process.cwd(), agents
|
|
437
|
+
result = applyMotionProjectSetup(planMotionProjectSetup({ cwd: process.cwd(), agents, targets }), { dryRun: Boolean(options["dry-run"]) });
|
|
362
438
|
} else {
|
|
363
439
|
io.error(`Unknown agents action "${action}". Use install or status.`);
|
|
364
440
|
return { code: 1 };
|
|
365
441
|
}
|
|
442
|
+
} else if (command === "skill") {
|
|
443
|
+
result = {
|
|
444
|
+
path: packagedMotionSkillPath(),
|
|
445
|
+
commands: [
|
|
446
|
+
"synced-motion catalog --json",
|
|
447
|
+
'synced-motion suggest "<brief>" --json',
|
|
448
|
+
"synced-motion plan <id...> --json",
|
|
449
|
+
"synced-motion add <id...>",
|
|
450
|
+
"synced-motion scan --file <path> --json",
|
|
451
|
+
"synced-motion validate",
|
|
452
|
+
"synced-motion doctor",
|
|
453
|
+
"synced-motion mcp"
|
|
454
|
+
]
|
|
455
|
+
};
|
|
366
456
|
} else if (command === "mcp") {
|
|
367
457
|
const { startMotionMcpServer } = await import("./mcp.js");
|
|
368
458
|
await startMotionMcpServer({ service });
|
|
@@ -373,7 +463,7 @@ Needs optional GSAP plugins: ${plugins.join(", ")}.`);
|
|
|
373
463
|
${help()}`);
|
|
374
464
|
return { code: 1 };
|
|
375
465
|
}
|
|
376
|
-
io.log(options.json ? JSON.stringify(result, null, 2) : command === "init" || command === "agents" ? `${result.changed === false ? "pass no changes required." : `${result.dryRun ? "planned" : "updated"} ${result.writes?.length ?? 0} project files.`}` : formatText(command, result));
|
|
466
|
+
io.log(options.json ? JSON.stringify(result, null, 2) : command === "init" || command === "agents" && positional[0] === "install" ? `${result.changed === false ? "pass no changes required." : `${result.dryRun ? "planned" : "updated"} ${result.writes?.length ?? 0} project files.`}` : formatText(command, result));
|
|
377
467
|
return { code: result?.ok === false ? 1 : 0, result };
|
|
378
468
|
}
|
|
379
469
|
export {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.js","../src/project/setup.js"],"mappings":"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","names":["readFileSync","readFileSync"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.js","../src/project/setup.js"],"mappings":"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","names":["readFileSync","readFileSync"]}
|
package/docs/INTEGRATIONS.md
CHANGED
|
@@ -90,3 +90,72 @@ document.dispatchEvent(new Event('motion:refresh'))
|
|
|
90
90
|
|
|
91
91
|
Calling `motion.destroy()` removes these event listeners and destroys the
|
|
92
92
|
active scoped runtime.
|
|
93
|
+
|
|
94
|
+
## Plain HTML, Webflow and no-build sites
|
|
95
|
+
|
|
96
|
+
No bundler is needed. An import map tells the browser where `gsap`, its
|
|
97
|
+
plugins and `lenis` live, and the package loads straight from a CDN. This
|
|
98
|
+
works in a Webflow custom-code embed, a WordPress theme `<head>`, or a static
|
|
99
|
+
HTML page.
|
|
100
|
+
|
|
101
|
+
The core covers every recipe that needs only ScrollTrigger:
|
|
102
|
+
|
|
103
|
+
<!-- x-release-please-start-version -->
|
|
104
|
+
```html
|
|
105
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
|
|
106
|
+
<script type="importmap">
|
|
107
|
+
{
|
|
108
|
+
"imports": {
|
|
109
|
+
"@syncedco/motion": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/index.js",
|
|
110
|
+
"gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
|
|
111
|
+
"gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
|
|
112
|
+
"lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
</script>
|
|
116
|
+
<script type="module">
|
|
117
|
+
import { createSyncedMotion } from '@syncedco/motion'
|
|
118
|
+
createSyncedMotion()
|
|
119
|
+
</script>
|
|
120
|
+
```
|
|
121
|
+
<!-- x-release-please-end -->
|
|
122
|
+
|
|
123
|
+
For all sixty recipes, including split text, FLIP and SVG, use the `full`
|
|
124
|
+
entry and map the optional GSAP plugins as well:
|
|
125
|
+
|
|
126
|
+
<!-- x-release-please-start-version -->
|
|
127
|
+
```html
|
|
128
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
|
|
129
|
+
<script type="importmap">
|
|
130
|
+
{
|
|
131
|
+
"imports": {
|
|
132
|
+
"@syncedco/motion/full": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/full.js",
|
|
133
|
+
"gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
|
|
134
|
+
"gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
|
|
135
|
+
"gsap/SplitText": "https://cdn.jsdelivr.net/npm/gsap@3/SplitText.js",
|
|
136
|
+
"gsap/Flip": "https://cdn.jsdelivr.net/npm/gsap@3/Flip.js",
|
|
137
|
+
"gsap/DrawSVGPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/DrawSVGPlugin.js",
|
|
138
|
+
"gsap/MorphSVGPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/MorphSVGPlugin.js",
|
|
139
|
+
"gsap/MotionPathPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/MotionPathPlugin.js",
|
|
140
|
+
"lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
</script>
|
|
144
|
+
<script type="module">
|
|
145
|
+
import { createSyncedMotion } from '@syncedco/motion/full'
|
|
146
|
+
createSyncedMotion()
|
|
147
|
+
</script>
|
|
148
|
+
```
|
|
149
|
+
<!-- x-release-please-end -->
|
|
150
|
+
|
|
151
|
+
Module scripts run after the document is parsed, so the snippet can sit in the
|
|
152
|
+
`<head>`. A page may have only one import map, and it must come before the
|
|
153
|
+
first module script. Keep an exact version in production URLs so an upgrade
|
|
154
|
+
is always a deliberate change.
|
|
155
|
+
|
|
156
|
+
Using Synced Flow too? Add its stylesheet before the Synced Motion one, then
|
|
157
|
+
use `sf-*` classes and `data-motion-*` attributes on the same elements:
|
|
158
|
+
|
|
159
|
+
```html
|
|
160
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/flow/styles.css">
|
|
161
|
+
```
|
package/docs/TOOLING.md
CHANGED
|
@@ -34,10 +34,33 @@ npx synced-motion --version
|
|
|
34
34
|
- `validate` validates the active registry; pass `--file <recipe.json>` to validate a custom declarative recipe.
|
|
35
35
|
- `doctor` checks that the registry and service are usable.
|
|
36
36
|
- `init --agents` installs project config, scripts, and managed AI guidance.
|
|
37
|
-
- `agents install|status` manages only the marked Synced
|
|
37
|
+
- `agents install|status [--target <name>]` manages only the marked Synced
|
|
38
|
+
Motion guidance block, plus the agent skill where the target supports one.
|
|
39
|
+
Targets are `universal` (`AGENTS.md`, the default), `claude` (`CLAUDE.md`
|
|
40
|
+
and `.claude/skills/synced-motion/SKILL.md`) and `all`.
|
|
41
|
+
- `skill` prints where the packaged agent skill lives and the core agent
|
|
42
|
+
commands.
|
|
38
43
|
- `mcp` starts the project-local stdio MCP server.
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
## Agent skill
|
|
46
|
+
|
|
47
|
+
The package ships an agent skill at
|
|
48
|
+
`node_modules/@syncedco/motion/skills/synced-motion/SKILL.md`. It tells an AI
|
|
49
|
+
agent how to choose recipes, which commands to run, and the rules every recipe
|
|
50
|
+
follows: reduced motion, no-JavaScript fallbacks, accessibility and cleanup.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx synced-motion agents install # AGENTS.md guidance
|
|
54
|
+
npx synced-motion agents install --target claude # Claude Code skill + CLAUDE.md
|
|
55
|
+
npx synced-motion agents install --target all
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The guidance block is marked, so running the command again updates it in place
|
|
59
|
+
and leaves the rest of the file alone. It follows the same layout as Synced
|
|
60
|
+
Flow's `synced-flow agents install`, so a project using both gets one section
|
|
61
|
+
for each.
|
|
62
|
+
|
|
63
|
+
The catalog contains sixty implemented and verified recipes: five recipes
|
|
41
64
|
in each of twelve families. Placeholder or no-op entries are rejected from the
|
|
42
65
|
launch catalog. The CLI, MCP server, public service, gallery, and inspector all
|
|
43
66
|
read the same source registry.
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncedco/motion",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Accessible, framework-neutral scroll and interaction animation for the web. Sixty validated GSAP recipes with reduced-motion, no-JS and cleanup behaviour built into the contract.",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Accessible, framework-neutral scroll and interaction animation for the web. Sixty validated GSAP recipes with reduced-motion, no-JS and cleanup behaviour built into the contract, plus a CLI, MCP server and agent skill. Pairs with Synced Flow; works with any CSS.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Scott Mackey",
|
|
7
|
-
"homepage": "https://github.
|
|
7
|
+
"homepage": "https://syncedco.github.io/synced-motion/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/SyncedCo/synced-motion.git"
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"bin",
|
|
23
23
|
"dist",
|
|
24
24
|
"docs",
|
|
25
|
+
"skills",
|
|
25
26
|
"README.md",
|
|
26
27
|
"CHANGELOG.md",
|
|
27
28
|
"CONTRIBUTING.md",
|
|
@@ -114,12 +115,25 @@
|
|
|
114
115
|
},
|
|
115
116
|
"keywords": [
|
|
116
117
|
"animation",
|
|
118
|
+
"scroll-animation",
|
|
117
119
|
"gsap",
|
|
118
120
|
"scrolltrigger",
|
|
119
121
|
"lenis",
|
|
120
|
-
"synced-flow",
|
|
121
122
|
"motion",
|
|
122
|
-
"
|
|
123
|
+
"accessibility",
|
|
124
|
+
"a11y",
|
|
125
|
+
"reduced-motion",
|
|
126
|
+
"no-js",
|
|
127
|
+
"ai",
|
|
128
|
+
"mcp",
|
|
129
|
+
"agents",
|
|
130
|
+
"react",
|
|
131
|
+
"vue",
|
|
132
|
+
"svelte",
|
|
133
|
+
"astro",
|
|
134
|
+
"wordpress",
|
|
135
|
+
"webflow",
|
|
136
|
+
"synced-flow"
|
|
123
137
|
],
|
|
124
138
|
"license": "MIT",
|
|
125
139
|
"peerDependencies": {
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synced-motion
|
|
3
|
+
description: Use Synced Motion to add accessible scroll, reveal, pinned, hover, navigation and page-load animation with validated GSAP recipes, data-motion-* attributes, the synced-motion CLI and its local MCP server. Pairs with Synced Flow for styling but works with any CSS.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Synced Motion
|
|
7
|
+
|
|
8
|
+
Use this skill when a project uses, evaluates, installs or generates animation
|
|
9
|
+
with Synced Motion (`@syncedco/motion`), or when a brief asks for scroll
|
|
10
|
+
animation, reveals, pinned storytelling, marquees, split text or similar motion
|
|
11
|
+
on a website.
|
|
12
|
+
|
|
13
|
+
Synced Motion is a catalog of sixty validated GSAP recipes driven by
|
|
14
|
+
`data-motion-*` attributes. Every recipe declares and is tested against its
|
|
15
|
+
reduced-motion behaviour, its no-JavaScript fallback, its accessibility notes
|
|
16
|
+
and its cleanup. Pick a recipe before writing any animation code.
|
|
17
|
+
|
|
18
|
+
## First moves
|
|
19
|
+
|
|
20
|
+
1. Check whether `@syncedco/motion` and `gsap` are installed.
|
|
21
|
+
2. Check for `synced-motion.config.mjs`. If it is missing, run
|
|
22
|
+
`synced-motion init --agents`.
|
|
23
|
+
3. Run `synced-motion catalog --json` before choosing recipes.
|
|
24
|
+
4. Run `synced-motion suggest "<brief>" --json` to rank recipes against the
|
|
25
|
+
brief, then `synced-motion plan <id...> --json` for the chosen ones.
|
|
26
|
+
5. Run `synced-motion add <id...>` for ready-to-paste markup with every
|
|
27
|
+
required slot.
|
|
28
|
+
6. For existing markup, run `synced-motion scan --file <path> --json` to find
|
|
29
|
+
recipe roots and missing slots, or `synced-motion compose "<brief>" --file
|
|
30
|
+
<path> --json` for one combined proposal.
|
|
31
|
+
7. Run `synced-motion validate` and `synced-motion doctor` before handoff.
|
|
32
|
+
|
|
33
|
+
The same answers are available over MCP: `synced-motion mcp` starts a local
|
|
34
|
+
stdio server with `motion_catalog`, `motion_recipe`, `motion_suggest`,
|
|
35
|
+
`motion_plan`, `motion_scan`, `motion_compose` and `motion_validate`. It needs
|
|
36
|
+
no account and uploads nothing.
|
|
37
|
+
|
|
38
|
+
## Setup
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install @syncedco/motion gsap
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
import { createSyncedMotion } from '@syncedco/motion'
|
|
46
|
+
import '@syncedco/motion/styles.css'
|
|
47
|
+
|
|
48
|
+
const motion = createSyncedMotion()
|
|
49
|
+
// Call motion.destroy() on route change or hot reload.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<h1 data-motion-reveal="up">Heading</h1>
|
|
54
|
+
<ul data-motion-stagger>
|
|
55
|
+
<li data-motion-stagger-item>One</li>
|
|
56
|
+
<li data-motion-stagger-item>Two</li>
|
|
57
|
+
</ul>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- Seventeen recipes need an optional GSAP plugin (SplitText, Flip, DrawSVG,
|
|
61
|
+
MorphSVG or MotionPath). Import from `@syncedco/motion/full`, or pass only the
|
|
62
|
+
plugin needed: `createSyncedMotion({ dependencies: { SplitText } })`.
|
|
63
|
+
`motion.inspect().skipped` lists any recipe skipped for a missing plugin.
|
|
64
|
+
- For the smallest bundle, import single recipes from
|
|
65
|
+
`@syncedco/motion/recipes` and pass them to `createMotionRegistry`.
|
|
66
|
+
- Framework adapters: `@syncedco/motion/react`, `/vue`, `/svelte`, `/astro`
|
|
67
|
+
and `/wordpress`. Never import GSAP plugins from the core entry.
|
|
68
|
+
- No build step (Webflow, WordPress themes, plain HTML): use the import-map
|
|
69
|
+
snippet in the package README.
|
|
70
|
+
|
|
71
|
+
## Recipe families
|
|
72
|
+
|
|
73
|
+
Twelve families, five recipes each: reveals and entrances, split text and
|
|
74
|
+
typography, scroll and parallax, pinned storytelling, horizontal galleries,
|
|
75
|
+
media mask and clip, hover focus and pointer, navigation and overlay, loops and
|
|
76
|
+
progress, FLIP layout, SVG path and morph, page load and route. Use
|
|
77
|
+
`synced-motion catalog --json` for the ids, and
|
|
78
|
+
`synced-motion recipe <id> --json` for slots, parameters, fallbacks and
|
|
79
|
+
performance cost.
|
|
80
|
+
|
|
81
|
+
## Rules
|
|
82
|
+
|
|
83
|
+
- Use the `data-motion-*` vocabulary only. There is no other prefix.
|
|
84
|
+
- Prefer registered recipes and root-scoped hooks over global selectors. Never
|
|
85
|
+
target `body` or `html`.
|
|
86
|
+
- Synced Motion owns animation orchestration only. The design system owns
|
|
87
|
+
layout, colour, spacing, typography, tokens and final states. Do not put
|
|
88
|
+
inline colours, spacing or font sizes into motion code.
|
|
89
|
+
- Toggle semantic state (`data-active`, `aria-current`, `aria-expanded`) and let
|
|
90
|
+
CSS style it.
|
|
91
|
+
- Animate transforms and opacity. Layout animation needs an explicit opt-in.
|
|
92
|
+
- Keep content readable when JavaScript fails and when the visitor prefers
|
|
93
|
+
reduced motion. Never hide content that motion might fail to reveal.
|
|
94
|
+
- Keep keyboard behaviour, focus order and reading order unchanged.
|
|
95
|
+
- Every custom animation must clean up on `destroy()`.
|
|
96
|
+
- Keep high-cost recipes to a few per page. The config `budgets` sets the
|
|
97
|
+
limit.
|
|
98
|
+
- When the catalog cannot express an effect, write a typed custom recipe with
|
|
99
|
+
`defineMotionRecipe`. It must declare `reducedMotion`, `noJs`,
|
|
100
|
+
`accessibility`, `performance` and a cleanup function, and it must pass
|
|
101
|
+
`synced-motion validate --file <recipe.json>`.
|
|
102
|
+
|
|
103
|
+
## With Synced Flow
|
|
104
|
+
|
|
105
|
+
Synced Motion has no dependency on Synced Flow, but the two are designed to be
|
|
106
|
+
used together: Flow decides what things look like, Motion decides how they
|
|
107
|
+
arrive.
|
|
108
|
+
|
|
109
|
+
- Use `sf-*` classes for layout and styling, and `data-motion-*` attributes for
|
|
110
|
+
animation, on the same elements.
|
|
111
|
+
- Run `synced-flow` commands for layout and styling, and `synced-motion`
|
|
112
|
+
commands for animation.
|
|
113
|
+
- Keep brand tokens in `synced-flow.config.mjs`, never in motion code.
|
|
114
|
+
- Run `synced-flow lint --json` and `synced-flow doctor` as well as the Motion
|
|
115
|
+
checks before handoff.
|
|
116
|
+
|
|
117
|
+
```html
|
|
118
|
+
<section class="sf-section">
|
|
119
|
+
<div class="sf-container sf-stack">
|
|
120
|
+
<p class="sf-kicker" data-motion-reveal="fade">A motion system</p>
|
|
121
|
+
<h1 class="sf-text-display" data-motion-split="lines">Heading</h1>
|
|
122
|
+
</div>
|
|
123
|
+
</section>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Reference
|
|
127
|
+
|
|
128
|
+
Inside `node_modules/@syncedco/motion/docs/`:
|
|
129
|
+
|
|
130
|
+
- `RECIPE-REFERENCE.md`: all sixty recipes, generated from the registry
|
|
131
|
+
- `ATTRIBUTE-API.md`: the declarative attribute API
|
|
132
|
+
- `API.md`: the JavaScript API
|
|
133
|
+
- `INTEGRATIONS.md`: frameworks, CMSs and no-build sites
|
|
134
|
+
- `TOOLING.md`: the CLI and MCP server
|
|
135
|
+
|
|
136
|
+
Live gallery: https://syncedco.github.io/synced-motion/gallery/
|