Optionalcoordinator: FormSlotCoordinatorThe entity name (e.g., "MJ: Content Sources") being edited.
The host form component — used by panels for EditMode + dirty notifications.
OptionalFormOptional form context — same shape collapsible-panel chrome expects.
The record being edited — threaded through to every mounted panel.
Which slot position this host represents.
A callback method that is invoked immediately after the default change detector has checked data-bound properties if at least one has changed, and before the view and content children are checked.
The changed properties.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
<mj-form-panel-slot>— dynamic slot host that discovers and mounts every registeredBaseFormPanelwhose metadata matches the slot'sEntity+Slotinputs. Generated entity-form HTML emits one of these at each well-known slot position so consumers can extend the form WITHOUT replacing it via the custom-form override pattern.Discovery: uses
ClassFactory.GetAllRegistrationsByMetadata(BaseFormPanel, ...)to find every panel registered with metadata{ entity, slot }matching this slot. Registrations without a metadata bag (or without these required keys) are silently ignored so legacy registrations don't accidentally bind.Ordering: registrations are sorted by
metadata.sortKeydescending — higher number renders first within the slot. Use ranges (100/50/10) so future panels can wedge in without renumbering. Ties fall back to theClassRegistration.Priorityfield (also descending), and finally to registration order.Fallback chain (see
FormSlotCoordinator): each slot host registers with the per-form coordinator and additionally renders panels whose REGISTERED slot is missing in the current form, when this host happens to be the next-existing slot down the chain. The container template guarantees anafter-everythingslot host, so fallback always terminates somewhere. Downstream consumers running an older form template (no CodeGen rerun yet) get every panel rendered at the bottom; consumers on the new template get them in the preferred position.Re-mount: any input change OR a coordinator change (another slot registers/deregisters) triggers a re-render so fallback assignments stay correct as slots come and go.