Optional template for additional toolbar actions
Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true
Emitted BEFORE delete - can be cancelled by setting event.Cancel = true
Emitted BEFORE history view - can be cancelled by setting event.Cancel = true
Emitted BEFORE list management - can be cancelled by setting event.Cancel = true
Emitted BEFORE save - can be cancelled by setting event.Cancel = true
Request to cancel editing and revert changes
Toolbar configuration controlling visibility and behavior
The currently-applied variant ID, or null when the Default form is active.
Emitted when a custom toolbar button is clicked
Request to delete the current record
Computed descendant tree for breadcrumb display
Names of dirty fields for display in save bar
Whether the form is in edit mode
Request to enter or exit edit mode
Entity info for IS-A hierarchy and metadata
Whether favorite init has completed (prevents flash of wrong icon)
Request to toggle favorite status
Request to show record change history
Whether the record has unsaved changes
Whether the record is currently a favorite
Whether to show the toolbar in a saving/loading state
Whether the tags panel is currently open
Count of lists this record belongs to
Request to show list management
Emitted for all navigation actions (record links, hierarchy clicks, etc.)
The entity record being displayed/edited
Request to save the current record
Request to show dirty field changes
Number of tags applied to this record
Emitted when the Tags button is clicked
Whether the current user has delete permission
Whether the current user has edit permission
Whether the variant-picker dropdown is currently open.
Emitted when the user picks an item from the form-variant dropdown.
Payload is the override ID for a specific variant, or null when the
user picks the "Default form" row (CodeGen / Angular fallback).
Available form variants for this entity. When the array has >1 entry
and Config.ShowFormVariantPicker is true, the toolbar renders a
right-side "form picker" button (icon) that opens a dropdown with
the Default form + each variant. Picking emits VariantPicked
with the override ID, or null for the CodeGen Angular default.
Shape is intentionally minimal — Generic doesn't depend on the resolver row type. Hosts shape their data into this. See VariantPickerItem on the container for the canonical shape.
Number of record change versions for this record (displayed as "vN" badge on history button)
The actual loaded IS-A child chain for the current record. Walks Record.ISAChild → ISAChild.ISAChild → ... collecting each child entity. This differs from ChildEntities (metadata) because it represents the SPECIFIC child type that exists for THIS record, not all possible subtypes.
For overlapping subtype parents, this is empty (ISAChild returns null) — use OverlappingChildren instead.
Child entity types from metadata (all possible subtypes)
Label for the currently-active variant, or "Default form" when none.
Display-friendly names of dirty fields for the edit banner
Whether this entity has child entity types (IS-A parent)
Whether this record has a loaded IS-A child entity
Whether the current record has overlapping child types discovered
Whether this entity has parent entities (IS-A child)
Whether this entity is part of any IS-A hierarchy (parent or child side)
For overlapping subtype parents (AllowMultipleSubtypes = true), returns the list of child entity type names that have records for this PK. Populated by InitializeChildEntity() during record load.
IS-A parent chain for breadcrumb display
Display name for the edit banner
True iff the toolbar should render the variant-picker button.
Note the threshold is >= 1, NOT > 1. The picker menu always
includes the "Default form" row (CodeGen / Angular fallback) — that
row isn't in Variants; it's rendered unconditionally as the
first row inside the menu. So any single variant still yields a real
choice (Default vs that variant) and the picker should appear. The
inline-strip implementation that this replaces used > 1 and
therefore hid the picker for entities with exactly one override,
which made that override unreachable from the UI.
Whether entity tracks record changes (for history button)
A callback method that performs change-detection, invoked
after the default change-detector runs.
See KeyValueDiffers and IterableDiffers for implementing
custom change checking for collections.
Navigate to a loaded child entity record in the IS-A hierarchy. The child shares the same primary key as the parent (IS-A inheritance).
Navigate to a descendant entity record in the IS-A hierarchy.
Navigate to an overlapping child entity record. Used when the parent has AllowMultipleSubtypes = true and multiple child types coexist for the same PK.
Navigate to a parent entity record in the IS-A hierarchy.
User picked a row in the variant menu. Closes the menu and emits
VariantPicked (null → "Default form" / CodeGen Angular; UUID →
specific override). No-op when the picked value matches the current.
Compact subtitle for a variant menu row: "Scope · Status".
Configurable form toolbar component.
Renders action buttons (edit, save, delete, favorite, history, lists), the IS-A entity hierarchy breadcrumb, and section controls (search, expand/collapse).
All navigation actions are emitted as events - the toolbar never calls any routing service directly. The host application subscribes and maps to its own navigation.
Example