summaryrefslogtreecommitdiff
path: root/apps/web/src/rendering/NOTES.md
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-26 04:04:30 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-26 04:04:30 +0200
commit0b7597b31fa956c7f3d4838923b545ba5e341422 (patch)
tree6b360add6e4e22a422736bc9ddccdf13097bd044 /apps/web/src/rendering/NOTES.md
parent6a22a3ecbdff2d0e6a4c24c8db40bb86bc01b692 (diff)
downloadopencut-0b7597b31fa956c7f3d4838923b545ba5e341422.tar.gz
refactor: split animation helpers by domain
Diffstat (limited to 'apps/web/src/rendering/NOTES.md')
-rw-r--r--apps/web/src/rendering/NOTES.md27
1 files changed, 27 insertions, 0 deletions
diff --git a/apps/web/src/rendering/NOTES.md b/apps/web/src/rendering/NOTES.md
new file mode 100644
index 00000000..38055c14
--- /dev/null
+++ b/apps/web/src/rendering/NOTES.md
@@ -0,0 +1,27 @@
+# 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. \ No newline at end of file