Skip to content

v2.2.0 — Cross-type bridges

Choose a tag to compare

@kindintelligence kindintelligence released this 08 Jul 11:43
· 24 commits to main since this release
79f245a

Cross-type drops, documented and de-trapped. Providers stay monomorphic - that's the crate's core guarantee - but two things now make living next to a second provider first-class.

Added

  • ZoneRegistry::contains(id) and ZoneRegistry::ascend(current). The ParentZone context is shared across payload types, so a DropZone<A> nested inside a DropZone<B> records B's id as its parent - an id that only resolves in B's registry. ascend returns a zone's parent only when it's registered in the same registry.
  • ParentZone is exported from the prelude, completing the public kit (use_zone_registry, use_zone_id, ZoneRecord) for building custom zones - including bridge zones registered in two type-worlds at once.
  • README section Mixing payload types: when one provider with an enum payload is the answer, and when to bridge two providers by registering the same ZoneId (ids are process-global) in both registries with shared mounted/rect signals. Every drop stays typed; no erased channel.
  • Gallery page Standup: tickets and teammates drag in separate providers; a shared agenda tray built from double registration (in ~40 lines of user-land code) accepts both.

Fixed

  • Keyboard navigation could dead-end across type-worlds: ArrowLeft from a zone nested under a foreign-type zone entered the foreign parent's id, which this world's registry can't resolve - announcements degraded to "zone N" and Enter silently did nothing while the payload stayed held. Ascend now skips unresolvable parents (falling back to the previous sibling), and Enter's target resolution skips a hovered id that isn't in the registry (falling back to the first acceptable zone).
  • The Playwright web server command used --interactive false-style flags, which dx 0.7 parses as a subcommand; switched to the = form.
  • Zero clippy warnings again under Rust 1.96.

Tests

125 passing: 76 unit, 35 runtime, 2 doctests, and 12 Playwright browser regressions - including a new one driving real pointer drags from two payload worlds onto one shared bridge zone.