@memberjunction/ng-base-forms 6.1.0-edge.2 → 6.1.0-edge.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +180 -4
- package/README.md +4 -1
- package/dist/lib/base-form-component.d.ts +93 -3
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +240 -9
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/chrome/base-form-policy.d.ts +26 -0
- package/dist/lib/chrome/base-form-policy.d.ts.map +1 -0
- package/dist/lib/chrome/base-form-policy.js +9 -0
- package/dist/lib/chrome/base-form-policy.js.map +1 -0
- package/dist/lib/chrome/clipped-title.d.ts +8 -0
- package/dist/lib/chrome/clipped-title.d.ts.map +1 -0
- package/dist/lib/chrome/clipped-title.js +18 -0
- package/dist/lib/chrome/clipped-title.js.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts +35 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js +96 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts +24 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js +52 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -0
- package/dist/lib/chrome/form-chrome.d.ts +59 -0
- package/dist/lib/chrome/form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome.js +37 -0
- package/dist/lib/chrome/form-chrome.js.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts +8 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.js +70 -0
- package/dist/lib/chrome/load-form-chrome-rules.js.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts +114 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.js +713 -0
- package/dist/lib/chrome/resolve-form-chrome.js.map +1 -0
- package/dist/lib/container/record-form-container.component.d.ts +170 -6
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
- package/dist/lib/container/record-form-container.component.js +1194 -62
- package/dist/lib/container/record-form-container.component.js.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts +54 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.js +143 -7
- package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
- package/dist/lib/form-record-refresh.coordinator.d.ts +27 -0
- package/dist/lib/form-record-refresh.coordinator.d.ts.map +1 -0
- package/dist/lib/form-record-refresh.coordinator.js +33 -0
- package/dist/lib/form-record-refresh.coordinator.js.map +1 -0
- package/dist/lib/form-state.interface.d.ts +4 -0
- package/dist/lib/form-state.interface.d.ts.map +1 -1
- package/dist/lib/form-state.interface.js.map +1 -1
- package/dist/lib/form-state.service.d.ts +5 -0
- package/dist/lib/form-state.service.d.ts.map +1 -1
- package/dist/lib/form-state.service.js +23 -2
- package/dist/lib/form-state.service.js.map +1 -1
- package/dist/lib/host/entity-form-host.component.d.ts +5 -1
- package/dist/lib/host/entity-form-host.component.d.ts.map +1 -1
- package/dist/lib/host/entity-form-host.component.js +16 -2
- package/dist/lib/host/entity-form-host.component.js.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts +6 -2
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js +15 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.d.ts +24 -2
- package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.js +104 -10
- package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts +85 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.js +72 -3
- package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts +8 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts.map +1 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js +19 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js.map +1 -0
- package/dist/lib/panel-slot/form-contribution.d.ts +79 -0
- package/dist/lib/panel-slot/form-contribution.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contribution.js +253 -0
- package/dist/lib/panel-slot/form-contribution.js.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts +27 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.js +83 -0
- package/dist/lib/panel-slot/form-contributions.component.js.map +1 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts +2 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts.map +1 -1
- package/dist/lib/panel-slot/form-panel-slot.component.js +35 -4
- package/dist/lib/panel-slot/form-panel-slot.component.js.map +1 -1
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts +22 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js +78 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js.map +1 -0
- package/dist/lib/related-grid-height.d.ts +20 -0
- package/dist/lib/related-grid-height.d.ts.map +1 -0
- package/dist/lib/related-grid-height.js +30 -0
- package/dist/lib/related-grid-height.js.map +1 -0
- package/dist/lib/section-manager/section-manager.component.d.ts +20 -1
- package/dist/lib/section-manager/section-manager.component.d.ts.map +1 -1
- package/dist/lib/section-manager/section-manager.component.js +204 -25
- package/dist/lib/section-manager/section-manager.component.js.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.d.ts +55 -4
- package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.js +734 -306
- package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
- package/dist/lib/types/form-events.d.ts +35 -0
- package/dist/lib/types/form-events.d.ts.map +1 -1
- package/dist/lib/types/form-events.js +45 -0
- package/dist/lib/types/form-events.js.map +1 -1
- package/dist/lib/types/form-toolbar-item.d.ts +145 -0
- package/dist/lib/types/form-toolbar-item.d.ts.map +1 -0
- package/dist/lib/types/form-toolbar-item.js +2 -0
- package/dist/lib/types/form-toolbar-item.js.map +1 -0
- package/dist/lib/types/form-types.d.ts +8 -0
- package/dist/lib/types/form-types.d.ts.map +1 -1
- package/dist/lib/types/form-types.js.map +1 -1
- package/dist/lib/types/toolbar-config.d.ts +7 -2
- package/dist/lib/types/toolbar-config.d.ts.map +1 -1
- package/dist/lib/types/toolbar-config.js +6 -0
- package/dist/lib/types/toolbar-config.js.map +1 -1
- package/dist/module.d.ts +17 -14
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +14 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +13 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +14 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +19 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-toolbar.component.js","sourceRoot":"","sources":["../../../src/lib/toolbar/form-toolbar.component.ts","../../../src/lib/toolbar/form-toolbar.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, TemplateRef, ChangeDetectorRef, inject, DoCheck } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { BaseEntity, EntityInfo, CompositeKey } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { FormToolbarConfig, DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';\nimport { FormNavigationEvent } from '../types/navigation-events';\nimport { DiscoverISADescendants, BuildDescendantTree, IsaRelatedItem } from '../isa-related-panel/isa-hierarchy-utils';\nimport { FormWidthMode, FormContext } from '../types/form-types';\nimport {\n BeforeSaveEventArgs,\n BeforeDeleteEventArgs,\n BeforeCancelEventArgs,\n BeforeHistoryViewEventArgs,\n BeforeListManagementEventArgs,\n CustomToolbarButtonClickEventArgs,\n CustomToolbarButton\n} from '../types/form-events';\n\n/**\n * Configurable form toolbar component.\n *\n * Renders action buttons (edit, save, delete, favorite, history, lists),\n * the IS-A entity hierarchy breadcrumb, and section controls (search, expand/collapse).\n *\n * All navigation actions are emitted as events - the toolbar never calls any routing\n * service directly. The host application subscribes and maps to its own navigation.\n *\n * @example\n * ```html\n * <mj-form-toolbar\n * [record]=\"record\"\n * [editMode]=\"editMode\"\n * [config]=\"toolbarConfig\"\n * (Navigate)=\"onNavigate($event)\"\n * (EditModeChange)=\"editMode = $event\"\n * (SaveRequested)=\"onSave()\"\n * (DeleteRequested)=\"onDelete()\">\n * </mj-form-toolbar>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-form-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './form-toolbar.component.html',\n styleUrls: ['./form-toolbar.component.css']\n})\nexport class MjFormToolbarComponent extends BaseAngularComponent implements DoCheck {\n private cdr = inject(ChangeDetectorRef);\n\n // ---- Deprecated form reference (backward compat) ----\n\n private _formRef: unknown;\n\n /**\n * @deprecated Use `<mj-record-form-container>` or pass individual inputs instead.\n * Accepts a form component reference for backward compatibility.\n * When set, the toolbar reads Record, EditMode, etc. from this reference.\n */\n @Input() set Form(value: unknown) { this._formRef = value; }\n get Form(): unknown { return this._formRef; }\n\n /** @deprecated Use [Form] or individual inputs instead */\n @Input('form') set _deprecatedForm(value: unknown) { this.Form = value; }\n\n // ---- Inputs ----\n\n /** The entity record being displayed/edited */\n @Input() Record!: BaseEntity;\n\n /** Whether the form is in edit mode */\n @Input() EditMode = false;\n\n /** Whether the current user has edit permission */\n @Input() UserCanEdit = false;\n\n /** Whether the current user has delete permission */\n @Input() UserCanDelete = false;\n\n /** Whether the record is currently a favorite */\n @Input() IsFavorite = false;\n\n /** Whether favorite init has completed (prevents flash of wrong icon) */\n @Input() FavoriteInitDone = false;\n\n /** Whether the record has unsaved changes */\n @Input() IsDirty = false;\n\n /** Names of dirty fields for display in save bar */\n @Input() DirtyFieldNames: string[] = [];\n\n /** Count of lists this record belongs to */\n @Input() ListCount = 0;\n\n /** Number of tags applied to this record */\n @Input() TagCount = 0;\n\n /** Whether the tags panel is currently open */\n @Input() IsTagsPanelOpen = false;\n\n /** Number of record change versions for this record (displayed as \"vN\" badge on history button) */\n @Input() VersionCount = 0;\n\n /** Entity info for IS-A hierarchy and metadata */\n @Input() EntityInfo: EntityInfo | null = null;\n\n /** Toolbar configuration controlling visibility and behavior */\n @Input() Config: FormToolbarConfig = DEFAULT_TOOLBAR_CONFIG;\n\n /** Whether to show the toolbar in a saving/loading state */\n @Input() IsSaving = false;\n\n // Section controls inputs\n @Input() VisibleSectionCount = 0;\n @Input() TotalSectionCount = 0;\n @Input() ExpandedSectionCount = 0;\n @Input() SearchFilter = '';\n @Input() ShowEmptyFields = false;\n @Input() WidthMode: FormWidthMode = 'centered';\n @Input() HasCustomSectionOrder = false;\n\n /** Optional template for additional toolbar actions */\n @Input() AdditionalActionsTemplate: TemplateRef<unknown> | null = null;\n\n /**\n * Available form variants for this entity. When the array has >1 entry\n * and `Config.ShowFormVariantPicker` is true, the toolbar renders a\n * right-side \"form picker\" button (icon) that opens a dropdown with\n * the Default form + each variant. Picking emits {@link VariantPicked}\n * with the override ID, or null for the CodeGen Angular default.\n *\n * Shape is intentionally minimal — Generic doesn't depend on the\n * resolver row type. Hosts shape their data into this. See\n * {@link VariantPickerItem} on the container for the canonical shape.\n */\n @Input() Variants: Array<{ ID: string; Label: string; Scope: 'User' | 'Role' | 'Global'; Status: 'Active' | 'Pending' | 'Inactive' }> = [];\n\n /** The currently-applied variant ID, or null when the Default form is active. */\n @Input() CurrentVariantID: string | null = null;\n\n // ---- Outputs ----\n\n /** Emitted for all navigation actions (record links, hierarchy clicks, etc.) */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n /** Request to enter or exit edit mode */\n @Output() EditModeChange = new EventEmitter<boolean>();\n\n /** Emitted BEFORE save - can be cancelled by setting event.Cancel = true */\n @Output() BeforeSave = new EventEmitter<BeforeSaveEventArgs>();\n\n /** Request to save the current record */\n @Output() SaveRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true */\n @Output() BeforeCancel = new EventEmitter<BeforeCancelEventArgs>();\n\n /** Request to cancel editing and revert changes */\n @Output() CancelRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE delete - can be cancelled by setting event.Cancel = true */\n @Output() BeforeDelete = new EventEmitter<BeforeDeleteEventArgs>();\n\n /** Request to delete the current record */\n @Output() DeleteRequested = new EventEmitter<void>();\n\n /** Request to toggle favorite status */\n @Output() FavoriteToggled = new EventEmitter<void>();\n\n /** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */\n @Output() BeforeHistoryView = new EventEmitter<BeforeHistoryViewEventArgs>();\n\n /** Request to show record change history */\n @Output() HistoryRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE list management - can be cancelled by setting event.Cancel = true */\n @Output() BeforeListManagement = new EventEmitter<BeforeListManagementEventArgs>();\n\n /** Request to show list management */\n @Output() ListManagementRequested = new EventEmitter<void>();\n\n /** Emitted when the Tags button is clicked */\n @Output() TagsPanelToggled = new EventEmitter<void>();\n\n /** Request to show dirty field changes */\n @Output() ShowChangesRequested = new EventEmitter<void>();\n\n /**\n * Emitted when the user picks an item from the form-variant dropdown.\n * Payload is the override ID for a specific variant, or `null` when the\n * user picks the \"Default form\" row (CodeGen / Angular fallback).\n */\n @Output() VariantPicked = new EventEmitter<string | null>();\n\n /** Emitted when a custom toolbar button is clicked */\n @Output() CustomButtonClick = new EventEmitter<CustomToolbarButtonClickEventArgs>();\n\n // Section control outputs\n @Output() FilterChange = new EventEmitter<string>();\n @Output() ExpandAllRequested = new EventEmitter<void>();\n @Output() CollapseAllRequested = new EventEmitter<void>();\n @Output() ShowEmptyFieldsChange = new EventEmitter<boolean>();\n @Output() WidthModeChange = new EventEmitter<FormWidthMode>();\n @Output() ResetSectionOrderRequested = new EventEmitter<void>();\n @Output() ManageSectionsRequested = new EventEmitter<void>();\n\n // ---- Internal state ----\n ShowDeleteDialog = false;\n ShowDiscardDialog = false;\n\n /** Computed descendant tree for breadcrumb display */\n DescendantTree: IsaRelatedItem[] = [];\n private _lastRecordForChains: BaseEntity | null = null;\n private _chainsLoading = false;\n\n // ---- Lifecycle ----\n\n ngDoCheck(): void {\n if (this._formRef) {\n this.SyncFromFormRef();\n }\n this.CheckDescendantChains();\n }\n\n /**\n * Sync toolbar state from the legacy form reference.\n * Only active when [Form] is set (backward-compat mode).\n */\n private SyncFromFormRef(): void {\n const ref = this._formRef as Record<string, unknown>;\n const rec = ref['record'] as BaseEntity | undefined;\n let changed = false;\n\n if (rec && rec !== this.Record) {\n this.Record = rec;\n this.EntityInfo = rec.EntityInfo;\n changed = true;\n }\n\n if (rec) {\n const dirty = rec.Dirty;\n if (dirty !== this.IsDirty) {\n this.IsDirty = dirty;\n changed = true;\n }\n if (dirty) {\n const dirtyNames = rec.Fields.filter(f => f.Dirty).map(f => f.Name);\n if (dirtyNames.length !== this.DirtyFieldNames.length) {\n this.DirtyFieldNames = dirtyNames;\n changed = true;\n }\n }\n }\n\n const editMode = !!ref['EditMode'];\n if (editMode !== this.EditMode) { this.EditMode = editMode; changed = true; }\n\n const canEdit = !!ref['UserCanEdit'];\n if (canEdit !== this.UserCanEdit) { this.UserCanEdit = canEdit; changed = true; }\n\n const canDelete = !!ref['UserCanDelete'];\n if (canDelete !== this.UserCanDelete) { this.UserCanDelete = canDelete; changed = true; }\n\n const isFavorite = !!ref['IsFavorite'];\n if (isFavorite !== this.IsFavorite) { this.IsFavorite = isFavorite; changed = true; }\n\n const favDone = !!ref['FavoriteInitDone'];\n if (favDone !== this.FavoriteInitDone) { this.FavoriteInitDone = favDone; changed = true; }\n\n if (changed) {\n this.cdr.markForCheck();\n }\n }\n\n /** Whether entity tracks record changes (for history button) */\n get TracksChanges(): boolean {\n return this.EntityInfo?.TrackRecordChanges === true;\n }\n\n /** IS-A parent chain for breadcrumb display */\n get ParentChain(): EntityInfo[] {\n if (!this.EntityInfo) return [];\n return this.EntityInfo.ParentChain.slice().reverse();\n }\n\n /** Whether this entity has parent entities (IS-A child) */\n get HasParentEntities(): boolean {\n return this.ParentChain.length > 0;\n }\n\n /** Child entity types from metadata (all possible subtypes) */\n get ChildEntities(): EntityInfo[] {\n return this.EntityInfo?.ChildEntities ?? [];\n }\n\n /** Whether this entity has child entity types (IS-A parent) */\n get HasChildEntities(): boolean {\n return this.ChildEntities.length > 0;\n }\n\n /**\n * The actual loaded IS-A child chain for the current record.\n * Walks Record.ISAChild → ISAChild.ISAChild → ... collecting each child entity.\n * This differs from ChildEntities (metadata) because it represents the SPECIFIC\n * child type that exists for THIS record, not all possible subtypes.\n *\n * For overlapping subtype parents, this is empty (ISAChild returns null) —\n * use OverlappingChildren instead.\n */\n get ChildChain(): BaseEntity[] {\n if (!this.Record) return [];\n const chain: BaseEntity[] = [];\n let current = this.Record.ISAChild;\n while (current) {\n chain.push(current);\n current = current.ISAChild;\n }\n return chain;\n }\n\n /** Whether this record has a loaded IS-A child entity */\n get HasLoadedChild(): boolean {\n return this.Record?.ISAChild != null;\n }\n\n /**\n * For overlapping subtype parents (AllowMultipleSubtypes = true), returns the\n * list of child entity type names that have records for this PK.\n * Populated by InitializeChildEntity() during record load.\n */\n get OverlappingChildren(): { entityName: string }[] {\n return this.Record?.ISAChildren ?? [];\n }\n\n /** Whether the current record has overlapping child types discovered */\n get HasOverlappingChildren(): boolean {\n return this.OverlappingChildren.length > 0;\n }\n\n /** Whether this entity is part of any IS-A hierarchy (parent or child side) */\n get IsInHierarchy(): boolean {\n return this.HasParentEntities || this.HasLoadedChild || this.HasOverlappingChildren || this.DescendantTree.length > 0;\n }\n\n /** Display-friendly names of dirty fields for the edit banner */\n get DirtyFieldDisplayNames(): string[] {\n if (!this.Record?.EntityInfo || this.DirtyFieldNames.length === 0) return [];\n return this.DirtyFieldNames.map(name => {\n const field = this.Record.EntityInfo.Fields.find(f => f.Name === name);\n return field?.DisplayNameOrName ?? name;\n });\n }\n\n /** Display name for the edit banner */\n get RecordDisplayName(): string {\n if (!this.Record) return '';\n const info = this.Record.EntityInfo;\n if (info?.NameField) {\n const name = this.Record.Get(info.NameField.Name);\n if (name) return String(name);\n }\n return this.Record.PrimaryKey.ToConcatenatedString();\n }\n\n // ---- Descendant Chain Computation ----\n\n /**\n * Check if descendant chains need recomputation (called from DoCheck).\n * Only triggers async computation when the record identity changes.\n */\n private CheckDescendantChains(): void {\n if (!this.Record) {\n if (this.DescendantTree.length > 0) {\n this.DescendantTree = [];\n this._lastRecordForChains = null;\n this.cdr.markForCheck();\n }\n return;\n }\n if (this.Record !== this._lastRecordForChains && !this._chainsLoading) {\n this.ComputeDescendantChains();\n }\n }\n\n /**\n * Asynchronously discover all IS-A descendants and convert to chains\n * for breadcrumb display. Each chain is a root-to-leaf path of entity names.\n */\n private ComputeDescendantChains(): void {\n this._lastRecordForChains = this.Record;\n\n if (!this.Record?.EntityInfo?.IsParentType) {\n this.DescendantTree = [];\n return;\n }\n\n this._chainsLoading = true;\n\n DiscoverISADescendants(this.Record, this.ProviderToUse).then(descendants => {\n this.DescendantTree = BuildDescendantTree(descendants);\n this._chainsLoading = false;\n this.cdr.markForCheck();\n }).catch(() => {\n this.DescendantTree = [];\n this._chainsLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n /**\n * Navigate to a descendant entity record in the IS-A hierarchy.\n */\n OnDescendantBadgeClick(entityName: string, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: entityName,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n // ---- Actions ----\n\n OnEdit(): void {\n if (this.DispatchToFormRef('StartEditMode')) return;\n this.EditModeChange.emit(true);\n }\n\n OnSave(): void {\n // Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError\n Promise.resolve().then(() => {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeSaveEventArgs(true);\n this.BeforeSave.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('SaveRecord', true)) return;\n this.SaveRequested.emit();\n });\n }\n\n OnCancel(): void {\n // If there are unsaved changes, show confirmation dialog\n if (this.IsDirty) {\n this.ShowDiscardDialog = true;\n this.cdr.markForCheck();\n return;\n }\n // No changes - cancel immediately\n this.EmitCancel();\n }\n\n OnDiscardConfirm(): void {\n this.ShowDiscardDialog = false;\n this.EmitCancel();\n this.cdr.markForCheck();\n }\n\n OnDiscardCancel(): void {\n this.ShowDiscardDialog = false;\n this.cdr.markForCheck();\n }\n\n private EmitCancel(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeCancelEventArgs();\n this.BeforeCancel.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('CancelEdit')) return;\n this.CancelRequested.emit();\n }\n\n OnDeleteClick(): void {\n this.ShowDeleteDialog = true;\n this.cdr.markForCheck();\n }\n\n OnDeleteConfirm(): void {\n this.ShowDeleteDialog = false;\n\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeDeleteEventArgs();\n this.BeforeDelete.emit(beforeEvent);\n if (beforeEvent.Cancel) {\n this.cdr.markForCheck();\n return;\n }\n\n if (this.DispatchToFormRef('OnDeleteRequested')) {\n this.cdr.markForCheck();\n return;\n }\n this.DeleteRequested.emit();\n this.cdr.markForCheck();\n }\n\n OnDeleteCancel(): void {\n this.ShowDeleteDialog = false;\n this.cdr.markForCheck();\n }\n\n OnFavoriteToggle(): void {\n if (this.DispatchToFormRef('OnFavoriteToggled')) return;\n this.FavoriteToggled.emit();\n }\n\n OnHistory(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeHistoryViewEventArgs();\n this.BeforeHistoryView.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('OnHistoryRequested')) return;\n this.HistoryRequested.emit();\n }\n\n OnListManagement(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeListManagementEventArgs();\n this.BeforeListManagement.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('OnListManagementRequested')) return;\n this.ListManagementRequested.emit();\n }\n\n OnTagsPanel(): void {\n if (this.DispatchToFormRef('HandleTagsPanel')) return;\n this.TagsPanelToggled.emit();\n }\n\n OnCustomButtonClick(button: CustomToolbarButton): void {\n if (button.Disabled) return;\n\n this.CustomButtonClick.emit({\n ButtonKey: button.Key,\n Button: button\n });\n }\n\n OnShowChanges(): void {\n if (this.DispatchToFormRef('ShowChanges')) return;\n this.ShowChangesRequested.emit();\n }\n\n // ── Form-variant picker ─────────────────────────────────────────\n\n /** Whether the variant-picker dropdown is currently open. */\n public VariantMenuOpen = false;\n\n /**\n * True iff the toolbar should render the variant-picker button.\n *\n * Note the threshold is `>= 1`, NOT `> 1`. The picker menu always\n * includes the \"Default form\" row (CodeGen / Angular fallback) — that\n * row isn't in {@link Variants}; it's rendered unconditionally as the\n * first row inside the menu. So any single variant still yields a real\n * choice (Default vs that variant) and the picker should appear. The\n * inline-strip implementation that this replaces used `> 1` and\n * therefore hid the picker for entities with exactly one override,\n * which made that override unreachable from the UI.\n */\n public get ShowVariantPickerButton(): boolean {\n return !!this.Config.ShowFormVariantPicker && (this.Variants?.length ?? 0) >= 1;\n }\n\n /** Label for the currently-active variant, or \"Default form\" when none. */\n public get CurrentVariantLabel(): string {\n const v = this.Variants?.find(x => UUIDsEqual(x.ID, this.CurrentVariantID));\n return v?.Label ?? 'Default form';\n }\n\n /** Compact subtitle for a variant menu row: \"Scope · Status\". */\n public VariantSubtitle(v: { Scope: string; Status: string }): string {\n return `${v.Scope} · ${v.Status}`;\n }\n\n public ToggleVariantMenu(): void {\n this.VariantMenuOpen = !this.VariantMenuOpen;\n this.cdr.markForCheck();\n }\n\n public CloseVariantMenu(): void {\n if (this.VariantMenuOpen) {\n this.VariantMenuOpen = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * User picked a row in the variant menu. Closes the menu and emits\n * `VariantPicked` (null → \"Default form\" / CodeGen Angular; UUID →\n * specific override). No-op when the picked value matches the current.\n */\n public OnVariantClick(variantID: string | null): void {\n this.VariantMenuOpen = false;\n if (variantID === this.CurrentVariantID) {\n this.cdr.markForCheck();\n return;\n }\n this.VariantPicked.emit(variantID);\n }\n\n /**\n * Try to call a method on the legacy form reference.\n * Returns true if the method was found and called, false otherwise.\n */\n private DispatchToFormRef(methodName: string, ...args: unknown[]): boolean {\n if (!this._formRef) return false;\n const ref = this._formRef as Record<string, unknown>;\n const method = ref[methodName];\n if (typeof method === 'function') {\n (method as (...a: unknown[]) => unknown).call(this._formRef, ...args);\n return true;\n }\n return false;\n }\n\n /**\n * Navigate to a parent entity record in the IS-A hierarchy.\n */\n OnParentBadgeClick(parentEntity: EntityInfo, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: parentEntity.Name,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'parent'\n });\n }\n\n /**\n * Navigate to a child entity type list view.\n */\n OnChildEntityClick(childEntity: EntityInfo): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'child-entity-type',\n ChildEntityName: childEntity.Name,\n ParentEntityName: this.EntityInfo!.Name,\n ParentRecordId: this.Record.PrimaryKey.ToConcatenatedString()\n });\n }\n\n /**\n * Navigate to a loaded child entity record in the IS-A hierarchy.\n * The child shares the same primary key as the parent (IS-A inheritance).\n */\n OnChildBadgeClick(childEntity: BaseEntity, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: childEntity.EntityInfo.Name,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n /**\n * Navigate to an overlapping child entity record.\n * Used when the parent has AllowMultipleSubtypes = true and multiple child\n * types coexist for the same PK.\n */\n OnOverlappingChildClick(childEntityName: string, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: childEntityName,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n // ---- Section Controls ----\n\n OnFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.FilterChange.emit(input.value);\n }\n\n OnClearFilter(): void {\n this.FilterChange.emit('');\n }\n\n OnExpandAll(): void {\n this.ExpandAllRequested.emit();\n }\n\n OnCollapseAll(): void {\n this.CollapseAllRequested.emit();\n }\n\n OnToggleEmptyFields(): void {\n this.ShowEmptyFieldsChange.emit(!this.ShowEmptyFields);\n }\n\n OnToggleWidthMode(): void {\n const newMode: FormWidthMode = this.WidthMode === 'centered' ? 'full-width' : 'centered';\n this.WidthModeChange.emit(newMode);\n }\n\n OnResetSectionOrder(): void {\n this.ResetSectionOrderRequested.emit();\n }\n\n OnManageSections(): void {\n this.ManageSectionsRequested.emit();\n }\n}\n","<!-- ============================================\n EDIT MODE BANNER (shows above toolbar when editing)\n ============================================ -->\n@if (EditMode && Config.ShowEditBanner) {\n <div class=\"mj-forms-edit-banner\">\n @if (DirtyFieldDisplayNames.length > 0) {\n <i class=\"fa-solid fa-circle-exclamation mj-forms-edit-banner-icon--dirty\"></i>\n <span class=\"mj-forms-edit-banner-dirty\">\n <strong>{{ DirtyFieldDisplayNames.length }}</strong>\n field{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }} modified\n — {{ DirtyFieldDisplayNames.join(', ') }}\n </span>\n } @else {\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span class=\"mj-forms-edit-banner-text\">Editing: {{ RecordDisplayName }}</span>\n }\n <div class=\"mj-forms-toolbar-spacer\"></div>\n <div class=\"mj-forms-edit-banner-actions\">\n <button class=\"mj-forms-btn mj-forms-btn--primary\" (click)=\"OnSave()\" [disabled]=\"IsSaving\" title=\"Save Changes\">\n <i class=\"fa-solid fa-floppy-disk\"></i>\n <span class=\"mj-forms-btn-text\">Save Changes</span>\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnCancel()\" [disabled]=\"IsSaving\" title=\"Discard Changes\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n <span class=\"mj-forms-btn-text\">Discard</span>\n </button>\n </div>\n </div>\n}\n\n<!-- ============================================\n MAIN TOOLBAR (read mode only — hidden in edit mode)\n ============================================ -->\n@if (!EditMode) {\n <div class=\"mj-forms-toolbar\" [class.mj-forms-toolbar--sticky]=\"Config.StickyToolbar\">\n\n <!-- Action buttons -->\n <div class=\"mj-forms-toolbar-group\">\n @if (Config.ShowEditButton && UserCanEdit) {\n <button class=\"mj-forms-btn\" (click)=\"OnEdit()\" title=\"Edit this Record\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n }\n @if (Config.ShowDeleteButton && UserCanDelete) {\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteClick()\" title=\"Delete this Record\">\n <i class=\"fa-regular fa-trash-can\"></i>\n </button>\n }\n @if (Config.ShowFavoriteButton && FavoriteInitDone) {\n <button class=\"mj-forms-btn\" (click)=\"OnFavoriteToggle()\" [title]=\"IsFavorite ? 'Remove Favorite' : 'Make Favorite'\">\n <i [class]=\"IsFavorite ? 'fa-solid fa-star mj-icon--favorite' : 'fa-regular fa-star'\"></i>\n </button>\n }\n @if (Config.ShowHistoryButton && TracksChanges) {\n <button class=\"mj-forms-btn mj-forms-btn--history\" (click)=\"OnHistory()\"\n [title]=\"VersionCount > 0 ? VersionCount + ' version(s) tracked' : 'Record Changes'\">\n <i class=\"fa-regular fa-clock\"></i>\n @if (VersionCount > 0) {\n <span class=\"mj-version-count-badge\">v{{ VersionCount }}</span>\n }\n </button>\n }\n @if (Config.ShowListButton) {\n <button class=\"mj-forms-btn mj-forms-btn--list\" (click)=\"OnListManagement()\"\n [title]=\"ListCount > 0 ? 'Member of ' + ListCount + ' list(s)' : 'Add to a list'\">\n <i class=\"fa-regular fa-bookmark\"></i>\n @if (ListCount > 0) {\n <span class=\"mj-list-count-badge\">{{ ListCount }}</span>\n }\n </button>\n }\n @if (Config.ShowTagsButton) {\n <button class=\"mj-forms-btn\" (click)=\"OnTagsPanel()\"\n [title]=\"TagCount > 0 ? TagCount + ' tag(s)' : 'View tags'\">\n <i class=\"fa-solid fa-tags\"></i>\n @if (TagCount > 0) {\n <span class=\"mj-list-count-badge\">{{ TagCount }}</span>\n }\n </button>\n }\n\n <!-- Custom toolbar buttons -->\n @for (button of Config.CustomButtons; track button.Key) {\n @if (button.Visible !== false) {\n <button class=\"mj-forms-btn\"\n [class]=\"button.CssClass || ''\"\n [disabled]=\"button.Disabled || false\"\n [title]=\"button.Description\"\n (click)=\"OnCustomButtonClick(button)\">\n <i [class]=\"button.Icon\"></i>\n </button>\n }\n }\n </div>\n\n <!-- Separator before hierarchy -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-forms-toolbar-separator\"></div>\n }\n\n <!-- IS-A Entity Hierarchy Breadcrumb (bidirectional: Root → ... → Current → ... → Leaf) -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-entity-hierarchy\">\n <!-- Parent chain (root → ... → immediate parent) -->\n @for (parent of ParentChain; track parent.ID) {\n <a class=\"mj-entity-badge mj-entity-badge--parent\"\n [title]=\"'Navigate to parent: ' + parent.Name\"\n (click)=\"OnParentBadgeClick(parent, $event)\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n {{ parent.Name }}\n </a>\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n }\n\n <!-- Current entity (always shown) -->\n <span class=\"mj-entity-badge mj-entity-badge--current\">{{ EntityInfo?.Name }}</span>\n\n <!-- Descendant tree (recursive: inline for single paths, branching for multiple) -->\n @if (DescendantTree.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: DescendantTree }\"></ng-container>\n }\n </div>\n }\n\n <!-- Spacer pushes section controls to the right -->\n <div class=\"mj-forms-toolbar-spacer\"></div>\n\n <!-- Form-variant picker: right-side toolbar button. Opens a dropdown\n with the Default (CodeGen Angular) form + every variant the host\n supplied. Persists the user's pick via the host's resolver (which\n goes through UserInfoEngine settings, not localStorage). Hidden\n entirely when the host disables ShowFormVariantPicker or supplied\n fewer than 2 variants. -->\n @if (ShowVariantPickerButton) {\n <div class=\"mj-form-variant-picker-host\"\n [class.open]=\"VariantMenuOpen\">\n <button class=\"mj-forms-btn mj-form-variant-picker-trigger\"\n type=\"button\"\n (click)=\"ToggleVariantMenu()\"\n (blur)=\"CloseVariantMenu()\"\n [title]=\"'Form variant: ' + CurrentVariantLabel + ' — click to change'\">\n <i class=\"fa-solid fa-pen-ruler\"></i>\n <span class=\"mj-form-variant-picker-current-label\">{{ CurrentVariantLabel }}</span>\n <i class=\"fa-solid fa-chevron-down chev\"></i>\n </button>\n @if (VariantMenuOpen) {\n <div class=\"mj-form-variant-picker-menu\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"mj-form-variant-picker-row mj-form-variant-picker-default\"\n [class.current]=\"!CurrentVariantID\"\n (click)=\"OnVariantClick(null)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">\n Default form <span class=\"mj-form-variant-picker-default-tag\">(default)</span>\n </span>\n <span class=\"mj-form-variant-picker-row-sub\">CodeGen-generated Angular fallback</span>\n </div>\n @if (!CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n @for (v of Variants; track v.ID) {\n <div class=\"mj-form-variant-picker-row\"\n [class.current]=\"v.ID === CurrentVariantID\"\n [class.inactive]=\"v.Status !== 'Active'\"\n (click)=\"OnVariantClick(v.ID)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">{{ v.Label }}</span>\n <span class=\"mj-form-variant-picker-row-sub\">{{ VariantSubtitle(v) }}</span>\n </div>\n @if (v.ID === CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Section Controls -->\n @if (Config.ShowSectionControls) {\n <div class=\"mj-forms-toolbar-group mj-section-controls\">\n @if (Config.ShowSectionFilter) {\n <div class=\"mj-forms-search-wrapper\">\n <input type=\"text\"\n class=\"mj-section-search\"\n [class.mj-section-search--active]=\"SearchFilter\"\n [value]=\"SearchFilter\"\n (input)=\"OnFilterInput($event)\"\n placeholder=\"Search sections...\">\n @if (SearchFilter) {\n <button class=\"mj-clear-search\" (click)=\"OnClearFilter()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n @if (Config.ShowExpandCollapseAllButtons) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount >= VisibleSectionCount\"\n (click)=\"OnExpandAll()\" title=\"Expand all sections\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount === 0\"\n (click)=\"OnCollapseAll()\" title=\"Collapse all sections\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n }\n @if (HasCustomSectionOrder) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\" (click)=\"OnResetSectionOrder()\" title=\"Reset section order\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n </button>\n }\n @if (Config.ShowSectionManager) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnManageSections()\" title=\"Manage section order\">\n <i class=\"fa-solid fa-bars-staggered\"></i>\n </button>\n }\n @if (Config.ShowWidthToggle) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnToggleWidthMode()\"\n [title]=\"WidthMode === 'centered' ? 'Expand to full width' : 'Center content'\">\n <i [class]=\"WidthMode === 'centered' ? 'fa-solid fa-arrows-left-right-to-line' : 'fa-solid fa-compress'\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Additional actions slot -->\n @if (AdditionalActionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"AdditionalActionsTemplate\"></ng-container>\n }\n <ng-content select=\"[toolbar-additional-controls]\"></ng-content>\n </div>\n}\n\n<!-- ============================================\n DISCARD CHANGES CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDiscardDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDiscardCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Discard Changes?</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDiscardCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>You have <strong>{{ DirtyFieldDisplayNames.length }}</strong> unsaved change{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }}. Are you sure you want to discard {{ DirtyFieldDisplayNames.length === 1 ? 'it' : 'them' }}?</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDiscardConfirm()\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n Discard Changes\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDiscardCancel()\">\n Keep Editing\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- ============================================\n DELETE CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDeleteDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDeleteCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Confirm Deletion</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDeleteCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>Are you sure you want to delete this record? This action cannot be undone.</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDeleteConfirm()\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Recursive template for IS-A descendant tree rendering.\n Single child at a level → inline with chevron.\n Multiple children at a level → tree branch with CSS connector lines. -->\n<ng-template #descendantTreeTpl let-items=\"items\">\n @if (items.length === 1) {\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + items[0].EntityName\"\n (click)=\"OnDescendantBadgeClick(items[0].EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ items[0].EntityName }}\n </a>\n @if (items[0].Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: items[0].Children }\"></ng-container>\n }\n } @else if (items.length > 1) {\n <div class=\"mj-descendant-chains\">\n @for (item of items; track item.EntityName) {\n <div class=\"mj-descendant-chain\">\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + item.EntityName\"\n (click)=\"OnDescendantBadgeClick(item.EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ item.EntityName }}\n </a>\n @if (item.Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: item.Children }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n"]}
|
|
1
|
+
{"version":3,"file":"form-toolbar.component.js","sourceRoot":"","sources":["../../../src/lib/toolbar/form-toolbar.component.ts","../../../src/lib/toolbar/form-toolbar.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, TemplateRef, ChangeDetectorRef, inject, DoCheck, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { BaseEntity, EntityInfo, CompositeKey } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { FormToolbarConfig, DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';\nimport { FormToolbarItemConfig, FormToolbarItemKey, FormToolbarItemClickEventArgs, ResolvedToolbarItem } from '../types/form-toolbar-item';\nimport { IsAccordionFormChrome } from '../chrome/form-chrome';\nimport { FormNavigationEvent } from '../types/navigation-events';\nimport { DiscoverISADescendants, BuildDescendantTree, IsaRelatedItem } from '../isa-related-panel/isa-hierarchy-utils';\nimport { FormWidthMode, FormContext } from '../types/form-types';\nimport { FormRecordRefreshCoordinator } from '../form-record-refresh.coordinator';\nimport {\n BeforeSaveEventArgs,\n BeforeDeleteEventArgs,\n BeforeRefreshEventArgs,\n BeforeCancelEventArgs,\n BeforeHistoryViewEventArgs,\n BeforeListManagementEventArgs,\n CustomToolbarButtonClickEventArgs,\n CustomToolbarButton\n} from '../types/form-events';\n\n/**\n * Configurable form toolbar component.\n *\n * Renders action buttons (edit, save, delete, favorite, history, lists),\n * the IS-A entity hierarchy breadcrumb, and section controls (search, expand/collapse).\n *\n * All navigation actions are emitted as events - the toolbar never calls any routing\n * service directly. The host application subscribes and maps to its own navigation.\n *\n * @example\n * ```html\n * <mj-form-toolbar\n * [record]=\"record\"\n * [editMode]=\"editMode\"\n * [config]=\"toolbarConfig\"\n * (Navigate)=\"onNavigate($event)\"\n * (EditModeChange)=\"editMode = $event\"\n * (SaveRequested)=\"onSave()\"\n * (DeleteRequested)=\"onDelete()\">\n * </mj-form-toolbar>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-form-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './form-toolbar.component.html',\n styleUrls: ['./form-toolbar.component.css']\n})\nexport class MjFormToolbarComponent extends BaseAngularComponent implements DoCheck, OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private recordRefresh = inject(FormRecordRefreshCoordinator, { optional: true });\n private destroy$ = new Subject<void>();\n\n // ---- Deprecated form reference (backward compat) ----\n\n private _formRef: unknown;\n\n /**\n * @deprecated Use `<mj-record-form-container>` or pass individual inputs instead.\n * Accepts a form component reference for backward compatibility.\n * When set, the toolbar reads Record, EditMode, etc. from this reference.\n */\n @Input() set Form(value: unknown) { this._formRef = value; }\n get Form(): unknown { return this._formRef; }\n\n /** @deprecated Use [Form] or individual inputs instead */\n @Input('form') set _deprecatedForm(value: unknown) { this.Form = value; }\n\n // ---- Inputs ----\n\n /** The entity record being displayed/edited */\n @Input() Record!: BaseEntity;\n\n /** Whether the form is in edit mode */\n @Input() EditMode = false;\n\n /** Whether the current user has edit permission */\n @Input() UserCanEdit = false;\n\n /** Whether the current user has delete permission */\n @Input() UserCanDelete = false;\n\n /** Whether the record is currently a favorite */\n @Input() IsFavorite = false;\n\n /** Whether favorite init has completed (prevents flash of wrong icon) */\n @Input() FavoriteInitDone = false;\n\n /** Whether the record has unsaved changes */\n @Input() IsDirty = false;\n\n /** Names of dirty fields for display in save bar */\n @Input() DirtyFieldNames: string[] = [];\n\n /** Count of lists this record belongs to */\n @Input() ListCount = 0;\n\n /** Number of tags applied to this record */\n @Input() TagCount = 0;\n\n /** Whether the tags panel is currently open */\n @Input() IsTagsPanelOpen = false;\n\n /** Number of attachments linked to this record */\n @Input() AttachmentCount = 0;\n\n /** Whether the attachments feature is available for this record */\n @Input() AttachmentsAvailable = false;\n\n /** Whether the attachments panel is currently open */\n @Input() IsAttachmentsPanelOpen = false;\n\n /** Number of record change versions for this record (displayed as \"vN\" badge on history button) */\n @Input() VersionCount = 0;\n\n /** Entity info for IS-A hierarchy and metadata */\n @Input() EntityInfo: EntityInfo | null = null;\n\n /** Toolbar configuration controlling visibility and behavior */\n @Input() Config: FormToolbarConfig = DEFAULT_TOOLBAR_CONFIG;\n\n /** Whether to show the toolbar in a saving/loading state */\n @Input() IsSaving = false;\n\n /** Whether a refresh from database operation is currently in progress */\n @Input() IsRefreshing = false;\n\n // Section controls inputs\n @Input() VisibleSectionCount = 0;\n @Input() TotalSectionCount = 0;\n @Input() ExpandedSectionCount = 0;\n @Input() SearchFilter = '';\n @Input() ShowEmptyFields = false;\n @Input() WidthMode: FormWidthMode = 'centered';\n @Input() HasCustomSectionOrder = false;\n\n /**\n * Form chrome layout. Expand/collapse-all only render for accordion.\n * Left-nav and right-nav show one section at a time.\n */\n @Input() ChromeLayout: 'accordion' | 'left-nav' | 'right-nav' = 'accordion';\n\n get ShowExpandCollapseAll(): boolean {\n return this.Config.ShowExpandCollapseAllButtons && IsAccordionFormChrome(this.ChromeLayout);\n }\n\n /** Optional template for additional toolbar actions */\n @Input() AdditionalActionsTemplate: TemplateRef<unknown> | null = null;\n\n /**\n * Available form variants for this entity. When the array has >1 entry\n * and `Config.ShowFormVariantPicker` is true, the toolbar renders a\n * right-side \"form picker\" button (icon) that opens a dropdown with\n * the Default form + each variant. Picking emits {@link VariantPicked}\n * with the override ID, or null for the CodeGen Angular default.\n *\n * Shape is intentionally minimal — Generic doesn't depend on the\n * resolver row type. Hosts shape their data into this. See\n * {@link VariantPickerItem} on the container for the canonical shape.\n */\n @Input() Variants: Array<{ ID: string; Label: string; Scope: 'User' | 'Role' | 'Global'; Status: 'Active' | 'Pending' | 'Inactive' }> = [];\n\n /** Dynamic toolbar items registered by FormComponent or BaseFormPanels */\n @Input() RegisteredItems: FormToolbarItemConfig[] = [];\n\n /** Toolbar item property overrides */\n @Input() ItemOverrides: ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null = null;\n\n /** Reference to the form component instance for event payloads */\n @Input() FormComponent: unknown = null;\n\n /** The currently-applied variant ID, or null when the Default form is active. */\n @Input() CurrentVariantID: string | null = null;\n\n // ---- Outputs ----\n\n /** Emitted when any toolbar item (standard or custom) is clicked */\n @Output() ToolbarItemClick = new EventEmitter<FormToolbarItemClickEventArgs>();\n\n /** Emitted for all navigation actions (record links, hierarchy clicks, etc.) */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n /** Request to enter or exit edit mode */\n @Output() EditModeChange = new EventEmitter<boolean>();\n\n /** Emitted BEFORE save - can be cancelled by setting event.Cancel = true */\n @Output() BeforeSave = new EventEmitter<BeforeSaveEventArgs>();\n\n /** Request to save the current record */\n @Output() SaveRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE cancel - can be cancelled by setting event.Cancel = true */\n @Output() BeforeCancel = new EventEmitter<BeforeCancelEventArgs>();\n\n /** Request to cancel editing and revert changes */\n @Output() CancelRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE delete - can be cancelled by setting event.Cancel = true */\n @Output() BeforeDelete = new EventEmitter<BeforeDeleteEventArgs>();\n\n /** Request to delete the current record */\n @Output() DeleteRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE refresh - can be cancelled by setting event.Cancel = true */\n @Output() BeforeRefresh = new EventEmitter<BeforeRefreshEventArgs>();\n\n /** Request to refresh the current record from the database */\n @Output() RefreshRequested = new EventEmitter<void>();\n\n /** Request to toggle favorite status */\n @Output() FavoriteToggled = new EventEmitter<void>();\n\n /** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */\n @Output() BeforeHistoryView = new EventEmitter<BeforeHistoryViewEventArgs>();\n\n /** Request to show record change history */\n @Output() HistoryRequested = new EventEmitter<void>();\n\n /** Emitted BEFORE list management - can be cancelled by setting event.Cancel = true */\n @Output() BeforeListManagement = new EventEmitter<BeforeListManagementEventArgs>();\n\n /** Request to show list management */\n @Output() ListManagementRequested = new EventEmitter<void>();\n\n /** Emitted when the Tags button is clicked */\n @Output() TagsPanelToggled = new EventEmitter<void>();\n\n /** Emitted when the Attachments button is clicked */\n @Output() AttachmentsPanelToggled = new EventEmitter<void>();\n\n /** Request to show dirty field changes */\n @Output() ShowChangesRequested = new EventEmitter<void>();\n\n /**\n * Emitted when the user picks an item from the form-variant dropdown.\n * Payload is the override ID for a specific variant, or `null` when the\n * user picks the \"Default form\" row (CodeGen / Angular fallback).\n */\n @Output() VariantPicked = new EventEmitter<string | null>();\n\n /** Emitted when a custom toolbar button is clicked */\n @Output() CustomButtonClick = new EventEmitter<CustomToolbarButtonClickEventArgs>();\n\n // Section control outputs\n @Output() FilterChange = new EventEmitter<string>();\n @Output() ExpandAllRequested = new EventEmitter<void>();\n @Output() CollapseAllRequested = new EventEmitter<void>();\n @Output() ShowEmptyFieldsChange = new EventEmitter<boolean>();\n @Output() WidthModeChange = new EventEmitter<FormWidthMode>();\n @Output() ResetSectionOrderRequested = new EventEmitter<void>();\n @Output() ManageSectionsRequested = new EventEmitter<void>();\n\n // ---- Internal state ----\n ShowDeleteDialog = false;\n ShowDiscardDialog = false;\n\n /** Computed descendant tree for breadcrumb display */\n DescendantTree: IsaRelatedItem[] = [];\n private _lastRecordForChains: BaseEntity | null = null;\n private _chainsLoading = false;\n\n // ---- Lifecycle ----\n\n ngOnInit(): void {\n this.recordRefresh?.Refreshed$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.InvalidateHierarchy();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngDoCheck(): void {\n if (this._formRef) {\n this.SyncFromFormRef();\n }\n this.CheckDescendantChains();\n }\n\n /**\n * Sync toolbar state from the legacy form reference.\n * Only active when [Form] is set (backward-compat mode).\n */\n private SyncFromFormRef(): void {\n const ref = this._formRef as Record<string, unknown>;\n const rec = ref['record'] as BaseEntity | undefined;\n let changed = false;\n\n if (rec && rec !== this.Record) {\n this.Record = rec;\n this.EntityInfo = rec.EntityInfo;\n changed = true;\n }\n\n if (rec) {\n const dirty = rec.Dirty;\n if (dirty !== this.IsDirty) {\n this.IsDirty = dirty;\n changed = true;\n }\n if (dirty) {\n const dirtyNames = rec.Fields.filter(f => f.Dirty).map(f => f.Name);\n if (dirtyNames.length !== this.DirtyFieldNames.length) {\n this.DirtyFieldNames = dirtyNames;\n changed = true;\n }\n }\n }\n\n const editMode = !!ref['EditMode'];\n if (editMode !== this.EditMode) { this.EditMode = editMode; changed = true; }\n\n const canEdit = !!ref['UserCanEdit'];\n if (canEdit !== this.UserCanEdit) { this.UserCanEdit = canEdit; changed = true; }\n\n const canDelete = !!ref['UserCanDelete'];\n if (canDelete !== this.UserCanDelete) { this.UserCanDelete = canDelete; changed = true; }\n\n const isFavorite = !!ref['IsFavorite'];\n if (isFavorite !== this.IsFavorite) { this.IsFavorite = isFavorite; changed = true; }\n\n const favDone = !!ref['FavoriteInitDone'];\n if (favDone !== this.FavoriteInitDone) { this.FavoriteInitDone = favDone; changed = true; }\n\n if (changed) {\n this.cdr.markForCheck();\n }\n }\n\n /** Whether entity tracks record changes (for history button) */\n get TracksChanges(): boolean {\n return this.EntityInfo?.TrackRecordChanges === true;\n }\n\n /** IS-A parent chain for breadcrumb display */\n get ParentChain(): EntityInfo[] {\n if (!this.EntityInfo) return [];\n return this.EntityInfo.ParentChain.slice().reverse();\n }\n\n /** Whether this entity has parent entities (IS-A child) */\n get HasParentEntities(): boolean {\n return this.ParentChain.length > 0;\n }\n\n /** Child entity types from metadata (all possible subtypes) */\n get ChildEntities(): EntityInfo[] {\n return this.EntityInfo?.ChildEntities ?? [];\n }\n\n /** Whether this entity has child entity types (IS-A parent) */\n get HasChildEntities(): boolean {\n return this.ChildEntities.length > 0;\n }\n\n /**\n * The actual loaded IS-A child chain for the current record.\n * Walks Record.ISAChild → ISAChild.ISAChild → ... collecting each child entity.\n * This differs from ChildEntities (metadata) because it represents the SPECIFIC\n * child type that exists for THIS record, not all possible subtypes.\n *\n * For overlapping subtype parents, this is empty (ISAChild returns null) —\n * use OverlappingChildren instead.\n */\n get ChildChain(): BaseEntity[] {\n if (!this.Record) return [];\n const chain: BaseEntity[] = [];\n let current = this.Record.ISAChild;\n while (current) {\n chain.push(current);\n current = current.ISAChild;\n }\n return chain;\n }\n\n /** Whether this record has a loaded IS-A child entity */\n get HasLoadedChild(): boolean {\n return this.Record?.ISAChild != null;\n }\n\n /**\n * For overlapping subtype parents (AllowMultipleSubtypes = true), returns the\n * list of child entity type names that have records for this PK.\n * Populated by InitializeChildEntity() during record load.\n */\n get OverlappingChildren(): { entityName: string }[] {\n return this.Record?.ISAChildren ?? [];\n }\n\n /** Whether the current record has overlapping child types discovered */\n get HasOverlappingChildren(): boolean {\n return this.OverlappingChildren.length > 0;\n }\n\n /** Whether this entity is part of any IS-A hierarchy (parent or child side) */\n get IsInHierarchy(): boolean {\n return this.HasParentEntities || this.HasLoadedChild || this.HasOverlappingChildren || this.DescendantTree.length > 0;\n }\n\n /** Display-friendly names of dirty fields for the edit banner */\n get DirtyFieldDisplayNames(): string[] {\n if (!this.Record?.EntityInfo || this.DirtyFieldNames.length === 0) return [];\n return this.DirtyFieldNames.map(name => {\n const field = this.Record.EntityInfo.Fields.find(f => f.Name === name);\n return field?.DisplayNameOrName ?? name;\n });\n }\n\n /** Display name for the edit banner */\n get RecordDisplayName(): string {\n if (!this.Record) return '';\n const info = this.Record.EntityInfo;\n if (info?.NameField) {\n const name = this.Record.Get(info.NameField.Name);\n if (name) return String(name);\n }\n return this.Record.PrimaryKey.ToConcatenatedString();\n }\n\n // ---- Descendant Chain Computation ----\n\n /**\n * Force a recompute of the IS-A descendant breadcrumb. Needed after\n * in-place record refresh because the Record object identity does not\n * change, so {@link CheckDescendantChains} would otherwise skip.\n */\n public InvalidateHierarchy(): void {\n this._lastRecordForChains = null;\n this.ComputeDescendantChains();\n this.cdr.markForCheck();\n }\n\n /**\n * Check if descendant chains need recomputation (called from DoCheck).\n * Only triggers async computation when the record identity changes.\n */\n private CheckDescendantChains(): void {\n if (!this.Record) {\n if (this.DescendantTree.length > 0) {\n this.DescendantTree = [];\n this._lastRecordForChains = null;\n this.cdr.markForCheck();\n }\n return;\n }\n if (this.Record !== this._lastRecordForChains && !this._chainsLoading) {\n this.ComputeDescendantChains();\n }\n }\n\n /**\n * Asynchronously discover all IS-A descendants and convert to chains\n * for breadcrumb display. Each chain is a root-to-leaf path of entity names.\n */\n private ComputeDescendantChains(): void {\n this._lastRecordForChains = this.Record;\n\n if (!this.Record?.EntityInfo?.IsParentType) {\n this.DescendantTree = [];\n return;\n }\n\n this._chainsLoading = true;\n\n DiscoverISADescendants(this.Record, this.ProviderToUse).then(descendants => {\n this.DescendantTree = BuildDescendantTree(descendants);\n this._chainsLoading = false;\n this.cdr.markForCheck();\n }).catch(() => {\n this.DescendantTree = [];\n this._chainsLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n /**\n * Navigate to a descendant entity record in the IS-A hierarchy.\n */\n OnDescendantBadgeClick(entityName: string, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: entityName,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n // ---- Actions ----\n\n OnEdit(): void {\n if (this.DispatchToFormRef('StartEditMode')) return;\n this.EditModeChange.emit(true);\n }\n\n OnSave(): void {\n // Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError\n Promise.resolve().then(() => {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeSaveEventArgs(true);\n this.BeforeSave.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('SaveRecord', true)) return;\n this.SaveRequested.emit();\n });\n }\n\n OnCancel(): void {\n // If there are unsaved changes, show confirmation dialog\n if (this.IsDirty) {\n this.ShowDiscardDialog = true;\n this.cdr.markForCheck();\n return;\n }\n // No changes - cancel immediately\n this.EmitCancel();\n }\n\n OnDiscardConfirm(): void {\n this.ShowDiscardDialog = false;\n this.EmitCancel();\n this.cdr.markForCheck();\n }\n\n OnDiscardCancel(): void {\n this.ShowDiscardDialog = false;\n this.cdr.markForCheck();\n }\n\n private EmitCancel(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeCancelEventArgs();\n this.BeforeCancel.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('CancelEdit')) return;\n this.CancelRequested.emit();\n }\n\n OnDeleteClick(): void {\n this.ShowDeleteDialog = true;\n this.cdr.markForCheck();\n }\n\n OnDeleteConfirm(): void {\n this.ShowDeleteDialog = false;\n\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeDeleteEventArgs();\n this.BeforeDelete.emit(beforeEvent);\n if (beforeEvent.Cancel) {\n this.cdr.markForCheck();\n return;\n }\n\n if (this.DispatchToFormRef('OnDeleteRequested')) {\n this.cdr.markForCheck();\n return;\n }\n this.DeleteRequested.emit();\n this.cdr.markForCheck();\n }\n\n OnDeleteCancel(): void {\n this.ShowDeleteDialog = false;\n this.cdr.markForCheck();\n }\n\n OnRefresh(): void {\n if (this.IsRefreshing || this.IsSaving) return;\n\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeRefreshEventArgs();\n this.BeforeRefresh.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('RefreshRecord')) return;\n this.RefreshRequested.emit();\n }\n\n OnFavoriteToggle(): void {\n if (this.DispatchToFormRef('OnFavoriteToggled')) return;\n this.FavoriteToggled.emit();\n }\n\n OnHistory(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeHistoryViewEventArgs();\n this.BeforeHistoryView.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('OnHistoryRequested')) return;\n this.HistoryRequested.emit();\n }\n\n OnListManagement(): void {\n // Emit Before event - handler can cancel by setting event.Cancel = true\n const beforeEvent = new BeforeListManagementEventArgs();\n this.BeforeListManagement.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n if (this.DispatchToFormRef('OnListManagementRequested')) return;\n this.ListManagementRequested.emit();\n }\n\n OnTagsPanel(): void {\n if (this.DispatchToFormRef('HandleTagsPanel')) return;\n this.TagsPanelToggled.emit();\n }\n\n OnAttachmentsPanel(): void {\n if (this.DispatchToFormRef('HandleAttachmentsPanel')) return;\n this.AttachmentsPanelToggled.emit();\n }\n\n OnCustomButtonClick(button: CustomToolbarButton): void {\n if (button.Disabled) return;\n\n this.CustomButtonClick.emit({\n ButtonKey: button.Key,\n Button: button\n });\n }\n\n /**\n * Resolves all standard and custom toolbar items into their active runtime state,\n * evaluated against the current Record and EditMode.\n */\n public get ResolvedToolbarItems(): ResolvedToolbarItem[] {\n const rawItems: FormToolbarItemConfig[] = [];\n\n // 1. Standard Built-in Items\n rawItems.push(\n {\n Key: 'edit',\n Text: '',\n Description: 'Edit this Record',\n Icon: 'fa-solid fa-pen-to-square',\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 10,\n Visible: this.Config.ShowEditButton && this.UserCanEdit,\n Disabled: false,\n },\n {\n Key: 'delete',\n Text: '',\n Description: 'Delete this Record',\n Icon: 'fa-regular fa-trash-can',\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 20,\n Visible: this.Config.ShowDeleteButton && this.UserCanDelete,\n Disabled: false,\n },\n {\n Key: 'refresh',\n Text: '',\n Description: 'Refresh record from database',\n Icon: 'fa-solid fa-arrows-rotate',\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 25,\n Visible: this.Config.ShowRefreshButton !== false && (this.Record?.IsSaved ?? false),\n Disabled: this.IsSaving || this.IsRefreshing,\n IsLoading: this.IsRefreshing,\n },\n {\n Key: 'favorite',\n Text: '',\n Description: this.IsFavorite ? 'Remove Favorite' : 'Make Favorite',\n Icon: this.IsFavorite ? 'fa-solid fa-star mj-icon--favorite' : 'fa-regular fa-star',\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 30,\n Visible: this.Config.ShowFavoriteButton && this.FavoriteInitDone,\n Disabled: false,\n },\n {\n Key: 'history',\n Text: '',\n Description: this.VersionCount > 0 ? `${this.VersionCount} version(s) tracked` : 'Record Changes',\n Icon: 'fa-regular fa-clock',\n Badge: this.VersionCount > 0 ? `v${this.VersionCount}` : undefined,\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 40,\n Visible: this.Config.ShowHistoryButton && this.TracksChanges,\n Disabled: false,\n },\n {\n Key: 'list',\n Text: '',\n Description: this.ListCount > 0 ? `Member of ${this.ListCount} list(s)` : 'Add to a list',\n Icon: 'fa-regular fa-bookmark',\n Badge: this.ListCount > 0 ? this.ListCount : undefined,\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 50,\n Visible: this.Config.ShowListButton,\n Disabled: false,\n },\n {\n Key: 'tags',\n Text: '',\n Description: this.TagCount > 0 ? `${this.TagCount} tag(s)` : 'View tags',\n Icon: 'fa-solid fa-tags',\n Badge: this.TagCount > 0 ? this.TagCount : undefined,\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 60,\n Visible: this.Config.ShowTagsButton,\n Disabled: false,\n },\n {\n Key: 'attachments',\n Text: '',\n Description: this.AttachmentCount > 0 ? `${this.AttachmentCount} attachment${this.AttachmentCount === 1 ? '' : 's'}` : 'Attachments',\n Icon: 'fa-solid fa-paperclip',\n Badge: this.AttachmentCount > 0 ? this.AttachmentCount : undefined,\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 70,\n Visible: this.Config.ShowAttachmentsButton && this.AttachmentsAvailable,\n Disabled: false,\n CssClass: this.IsAttachmentsPanelOpen ? 'active' : '',\n }\n );\n\n // 2. Legacy Custom Buttons from Config.CustomButtons (if not already registered dynamically)\n if (this.Config.CustomButtons && this.Config.CustomButtons.length > 0) {\n for (const cb of this.Config.CustomButtons) {\n if (!this.RegisteredItems.some(r => r.Key === cb.Key)) {\n rawItems.push({\n Key: cb.Key,\n Text: cb.Name || '',\n Description: cb.Description || '',\n Icon: cb.Icon || '',\n Variant: 'default',\n Mode: 'read',\n Placement: 'actions',\n Order: 100,\n Visible: cb.Visible !== false,\n Disabled: cb.Disabled || false,\n CssClass: cb.CssClass || '',\n });\n }\n }\n }\n\n // 3. Dynamically Registered Items (from BaseFormComponent / BaseFormPanel)\n if (this.RegisteredItems && this.RegisteredItems.length > 0) {\n for (const item of this.RegisteredItems) {\n const existingIdx = rawItems.findIndex(r => r.Key === item.Key);\n if (existingIdx >= 0) {\n rawItems[existingIdx] = { ...rawItems[existingIdx], ...item };\n } else {\n rawItems.push({ ...item });\n }\n }\n }\n\n // 4. Resolve states, evaluate predicates, apply overrides\n const resolved: ResolvedToolbarItem[] = [];\n const standardKeys: Set<string> = new Set(['edit', 'delete', 'refresh', 'favorite', 'history', 'list', 'tags', 'attachments']);\n\n for (const item of rawItems) {\n const overrides = this.ItemOverrides?.get(item.Key);\n const merged: FormToolbarItemConfig = overrides ? { ...item, ...overrides } : item;\n\n // Mode check\n const mode = merged.Mode ?? 'read';\n if (mode === 'read' && this.EditMode) continue;\n if (mode === 'edit' && !this.EditMode) continue;\n\n // Visibility evaluation\n let visible = true;\n if (typeof merged.Visible === 'function') {\n try {\n visible = merged.Visible(this.Record, this.EditMode);\n } catch {\n visible = false;\n }\n } else if (typeof merged.Visible === 'boolean') {\n visible = merged.Visible;\n }\n if (!visible) continue;\n\n // Disabled evaluation\n let disabled = false;\n let disabledReason: string | undefined;\n if (typeof merged.Disabled === 'function') {\n try {\n const res = merged.Disabled(this.Record, this.EditMode);\n if (typeof res === 'string') {\n disabled = true;\n disabledReason = res;\n } else {\n disabled = !!res;\n }\n } catch {\n disabled = true;\n }\n } else if (typeof merged.Disabled === 'string') {\n disabled = true;\n disabledReason = merged.Disabled;\n } else if (typeof merged.Disabled === 'boolean') {\n disabled = merged.Disabled;\n }\n\n // Loading evaluation\n let isLoading = false;\n if (typeof merged.IsLoading === 'function') {\n try {\n isLoading = merged.IsLoading(this.Record, this.EditMode);\n } catch {\n isLoading = false;\n }\n } else if (typeof merged.IsLoading === 'boolean') {\n isLoading = merged.IsLoading;\n }\n\n // Badge evaluation\n let badge: string | number | undefined;\n if (typeof merged.Badge === 'function') {\n try {\n const b = merged.Badge(this.Record);\n badge = b != null ? b : undefined;\n } catch {\n badge = undefined;\n }\n } else if (merged.Badge != null) {\n badge = merged.Badge;\n }\n\n const description = disabled && disabledReason ? disabledReason : (merged.Description ?? '');\n\n resolved.push({\n Key: merged.Key,\n Text: merged.Text ?? '',\n Description: description,\n Icon: merged.Icon ?? '',\n Variant: merged.Variant ?? 'default',\n Mode: mode,\n Placement: merged.Placement ?? 'actions',\n Order: merged.Order ?? 100,\n Visible: true,\n Disabled: disabled,\n DisabledReason: disabledReason,\n Badge: badge,\n IsLoading: isLoading,\n CssClass: merged.CssClass ?? '',\n IsStandard: standardKeys.has(merged.Key),\n Config: merged,\n });\n }\n\n return resolved.sort((a, b) => a.Order - b.Order);\n }\n\n public get ResolvedActionItems(): ResolvedToolbarItem[] {\n return this.ResolvedToolbarItems.filter(item => item.Placement === 'actions');\n }\n\n public get ResolvedEditBeforeSaveItems(): ResolvedToolbarItem[] {\n return this.ResolvedActionItems.filter(item => (item.Order ?? 100) < 50);\n }\n\n public get ResolvedEditAfterSaveItems(): ResolvedToolbarItem[] {\n return this.ResolvedActionItems.filter(item => (item.Order ?? 100) >= 50);\n }\n\n public get ResolvedRightItems(): ResolvedToolbarItem[] {\n return this.ResolvedToolbarItems.filter(item => item.Placement === 'right');\n }\n\n public async OnToolbarItemClick(item: ResolvedToolbarItem, event: MouseEvent): Promise<void> {\n if (item.Disabled || item.IsLoading) {\n return;\n }\n\n const clickArgs: FormToolbarItemClickEventArgs = {\n ItemKey: item.Key,\n Item: item.Config,\n Record: this.Record,\n EditMode: this.EditMode,\n FormComponent: this.FormComponent,\n Cancel: false\n };\n\n if (item.IsStandard) {\n switch (item.Key) {\n case 'edit':\n this.OnEdit();\n break;\n case 'delete':\n this.OnDeleteClick();\n break;\n case 'refresh':\n this.OnRefresh();\n break;\n case 'favorite':\n this.OnFavoriteToggle();\n break;\n case 'history':\n this.OnHistory();\n break;\n case 'list':\n this.OnListManagement();\n break;\n case 'tags':\n this.OnTagsPanel();\n break;\n case 'attachments':\n this.OnAttachmentsPanel();\n break;\n }\n }\n\n this.ToolbarItemClick.emit(clickArgs);\n this.CustomButtonClick.emit({\n ButtonKey: item.Key,\n Button: {\n Key: item.Key,\n Name: item.Text,\n Description: item.Description,\n Icon: item.Icon,\n Visible: item.Visible,\n Disabled: item.Disabled,\n CssClass: item.CssClass\n }\n });\n\n if (!clickArgs.Cancel && item.Config.OnClick) {\n try {\n await item.Config.OnClick(clickArgs);\n } catch (err) {\n console.error(`[FormToolbar] Error executing OnClick for toolbar item '${item.Key}':`, err);\n }\n }\n }\n\n OnShowChanges(): void {\n if (this.DispatchToFormRef('ShowChanges')) return;\n this.ShowChangesRequested.emit();\n }\n\n // ── Form-variant picker ─────────────────────────────────────────\n\n /** Whether the variant-picker dropdown is currently open. */\n public VariantMenuOpen = false;\n\n /**\n * True iff the toolbar should render the variant-picker button.\n *\n * Note the threshold is `>= 1`, NOT `> 1`. The picker menu always\n * includes the \"Default form\" row (CodeGen / Angular fallback) — that\n * row isn't in {@link Variants}; it's rendered unconditionally as the\n * first row inside the menu. So any single variant still yields a real\n * choice (Default vs that variant) and the picker should appear. The\n * inline-strip implementation that this replaces used `> 1` and\n * therefore hid the picker for entities with exactly one override,\n * which made that override unreachable from the UI.\n */\n public get ShowVariantPickerButton(): boolean {\n return !!this.Config.ShowFormVariantPicker && (this.Variants?.length ?? 0) >= 1;\n }\n\n /** Label for the currently-active variant, or \"Default form\" when none. */\n public get CurrentVariantLabel(): string {\n const v = this.Variants?.find(x => UUIDsEqual(x.ID, this.CurrentVariantID));\n return v?.Label ?? 'Default form';\n }\n\n /** Compact subtitle for a variant menu row: \"Scope · Status\". */\n public VariantSubtitle(v: { Scope: string; Status: string }): string {\n return `${v.Scope} · ${v.Status}`;\n }\n\n public ToggleVariantMenu(): void {\n this.VariantMenuOpen = !this.VariantMenuOpen;\n this.cdr.markForCheck();\n }\n\n public CloseVariantMenu(): void {\n if (this.VariantMenuOpen) {\n this.VariantMenuOpen = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * User picked a row in the variant menu. Closes the menu and emits\n * `VariantPicked` (null → \"Default form\" / CodeGen Angular; UUID →\n * specific override). No-op when the picked value matches the current.\n */\n public OnVariantClick(variantID: string | null): void {\n this.VariantMenuOpen = false;\n if (variantID === this.CurrentVariantID) {\n this.cdr.markForCheck();\n return;\n }\n this.VariantPicked.emit(variantID);\n }\n\n /**\n * Try to call a method on the legacy form reference.\n * Returns true if the method was found and called, false otherwise.\n */\n private DispatchToFormRef(methodName: string, ...args: unknown[]): boolean {\n if (!this._formRef) return false;\n const ref = this._formRef as Record<string, unknown>;\n const method = ref[methodName];\n if (typeof method === 'function') {\n (method as (...a: unknown[]) => unknown).call(this._formRef, ...args);\n return true;\n }\n return false;\n }\n\n /**\n * Navigate to a parent entity record in the IS-A hierarchy.\n */\n OnParentBadgeClick(parentEntity: EntityInfo, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: parentEntity.Name,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'parent'\n });\n }\n\n /**\n * Navigate to a child entity type list view.\n */\n OnChildEntityClick(childEntity: EntityInfo): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'child-entity-type',\n ChildEntityName: childEntity.Name,\n ParentEntityName: this.EntityInfo!.Name,\n ParentRecordId: this.Record.PrimaryKey.ToConcatenatedString()\n });\n }\n\n /**\n * Navigate to a loaded child entity record in the IS-A hierarchy.\n * The child shares the same primary key as the parent (IS-A inheritance).\n */\n OnChildBadgeClick(childEntity: BaseEntity, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: childEntity.EntityInfo.Name,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n /**\n * Navigate to an overlapping child entity record.\n * Used when the parent has AllowMultipleSubtypes = true and multiple child\n * types coexist for the same PK.\n */\n OnOverlappingChildClick(childEntityName: string, event: MouseEvent): void {\n if (!this.Record) return;\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: childEntityName,\n PrimaryKey: this.Record.PrimaryKey,\n Direction: 'child'\n });\n }\n\n // ---- Section Controls ----\n\n OnFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.FilterChange.emit(input.value);\n }\n\n OnClearFilter(): void {\n this.FilterChange.emit('');\n }\n\n OnExpandAll(): void {\n this.ExpandAllRequested.emit();\n }\n\n OnCollapseAll(): void {\n this.CollapseAllRequested.emit();\n }\n\n OnToggleEmptyFields(): void {\n this.ShowEmptyFieldsChange.emit(!this.ShowEmptyFields);\n }\n\n OnToggleWidthMode(): void {\n const newMode: FormWidthMode = this.WidthMode === 'centered' ? 'full-width' : 'centered';\n this.WidthModeChange.emit(newMode);\n }\n\n OnResetSectionOrder(): void {\n this.ResetSectionOrderRequested.emit();\n }\n\n OnManageSections(): void {\n this.ManageSectionsRequested.emit();\n }\n}\n","<!-- ============================================\n EDIT MODE BANNER (shows above toolbar when editing)\n ============================================ -->\n@if (EditMode && Config.ShowEditBanner) {\n <div class=\"mj-forms-edit-banner\">\n @if (DirtyFieldDisplayNames.length > 0) {\n <i class=\"fa-solid fa-circle-exclamation mj-forms-edit-banner-icon--dirty\"></i>\n <span class=\"mj-forms-edit-banner-dirty\">\n <strong>{{ DirtyFieldDisplayNames.length }}</strong>\n field{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }} modified\n — {{ DirtyFieldDisplayNames.join(', ') }}\n </span>\n } @else {\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span class=\"mj-forms-edit-banner-text\">Editing: {{ RecordDisplayName }}</span>\n }\n <div class=\"mj-forms-toolbar-spacer\"></div>\n <div class=\"mj-forms-edit-banner-actions\">\n @for (item of ResolvedEditBeforeSaveItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading || IsSaving\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span class=\"mj-list-count-badge\">{{ item.Badge }}</span>\n }\n </button>\n }\n <button class=\"mj-forms-btn mj-forms-btn--primary\" (click)=\"OnSave()\" [disabled]=\"IsSaving\" title=\"Save Changes\">\n <i class=\"fa-solid fa-floppy-disk\"></i>\n <span class=\"mj-forms-btn-text\">Save Changes</span>\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnCancel()\" [disabled]=\"IsSaving\" title=\"Discard Changes\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n <span class=\"mj-forms-btn-text\">Discard</span>\n </button>\n @for (item of ResolvedEditAfterSaveItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading || IsSaving\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span class=\"mj-list-count-badge\">{{ item.Badge }}</span>\n }\n </button>\n }\n </div>\n </div>\n}\n\n<!-- ============================================\n MAIN TOOLBAR (read mode only — hidden in edit mode)\n ============================================ -->\n@if (!EditMode) {\n <div class=\"mj-forms-toolbar\" [class.mj-forms-toolbar--sticky]=\"Config.StickyToolbar\">\n\n <!-- Action buttons -->\n <div class=\"mj-forms-toolbar-group\">\n @for (item of ResolvedActionItems; track item.Key) {\n <button class=\"mj-forms-btn\"\n [class.mj-forms-btn--primary]=\"item.Variant === 'primary'\"\n [class.mj-forms-btn--secondary]=\"item.Variant === 'secondary'\"\n [class.mj-forms-btn--accent]=\"item.Variant === 'accent'\"\n [class.mj-forms-btn--danger]=\"item.Variant === 'danger'\"\n [class.mj-forms-btn--ghost]=\"item.Variant === 'ghost'\"\n [class.mj-forms-btn--history]=\"item.Key === 'history'\"\n [class.mj-forms-btn--list]=\"item.Key === 'list'\"\n [class.mj-forms-btn--tags]=\"item.Key === 'tags'\"\n [class.mj-forms-btn--attachments]=\"item.Key === 'attachments'\"\n [class]=\"item.CssClass\"\n [disabled]=\"item.Disabled || item.IsLoading\"\n [title]=\"item.Description\"\n (click)=\"OnToolbarItemClick(item, $event)\">\n @if (item.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (item.Icon) {\n <i [class]=\"item.Icon\"></i>\n }\n @if (item.Text) {\n <span class=\"mj-forms-btn-text\">{{ item.Text }}</span>\n }\n @if (item.Badge != null) {\n <span [class]=\"item.Key === 'history' ? 'mj-version-count-badge' : 'mj-list-count-badge'\">{{ item.Badge }}</span>\n }\n </button>\n }\n </div>\n\n <!-- Separator before hierarchy -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-forms-toolbar-separator\"></div>\n }\n\n <!-- IS-A Entity Hierarchy Breadcrumb (bidirectional: Root → ... → Current → ... → Leaf) -->\n @if (Config.ShowEntityHierarchy && IsInHierarchy) {\n <div class=\"mj-entity-hierarchy\">\n <!-- Parent chain (root → ... → immediate parent) -->\n @for (parent of ParentChain; track parent.ID) {\n <a class=\"mj-entity-badge mj-entity-badge--parent\"\n [title]=\"'Navigate to parent: ' + parent.Name\"\n (click)=\"OnParentBadgeClick(parent, $event)\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n {{ parent.Name }}\n </a>\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n }\n\n <!-- Current entity (always shown) -->\n <span class=\"mj-entity-badge mj-entity-badge--current\">{{ EntityInfo?.Name }}</span>\n\n <!-- Descendant tree (recursive: inline for single paths, branching for multiple) -->\n @if (DescendantTree.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: DescendantTree }\"></ng-container>\n }\n </div>\n }\n\n <!-- Spacer pushes section controls to the right -->\n <div class=\"mj-forms-toolbar-spacer\"></div>\n\n <!-- Form-variant picker: right-side toolbar button. Opens a dropdown\n with the Default (CodeGen Angular) form + every variant the host\n supplied. Persists the user's pick via the host's resolver (which\n goes through UserInfoEngine settings, not localStorage). Hidden\n entirely when the host disables ShowFormVariantPicker or supplied\n fewer than 2 variants. -->\n @if (ShowVariantPickerButton) {\n <div class=\"mj-form-variant-picker-host\"\n [class.open]=\"VariantMenuOpen\">\n <button class=\"mj-forms-btn mj-form-variant-picker-trigger\"\n type=\"button\"\n (click)=\"ToggleVariantMenu()\"\n (blur)=\"CloseVariantMenu()\"\n [title]=\"'Form variant: ' + CurrentVariantLabel + ' — click to change'\">\n <i class=\"fa-solid fa-pen-ruler\"></i>\n <span class=\"mj-form-variant-picker-current-label\">{{ CurrentVariantLabel }}</span>\n <i class=\"fa-solid fa-chevron-down chev\"></i>\n </button>\n @if (VariantMenuOpen) {\n <div class=\"mj-form-variant-picker-menu\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"mj-form-variant-picker-row mj-form-variant-picker-default\"\n [class.current]=\"!CurrentVariantID\"\n (click)=\"OnVariantClick(null)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">\n Default form <span class=\"mj-form-variant-picker-default-tag\">(default)</span>\n </span>\n <span class=\"mj-form-variant-picker-row-sub\">CodeGen-generated Angular fallback</span>\n </div>\n @if (!CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n @for (v of Variants; track v.ID) {\n <div class=\"mj-form-variant-picker-row\"\n [class.current]=\"v.ID === CurrentVariantID\"\n [class.inactive]=\"v.Status !== 'Active'\"\n (click)=\"OnVariantClick(v.ID)\">\n <div class=\"mj-form-variant-picker-row-main\">\n <span class=\"mj-form-variant-picker-row-title\">{{ v.Label }}</span>\n <span class=\"mj-form-variant-picker-row-sub\">{{ VariantSubtitle(v) }}</span>\n </div>\n @if (v.ID === CurrentVariantID) {\n <i class=\"fa-solid fa-check mj-form-variant-picker-check\"></i>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Section Controls -->\n @if (Config.ShowSectionControls) {\n <div class=\"mj-forms-toolbar-group mj-section-controls\">\n @if (Config.ShowSectionFilter) {\n <div class=\"mj-forms-search-wrapper\">\n <input type=\"text\"\n class=\"mj-section-search\"\n [class.mj-section-search--active]=\"SearchFilter\"\n [value]=\"SearchFilter\"\n (input)=\"OnFilterInput($event)\"\n placeholder=\"Search sections...\">\n @if (SearchFilter) {\n <button class=\"mj-clear-search\" (click)=\"OnClearFilter()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n @if (ShowExpandCollapseAll) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount >= VisibleSectionCount\"\n (click)=\"OnExpandAll()\" title=\"Expand all sections\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n [disabled]=\"ExpandedSectionCount === 0\"\n (click)=\"OnCollapseAll()\" title=\"Collapse all sections\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n }\n @if (HasCustomSectionOrder) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\" (click)=\"OnResetSectionOrder()\" title=\"Reset section order\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i>\n </button>\n }\n @if (Config.ShowSectionManager) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnManageSections()\" title=\"Manage section order\">\n <i class=\"fa-solid fa-bars-staggered\"></i>\n </button>\n }\n @if (Config.ShowWidthToggle) {\n <button class=\"mj-forms-btn mj-forms-btn--ghost mj-forms-btn--icon-only\"\n (click)=\"OnToggleWidthMode()\"\n [title]=\"WidthMode === 'centered' ? 'Expand to full width' : 'Center content'\">\n <i [class]=\"WidthMode === 'centered' ? 'fa-solid fa-arrows-left-right-to-line' : 'fa-solid fa-compress'\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Additional actions slot -->\n @if (AdditionalActionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"AdditionalActionsTemplate\"></ng-container>\n }\n <ng-content select=\"[toolbar-additional-controls]\"></ng-content>\n </div>\n}\n\n<!-- ============================================\n DISCARD CHANGES CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDiscardDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDiscardCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Discard Changes?</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDiscardCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>You have <strong>{{ DirtyFieldDisplayNames.length }}</strong> unsaved change{{ DirtyFieldDisplayNames.length === 1 ? '' : 's' }}. Are you sure you want to discard {{ DirtyFieldDisplayNames.length === 1 ? 'it' : 'them' }}?</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDiscardConfirm()\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n Discard Changes\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDiscardCancel()\">\n Keep Editing\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- ============================================\n DELETE CONFIRMATION DIALOG\n ============================================ -->\n@if (ShowDeleteDialog) {\n <div class=\"mj-dialog-overlay\" (click)=\"OnDeleteCancel()\">\n <div class=\"mj-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"mj-dialog-header\">\n <h3>Confirm Deletion</h3>\n <button class=\"mj-dialog-close\" (click)=\"OnDeleteCancel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"mj-dialog-body\">\n <p>Are you sure you want to delete this record? This action cannot be undone.</p>\n </div>\n <div class=\"mj-dialog-footer\">\n <button class=\"mj-forms-btn mj-forms-btn--danger\" (click)=\"OnDeleteConfirm()\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n <button class=\"mj-forms-btn\" (click)=\"OnDeleteCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Recursive template for IS-A descendant tree rendering.\n Single child at a level → inline with chevron.\n Multiple children at a level → tree branch with CSS connector lines. -->\n<ng-template #descendantTreeTpl let-items=\"items\">\n @if (items.length === 1) {\n <span class=\"mj-hierarchy-arrow\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + items[0].EntityName\"\n (click)=\"OnDescendantBadgeClick(items[0].EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ items[0].EntityName }}\n </a>\n @if (items[0].Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: items[0].Children }\"></ng-container>\n }\n } @else if (items.length > 1) {\n <div class=\"mj-descendant-chains\">\n @for (item of items; track item.EntityName) {\n <div class=\"mj-descendant-chain\">\n <a class=\"mj-entity-badge mj-entity-badge--child\"\n [title]=\"'Navigate to: ' + item.EntityName\"\n (click)=\"OnDescendantBadgeClick(item.EntityName, $event)\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ item.EntityName }}\n </a>\n @if (item.Children.length > 0) {\n <ng-container [ngTemplateOutlet]=\"descendantTreeTpl\"\n [ngTemplateOutletContext]=\"{ items: item.Children }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n"]}
|
|
@@ -24,11 +24,46 @@ export declare class BeforeSaveEventArgs extends CancellableFormEvent {
|
|
|
24
24
|
*/
|
|
25
25
|
export declare class BeforeDeleteEventArgs extends CancellableFormEvent {
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Event args for BeforeRefresh event
|
|
29
|
+
*/
|
|
30
|
+
export declare class BeforeRefreshEventArgs extends CancellableFormEvent {
|
|
31
|
+
}
|
|
27
32
|
/**
|
|
28
33
|
* Event args for BeforeCancel event
|
|
29
34
|
*/
|
|
30
35
|
export declare class BeforeCancelEventArgs extends CancellableFormEvent {
|
|
31
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Fired before the container commits accordion vs left-nav. Cancel to keep
|
|
39
|
+
* the previously applied chrome.
|
|
40
|
+
*/
|
|
41
|
+
export declare class BeforeLayoutResolveEventArgs extends CancellableFormEvent {
|
|
42
|
+
Layout: 'accordion' | 'left-nav';
|
|
43
|
+
constructor(layout: 'accordion' | 'left-nav');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Fired after chrome has been applied.
|
|
47
|
+
*/
|
|
48
|
+
export declare class AfterLayoutResolvedEventArgs {
|
|
49
|
+
Layout: 'accordion' | 'left-nav';
|
|
50
|
+
constructor(layout: 'accordion' | 'left-nav');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Fired before a left-nav group is activated or More is expanded. Cancel
|
|
54
|
+
* to keep the current group (dirty-guard hook).
|
|
55
|
+
*/
|
|
56
|
+
export declare class BeforeSectionActivateEventArgs extends CancellableFormEvent {
|
|
57
|
+
GroupKey: string;
|
|
58
|
+
constructor(groupKey: string);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Fired after a left-nav group is activated or More is expanded.
|
|
62
|
+
*/
|
|
63
|
+
export declare class AfterSectionActivatedEventArgs {
|
|
64
|
+
GroupKey: string;
|
|
65
|
+
constructor(groupKey: string);
|
|
66
|
+
}
|
|
32
67
|
/**
|
|
33
68
|
* Event args for BeforeHistoryView event
|
|
34
69
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-events.d.ts","sourceRoot":"","sources":["../../../src/lib/types/form-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,UAAS;CAChB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;gBAEhB,kBAAkB,EAAE,OAAO;CAIxC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,oBAAoB;CAAG;AAEvE;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,oBAAoB;CAAG;AAE1E;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"form-events.d.ts","sourceRoot":"","sources":["../../../src/lib/types/form-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,UAAS;CAChB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;gBAEhB,kBAAkB,EAAE,OAAO;CAIxC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,oBAAoB;CAAG;AAEnE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,oBAAoB;IAClE,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;gBAErB,MAAM,EAAE,WAAW,GAAG,UAAU;CAI/C;AAED;;GAEG;AACH,qBAAa,4BAA4B;IACrC,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;gBAErB,MAAM,EAAE,WAAW,GAAG,UAAU;CAG/C;AAED;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,oBAAoB;IACpE,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,EAAE,MAAM;CAI/B;AAED;;GAEG;AACH,qBAAa,8BAA8B;IACvC,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,EAAE,MAAM;CAG/B;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,oBAAoB;CAAG;AAEvE;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,oBAAoB;CAAG;AAE1E;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -27,11 +27,56 @@ export class BeforeSaveEventArgs extends CancellableFormEvent {
|
|
|
27
27
|
*/
|
|
28
28
|
export class BeforeDeleteEventArgs extends CancellableFormEvent {
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Event args for BeforeRefresh event
|
|
32
|
+
*/
|
|
33
|
+
export class BeforeRefreshEventArgs extends CancellableFormEvent {
|
|
34
|
+
}
|
|
30
35
|
/**
|
|
31
36
|
* Event args for BeforeCancel event
|
|
32
37
|
*/
|
|
33
38
|
export class BeforeCancelEventArgs extends CancellableFormEvent {
|
|
34
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Fired before the container commits accordion vs left-nav. Cancel to keep
|
|
42
|
+
* the previously applied chrome.
|
|
43
|
+
*/
|
|
44
|
+
export class BeforeLayoutResolveEventArgs extends CancellableFormEvent {
|
|
45
|
+
Layout;
|
|
46
|
+
constructor(layout) {
|
|
47
|
+
super();
|
|
48
|
+
this.Layout = layout;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Fired after chrome has been applied.
|
|
53
|
+
*/
|
|
54
|
+
export class AfterLayoutResolvedEventArgs {
|
|
55
|
+
Layout;
|
|
56
|
+
constructor(layout) {
|
|
57
|
+
this.Layout = layout;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Fired before a left-nav group is activated or More is expanded. Cancel
|
|
62
|
+
* to keep the current group (dirty-guard hook).
|
|
63
|
+
*/
|
|
64
|
+
export class BeforeSectionActivateEventArgs extends CancellableFormEvent {
|
|
65
|
+
GroupKey;
|
|
66
|
+
constructor(groupKey) {
|
|
67
|
+
super();
|
|
68
|
+
this.GroupKey = groupKey;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Fired after a left-nav group is activated or More is expanded.
|
|
73
|
+
*/
|
|
74
|
+
export class AfterSectionActivatedEventArgs {
|
|
75
|
+
GroupKey;
|
|
76
|
+
constructor(groupKey) {
|
|
77
|
+
this.GroupKey = groupKey;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
35
80
|
/**
|
|
36
81
|
* Event args for BeforeHistoryView event
|
|
37
82
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-events.js","sourceRoot":"","sources":["../../../src/lib/types/form-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,GAAG,KAAK,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,kBAAkB,CAAU;IAE5B,YAAY,kBAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,oBAAoB;CAAG;AAEvE;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,oBAAoB;CAAG","sourcesContent":["/**\n * Cancellable event base class for form actions.\n * Allows event handlers to cancel default behavior by setting Cancel = true.\n */\nexport class CancellableFormEvent {\n /**\n * Set to true to cancel the default behavior of this event.\n * Default: false\n */\n Cancel = false;\n}\n\n/**\n * Event args for BeforeSave event\n */\nexport class BeforeSaveEventArgs extends CancellableFormEvent {\n /**\n * Whether validation should be performed before save\n */\n ValidateBeforeSave: boolean;\n\n constructor(validateBeforeSave: boolean) {\n super();\n this.ValidateBeforeSave = validateBeforeSave;\n }\n}\n\n/**\n * Event args for BeforeDelete event\n */\nexport class BeforeDeleteEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeCancel event\n */\nexport class BeforeCancelEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeHistoryView event\n */\nexport class BeforeHistoryViewEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeListManagement event\n */\nexport class BeforeListManagementEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for custom toolbar button clicks\n */\nexport interface CustomToolbarButtonClickEventArgs {\n /**\n * The key/identifier of the button that was clicked\n */\n ButtonKey: string;\n\n /**\n * The button configuration that was clicked\n */\n Button: CustomToolbarButton;\n}\n\n/**\n * Configuration for a custom toolbar button\n */\nexport interface CustomToolbarButton {\n /**\n * Unique identifier for this button\n */\n Key: string;\n\n /**\n * Display name/label for the button (used for accessibility)\n */\n Name: string;\n\n /**\n * Tooltip text shown on hover\n */\n Description: string;\n\n /**\n * Font Awesome icon class (e.g., \"fa-solid fa-star\")\n */\n Icon: string;\n\n /**\n * Whether the button should be visible\n * Default: true\n */\n Visible?: boolean;\n\n /**\n * Whether the button should be disabled\n * Default: false\n */\n Disabled?: boolean;\n\n /**\n * Optional CSS class to apply to the button\n */\n CssClass?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"form-events.js","sourceRoot":"","sources":["../../../src/lib/types/form-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,GAAG,KAAK,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,kBAAkB,CAAU;IAE5B,YAAY,kBAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,oBAAoB;CAAG;AAEnE;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;CAAG;AAElE;;;GAGG;AACH,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IAClE,MAAM,CAA2B;IAEjC,YAAY,MAAgC;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,4BAA4B;IACrC,MAAM,CAA2B;IAEjC,YAAY,MAAgC;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,8BAA+B,SAAQ,oBAAoB;IACpE,QAAQ,CAAS;IAEjB,YAAY,QAAgB;QACxB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,8BAA8B;IACvC,QAAQ,CAAS;IAEjB,YAAY,QAAgB;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,oBAAoB;CAAG;AAEvE;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,oBAAoB;CAAG","sourcesContent":["/**\n * Cancellable event base class for form actions.\n * Allows event handlers to cancel default behavior by setting Cancel = true.\n */\nexport class CancellableFormEvent {\n /**\n * Set to true to cancel the default behavior of this event.\n * Default: false\n */\n Cancel = false;\n}\n\n/**\n * Event args for BeforeSave event\n */\nexport class BeforeSaveEventArgs extends CancellableFormEvent {\n /**\n * Whether validation should be performed before save\n */\n ValidateBeforeSave: boolean;\n\n constructor(validateBeforeSave: boolean) {\n super();\n this.ValidateBeforeSave = validateBeforeSave;\n }\n}\n\n/**\n * Event args for BeforeDelete event\n */\nexport class BeforeDeleteEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeRefresh event\n */\nexport class BeforeRefreshEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeCancel event\n */\nexport class BeforeCancelEventArgs extends CancellableFormEvent {}\n\n/**\n * Fired before the container commits accordion vs left-nav. Cancel to keep\n * the previously applied chrome.\n */\nexport class BeforeLayoutResolveEventArgs extends CancellableFormEvent {\n Layout: 'accordion' | 'left-nav';\n\n constructor(layout: 'accordion' | 'left-nav') {\n super();\n this.Layout = layout;\n }\n}\n\n/**\n * Fired after chrome has been applied.\n */\nexport class AfterLayoutResolvedEventArgs {\n Layout: 'accordion' | 'left-nav';\n\n constructor(layout: 'accordion' | 'left-nav') {\n this.Layout = layout;\n }\n}\n\n/**\n * Fired before a left-nav group is activated or More is expanded. Cancel\n * to keep the current group (dirty-guard hook).\n */\nexport class BeforeSectionActivateEventArgs extends CancellableFormEvent {\n GroupKey: string;\n\n constructor(groupKey: string) {\n super();\n this.GroupKey = groupKey;\n }\n}\n\n/**\n * Fired after a left-nav group is activated or More is expanded.\n */\nexport class AfterSectionActivatedEventArgs {\n GroupKey: string;\n\n constructor(groupKey: string) {\n this.GroupKey = groupKey;\n }\n}\n\n/**\n * Event args for BeforeHistoryView event\n */\nexport class BeforeHistoryViewEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for BeforeListManagement event\n */\nexport class BeforeListManagementEventArgs extends CancellableFormEvent {}\n\n/**\n * Event args for custom toolbar button clicks\n */\nexport interface CustomToolbarButtonClickEventArgs {\n /**\n * The key/identifier of the button that was clicked\n */\n ButtonKey: string;\n\n /**\n * The button configuration that was clicked\n */\n Button: CustomToolbarButton;\n}\n\n/**\n * Configuration for a custom toolbar button\n */\nexport interface CustomToolbarButton {\n /**\n * Unique identifier for this button\n */\n Key: string;\n\n /**\n * Display name/label for the button (used for accessibility)\n */\n Name: string;\n\n /**\n * Tooltip text shown on hover\n */\n Description: string;\n\n /**\n * Font Awesome icon class (e.g., \"fa-solid fa-star\")\n */\n Icon: string;\n\n /**\n * Whether the button should be visible\n * Default: true\n */\n Visible?: boolean;\n\n /**\n * Whether the button should be disabled\n * Default: false\n */\n Disabled?: boolean;\n\n /**\n * Optional CSS class to apply to the button\n */\n CssClass?: string;\n}\n"]}
|