Use Changes.
RxJS stream that fires whenever a slot registers or deregisters.
Fires when the set of panels this form shows changed without any slot coming or going, for example when the user hides or shows a panel. The slot hosts resolve their panels again when it fires.
Slots physically present in this form, in document order.
Tells every slot host on this form to resolve its panels again.
Slot host calls this on init. Idempotent — safe if invoked twice.
Resolve a preferred slot to the slot that should ACTUALLY render the panel. Returns the preferred slot if it's present; otherwise walks forward in the chain to find the next existing slot.
Returns null only in the (impossible) case where no slot at all is
present — the container guarantees after-everything exists, so this
should never happen in practice.
Per-form coordinator that tracks which slot positions are physically present in the current form's DOM. Provided at the
<mj-record-form-container>level (one instance per form) so descendant slot hosts can register themselves and compute the fallback chain.The container template guarantees an
after-everythingslot host at the very bottom of the form body — so panels whose preferred slot is missing always have a final landing spot. Pre-CodeGen-regen forms still display every panel; post-regen forms display them at the better position.