Restructure core-v2 into layered modules
Rewrite the core-v2 internals without changing the public API or runtime behavior. The four large files (types, scene, motion, gesture) become layered modules with one responsibility each: - shared/: geometry and environment helpers - view/: originView recipes - choreography/: effect types, presets, and composeEffects compositing - actions/: forward/back/replace/above/under via one overload resolver - scene/: SceneGraph storage, transitions (history rules), compositor (styles and interactivity), spring (pure stepper + rAF driver), and createOriginScene, which only wires them and owns async timing - composables/: useOrigin and the node-scope injection key - gesture/: builder, definition->policy normalization, start admission, DirectionalTracker, and a GestureRecognizer session state machine replacing fifteen loose closure variables - components/: renderers and gesture hosts, plus their prop types Verification (packages/core-v2/verify): differential fuzzing drives main and this branch with identical random operation sequences and pointer streams and requires identical scene state, styles, contexts, callbacks, and promise results at every step. It caught every planted mutation that applied. Benchmarks are at parity. Also fix a pre-existing test that called the defineProps macro inside a runtime defineComponent, and correct API.md's description of the flick commit threshold to match the runtime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Faarh2Ts6StJPcz2mRiHiR
This commit is contained in:
@@ -292,6 +292,26 @@ flat host.
|
||||
“Y is Z's origin” is a coordinate and retained-history relationship, not Vue
|
||||
component ancestry.
|
||||
|
||||
## Source layout
|
||||
|
||||
The package is layered; each layer depends only on the ones above it.
|
||||
|
||||
| Directory | Responsibility |
|
||||
| --------------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| `shared/` | Geometry and environment helpers |
|
||||
| `view/` | `originView()` component recipes |
|
||||
| `choreography/` | Effect types, `defineOriginChoreography()`, presets, and `composeEffects()` style compositing |
|
||||
| `actions/` | `forward()`, `back()`, `replace()`, `above()`, `under()`, `originAction()` |
|
||||
| `scene/` | `graph.ts` storage, `transitions.ts` history rules, `compositor.ts` styles, `spring.ts` settling motion |
|
||||
| `composables/` | `useOrigin()` and the node-scope injection key |
|
||||
| `gesture/` | Builder, definition→policy normalization, start admission, pointer tracking, and the recognizer |
|
||||
| `components/` | `OriginScene`, `OriginGesture`, `OriginGestureSurface`, and the internal node host |
|
||||
|
||||
`createOriginScene()` wires the scene modules together: the graph holds nodes
|
||||
and operation edges, transitions rewrite it synchronously when operations
|
||||
begin, commit, or cancel, and the scene adds the asynchronous parts (waiting
|
||||
for Vue to mount a target, measuring, and running the settling spring).
|
||||
|
||||
## Current experimental boundaries
|
||||
|
||||
- One operation creates one target. Chaining operations already permits any
|
||||
|
||||
Reference in New Issue
Block a user