Files
OpenCut/apps/web/src/rendering/NOTES.md
T

1.3 KiB

Notes

Transform is misplaced

Transform is currently defined in apps/web/src/rendering/index.ts. It's exported from the rendering domain because rendering happens to be one of its consumers — but every other domain that touches scene geometry consumes it too (@/timeline, @/preview, @/animation/values, @/text, etc.). It's not "of" rendering any more than Vector2 would be "of" math.

Transform is closer to a primitive than a domain concept. It's infrastructure: a small value type with no behavior, no dependencies, no domain-specific invariants. Anything that wants to position something on a 2D canvas needs it.

The codebase should be refactored so it's defined lower-level, rather than sitting in a domain. Candidate homes:

  • apps/web/src/primitives/transform.ts (new dir for these value types)
  • apps/web/src/geometry/transform.ts if Vector2 and friends end up there
  • apps/web/src/rendering/transform.ts is acceptable only if @/rendering becomes a primitives folder rather than a domain (it's borderline today — it also exports BlendMode, which has the same problem).

Side effect of fixing this: @/rendering/animation-values.ts (which exists only because Transform lives next to it) can move into @/animation/values.ts alongside the other resolve-at-time helpers, since Transform would no longer pull in a domain dependency.