OptionalchromePin this contribution to a chrome bucket instead of its own rail item.
'details' — leftover own-fields group. 'more' — overflow folder.
OptionalcontributionIdentity for last-wins collapse. Two registrations with the same key
compete; highest ClassFactory Priority wins. Omit to derive:
related:${relatedEntity}:${relatedJoinField} when claiming a
relationship, otherwise the registration is unique and never collapses.
OptionalinclusionL1 inclusion for this contribution (same verbs as relationships).
'Primary' — own first-class rail item, in the lead band before Details.
'More' — overflow folder. 'None' — hidden.
L3 MJ: Form Chrome Rules still wins. chromeGroup still merges.
OptionalleadsOpen a NEW (unsaved) record on this contribution instead of the first first-class group.
A saved record opens where the user last was, or on the lead group. That is right for reading a record and wrong for creating one: the lead group is usually a summary, and a summary of a record with no data is a page of blanks the user has to look past to find where typing starts.
Only consulted when the record is unsaved, so it cannot change how an existing record opens.
If several contributions on one entity set it, the highest ClassFactory Priority wins, matching
how every other conflict between registrations is settled.
OptionalrelatedWhen set, this panel replaces the default related-entity grid for
that relationship on entity's form. The baked CodeGen panel (if any)
is hidden; the stock fill-in grid is not mounted.
OptionalrelatedDisambiguates two FKs to the same related entity (BillTo vs ShipTo).
Compared after stripping wrapping [].
OptionalreplacesCodeGen SectionKey of a baked field (or other) panel this contribution
replaces — e.g. 'details', 'personalIdentity'. Hidden at runtime via
HiddenSectionKeys. Use with slot: 'before-fields' for a form hero that
is not a collapsible panel. Must name a concrete entity (not '*').
Optionalsort
Shape of the
metadataobject every BaseFormPanel registration MUST attach via@RegisterClass(BaseFormPanel, { metadata: {...} }). The<mj-form-panel-slot>host filters registrations by matching against this shape — registrations without it are silently ignored.entity— the exact entity name (case-sensitive equality enforced by the slot host), OR the wildcard'*'to register an entity-agnostic panel that mounts on EVERY entity's form. Wildcard panels are expected to self-hide (render nothing) when they don't apply to the current record, so the cross-cutting registration stays unobtrusive on forms it has no business on.slot— which slot the panel renders into.sortKey— higher = earlier within the slot. Defaults to 0 if omitted. Use ranges (e.g., 100/50/10) so future panels can wedge in without recomputing every neighbor's sort.