Skip to content

feat: integrate interaction policy with Studio selection - #168

Open
artiphishle wants to merge 7 commits into
mainfrom
issue-167/interaction-policy-selection
Open

feat: integrate interaction policy with Studio selection#168
artiphishle wants to merge 7 commits into
mainfrom
issue-167/interaction-policy-selection

Conversation

@artiphishle

@artiphishle artiphishle commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • require @ankhorage/zora ^2.9.0 in generated applications and validate the resolved generated-workspace package with caret-semver semantics
  • apply interactionPolicy="passive" to supported Runtime components in Edit mode and restore enabled in Preview
  • preserve authored props, inherited Runtime resolver output, component identity, existing disableActions behavior, and the single root RNGH stationary-tap recognizer
  • prevent right-click, middle-click, secondary-pointer, cancelled, and abandoned input paths from leaking into later stationary selections while preserving touch, deepest-node ordering, exactly-once commits, movement cancellation, and Preview suppression
  • replace the permanent unsupported-indicator measurement loop with event-driven, animation-frame-coalesced layout, resize, scroll, registration, removal, navigation, and mode refreshes
  • keep unsupported indication in a root-owned pointerEvents="none" overlay used only for visual indication
  • generate the Expo SDK 54 animation stack with the verified Reanimated 4.3.0 / Worklets 0.8.3 pair and the Worklets Babel plugin
  • regenerate Paradox documentation for the final public surface

Validation

  • focused changed-area tests — 89 passed, 0 failed, 239 assertions
  • bun run test:e2e:generated-app-web — passed three consecutive times, 52 assertions per run
  • bun run test:smoke:studio-web — passed, 54 assertions
  • bun run build — passed
  • bun run lint — passed
  • bun run format:check — passed
  • bun run knip — passed
  • bun test — 366 passed, 3 skipped, 0 failed, 1,548 assertions across 87 files
  • bun run typecheck — passed
  • bun run changeset:status — passed (@ankhorage/studio minor)
  • bun run docs — passed
  • git diff --check — passed

The generated Chrome smoke uses a real generated-workspace installation. It verifies @ankhorage/zora ^2.9.0, the installed compatible version and generated lockfile provenance, right/middle-button rejection, left-pointer and touch selection, deepest-node selection, exactly-once commits, already-selected suppression, movement cancellation, Preview suppression, target-aligned unsupported geometry, resize and scroll updates, and pointer-events: none.

Native Android validation

Validated with a completely fresh generated Expo SDK 54 project on Pixel_8_Pro_API_34-ext11:

  • resolved dependency graph — Expo 54.0.36, React Native 0.81.5, Reanimated 4.3.0, Worklets 0.8.3
  • clean generation, dependency installation, prebuild/native synchronization, and all native CMake/compile tasks — passed
  • initial APK packaging reached an environmental Gradle heap limit after 475 tasks; rerunning the same clean build with a temporary 6 GB Gradle heap completed successfully (476 tasks)
  • debug APK production, installation, and launch — passed
  • generated Runtime UI rendered with no native crash and no JavaScript runtime error
  • stationary Edit tap, deepest-node selection, exactly-once commit, already-selected suppression, and movement cancellation — passed
  • Runtime ScrollView and nested ScrollView scrolling — passed
  • unsupported indication presence, target geometry after settled scrolling, non-interception, and Preview removal — passed
  • Preview component interaction and no Studio selection commit — passed

No iOS validation was executed.

Android dependency resolution

The failing generated graph resolved Reanimated 4.1.7 with Worklets 0.5.1. Reanimated 4.1 expected libworklets.so under Worklets' legacy intermediates/cmake directory while Worklets emitted it under intermediates/cxx. Fresh builds reproduced the mismatch, including with Reanimated 4.1.1, so it was not stale output. Reanimated 4.3.0 consumes the Worklets Prefab package; its published compatibility metadata supports React Native 0.81 with Worklets 0.8.x. The generator now pins Reanimated 4.3.0 and Worklets 0.8.3 together and emits react-native-worklets/plugin.

Dependencies — resolved

  • ankhorage/surface#65 — merged; @ankhorage/surface 2.1.0 released
  • ankhorage/zora#273 — merged; @ankhorage/zora 2.9.0 released

This branch consumes @ankhorage/zora ^2.9.0, and generated applications require the same minimum.

Closes #167

@artiphishle
artiphishle marked this pull request as ready for review July 30, 2026 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement validated passive Edit interactions and stationary-tap selection

1 participant