Derived atom yielding the (position-sorted) candidates for a single role.
Derived atom: true while a module gated on this role's demand event has yet to activate — i.e. a surface specific to the rendered data may still be coming. Boolean-valued, so subscribers re-render only when it flips, not on every activation.
Returns a claimed role to the pool. The claim is taken before the dispatch is known to have
happened, so a dispatch that fails or is interrupted (shutdown, a failed activation) must give
it back — nothing else re-requests the role, and useIsSurfaceAvailable's own retry is
claimed away too, leaving every surface in that role permanently empty.
Claims the first surface demand for a role, returning true only to that first caller so
it can fire the activation event. Subsequent calls — re-renders, repeated availability
checks — return false.
Owns the per-manager surface memoization: one derived index atom plus a per-role family of candidate atoms. A single instance is provided via SurfaceManagerProvider, so instance identity does the per-manager keying (replacing module-level WeakMaps) and
Atom.familydoes the per-role keying. Atom lifecycle is tied to the provider rather than module-global state.