plans/issues/issue-2550.md
style prop) — docs live outside this repoExecutor instructions: Follow step by step; run the drift check first. Update the status row for this plan in
plans/issues/README.mdwhen done.Drift check (run first):
gh api repos/motiondivision/motion/issues/2550 --jq .state→ expect"open". If already closed, mark this plan DONE and stop.
42bfbe3ed, 2026-06-11Filed 2024-03-12. Request: add a note to the "Custom components" section of
the (then framer.com/motion) docs saying that a component passed to
motion(Component) shouldn't declare its own style prop, because the
resulting type intersection rejects MotionValue styles, e.g.:
Type 'MotionValue<string>' is not assignable to type
'(Rotate & (string | number | MotionValue<number> | ...)) | undefined'.
Grounding:
packages/framer-motion/src/render/components/create-proxy.ts:13-14 types
custom components as
React.PropsWithoutRef<Props & MotionProps> — when Props already has a
style, the intersection Props["style"] & MotionProps["style"] is what
produces the reported error. "Fixing" the types (e.g. Omit<Props, keyof MotionProps> & MotionProps) would be a separate, breaking type-level
change nobody has asked for here — the issue explicitly only requests a
docs note.Open plans/issues/README.md, find the issue-2550 row. If not APPROVED, mark
this plan BLOCKED and stop.
gh api repos/motiondivision/motion/issues/2550/comments -f body="Thanks — this is a fair note, but the docs aren't maintained in this repository (and the framer.com/motion pages this referenced have since been replaced by motion.dev). The underlying behaviour still holds: motion.create(Component) intersects your component's props with MotionProps, so a component that declares its own style prop will conflict with MotionValue-typed styles; the workaround is to not declare a conflicting style type on the wrapped component (or rename that prop). We'll flag the suggestion for the motion.dev custom-components docs. Closing here as there's no code change to make in this repo."
gh api -X PATCH repos/motiondivision/motion/issues/2550 -f state=closed -f state_reason=not_planned
Verify: gh api repos/motiondivision/motion/issues/2550 --jq .state → "closed".
not_planned (only after APPROVED)plans/issues/README.md status row updatedComponentProps<Props> in
create-proxy.ts to omit Motion-owned keys from Props before
intersecting — breaking for consumers relying on the current intersection,
so next-major only.