@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":"record-form-container.component.js","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts","../../../src/lib/container/record-form-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter,\n ChangeDetectionStrategy, ChangeDetectorRef, inject, NgZone,\n ContentChildren, QueryList, AfterContentInit, OnDestroy,\n ViewChild, ViewEncapsulation\n} from '@angular/core';\nimport { BaseEntity, CompositeKey, EntityInfo, Metadata, RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FormToolbarConfig, DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';\nimport { ResolveFormShowToolbar, ResolveFormToolbarConfig } from '../types/entity-form-config';\nimport { FormNavigationEvent } from '../types/navigation-events';\nimport { FormWidthMode } from '../types/form-types';\nimport { MjCollapsiblePanelComponent } from '../panel/collapsible-panel.component';\nimport { SectionManagerItem } from '../section-manager/section-manager.component';\nimport {\n BeforeSaveEventArgs,\n BeforeDeleteEventArgs,\n BeforeCancelEventArgs,\n BeforeHistoryViewEventArgs,\n BeforeListManagementEventArgs,\n CustomToolbarButtonClickEventArgs\n} from '../types/form-events';\nimport { BaseFormComponent } from '../base-form-component';\nimport { RestoreVersionEvent, RecordChangesComponent } from '@memberjunction/ng-record-changes';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ListManagementResult } from '@memberjunction/ng-list-management';\nimport { FormSlotCoordinator } from '../panel-slot/form-slot-coordinator.service';\n\n/**\n * Display shape for the variant picker. Kept minimal so the Generic\n * container doesn't pull in resolver types; the Explorer-level component\n * that owns the resolver shapes its rows into this.\n */\nexport interface VariantPickerItem {\n ID: string;\n Label: string;\n Scope: 'User' | 'Role' | 'Global';\n Status: 'Active' | 'Pending' | 'Inactive';\n}\n\n/**\n * Top-level container that composes the toolbar, content slots, and sticky behavior.\n *\n * **Two usage modes:**\n *\n * 1. **With FormComponent** (generated forms): Pass `[FormComponent]=\"this\"` and the\n * container derives all state from the BaseFormComponent instance. Save/Cancel/Edit\n * are handled internally by calling FormComponent methods.\n *\n * 2. **Standalone**: Pass individual @Input properties and handle all @Output events.\n *\n * @example Generated form usage:\n * ```html\n * <mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n * (Navigate)=\"OnFormNavigate($event)\"\n * (DeleteRequested)=\"OnDeleteRequested()\"\n * (FavoriteToggled)=\"OnFavoriteToggled()\"\n * (HistoryRequested)=\"OnHistoryRequested()\"\n * (ListManagementRequested)=\"OnListManagementRequested()\">\n *\n * <mj-collapsible-panel SectionKey=\"details\" ...>\n * <mj-form-field ...></mj-form-field>\n * </mj-collapsible-panel>\n *\n * <mj-collapsible-panel SectionKey=\"relatedOrders\" Variant=\"related-entity\" ...>\n * <!-- related entity grid -->\n * </mj-collapsible-panel>\n * </mj-record-form-container>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-record-form-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './record-form-container.component.html',\n styleUrls: ['./record-form-container.component.css'],\n // FormSlotCoordinator scoped per-container so each form has its own\n // slot-presence map for fallback resolution. See FormPanelSlotComponent.\n providers: [FormSlotCoordinator],\n})\nexport class MjRecordFormContainerComponent extends BaseAngularComponent implements AfterContentInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private ngZone = inject(NgZone);\n private notificationService = inject(MJNotificationService);\n private destroy$ = new Subject<void>();\n private panelNavReset$ = new Subject<void>();\n\n // ---- Internal State ----\n\n /** Reference to the record changes drawer (when visible) for triggering refresh after save */\n @ViewChild(RecordChangesComponent) private recordChangesDrawer?: RecordChangesComponent;\n\n /** Controls visibility of record changes drawer */\n ShowRecordChanges = false;\n\n /** Controls visibility of tags panel */\n ShowTagsPanel = false;\n\n /** Persisted tags panel width */\n TagsPanelWidth = 0;\n private static readonly TAGS_WIDTH_KEY = 'MJ_TagsPanel_Width';\n\n /** Number of tags on this record */\n TagCount = 0;\n\n /** Number of tracked record change versions for this record */\n VersionCount = 0;\n\n /** Controls visibility of list management dialog */\n ShowListManagement = false;\n\n /** Controls visibility of section manager drawer */\n ShowSectionManager = false;\n\n // ---- Primary Inputs ----\n\n /** The entity record being displayed/edited */\n @Input() Record!: BaseEntity;\n\n /**\n * Reference to the parent form component (e.g. BaseFormComponent subclass).\n * When provided, the container derives toolbar state from this reference and\n * handles Save/Cancel/Edit internally by calling its methods.\n */\n @Input() FormComponent: BaseFormComponent | null = null;\n\n // ---- Fallback Inputs (used when FormComponent is NOT provided) ----\n\n @Input() EntityInfo: EntityInfo | null = null;\n @Input() EditMode = false;\n @Input() UserCanEdit = false;\n @Input() UserCanDelete = false;\n @Input() IsFavorite = false;\n @Input() FavoriteInitDone = false;\n @Input() IsDirty = false;\n @Input() DirtyFieldNames: string[] = [];\n @Input() ListCount = 0;\n @Input() IsSaving = false;\n @Input() ToolbarConfig: FormToolbarConfig = DEFAULT_TOOLBAR_CONFIG;\n @Input() WidthMode: FormWidthMode = 'centered';\n\n /**\n * Variants available for this entity record. When more than one variant is\n * provided, a compact picker appears between the toolbar and the form body\n * letting the user switch which form is rendered. Empty / single-variant\n * lists hide the picker entirely.\n *\n * Each item is a plain object — we don't take a hard dep on the resolver's\n * row type from here (this is a Generic component; the Explorer-level\n * single-record component shapes the resolver row into this minimal form).\n */\n @Input() Variants: VariantPickerItem[] = [];\n\n /**\n * Override ID currently rendered. The picker highlights this entry. May be\n * null when the active form is a class-based @RegisterClass form (no\n * override is currently active) — in that case the picker still appears\n * with \"Default form\" as the leading row.\n */\n @Input() CurrentVariantID: string | null = null;\n\n // ---- Outputs ----\n\n /** Emitted for all navigation actions (the host app maps these to its routing) */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n /** Emitted when edit mode changes (only in standalone mode; FormComponent mode handled internally) */\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 /** Emitted when save is requested (only in standalone mode) */\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 /** Emitted when cancel is requested (only in standalone mode) */\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 /** Emitted when delete is confirmed (host app handles actual deletion) */\n @Output() DeleteRequested = new EventEmitter<void>();\n\n /** Emitted when favorite toggle is requested */\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 /** Emitted when history view is requested */\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 /** Emitted when list management is requested */\n @Output() ListManagementRequested = new EventEmitter<void>();\n\n /** Emitted when show-changes is requested */\n @Output() ShowChangesRequested = new EventEmitter<void>();\n\n /** Emitted when a custom toolbar button is clicked */\n @Output() CustomButtonClick = new EventEmitter<CustomToolbarButtonClickEventArgs>();\n\n /**\n * Emitted when the user chooses a different form variant from the picker.\n * Carries the selected variant's override ID, or null when the user picks\n * the \"Default form\" row. The host is responsible for persisting the choice\n * (via FormResolverService.SetSelectedVariant) and reloading the record so\n * the new form mounts.\n */\n @Output() VariantChange = new EventEmitter<string | null>();\n\n // ---- Content Children ----\n\n @ContentChildren(MjCollapsiblePanelComponent, { descendants: true })\n Panels!: QueryList<MjCollapsiblePanelComponent>;\n\n // ---- FormComponent accessor ----\n\n /** Typed accessor for the form component reference */\n private get fc(): BaseFormComponent | null {\n return this.FormComponent;\n }\n\n // ---- Effective state (bridges FormComponent → toolbar inputs) ----\n\n get EffectiveRecord(): BaseEntity {\n return this.fc?.record ?? this.Record;\n }\n\n get EffectiveEditMode(): boolean {\n return this.fc?.EditMode ?? this.EditMode;\n }\n\n get EffectiveUserCanEdit(): boolean {\n return this.fc?.UserCanEdit ?? this.UserCanEdit;\n }\n\n get EffectiveUserCanDelete(): boolean {\n return this.fc?.UserCanDelete ?? this.UserCanDelete;\n }\n\n get EffectiveIsFavorite(): boolean {\n return this.fc?.IsFavorite ?? this.IsFavorite;\n }\n\n get EffectiveFavoriteInitDone(): boolean {\n return this.fc?.FavoriteInitDone ?? this.FavoriteInitDone;\n }\n\n get EffectiveEntityInfo(): EntityInfo | null {\n return (this.fc?.EntityInfo as EntityInfo) ?? this.EntityInfo;\n }\n\n get EffectiveIsDirty(): boolean {\n if (this.fc) {\n // OR'd with the form's own extra state: a section that owns an editor (a flow canvas, a\n // designer) holds edits no entity field reflects, and reporting the record clean would let\n // the navigate-away guard discard them without asking.\n return (this.fc.record?.Dirty ?? false) || this.fc.HasAdditionalUnsavedChanges;\n }\n return this.IsDirty;\n }\n\n get EffectiveDirtyFieldNames(): string[] {\n if (this.fc?.record?.Fields) {\n return this.fc.record.Fields.filter(f => f.Dirty).map(f => f.Name);\n }\n return this.DirtyFieldNames;\n }\n\n get EffectiveIsSaving(): boolean {\n return this.IsSaving;\n }\n\n get EffectiveWidthMode(): FormWidthMode {\n if (this.fc?.getFormWidthMode) {\n return this.fc.getFormWidthMode();\n }\n return this.WidthMode;\n }\n\n /**\n * Whether the in-form toolbar renders at all. Driven by the form's\n * `Config.Toolbar`: an explicit `null` (the dialog/slide-in default) hides\n * the entire toolbar so the surrounding chrome can own Save/Cancel/title.\n * Any other value (undefined or a partial config) keeps the toolbar.\n */\n get EffectiveShowToolbar(): boolean {\n return ResolveFormShowToolbar(this.fc?.Config);\n }\n\n /**\n * Effective toolbar config: the bound `ToolbarConfig` (or the default)\n * with the form's `Config.Toolbar` partial merged on top. This is the\n * no-regeneration bridge — generated templates never bind `[Config]`,\n * yet per-instance toolbar tweaks still take effect through `fc.Config`.\n */\n get EffectiveToolbarConfig(): FormToolbarConfig {\n return ResolveFormToolbarConfig(this.ToolbarConfig ?? DEFAULT_TOOLBAR_CONFIG, this.fc?.Config);\n }\n\n get EffectiveSearchFilter(): string {\n return this.fc?.searchFilter ?? '';\n }\n\n get EffectiveShowEmptyFields(): boolean {\n return this.fc?.showEmptyFields ?? false;\n }\n\n get EffectiveHasCustomSectionOrder(): boolean {\n if (this.fc?.hasCustomSectionOrder) {\n return this.fc.hasCustomSectionOrder();\n }\n return false;\n }\n\n // ---- Section counts ----\n\n get TotalSectionCount(): number {\n if (this.fc?.getTotalSectionCount) {\n return this.fc.getTotalSectionCount();\n }\n return this.Panels?.length ?? 0;\n }\n\n get VisibleSectionCount(): number {\n if (this.fc?.getVisibleSectionCount) {\n return this.fc.getVisibleSectionCount();\n }\n if (!this.Panels) return 0;\n return this.Panels.filter(p => p.IsVisible).length;\n }\n\n get ExpandedSectionCount(): number {\n if (this.fc?.getExpandedCount) {\n return this.fc.getExpandedCount();\n }\n if (!this.Panels) return 0;\n return this.Panels.filter(p => p.Expanded && p.IsVisible).length;\n }\n\n // ---- IS-A Related Panel ----\n\n /** Whether the current record has IS-A related items to display in the side panel */\n get HasIsaRelatedItems(): boolean {\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo) return false;\n\n const entityInfo = record.EntityInfo;\n\n // Child entity with overlapping parent — may have siblings\n if (entityInfo.IsChildType && entityInfo.ParentEntityInfo?.AllowMultipleSubtypes) {\n const parent = record.ISAParent;\n if (parent?.ISAChildren && parent.ISAChildren.length > 1) return true;\n }\n\n // Parent entity with children\n if (entityInfo.IsParentType) {\n if (entityInfo.AllowMultipleSubtypes && record.ISAChildren && record.ISAChildren.length > 0) return true;\n if (!entityInfo.AllowMultipleSubtypes && record.ISAChild) return true;\n }\n\n return false;\n }\n\n // ---- Section Manager ----\n\n /** Builds section info array from projected panels for the section manager drawer */\n get SectionManagerItems(): SectionManagerItem[] {\n if (!this.Panels) return [];\n return this.Panels.map(p => ({\n SectionKey: p.SectionKey,\n SectionName: p.SectionName,\n Variant: p.Variant,\n Icon: p.Icon\n }));\n }\n\n /** Current section order from the form component */\n get SectionManagerOrder(): string[] {\n if (this.fc?.getSectionOrder) {\n return this.fc.getSectionOrder();\n }\n return [];\n }\n\n // ---- Lifecycle ----\n\n ngAfterContentInit(): void {\n // Load saved tags panel width\n const savedWidth = UserInfoEngine.Instance.GetSetting(MjRecordFormContainerComponent.TAGS_WIDTH_KEY);\n if (savedWidth) this.TagsPanelWidth = parseInt(savedWidth, 10) || 0;\n\n // Subscribe to panel Navigate events and relay them\n this.SubscribeToPanelNavigateEvents();\n\n // Watch for panel changes to update counts and re-subscribe\n this.Panels.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.SubscribeToPanelNavigateEvents();\n this.cdr.markForCheck();\n });\n\n // Watch for changes to record dirty state\n this.watchRecordChanges();\n\n // Badge counts are loaded when the form emits RecordReady (see SubscribeToPanelNavigateEvents)\n }\n\n ngOnDestroy(): void {\n this.panelNavReset$.next();\n this.panelNavReset$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Subscribes to Navigate events from all child collapsible panels\n * and relays them through this container's Navigate output.\n */\n private SubscribeToPanelNavigateEvents(): void {\n this.panelNavReset$.next(); // tear down previous subscriptions\n // Subscribe to RecordReady on the form component — fires once after record is fully initialized\n if (this.fc) {\n this.fc.RecordReady.pipe(takeUntil(this.panelNavReset$)).subscribe(() => {\n this.LoadBadgeCounts();\n });\n }\n\n this.Panels.forEach(panel => {\n panel.Navigate.pipe(takeUntil(this.panelNavReset$)).subscribe((event: FormNavigationEvent) => {\n this.Navigate.emit(event);\n });\n });\n }\n\n /**\n * Monitor record dirty state changes and trigger change detection.\n * This ensures the edit banner updates when fields are modified.\n */\n private watchRecordChanges(): void {\n // Poll for dirty state changes (BaseEntity doesn't expose observables)\n const checkInterval = setInterval(() => {\n if (this.EffectiveRecord?.Dirty !== undefined) {\n this.cdr.markForCheck();\n }\n }, 200);\n\n // Cleanup on destroy\n this.destroy$.subscribe(() => clearInterval(checkInterval));\n }\n\n // ---- Badge Count Loading ----\n\n /**\n * Loads tag count and record change version count for toolbar badges.\n * Both queries run in parallel for performance.\n */\n private badgeCountsLoaded = false;\n\n private LoadBadgeCounts(): void {\n if (this.badgeCountsLoaded) return;\n\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo) return;\n\n this.badgeCountsLoaded = true;\n\n // Fire both queries in parallel — no await needed, they update state async\n this.LoadTagCount(record);\n this.LoadVersionCount(record);\n }\n\n /**\n * Queries the count of tagged items for the current entity + record\n * and updates the TagCount badge on the toolbar.\n */\n private async LoadTagCount(record: BaseEntity): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Don't narrow Fields — the server caches RunView results by entity+filter (ignoring Fields),\n // so a narrow query here would poison the cache for the subsequent full-field load in the Tags panel.\n const result = await rv.RunView({\n EntityName: 'MJ: Tagged Items',\n ExtraFilter: `EntityID='${record.EntityInfo.ID}' AND RecordID='${record.PrimaryKey.Values()}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.TagCount = result.Results.length;\n this.cdr.detectChanges();\n }\n } catch {\n // Non-critical — badge just stays at 0\n }\n }\n\n /**\n * Queries the count of record change entries for the current entity + record\n * and updates the VersionCount badge on the toolbar.\n */\n private async LoadVersionCount(record: BaseEntity): Promise<void> {\n if (!record.EntityInfo.TrackRecordChanges) return;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Record Changes',\n Fields: ['ID'],\n ExtraFilter: `EntityID='${record.EntityInfo.ID}' AND RecordID='${record.PrimaryKey.ToConcatenatedString()}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.VersionCount = result.Results.length;\n this.cdr.detectChanges();\n }\n } catch {\n // Non-critical — badge just stays at 0\n }\n }\n\n // ---- Toolbar Event Handlers ----\n\n /**\n * Navigation events are always re-emitted for the host app to handle.\n */\n OnNavigate(event: FormNavigationEvent): void {\n this.Navigate.emit(event);\n }\n\n /**\n * Edit mode change: delegate to FormComponent if available, otherwise re-emit.\n */\n OnEditModeChange(editMode: boolean): void {\n if (this.fc) {\n if (editMode) {\n this.fc.StartEditMode();\n } else {\n this.fc.EndEditMode();\n }\n this.cdr.markForCheck();\n } else {\n this.EditModeChange.emit(editMode);\n }\n }\n\n /**\n * Save: delegate to FormComponent if available, otherwise re-emit.\n */\n async OnSaveRequested(): Promise<void> {\n if (this.fc?.SaveRecord) {\n // Mark as saving to prevent double-click\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n await this.fc.SaveRecord(true);\n\n // After successful save, refresh version count badge and record changes drawer\n this.RefreshAfterSave();\n } finally {\n // Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError\n await Promise.resolve();\n this.ngZone.run(() => {\n this.IsSaving = false;\n this.cdr.markForCheck();\n });\n }\n } else {\n this.SaveRequested.emit();\n }\n }\n\n /**\n * Refreshes the version count badge and record changes drawer after a save.\n * The save operation creates a new RecordChange entry server-side, so we need\n * to update the UI to reflect the new version.\n */\n private RefreshAfterSave(): void {\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo?.TrackRecordChanges) return;\n\n // Refresh version count badge\n this.LoadVersionCount(record);\n\n // If the record changes drawer is open, refresh it too\n if (this.ShowRecordChanges && this.recordChangesDrawer) {\n this.recordChangesDrawer.Refresh();\n }\n }\n\n /**\n * Cancel: delegate to FormComponent if available, otherwise re-emit.\n */\n OnCancelRequested(): void {\n if (this.fc?.CancelEdit) {\n this.fc.CancelEdit();\n this.cdr.markForCheck();\n } else {\n this.CancelRequested.emit();\n }\n }\n\n /**\n * Delete, Favorite, History, Lists, ShowChanges: always re-emit for host app.\n */\n OnDeleteRequested(): void {\n this.DeleteRequested.emit();\n }\n\n OnFavoriteToggled(): void {\n this.FavoriteToggled.emit();\n }\n\n OnHistoryRequested(): void {\n // Check if event should be cancelled\n const beforeEvent = new BeforeHistoryViewEventArgs();\n this.BeforeHistoryView.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n // If not cancelled, show built-in record changes drawer\n this.ShowRecordChanges = true;\n this.cdr.markForCheck();\n\n // Also emit for backward compatibility\n this.HistoryRequested.emit();\n }\n\n OnListManagementRequested(): void {\n // Check if event should be cancelled\n const beforeEvent = new BeforeListManagementEventArgs();\n this.BeforeListManagement.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n // If not cancelled, show built-in list management dialog\n this.ShowListManagement = true;\n this.cdr.markForCheck();\n\n // Also emit for backward compatibility\n this.ListManagementRequested.emit();\n }\n\n OnTagsPanelToggled(): void {\n this.ShowTagsPanel = !this.ShowTagsPanel;\n this.cdr.detectChanges();\n }\n\n OnTagsPanelClosed(): void {\n this.ShowTagsPanel = false;\n this.cdr.detectChanges();\n\n // Refresh tag count — tags may have been added/removed while panel was open\n const record = this.EffectiveRecord;\n if (record?.EntityInfo) {\n this.LoadTagCount(record);\n }\n }\n\n /**\n * Handles live tag count updates from the tags panel component.\n */\n OnTagCountChanged(count: number): void {\n this.TagCount = count;\n this.cdr.markForCheck();\n }\n\n OnTagsPanelWidthChanged(width: number): void {\n this.TagsPanelWidth = width;\n UserInfoEngine.Instance.SetSettingDebounced(MjRecordFormContainerComponent.TAGS_WIDTH_KEY, String(width));\n }\n\n OnTagsRecordNavigate(event: { EntityName: string; RecordID: string }): void {\n const md = this.ProviderToUse;\n const entityInfo = md.Entities.find(e => e.Name === event.EntityName);\n const pkey = new CompositeKey();\n if (entityInfo) {\n pkey.LoadFromURLSegment(entityInfo, event.RecordID);\n } else {\n pkey.KeyValuePairs = [{ FieldName: 'ID', Value: event.RecordID }];\n }\n this.Navigate.emit({ Kind: 'record', EntityName: event.EntityName, PrimaryKey: pkey });\n }\n\n OnRecordChangesClosed(): void {\n this.ShowRecordChanges = false;\n this.cdr.markForCheck();\n\n // Refresh version count — new changes may have occurred\n const record = this.EffectiveRecord;\n if (record?.EntityInfo) {\n this.LoadVersionCount(record);\n }\n }\n\n /**\n * Handles a restore request from the record-changes panel.\n *\n * The event payload now carries the FULL snapshot the user opted to apply\n * (the panel computes current-vs-snapshot diffs using the source change's\n * FullRecordJSON, and the user can deselect individual fields). Setting\n * the restore context before Save() causes the data provider to write the\n * resulting RecordChange row with `Source='Restore'`, `RestoredFromID`,\n * and `RestoreReason` populated — building the auditable lineage chain.\n */\n async OnRestoreRequested(event: RestoreVersionEvent): Promise<void> {\n const record = this.EffectiveRecord;\n if (!record) return;\n\n try {\n // Apply each selected snapshot field\n for (const fv of event.FieldValues) {\n record.Set(fv.FieldName, fv.Value);\n }\n\n // Mark the next save as a restore so the provider populates the\n // lineage columns. ClearRestoreContext is called in finally{} below\n // so it doesn't leak into subsequent saves on this entity instance.\n record.SetRestoreContext(event.SourceChangeID, event.Reason);\n\n try {\n const saved = await record.Save();\n if (saved) {\n const fieldCount = event.FieldValues.length;\n const reasonSuffix = event.Reason ? ` — \"${event.Reason}\"` : '';\n this.notificationService.CreateSimpleNotification(\n `Restored ${fieldCount} field${fieldCount === 1 ? '' : 's'} from version dated ${new Date(event.ChangedAt).toLocaleDateString()}${reasonSuffix}`,\n 'info', 3500,\n );\n\n // Refresh version count — the save just produced a new restore-tagged change.\n this.LoadVersionCount(record);\n this.cdr.markForCheck();\n } else {\n const errMsg = record.LatestResult?.CompleteMessage ?? 'unknown error';\n this.notificationService.CreateSimpleNotification(\n `Failed to save restored values: ${errMsg}`,\n 'error', 4500,\n );\n }\n } finally {\n record.ClearRestoreContext();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n this.notificationService.CreateSimpleNotification(\n `Restore failed: ${message}`,\n 'error', 4000,\n );\n }\n }\n\n OnListManagementClosed(): void {\n this.ShowListManagement = false;\n this.cdr.markForCheck();\n }\n\n /**\n * Fired when the list-management dialog applies changes. Surfaces the\n * outcome — especially silently-skipped duplicates and failures, which\n * users otherwise misread as \"everything was added\".\n */\n OnListManagementComplete(result: ListManagementResult): void {\n const s = result.summary;\n if (s && (s.added > 0 || s.removed > 0 || s.skipped > 0 || s.failed > 0)) {\n const parts: string[] = [];\n if (s.added > 0) parts.push(`added to ${result.added.length} list${result.added.length === 1 ? '' : 's'}`);\n if (s.removed > 0) parts.push(`removed from ${result.removed.length} list${result.removed.length === 1 ? '' : 's'}`);\n if (s.skipped > 0) parts.push(`${s.skipped} duplicate${s.skipped === 1 ? '' : 's'} skipped`);\n if (s.failed > 0) parts.push(`${s.failed} failed`);\n this.notificationService.CreateSimpleNotification(\n `List changes applied: ${parts.join(', ')}`,\n s.failed > 0 ? 'warning' : 'success',\n s.failed > 0 ? 5000 : 3500,\n );\n }\n this.OnListManagementClosed();\n }\n\n OnShowChangesRequested(): void {\n if (this.fc?.ShowChanges) {\n this.fc.ShowChanges();\n } else {\n this.ShowChangesRequested.emit();\n }\n }\n\n // ---- Section Control Handlers ----\n\n OnFilterChange(filter: string): void {\n if (this.fc?.onFilterChange) {\n this.fc.onFilterChange(filter);\n this.cdr.markForCheck();\n }\n }\n\n OnExpandAll(): void {\n if (this.fc?.expandAllSections) {\n this.fc.expandAllSections();\n this.cdr.markForCheck();\n }\n }\n\n OnCollapseAll(): void {\n if (this.fc?.collapseAllSections) {\n this.fc.collapseAllSections();\n this.cdr.markForCheck();\n }\n }\n\n OnShowEmptyFieldsChange(show: boolean): void {\n if (this.fc) {\n this.fc.showEmptyFields = show;\n this.cdr.markForCheck();\n }\n }\n\n OnWidthModeChange(mode: FormWidthMode): void {\n if (this.fc?.setFormWidthMode) {\n this.fc.setFormWidthMode(mode);\n this.cdr.markForCheck();\n } else {\n this.WidthMode = mode;\n this.cdr.markForCheck();\n }\n }\n\n OnResetSectionOrder(): void {\n if (this.fc?.resetSectionOrder) {\n this.fc.resetSectionOrder();\n this.cdr.markForCheck();\n }\n }\n\n // ---- Variant picker ----\n\n /** Whether the variant dropdown menu is currently open. Toggled by the\n * control's click handler; closed on blur or after a row is picked. */\n _variantMenuOpen = false;\n\n /**\n * Effective variants — prefer the form component's list (set by the host\n * resolver) when present, fall back to the directly-bound @Input. This\n * means generated form templates don't need to bind [Variants] explicitly;\n * the host populates `instance.Variants` post-construction and the\n * container reads it through this accessor.\n */\n get EffectiveVariants(): VariantPickerItem[] {\n return (this.fc?.Variants as VariantPickerItem[] | undefined)\n ?? this.Variants\n ?? [];\n }\n\n get EffectiveCurrentVariantID(): string | null {\n return this.fc?.CurrentVariantID ?? this.CurrentVariantID;\n }\n\n /** Whether to show the variant picker at all. Hidden when the entity has\n * zero or one applicable variant — there's nothing to switch between. */\n get ShowVariantPicker(): boolean {\n return (this.EffectiveVariants?.length ?? 0) > 1;\n }\n\n /** Label for the currently-selected variant (or \"Default form\" if none). */\n get CurrentVariantLabel(): string {\n const v = this.EffectiveVariants?.find(x => UUIDsEqual(x.ID, this.EffectiveCurrentVariantID));\n return v?.Label ?? 'Default form';\n }\n\n /** Compact subtitle: scope + status, e.g. \"User · Active\". */\n variantSubtitle(v: VariantPickerItem): string {\n return `${v.Scope} · ${v.Status}`;\n }\n\n /**\n * User picked an item from the variant menu. If the host installed a\n * handler via `instance.OnVariantChanged`, call it; otherwise emit the\n * VariantChange event for standalone consumers.\n */\n OnVariantPicked(variantID: string | null): void {\n if (variantID === this.EffectiveCurrentVariantID) return;\n if (this.fc && typeof this.fc.OnVariantChanged === 'function') {\n this.fc.OnVariantChanged(variantID);\n } else {\n this.VariantChange.emit(variantID);\n }\n }\n\n // ---- Section Manager Handlers ----\n\n OnManageSections(): void {\n this.ShowSectionManager = true;\n this.cdr.markForCheck();\n }\n\n OnSectionOrderChange(newOrder: string[]): void {\n if (this.fc?.setSectionOrder) {\n this.fc.setSectionOrder(newOrder);\n this.cdr.markForCheck();\n }\n }\n\n OnSectionManagerReset(): void {\n this.OnResetSectionOrder();\n }\n\n OnSectionManagerClosed(): void {\n this.ShowSectionManager = false;\n this.cdr.markForCheck();\n }\n}\n","<!-- ============================================\n BEFORE-TOOLBAR SLOT\n ============================================ -->\n<ng-content select=\"[before-toolbar]\"></ng-content>\n\n<!-- ============================================\n TOOLBAR (bridges FormComponent state → toolbar inputs)\n Hidden entirely when Config.Toolbar === null (dialog/slide-in surfaces).\n ============================================ -->\n@if (EffectiveShowToolbar) {\n<mj-form-toolbar\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [UserCanEdit]=\"EffectiveUserCanEdit\"\n [UserCanDelete]=\"EffectiveUserCanDelete\"\n [IsFavorite]=\"EffectiveIsFavorite\"\n [FavoriteInitDone]=\"EffectiveFavoriteInitDone\"\n [IsDirty]=\"EffectiveIsDirty\"\n [DirtyFieldNames]=\"EffectiveDirtyFieldNames\"\n [ListCount]=\"ListCount\"\n [TagCount]=\"TagCount\"\n [VersionCount]=\"VersionCount\"\n [EntityInfo]=\"EffectiveEntityInfo\"\n [Config]=\"EffectiveToolbarConfig\"\n [IsSaving]=\"EffectiveIsSaving\"\n [VisibleSectionCount]=\"VisibleSectionCount\"\n [TotalSectionCount]=\"TotalSectionCount\"\n [ExpandedSectionCount]=\"ExpandedSectionCount\"\n [SearchFilter]=\"EffectiveSearchFilter\"\n [ShowEmptyFields]=\"EffectiveShowEmptyFields\"\n [WidthMode]=\"EffectiveWidthMode\"\n [HasCustomSectionOrder]=\"EffectiveHasCustomSectionOrder\"\n [Variants]=\"EffectiveVariants\"\n [CurrentVariantID]=\"EffectiveCurrentVariantID\"\n (Navigate)=\"OnNavigate($event)\"\n (EditModeChange)=\"OnEditModeChange($event)\"\n (BeforeSave)=\"BeforeSave.emit($event)\"\n (SaveRequested)=\"OnSaveRequested()\"\n (BeforeCancel)=\"BeforeCancel.emit($event)\"\n (CancelRequested)=\"OnCancelRequested()\"\n (BeforeDelete)=\"BeforeDelete.emit($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (BeforeHistoryView)=\"BeforeHistoryView.emit($event)\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (BeforeListManagement)=\"BeforeListManagement.emit($event)\"\n (ListManagementRequested)=\"OnListManagementRequested()\"\n (ShowChangesRequested)=\"OnShowChangesRequested()\"\n (CustomButtonClick)=\"CustomButtonClick.emit($event)\"\n (FilterChange)=\"OnFilterChange($event)\"\n (ExpandAllRequested)=\"OnExpandAll()\"\n (CollapseAllRequested)=\"OnCollapseAll()\"\n (ShowEmptyFieldsChange)=\"OnShowEmptyFieldsChange($event)\"\n (WidthModeChange)=\"OnWidthModeChange($event)\"\n (ResetSectionOrderRequested)=\"OnResetSectionOrder()\"\n (ManageSectionsRequested)=\"OnManageSections()\"\n (TagsPanelToggled)=\"OnTagsPanelToggled()\"\n (VariantPicked)=\"OnVariantPicked($event)\">\n</mj-form-toolbar>\n}\n\n<!-- ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n Variant picker is now embedded in <mj-form-toolbar> as a right-side\n button — see the [Variants]/[CurrentVariantID] inputs + (VariantPicked)\n output on the toolbar above. Inline strip was removed.\n ============================================ -->\n<div class=\"mj-forms-scroll-area\">\n <div class=\"mj-forms-panels-container\"\n [class.mj-forms-panels--full-width]=\"EffectiveWidthMode === 'full-width'\"\n [class.mj-forms-panels--edit-mode]=\"EffectiveEditMode\"\n [class.mj-forms-panels--has-isa-panel]=\"HasIsaRelatedItems\">\n <!-- Flex row: form panels on left, ISA side panel on right -->\n <div class=\"mj-forms-layout-row\">\n <!-- All panels in a single flex container — CSS order drives sequencing -->\n <div class=\"mj-forms-all-panels\">\n <ng-content></ng-content>\n\n <!--\n Container-provided fallback slot. ALWAYS present — last in document\n order — so any panel whose registered slot isn't found in the current\n form falls through here via FormSlotCoordinator's chain. Downstream\n consumers that haven't rerun CodeGen against the slot-emitting\n template still see every panel; they just render at the bottom\n instead of at their preferred position.\n -->\n @if (Record && FormComponent) {\n <mj-form-panel-slot\n [Entity]=\"Record.EntityInfo.Name\"\n Slot=\"after-everything\"\n [Record]=\"Record\"\n [FormComponent]=\"FormComponent\">\n </mj-form-panel-slot>\n }\n\n <!-- Empty state when no sections match search -->\n @if (EffectiveSearchFilter && VisibleSectionCount === 0) {\n <mj-empty-state class=\"mj-forms-empty-search-state\"\n Variant=\"no-results\"\n Title=\"No sections found\"\n [Message]=\"'No sections match "' + EffectiveSearchFilter + '". Try a different search term.'\"\n ActionText=\"Clear search\"\n ActionIcon=\"fa-solid fa-rotate-left\"\n ActionVariant=\"flat\"\n (Action)=\"OnFilterChange('')\" />\n }\n </div>\n\n <!-- IS-A Related Records Side Panel -->\n <mj-isa-related-panel\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [Collapsed]=\"EffectiveWidthMode === 'full-width'\"\n (Navigate)=\"OnNavigate($event)\">\n </mj-isa-related-panel>\n </div>\n </div>\n</div>\n\n<!-- ============================================\n RECORD CHANGES DRAWER (shown when history button clicked)\n ============================================ -->\n@if (ShowRecordChanges && EffectiveRecord) {\n <mj-record-changes\n [record]=\"EffectiveRecord\"\n [AllowRestore]=\"EffectiveUserCanEdit\"\n (RestoreRequested)=\"OnRestoreRequested($event)\"\n (dialogClosed)=\"OnRecordChangesClosed()\">\n </mj-record-changes>\n}\n\n<!-- ============================================\n TAGS PANEL (shown when tags button clicked)\n ============================================ -->\n@if (ShowTagsPanel && EffectiveRecord) {\n <mj-record-tags\n [Record]=\"EffectiveRecord\"\n [WidthPx]=\"TagsPanelWidth\"\n (PanelClosed)=\"OnTagsPanelClosed()\"\n (TagCountChanged)=\"OnTagCountChanged($event)\"\n (RecordNavigate)=\"OnTagsRecordNavigate($event)\"\n (WidthChanged)=\"OnTagsPanelWidthChanged($event)\">\n </mj-record-tags>\n}\n\n<!-- ============================================\n LIST MANAGEMENT DIALOG (shown when lists button clicked)\n ============================================ -->\n@if (ShowListManagement && EffectiveRecord) {\n <mj-list-management-dialog\n [visible]=\"ShowListManagement\"\n [config]=\"{\n mode: 'manage',\n entityId: EffectiveRecord.EntityInfo.ID,\n entityName: EffectiveRecord.EntityInfo.Name,\n recordIds: [EffectiveRecord.PrimaryKey.Values()[0]],\n allowCreate: true\n }\"\n (complete)=\"OnListManagementComplete($event)\"\n (cancel)=\"OnListManagementClosed()\">\n </mj-list-management-dialog>\n}\n\n<!-- ============================================\n SECTION MANAGER DRAWER (shown when manage-sections button clicked)\n ============================================ -->\n<mj-section-manager\n [Sections]=\"SectionManagerItems\"\n [SectionOrder]=\"SectionManagerOrder\"\n [Visible]=\"ShowSectionManager\"\n (SectionOrderChange)=\"OnSectionOrderChange($event)\"\n (ResetRequested)=\"OnSectionManagerReset()\"\n (Closed)=\"OnSectionManagerClosed()\">\n</mj-section-manager>\n"]}
|
|
1
|
+
{"version":3,"file":"record-form-container.component.js","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts","../../../src/lib/container/record-form-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter,\n ChangeDetectionStrategy, ChangeDetectorRef, inject, NgZone,\n ContentChildren, QueryList, AfterContentInit, OnDestroy,\n ViewChild, ViewEncapsulation, ElementRef\n} from '@angular/core';\nimport { BaseEntity, CompositeKey, EntityInfo, Metadata, RunView, type FormChromeRule, type FormInclusion } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { UserInfoEngine, FileStorageEngineBase } from '@memberjunction/core-entities';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FormToolbarConfig, DEFAULT_TOOLBAR_CONFIG } from '../types/toolbar-config';\nimport { FormToolbarItemConfig, FormToolbarItemClickEventArgs } from '../types/form-toolbar-item';\nimport { ResolveFormShowToolbar, ResolveFormToolbarConfig } from '../types/entity-form-config';\nimport { FormNavigationEvent } from '../types/navigation-events';\nimport { FormWidthMode } from '../types/form-types';\nimport { MjCollapsiblePanelComponent } from '../panel/collapsible-panel.component';\nimport { SectionManagerItem, ChromeMembershipChange } from '../section-manager/section-manager.component';\nimport {\n BeforeSaveEventArgs,\n BeforeDeleteEventArgs,\n BeforeRefreshEventArgs,\n BeforeCancelEventArgs,\n BeforeHistoryViewEventArgs,\n BeforeListManagementEventArgs,\n CustomToolbarButtonClickEventArgs,\n BeforeLayoutResolveEventArgs,\n AfterLayoutResolvedEventArgs,\n BeforeSectionActivateEventArgs,\n AfterSectionActivatedEventArgs,\n} from '../types/form-events';\nimport { BaseFormComponent } from '../base-form-component';\nimport { RestoreVersionEvent, RecordChangesComponent } from '@memberjunction/ng-record-changes';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ListManagementResult } from '@memberjunction/ng-list-management';\nimport { FormSlotCoordinator } from '../panel-slot/form-slot-coordinator.service';\nimport { FormChromeCoordinator } from '../chrome/form-chrome-coordinator.service';\nimport { ResolveFormChrome, OrderChromeGroups, OrderMoreSectionKeys, MoveChromeGroupInSectionOrder, OverlayChromeSectionOrder } from '../chrome/resolve-form-chrome';\nimport { LoadFormChromeRules } from '../chrome/load-form-chrome-rules';\nimport { MORE_SECTION_KEY, HumanizeEntityTitle, IsAlwaysMoreSection } from '../chrome/form-chrome';\nimport type { FormChromeGroup, FormChromePanelSnapshot } from '../chrome/form-chrome';\nimport {\n ClampRailWidth,\n FORM_CHROME_RAIL_PINNED_DEFAULT,\n FORM_CHROME_RAIL_WIDTH_DEFAULT,\n FORM_CHROME_RAIL_WIDTH_MAX,\n FORM_CHROME_RAIL_WIDTH_MIN,\n ParseRailPinnedSetting,\n ParseRailWidthSetting,\n SerializeRailPinnedSetting,\n SerializeRailWidthSetting,\n ShouldPersistChromeActiveGroup,\n} from '../chrome/form-chrome-rail-pref';\nimport { ApplyClippedTitle } from '../chrome/clipped-title';\nimport { CollectFormPanelRegistrations } from '../panel-slot/collect-form-panel-registrations';\nimport type { FormPanelRegistrationMetadata } from '../panel-slot/base-form-panel';\nimport { ContributionHiddenSectionKeys, ResolveFormContributions } from '../panel-slot/form-contribution';\nimport { IsFormSectionHidden } from '../types/entity-form-config';\nimport { FormRecordRefreshCoordinator } from '../form-record-refresh.coordinator';\n\n/**\n * Display shape for the variant picker. Kept minimal so the Generic\n * container doesn't pull in resolver types; the Explorer-level component\n * that owns the resolver shapes its rows into this.\n */\nexport interface VariantPickerItem {\n ID: string;\n Label: string;\n Scope: 'User' | 'Role' | 'Global';\n Status: 'Active' | 'Pending' | 'Inactive';\n}\n\n/**\n * Top-level container that composes the toolbar, content slots, and sticky behavior.\n *\n * **Two usage modes:**\n *\n * 1. **With FormComponent** (generated forms): Pass `[FormComponent]=\"this\"` and the\n * container derives all state from the BaseFormComponent instance. Save/Cancel/Edit\n * are handled internally by calling FormComponent methods.\n *\n * 2. **Standalone**: Pass individual @Input properties and handle all @Output events.\n *\n * @example Generated form usage:\n * ```html\n * <mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n * (Navigate)=\"OnFormNavigate($event)\"\n * (DeleteRequested)=\"OnDeleteRequested()\"\n * (FavoriteToggled)=\"OnFavoriteToggled()\"\n * (HistoryRequested)=\"OnHistoryRequested()\"\n * (ListManagementRequested)=\"OnListManagementRequested()\">\n *\n * <mj-collapsible-panel SectionKey=\"details\" ...>\n * <mj-form-field ...></mj-form-field>\n * </mj-collapsible-panel>\n *\n * <mj-collapsible-panel SectionKey=\"relatedOrders\" Variant=\"related-entity\" ...>\n * <!-- related entity grid -->\n * </mj-collapsible-panel>\n * </mj-record-form-container>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-record-form-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './record-form-container.component.html',\n styleUrls: ['./record-form-container.component.css'],\n // FormSlotCoordinator + FormChromeCoordinator + FormRecordRefreshCoordinator\n // scoped per-container. `providers` (not viewProviders) so projected\n // related-entity grids and slot-mounted panels can inject them.\n providers: [FormSlotCoordinator, FormChromeCoordinator, FormRecordRefreshCoordinator],\n})\nexport class MjRecordFormContainerComponent extends BaseAngularComponent implements AfterContentInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private ngZone = inject(NgZone);\n private notificationService = inject(MJNotificationService);\n private chrome = inject(FormChromeCoordinator);\n private slots = inject(FormSlotCoordinator);\n private recordRefresh = inject(FormRecordRefreshCoordinator);\n private host = inject(ElementRef<HTMLElement>);\n private destroy$ = new Subject<void>();\n private panelNavReset$ = new Subject<void>();\n private chromeResolveTimer: ReturnType<typeof setTimeout> | null = null;\n private chromeRules: FormChromeRule[] = [];\n private chromeRulesForEntityId: string | null = null;\n\n // ---- Internal State ----\n\n /** Reference to the record changes drawer (when visible) for triggering refresh after save */\n @ViewChild(RecordChangesComponent) private recordChangesDrawer?: RecordChangesComponent;\n\n /** Controls visibility of record changes drawer */\n ShowRecordChanges = false;\n\n /** Controls visibility of tags panel */\n ShowTagsPanel = false;\n\n /** Persisted tags panel width */\n TagsPanelWidth = 0;\n private static readonly TAGS_WIDTH_KEY = 'MJ_TagsPanel_Width';\n\n /** Number of tags on this record */\n TagCount = 0;\n\n /** Controls visibility of attachments slide panel */\n ShowAttachmentsPanel = false;\n\n /** Number of attachments linked to this record */\n AttachmentCount = 0;\n\n /** Number of tracked record change versions for this record */\n VersionCount = 0;\n\n /** Controls visibility of list management dialog */\n ShowListManagement = false;\n\n /** Controls visibility of section manager drawer */\n ShowSectionManager = false;\n\n /**\n * Persisted per entity. Pinned (default) keeps the left rail open.\n * Unpinned auto-collapses after the user picks another section.\n */\n ChromeRailPinned = FORM_CHROME_RAIL_PINNED_DEFAULT;\n\n /** Session-only: the rail is showing its items. Follows pin on load. */\n private chromeRailExpanded = FORM_CHROME_RAIL_PINNED_DEFAULT;\n\n /** Expanded rail width in px. Persisted per entity. */\n ChromeRailWidthPx = FORM_CHROME_RAIL_WIDTH_DEFAULT;\n readonly RailWidthMin = FORM_CHROME_RAIL_WIDTH_MIN;\n readonly RailWidthMax = FORM_CHROME_RAIL_WIDTH_MAX;\n RailResizing = false;\n private railResizeStartX = 0;\n private railResizeStartWidth = FORM_CHROME_RAIL_WIDTH_DEFAULT;\n\n // ---- Primary Inputs ----\n\n /** The entity record being displayed/edited */\n @Input() Record!: BaseEntity;\n\n /**\n * Reference to the parent form component (e.g. BaseFormComponent subclass).\n * When provided, the container derives toolbar state from this reference and\n * handles Save/Cancel/Edit internally by calling its methods.\n */\n @Input() FormComponent: BaseFormComponent | null = null;\n\n // ---- Fallback Inputs (used when FormComponent is NOT provided) ----\n\n @Input() EntityInfo: EntityInfo | null = null;\n @Input() EditMode = false;\n @Input() UserCanEdit = false;\n @Input() UserCanDelete = false;\n @Input() IsFavorite = false;\n @Input() FavoriteInitDone = false;\n @Input() IsDirty = false;\n @Input() DirtyFieldNames: string[] = [];\n @Input() ListCount = 0;\n @Input() IsSaving = false;\n @Input() IsRefreshing = false;\n @Input() ToolbarConfig: FormToolbarConfig = DEFAULT_TOOLBAR_CONFIG;\n @Input() RegisteredToolbarItems: FormToolbarItemConfig[] = [];\n @Input() ToolbarItemOverrides: ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null = null;\n @Input() WidthMode: FormWidthMode = 'centered';\n\n /**\n * Variants available for this entity record. When more than one variant is\n * provided, a compact picker appears between the toolbar and the form body\n * letting the user switch which form is rendered. Empty / single-variant\n * lists hide the picker entirely.\n *\n * Each item is a plain object — we don't take a hard dep on the resolver's\n * row type from here (this is a Generic component; the Explorer-level\n * single-record component shapes the resolver row into this minimal form).\n */\n @Input() Variants: VariantPickerItem[] = [];\n\n /**\n * Override ID currently rendered. The picker highlights this entry. May be\n * null when the active form is a class-based @RegisterClass form (no\n * override is currently active) — in that case the picker still appears\n * with \"Default form\" as the leading row.\n */\n @Input() CurrentVariantID: string | null = null;\n\n // ---- Outputs ----\n\n /** Emitted for all navigation actions (the host app maps these to its routing) */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n /** Emitted when edit mode changes (only in standalone mode; FormComponent mode handled internally) */\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 /** Emitted when save is requested (only in standalone mode) */\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 /** Emitted when cancel is requested (only in standalone mode) */\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 /** Emitted when delete is confirmed (host app handles actual deletion) */\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 /** Emitted when refresh is requested (only in standalone mode) */\n @Output() RefreshRequested = new EventEmitter<void>();\n\n /** Emitted when favorite toggle is requested */\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 /** Emitted when history view is requested */\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 /** Emitted when list management is requested */\n @Output() ListManagementRequested = new EventEmitter<void>();\n\n /** Emitted when show-changes is requested */\n @Output() ShowChangesRequested = new EventEmitter<void>();\n\n /** Emitted when a custom toolbar button is clicked */\n @Output() CustomButtonClick = new EventEmitter<CustomToolbarButtonClickEventArgs>();\n\n /** Emitted when any toolbar item (standard or custom) is clicked */\n @Output() ToolbarItemClick = new EventEmitter<FormToolbarItemClickEventArgs>();\n\n /**\n * Emitted when the user chooses a different form variant from the picker.\n * Carries the selected variant's override ID, or null when the user picks\n * the \"Default form\" row. The host is responsible for persisting the choice\n * (via FormResolverService.SetSelectedVariant) and reloading the record so\n * the new form mounts.\n */\n @Output() VariantChange = new EventEmitter<string | null>();\n\n @Output() BeforeLayoutResolve = new EventEmitter<BeforeLayoutResolveEventArgs>();\n @Output() AfterLayoutResolved = new EventEmitter<AfterLayoutResolvedEventArgs>();\n @Output() BeforeSectionActivate = new EventEmitter<BeforeSectionActivateEventArgs>();\n @Output() AfterSectionActivated = new EventEmitter<AfterSectionActivatedEventArgs>();\n\n // ---- Content Children ----\n\n @ContentChildren(MjCollapsiblePanelComponent, { descendants: true })\n Panels!: QueryList<MjCollapsiblePanelComponent>;\n\n // ---- FormComponent accessor ----\n\n /** Typed accessor for the form component reference */\n public get fc(): BaseFormComponent | null {\n return this.FormComponent;\n }\n\n // ---- Effective state (bridges FormComponent → toolbar inputs) ----\n\n get EffectiveRecord(): BaseEntity {\n return this.fc?.record ?? this.Record;\n }\n\n get EffectiveEditMode(): boolean {\n return this.fc?.EditMode ?? this.EditMode;\n }\n\n get EffectiveUserCanEdit(): boolean {\n return this.fc?.UserCanEdit ?? this.UserCanEdit;\n }\n\n get EffectiveUserCanDelete(): boolean {\n return this.fc?.UserCanDelete ?? this.UserCanDelete;\n }\n\n get EffectiveIsFavorite(): boolean {\n return this.fc?.IsFavorite ?? this.IsFavorite;\n }\n\n get EffectiveFavoriteInitDone(): boolean {\n return this.fc?.FavoriteInitDone ?? this.FavoriteInitDone;\n }\n\n get EffectiveEntityInfo(): EntityInfo | null {\n return (this.fc?.EntityInfo as EntityInfo) ?? this.EntityInfo;\n }\n\n get EffectiveIsDirty(): boolean {\n if (this.fc) {\n // OR'd with the form's own extra state: a section that owns an editor (a flow canvas, a\n // designer) holds edits no entity field reflects, and reporting the record clean would let\n // the navigate-away guard discard them without asking.\n return (this.fc.record?.Dirty ?? false) || this.fc.HasAdditionalUnsavedChanges;\n }\n return this.IsDirty;\n }\n\n get EffectiveDirtyFieldNames(): string[] {\n if (this.fc?.record?.Fields) {\n return this.fc.record.Fields.filter(f => f.Dirty).map(f => f.Name);\n }\n return this.DirtyFieldNames;\n }\n\n get EffectiveIsSaving(): boolean {\n return this.IsSaving;\n }\n\n get EffectiveIsRefreshing(): boolean {\n return this.fc?.IsRefreshing ?? this.IsRefreshing;\n }\n\n get EffectiveWidthMode(): FormWidthMode {\n if (this.fc?.getFormWidthMode) {\n return this.fc.getFormWidthMode();\n }\n return this.WidthMode;\n }\n\n /**\n * Whether the in-form toolbar renders at all. Driven by the form's\n * `Config.Toolbar`: an explicit `null` (the dialog/slide-in default) hides\n * the entire toolbar so the surrounding chrome can own Save/Cancel/title.\n * Any other value (undefined or a partial config) keeps the toolbar.\n */\n get EffectiveShowToolbar(): boolean {\n return ResolveFormShowToolbar(this.fc?.Config);\n }\n\n /**\n * Effective toolbar config: the bound `ToolbarConfig` (or the default)\n * with the form's `Config.Toolbar` partial merged on top. This is the\n * no-regeneration bridge — generated templates never bind `[Config]`,\n * yet per-instance toolbar tweaks still take effect through `fc.Config`.\n */\n get EffectiveToolbarConfig(): FormToolbarConfig {\n return ResolveFormToolbarConfig(this.ToolbarConfig ?? DEFAULT_TOOLBAR_CONFIG, this.fc?.Config);\n }\n\n get EffectiveRegisteredToolbarItems(): FormToolbarItemConfig[] {\n if (this.fc?.RegisteredToolbarItems && this.fc.RegisteredToolbarItems.length > 0) {\n return this.fc.RegisteredToolbarItems;\n }\n return this.RegisteredToolbarItems;\n }\n\n get EffectiveToolbarItemOverrides(): ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null {\n if (this.fc?.ToolbarItemOverrides && this.fc.ToolbarItemOverrides.size > 0) {\n return this.fc.ToolbarItemOverrides;\n }\n return this.ToolbarItemOverrides;\n }\n\n get EffectiveSearchFilter(): string {\n return this.fc?.searchFilter ?? '';\n }\n\n get EffectiveShowEmptyFields(): boolean {\n return this.fc?.showEmptyFields ?? false;\n }\n\n get EffectiveHasCustomSectionOrder(): boolean {\n if (this.fc?.hasCustomSectionOrder) {\n return this.fc.hasCustomSectionOrder();\n }\n return false;\n }\n\n // ---- Section counts ----\n\n get TotalSectionCount(): number {\n if (this.fc?.getTotalSectionCount) {\n return this.fc.getTotalSectionCount();\n }\n return this.Panels?.length ?? 0;\n }\n\n get VisibleSectionCount(): number {\n const filter = this.EffectiveSearchFilter.toLowerCase().trim();\n if (filter) {\n const fromPanels = this.allChromePanels().filter((p) => p.MatchesSearch(filter)).length;\n const fromRail = this.ChromeFirstClassGroups.length + this.ChromeMoreItems.length;\n return Math.max(fromPanels, fromRail);\n }\n if (this.fc?.getVisibleSectionCount) {\n return this.fc.getVisibleSectionCount();\n }\n return this.Panels?.filter((p) => p.IsVisible).length ?? 0;\n }\n\n /** True when the current section search matches nothing in this layout. */\n get SearchHasNoMatches(): boolean {\n const filter = this.EffectiveSearchFilter.toLowerCase().trim();\n if (!filter) return false;\n return this.ChromeFirstClassGroups.length === 0 && this.ChromeMoreItems.length === 0\n && this.allChromePanels().every((p) => !p.MatchesSearch(filter));\n }\n\n /** Left-nav rail stays up while searching even if only one group matches. */\n get ShowChromeRail(): boolean {\n if (this.ChromeLayout !== 'left-nav') return false;\n if (this.EffectiveSearchFilter.trim()) {\n return this.ChromeFirstClassGroups.length > 0 || this.ChromeMoreItems.length > 0;\n }\n return this.chrome.Spec.Groups.length > 1;\n }\n\n /**\n * SectionKeys of related-entity panels projected into the container\n * (CodeGen-baked or hand-written). View-children we mount as fill-ins are\n * not in this ContentChildren list.\n */\n get BakedRelatedSectionKeys(): string[] {\n if (!this.Panels) return [];\n return this.Panels\n .filter((panel) => panel.Variant === 'related-entity' && !!panel.SectionKey)\n .map((panel) => panel.SectionKey);\n }\n\n get EffectiveShowRelatedEntities(): boolean {\n return this.fc?.Config?.ShowRelatedEntities !== false;\n }\n\n get ChromeLayout(): 'accordion' | 'left-nav' {\n return this.chrome.Spec.Layout;\n }\n\n get ChromeGroups(): FormChromeGroup[] {\n const ordered = OrderChromeGroups(this.chrome.Spec.Groups, this.chromeRailOrder);\n const filter = this.EffectiveSearchFilter.toLowerCase().trim();\n if (!filter) return ordered;\n return ordered.filter((group) => this.groupMatchesSearch(group, filter));\n }\n\n get ChromeFirstClassGroups(): FormChromeGroup[] {\n return this.ChromeGroups.filter((group) => !group.IsMore);\n }\n\n get ChromeMoreFolder(): FormChromeGroup | null {\n const folder = this.ChromeGroups.find((group) => group.IsMore) ?? null;\n if (!folder || folder.SectionKeys.length === 0) return null;\n return folder;\n }\n\n get ChromeMoreItems(): FormChromeGroup[] {\n const folder = this.ChromeMoreFolder;\n if (!folder) return [];\n const filter = this.EffectiveSearchFilter.toLowerCase().trim();\n const orderedKeys = OrderMoreSectionKeys(folder.SectionKeys, this.chromeRailOrder);\n const items = orderedKeys.map((key) => this.moreItemFromKey(key));\n if (!filter) return items;\n return items.filter((item) => this.groupMatchesSearch(item, filter));\n }\n\n get ChromeActiveGroupKey(): string | null {\n return this.chrome.ActiveGroupKey;\n }\n\n get ChromeActiveGroup(): FormChromeGroup | null {\n const key = this.ChromeActiveGroupKey;\n if (!key) {\n return null;\n }\n return this.ChromeFirstClassGroups.find((group) => group.Key === key)\n ?? this.ChromeMoreItems.find((item) => item.Key === key)\n ?? null;\n }\n\n get ChromeActiveTitle(): string {\n return this.ChromeActiveGroup?.Title || 'Sections';\n }\n\n get ChromeActiveIcon(): string {\n return this.ChromeActiveGroup?.Icon || 'fa-solid fa-list';\n }\n\n /**\n * True when the rail is the thin rotated strip. Search keeps the full\n * list visible so matches stay clickable.\n */\n get ChromeRailCollapsed(): boolean {\n if (!this.ShowChromeRail) {\n return false;\n }\n if (this.EffectiveSearchFilter.trim()) {\n return false;\n }\n return !this.chromeRailExpanded;\n }\n\n get IsChromeMoreActive(): boolean {\n return this.chrome.IsMoreActive;\n }\n\n get ChromeReorderAllowed(): boolean {\n return this.fc?.formContext?.allowSectionReorder !== false;\n }\n\n get ShowMoreToggle(): boolean {\n return this.chrome.Spec.Layout === 'accordion' && this.ChromeMoreItems.length > 0;\n }\n\n get MoreExpanded(): boolean {\n return this.chrome.MoreExpanded;\n }\n\n get MorePreview(): string {\n return this.ChromeMoreItems.map((item) => item.Title).join(' · ');\n }\n\n get ExpandedSectionCount(): number {\n if (this.fc?.getExpandedCount) {\n return this.fc.getExpandedCount();\n }\n if (!this.Panels) return 0;\n return this.Panels.filter(p => p.Expanded && p.IsVisible).length;\n }\n\n // ---- IS-A Related Panel ----\n\n /** Whether the current record has IS-A related items to display in the side panel */\n get HasIsaRelatedItems(): boolean {\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo) return false;\n\n const entityInfo = record.EntityInfo;\n\n // Child entity with overlapping parent — may have siblings\n if (entityInfo.IsChildType && entityInfo.ParentEntityInfo?.AllowMultipleSubtypes) {\n const parent = record.ISAParent;\n if (parent?.ISAChildren && parent.ISAChildren.length > 1) return true;\n }\n\n // Parent entity with children\n if (entityInfo.IsParentType) {\n if (entityInfo.AllowMultipleSubtypes && record.ISAChildren && record.ISAChildren.length > 0) return true;\n if (!entityInfo.AllowMultipleSubtypes && record.ISAChild) return true;\n }\n\n return false;\n }\n\n // ---- Section Manager ----\n\n /** Builds section info array from projected panels for the section manager drawer */\n get SectionManagerItems(): SectionManagerItem[] {\n return this.chromePanelSnapshots().map((p) => ({\n SectionKey: p.SectionKey,\n SectionName: HumanizeEntityTitle(p.SectionName),\n Variant: (p.Variant || 'default') as SectionManagerItem['Variant'],\n Icon: p.Icon || 'fa-solid fa-table',\n }));\n }\n\n get SectionManagerMoreKeys(): string[] {\n return this.chrome.Spec.MoreSectionKeys;\n }\n\n get SectionManagerLockedMoreKeys(): string[] {\n return this.chromePanelSnapshots()\n .filter((p) => IsAlwaysMoreSection(p.SectionKey, p.SectionName))\n .map((p) => p.SectionKey);\n }\n\n /** Current section order from the form component */\n get SectionManagerOrder(): string[] {\n if (this.fc?.getSectionOrder) {\n return this.fc.getSectionOrder();\n }\n return [];\n }\n\n /**\n * Rail display order. `getSectionOrder()` falls back to generated\n * `form.sections` — those keys match Details + baked related grids, not\n * slot-mounted leads — so using that fallback parked Overview after\n * Payments. Only a user-persisted custom order may override the resolver.\n */\n private get chromeRailOrder(): string[] {\n return this.EffectiveHasCustomSectionOrder ? this.SectionManagerOrder : [];\n }\n\n // ---- Lifecycle ----\n\n ngAfterContentInit(): void {\n // Load saved tags panel width\n const savedWidth = UserInfoEngine.Instance.GetSetting(MjRecordFormContainerComponent.TAGS_WIDTH_KEY);\n if (savedWidth) this.TagsPanelWidth = parseInt(savedWidth, 10) || 0;\n\n // Subscribe to panel Navigate events and relay them\n this.SubscribeToPanelNavigateEvents();\n\n // Watch for panel changes to update counts and re-subscribe\n this.Panels.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.SubscribeToPanelNavigateEvents();\n this.scheduleChromeResolve();\n this.cdr.markForCheck();\n });\n\n // Slot remounts land after content init and are not ContentChildren —\n // rebuild the rail from the live DOM once they exist.\n this.slots.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.scheduleChromeResolve();\n });\n\n this.RestoreChromePrefs();\n this.scheduleChromeResolve();\n\n // Watch for changes to record dirty state\n this.watchRecordChanges();\n }\n\n ngOnDestroy(): void {\n if (this.chromeResolveTimer) {\n clearTimeout(this.chromeResolveTimer);\n this.chromeResolveTimer = null;\n }\n this.panelNavReset$.next();\n this.panelNavReset$.complete();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public OnMoreFolderToggle(): void {\n this.chrome.ToggleMoreFolder();\n this.PersistChromePrefs();\n this.cdr.detectChanges();\n }\n\n public ChromeGroupRowCount(group: FormChromeGroup): number | undefined {\n if (!this.fc?.GetSectionRowCount) return undefined;\n let total = 0;\n let any = false;\n for (const key of group.SectionKeys) {\n const count = this.fc.GetSectionRowCount(key);\n if (count !== undefined) {\n total += count;\n any = true;\n }\n }\n return any ? total : undefined;\n }\n\n public OnChromeGroupActivate(groupKey: string): void {\n const before = new BeforeSectionActivateEventArgs(groupKey);\n this.BeforeSectionActivate.emit(before);\n if (before.Cancel) return;\n const previous = this.chrome.ActiveGroupKey;\n this.chrome.SetActiveGroup(groupKey);\n this.expandActiveGroupSections(groupKey);\n this.applyChromeVisibility();\n if (!this.ChromeRailPinned && previous !== groupKey) {\n this.chromeRailExpanded = false;\n }\n this.PersistChromePrefs();\n this.AfterSectionActivated.emit(new AfterSectionActivatedEventArgs(groupKey));\n this.cdr.detectChanges();\n }\n\n public OnChromeRailExpand(): void {\n this.chromeRailExpanded = true;\n this.cdr.detectChanges();\n }\n\n public OnChromeRailCollapse(): void {\n this.chromeRailExpanded = false;\n this.cdr.detectChanges();\n }\n\n public OnChromeRailPinToggle(): void {\n this.ChromeRailPinned = !this.ChromeRailPinned;\n if (this.ChromeRailPinned) {\n this.chromeRailExpanded = true;\n }\n this.PersistChromePrefs();\n this.cdr.detectChanges();\n }\n\n public OnRailResizeStart(event: PointerEvent): void {\n if (this.ChromeRailCollapsed) return;\n event.preventDefault();\n event.stopPropagation();\n this.RailResizing = true;\n this.railResizeStartX = event.clientX;\n this.railResizeStartWidth = this.ChromeRailWidthPx;\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n }\n\n public OnRailResizeMove(event: PointerEvent): void {\n if (!this.RailResizing) return;\n const delta = event.clientX - this.railResizeStartX;\n const signed = this.ChromeLayout === 'left-nav' ? delta : -delta;\n this.ChromeRailWidthPx = ClampRailWidth(this.railResizeStartWidth + signed);\n this.cdr.markForCheck();\n }\n\n public OnRailResizeEnd(): void {\n if (!this.RailResizing) return;\n this.RailResizing = false;\n this.PersistChromePrefs();\n this.cdr.detectChanges();\n }\n\n public OnRailLabelHover(event: MouseEvent, text: string): void {\n ApplyClippedTitle(event.currentTarget as HTMLElement, text);\n }\n\n public RailDragOverKey: string | null = null;\n\n public OnRailDragStart(event: DragEvent, groupKey: string): void {\n if (!this.ChromeReorderAllowed) return;\n event.stopPropagation();\n event.dataTransfer?.setData('text/plain', groupKey);\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n }\n\n public OnRailDragEnd(): void {\n this.RailDragOverKey = null;\n this.cdr.markForCheck();\n }\n\n public OnRailDragOver(event: DragEvent, groupKey: string): void {\n if (!this.ChromeReorderAllowed) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n if (this.RailDragOverKey !== groupKey) {\n this.RailDragOverKey = groupKey;\n this.cdr.markForCheck();\n }\n }\n\n public OnRailDragLeave(_event: DragEvent, groupKey: string): void {\n if (this.RailDragOverKey === groupKey) {\n this.RailDragOverKey = null;\n this.cdr.markForCheck();\n }\n }\n\n public OnRailDrop(event: DragEvent, targetKey: string): void {\n if (!this.ChromeReorderAllowed) return;\n event.preventDefault();\n this.RailDragOverKey = null;\n const draggedKey = event.dataTransfer?.getData('text/plain');\n if (!draggedKey || draggedKey === targetKey) return;\n const groups = this.ChromeGroups;\n const moreItems = this.ChromeMoreItems;\n const draggedMore = moreItems.find((item) => item.Key === draggedKey);\n const targetMore = moreItems.find((item) => item.Key === targetKey);\n const dragged = draggedMore ?? groups.find((g) => g.Key === draggedKey);\n const target = targetMore ?? groups.find((g) => g.Key === targetKey);\n if (!dragged || !target) return;\n if (!draggedMore && (dragged.IsMore || target.IsMore)) return;\n if (!!draggedMore !== !!targetMore) return;\n const defaultKeys = [\n ...groups.filter((g) => !g.IsMore).flatMap((g) => g.SectionKeys),\n ...moreItems.flatMap((g) => g.SectionKeys),\n ];\n const current = OverlayChromeSectionOrder(\n defaultKeys,\n this.EffectiveHasCustomSectionOrder ? this.SectionManagerOrder : [],\n );\n const next = MoveChromeGroupInSectionOrder(current, dragged, target);\n if (this.fc?.setSectionOrder) {\n this.fc.setSectionOrder(next);\n this.cdr.detectChanges();\n }\n }\n\n public OnMoreToggle(): void {\n const next = !this.chrome.MoreExpanded;\n const before = new BeforeSectionActivateEventArgs(MORE_SECTION_KEY);\n this.BeforeSectionActivate.emit(before);\n if (before.Cancel) return;\n this.chrome.ToggleMore(next);\n this.applyChromeVisibility();\n this.PersistChromePrefs();\n this.AfterSectionActivated.emit(new AfterSectionActivatedEventArgs(MORE_SECTION_KEY));\n this.cdr.detectChanges();\n }\n\n private scheduleChromeResolve(): void {\n if (this.chromeResolveTimer) {\n clearTimeout(this.chromeResolveTimer);\n }\n this.chromeResolveTimer = setTimeout(() => {\n this.chromeResolveTimer = null;\n this.ResolveChrome();\n this.applyChromeVisibility();\n this.cdr.markForCheck();\n }, 0);\n }\n\n private loadChromeRulesIfNeeded(): void {\n const entityId = this.EffectiveEntityInfo?.ID ?? null;\n if (!entityId || this.chromeRulesForEntityId === entityId) return;\n this.chromeRulesForEntityId = entityId;\n void this.loadChromeRules(entityId);\n }\n\n private async loadChromeRules(entityId: string): Promise<void> {\n const rules = await LoadFormChromeRules(entityId, this.ProviderToUse);\n if (this.chromeRulesForEntityId !== entityId) return;\n this.chromeRules = rules;\n this.scheduleChromeResolve();\n }\n\n private ResolveChrome(): void {\n const entity = this.EffectiveEntityInfo;\n if (!entity) return;\n this.loadChromeRulesIfNeeded();\n\n const result = ResolveFormChrome({\n Entity: entity,\n Panels: this.chromePanelSnapshots(),\n RelatedSchemaByEntityId: this.buildRelatedSchemaMap(entity),\n InboundRelationshipCountByEntityId: this.buildInboundRelationshipCounts(),\n HiddenSectionKeys: [...this.contributionHiddenSectionKeys()],\n ContributionSectionKeys: this.contributionSectionKeys(),\n ContributionChromeGroupByKey: this.contributionChromeGroupByKey(),\n ContributionInclusionByKey: this.contributionInclusionByKey(),\n ContributionSortKeyByKey: this.contributionSortKeyByKey(),\n ChromeRules: this.chromeRules,\n IncludeUnbakedRelated: this.EffectiveShowRelatedEntities,\n Membership: {\n moreSectionKeys: this.fc?.getMoreSectionKeys?.() ?? [],\n firstClassSectionKeys: this.fc?.getFirstClassSectionKeys?.() ?? [],\n },\n });\n\n const before = new BeforeLayoutResolveEventArgs(result.Spec.Layout);\n this.BeforeLayoutResolve.emit(before);\n if (before.Cancel) return;\n\n this.chrome.Apply(result.Spec);\n this.ensureActiveGroupVisible();\n if (this.chrome.ActiveGroupKey) {\n this.expandActiveGroupSections(this.chrome.ActiveGroupKey);\n }\n this.AfterLayoutResolved.emit(new AfterLayoutResolvedEventArgs(result.Spec.Layout));\n }\n\n private expandActiveGroupSections(groupKey: string): void {\n if (groupKey === MORE_SECTION_KEY) return;\n const group = this.chrome.Spec.Groups.find((g) => g.Key === groupKey);\n const keys = group && !group.IsMore ? group.SectionKeys : [groupKey];\n const form = this.fc as { SetSectionExpanded?: (key: string, expanded: boolean) => void } | null;\n if (!form?.SetSectionExpanded) return;\n for (const key of keys) {\n form.SetSectionExpanded(key, true);\n }\n }\n\n private ensureActiveGroupVisible(): void {\n const firstClass = this.ChromeFirstClassGroups;\n const moreItems = this.ChromeMoreItems;\n const active = this.chrome.ActiveGroupKey;\n if (active && moreItems.some((item) => item.Key === active)) {\n this.chrome.MoreExpanded = true;\n return;\n }\n if (active && firstClass.some((g) => g.Key === active)) return;\n const next = firstClass[0] ?? moreItems[0];\n if (next) this.chrome.SetActiveGroup(next.Key);\n }\n\n private groupMatchesSearch(group: FormChromeGroup, filter: string): boolean {\n if (!filter) return true;\n if (group.Title.toLowerCase().includes(filter)) return true;\n if (group.IsMore) {\n return group.SectionKeys.some((key) => {\n const item = this.moreItemFromKey(key);\n return this.groupMatchesSearch({ ...item, IsMore: false }, filter);\n });\n }\n return group.SectionKeys.some((key) => {\n const panel = this.allChromePanels().find((p) => p.SectionKey === key);\n if (panel) return panel.MatchesSearch(filter);\n const human = HumanizeEntityTitle(key).toLowerCase();\n return human.includes(filter) || key.toLowerCase().includes(filter);\n });\n }\n\n private moreItemFromKey(key: string): FormChromeGroup {\n const panel = this.allChromePanels().find((p) => p.SectionKey === key);\n const override = this.chrome.Spec.TitleBySectionKey?.get(key);\n return {\n Key: key,\n Title: override || HumanizeEntityTitle(panel?.SectionName || key),\n Icon: panel?.Icon || 'fa-solid fa-table',\n SectionKeys: [key],\n IsMore: true,\n };\n }\n\n private allChromePanels(): MjCollapsiblePanelComponent[] {\n const seen = new Set<MjCollapsiblePanelComponent>();\n const out: MjCollapsiblePanelComponent[] = [];\n const add = (list?: QueryList<MjCollapsiblePanelComponent>) => {\n list?.forEach((panel) => {\n if (!seen.has(panel)) {\n seen.add(panel);\n out.push(panel);\n }\n });\n };\n add(this.Panels);\n return out;\n }\n\n private applyChromeVisibility(): void {\n const layout = this.chrome.Spec.Layout;\n const claimed = this.contributionHiddenSectionKeys();\n for (const panel of this.allChromePanels()) {\n if (panel.SectionName) {\n const human = HumanizeEntityTitle(panel.SectionName);\n if (human !== panel.SectionName) {\n panel.SectionName = human;\n }\n }\n const titled = this.chrome.Spec.Groups.find(\n (g) => !g.IsMore && g.SectionKeys.length === 1 && g.SectionKeys[0] === panel.SectionKey,\n );\n const override = this.chrome.Spec.TitleBySectionKey?.get(panel.SectionKey);\n if (override) {\n panel.SectionName = override;\n } else if (titled?.Title) {\n panel.SectionName = titled.Title;\n }\n if (claimed.has(panel.SectionKey)) {\n panel.Hidden = true;\n continue;\n }\n if (layout === 'left-nav') {\n if (panel.Variant === 'related-entity') {\n panel.Hidden = !this.chrome.IsRelatedSectionVisible(panel.SectionKey);\n } else {\n panel.Hidden = !this.chrome.IsFirstClassSectionVisible(panel.SectionKey);\n }\n } else {\n panel.Hidden = !this.chrome.IsAccordionSectionVisible(panel.SectionKey);\n }\n }\n this.applyChromeDomVisibility();\n }\n\n /**\n * Slot-mounted panels are view children of the slot, not ContentChildren\n * of this container, and they cannot inject the container-provided\n * coordinator. Toggle host classes on every `mj-collapsible-panel` in\n * the live DOM so left-nav hide/show still reaches them.\n */\n private applyChromeDomVisibility(): void {\n const host = this.host.nativeElement;\n if (!host) return;\n const layout = this.chrome.Spec.Layout;\n host.querySelectorAll('mj-collapsible-panel').forEach((node: Element) => {\n const key = node.getAttribute('data-section-key') ?? '';\n const variant = node.getAttribute('data-variant') ?? 'default';\n const visible = this.isChromeKeyVisible(key, variant);\n const inMore = this.chrome.Spec.MoreSectionKeys.includes(key);\n node.classList.toggle('mj-chrome-show', layout === 'left-nav' && visible);\n node.classList.toggle('mj-chrome-hidden', !visible);\n node.classList.toggle('mj-form-role-more', inMore);\n });\n }\n\n private isChromeKeyVisible(sectionKey: string, variant: string): boolean {\n if (this.contributionHiddenSectionKeys().has(sectionKey)) return false;\n if (this.chrome.Spec.Layout === 'accordion') {\n return this.chrome.IsAccordionSectionVisible(sectionKey);\n }\n if (variant === 'related-entity') {\n return this.chrome.IsRelatedSectionVisible(sectionKey);\n }\n return this.chrome.IsFirstClassSectionVisible(sectionKey);\n }\n\n private contributionSectionKeys(): string[] {\n return this.contributionRegistrations().map((row) => row.Key);\n }\n\n private contributionChromeGroupByKey(): Map<string, 'details' | 'more'> {\n const map = new Map<string, 'details' | 'more'>();\n for (const row of this.contributionRegistrations()) {\n if (row.ChromeGroup) map.set(row.Key, row.ChromeGroup);\n }\n return map;\n }\n\n private contributionInclusionByKey(): Map<string, FormInclusion> {\n const map = new Map<string, FormInclusion>();\n for (const row of this.contributionRegistrations()) {\n if (row.Inclusion) map.set(row.Key, row.Inclusion);\n }\n return map;\n }\n\n private contributionSortKeyByKey(): Map<string, number> {\n const map = new Map<string, number>();\n for (const row of this.contributionRegistrations()) {\n if (row.SortKey != null) map.set(row.Key, row.SortKey);\n }\n return map;\n }\n\n /**\n * Winning registration per contribution key (highest ClassFactory Priority).\n * Headers are not rail sections.\n */\n private contributionRegistrations(): Array<{\n Key: string;\n Inclusion: FormInclusion | null;\n SortKey: number | null;\n ChromeGroup: 'details' | 'more' | null;\n }> {\n const entityName = this.EffectiveEntityInfo?.Name;\n if (!entityName) return [];\n const byKey = new Map<string, { Key: string; Inclusion: FormInclusion | null; SortKey: number | null; ChromeGroup: 'details' | 'more' | null; Priority: number }>();\n const regs = [...CollectFormPanelRegistrations()].sort((a, b) => (a.Priority ?? 0) - (b.Priority ?? 0));\n for (const reg of regs) {\n const meta = reg.Metadata;\n if (!meta || meta.entity !== entityName) continue;\n if (meta.contributionKey === 'header') continue;\n const key = contributionRailKey(meta);\n if (!key) continue;\n byKey.set(key, {\n Key: key,\n Inclusion: ReadRegisteredInclusion(meta.inclusion),\n SortKey: typeof meta.sortKey === 'number' && Number.isFinite(meta.sortKey) ? meta.sortKey : null,\n ChromeGroup: meta.chromeGroup === 'details' || meta.chromeGroup === 'more' ? meta.chromeGroup : null,\n Priority: reg.Priority ?? 0,\n });\n }\n return [...byKey.values()];\n }\n\n private contributionHiddenSectionKeys(): Set<string> {\n const hidden = this.hiddenChromeSectionKeys();\n const entity = this.EffectiveEntityInfo;\n if (!entity) return hidden;\n const claimed = ContributionHiddenSectionKeys(\n entity.Name,\n entity.RelatedEntities ?? [],\n (entity.ChildEntities ?? []).map((child) => child.ID),\n CollectFormPanelRegistrations(),\n );\n for (const key of claimed) hidden.add(key);\n return hidden;\n }\n\n private chromePanelSnapshots(): FormChromePanelSnapshot[] {\n const skip = this.contributionHiddenSectionKeys();\n const ctx = this.fc?.formContext;\n const byKey = new Map<string, FormChromePanelSnapshot>();\n const add = (snapshot: FormChromePanelSnapshot) => {\n if (!snapshot.SectionKey || skip.has(snapshot.SectionKey)) return;\n if (IsFormSectionHidden(ctx, snapshot.SectionKey, snapshot.Variant)) return;\n if (!byKey.has(snapshot.SectionKey)) {\n byKey.set(snapshot.SectionKey, snapshot);\n }\n };\n for (const panel of this.allChromePanels()) {\n // Include hidden field panels so Details still groups them. Left-nav\n // otherwise drops ungrouped leftovers and the Details rail looks empty.\n add({\n SectionKey: panel.SectionKey,\n SectionName: panel.SectionName,\n Variant: panel.Variant,\n Icon: panel.Icon,\n });\n }\n for (const snapshot of this.domPanelSnapshots()) {\n add(snapshot);\n }\n return [...byKey.values()];\n }\n\n private domPanelSnapshots(): FormChromePanelSnapshot[] {\n const host = this.host.nativeElement;\n if (!host) return [];\n const out: FormChromePanelSnapshot[] = [];\n host.querySelectorAll('mj-collapsible-panel').forEach((node: Element) => {\n const sectionKey = node.getAttribute('data-section-key') ?? '';\n if (!sectionKey) return;\n if (node.classList.contains('mj-panel-empty')) return;\n const title = node.querySelector('.mj-forms-panel-title span')?.textContent?.trim();\n out.push({\n SectionKey: sectionKey,\n SectionName: title || sectionKey,\n Variant: node.getAttribute('data-variant') || 'default',\n Icon: node.getAttribute('data-icon') || undefined,\n });\n });\n return out;\n }\n\n private hiddenChromeSectionKeys(): Set<string> {\n const entity = this.EffectiveEntityInfo;\n if (!entity) return new Set();\n const resolved = ResolveFormContributions({\n EntityName: entity.Name,\n RelatedEntities: entity.RelatedEntities ?? [],\n IsaChildEntityIDs: (entity.ChildEntities ?? []).map((child) => child.ID),\n Registrations: CollectFormPanelRegistrations(),\n BakedSectionKeys: this.BakedRelatedSectionKeys,\n ShowRelatedEntities: this.EffectiveShowRelatedEntities,\n });\n return new Set(resolved.HiddenBakedSectionKeys);\n }\n\n private buildRelatedSchemaMap(entity: EntityInfo): Map<string, string> {\n const map = new Map<string, string>();\n const provider = this.ProviderToUse;\n for (const rel of entity.RelatedEntities) {\n const related = provider.EntityByID(rel.RelatedEntityID);\n if (related?.SchemaName) {\n map.set((rel.RelatedEntityID ?? '').toLowerCase(), related.SchemaName);\n }\n }\n return map;\n }\n\n private buildInboundRelationshipCounts(): Map<string, number> {\n const counts = new Map<string, number>();\n for (const entity of this.ProviderToUse.Entities ?? []) {\n for (const rel of entity.RelatedEntities ?? []) {\n const id = (rel.RelatedEntityID ?? '').toLowerCase();\n if (!id) continue;\n counts.set(id, (counts.get(id) ?? 0) + 1);\n }\n }\n return counts;\n }\n\n private chromePrefKey(suffix: string): string {\n const name = (this.EffectiveEntityInfo?.Name ?? 'entity').trim().toLowerCase();\n return `mj.formChrome.${name}.${suffix}`;\n }\n\n private RestoreChromePrefs(): void {\n if (ShouldPersistChromeActiveGroup(this.EffectiveRecord?.IsSaved)) {\n const group = UserInfoEngine.Instance.GetSetting(this.chromePrefKey('activeGroup'));\n if (group) this.chrome.ActiveGroupKey = group;\n }\n const more = UserInfoEngine.Instance.GetSetting(this.chromePrefKey('moreExpanded'));\n if (more === '1') this.chrome.MoreExpanded = true;\n if (more === '0') this.chrome.MoreExpanded = false;\n this.ChromeRailPinned = ParseRailPinnedSetting(\n UserInfoEngine.Instance.GetSetting(this.chromePrefKey('railPinned')),\n );\n this.ChromeRailWidthPx = ParseRailWidthSetting(\n UserInfoEngine.Instance.GetSetting(this.chromePrefKey('railWidth')),\n );\n this.chromeRailExpanded = this.ChromeRailPinned;\n }\n\n private PersistChromePrefs(): void {\n if (ShouldPersistChromeActiveGroup(this.EffectiveRecord?.IsSaved) && this.chrome.ActiveGroupKey) {\n UserInfoEngine.Instance.SetSettingDebounced(\n this.chromePrefKey('activeGroup'),\n this.chrome.ActiveGroupKey,\n );\n }\n UserInfoEngine.Instance.SetSettingDebounced(\n this.chromePrefKey('moreExpanded'),\n this.chrome.MoreExpanded ? '1' : '0',\n );\n UserInfoEngine.Instance.SetSettingDebounced(\n this.chromePrefKey('railPinned'),\n SerializeRailPinnedSetting(this.ChromeRailPinned),\n );\n UserInfoEngine.Instance.SetSettingDebounced(\n this.chromePrefKey('railWidth'),\n SerializeRailWidthSetting(this.ChromeRailWidthPx),\n );\n }\n\n /**\n * Subscribes to Navigate events from all child collapsible panels\n * and relays them through this container's Navigate output.\n */\n private SubscribeToPanelNavigateEvents(): void {\n this.panelNavReset$.next(); // tear down previous subscriptions\n // Subscribe to RecordReady on the form component — fires once after record is fully initialized\n if (this.fc) {\n this.fc.RecordReady.pipe(takeUntil(this.panelNavReset$)).subscribe(() => {\n this.LoadBadgeCounts();\n });\n this.fc.RecordRefreshed.pipe(takeUntil(this.panelNavReset$)).subscribe((e) => {\n this.OnFormRecordRefreshed(e.Record);\n });\n }\n\n this.Panels.forEach(panel => {\n panel.Navigate.pipe(takeUntil(this.panelNavReset$)).subscribe((event: FormNavigationEvent) => {\n this.Navigate.emit(event);\n });\n });\n }\n\n /**\n * Monitor record dirty state changes and trigger change detection.\n * This ensures the edit banner updates when fields are modified.\n */\n private watchRecordChanges(): void {\n // Poll for dirty state changes (BaseEntity doesn't expose observables)\n const checkInterval = setInterval(() => {\n if (this.EffectiveRecord?.Dirty !== undefined) {\n this.cdr.markForCheck();\n }\n }, 200);\n\n // Cleanup on destroy\n this.destroy$.subscribe(() => clearInterval(checkInterval));\n }\n\n // ---- Badge Count Loading ----\n\n /**\n * Whether the attachments feature is available for the current record.\n * True when record is saved and entity allows attachments (default true).\n */\n public get AttachmentsAvailable(): boolean {\n const record = this.EffectiveRecord;\n if (!record || !record.IsSaved) return false;\n const entity = record.EntityInfo;\n if (!entity) return false;\n const config = entity.Configuration?.Attachments;\n if (config?.Enabled === false) return false;\n return true;\n }\n\n /**\n * Loads tag count, attachment count, and record change version count for toolbar badges.\n * All queries run in parallel for performance.\n */\n private badgeCountsLoaded = false;\n\n private LoadBadgeCounts(): void {\n if (this.badgeCountsLoaded) return;\n\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo) return;\n\n this.badgeCountsLoaded = true;\n\n // Fire queries in parallel — no await needed, they update state async\n this.LoadTagCount(record);\n this.LoadVersionCount(record);\n this.LoadAttachmentCount(record);\n }\n\n /**\n * Queries the count of linked attachments for the current entity + record\n * and updates the AttachmentCount badge on the toolbar.\n */\n private async LoadAttachmentCount(record: BaseEntity): Promise<void> {\n if (!this.AttachmentsAvailable) return;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: File Entity Record Links',\n Fields: ['ID'],\n ExtraFilter: `EntityID='${record.EntityInfo.ID}' AND RecordID='${record.PrimaryKey.Values()}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.AttachmentCount = result.Results.length;\n this.cdr.detectChanges();\n }\n } catch {\n // Non-critical — badge just stays at 0\n }\n }\n\n /**\n * Queries the count of tagged items for the current entity + record\n * and updates the TagCount badge on the toolbar.\n */\n private async LoadTagCount(record: BaseEntity): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Don't narrow Fields — the server caches RunView results by entity+filter (ignoring Fields),\n // so a narrow query here would poison the cache for the subsequent full-field load in the Tags panel.\n const result = await rv.RunView({\n EntityName: 'MJ: Tagged Items',\n ExtraFilter: `EntityID='${record.EntityInfo.ID}' AND RecordID='${record.PrimaryKey.Values()}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.TagCount = result.Results.length;\n this.cdr.detectChanges();\n }\n } catch {\n // Non-critical — badge just stays at 0\n }\n }\n\n /**\n * Queries the count of record change entries for the current entity + record\n * and updates the VersionCount badge on the toolbar.\n */\n private async LoadVersionCount(record: BaseEntity): Promise<void> {\n if (!record.EntityInfo.TrackRecordChanges) return;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Record Changes',\n Fields: ['ID'],\n ExtraFilter: `EntityID='${record.EntityInfo.ID}' AND RecordID='${record.PrimaryKey.ToConcatenatedString()}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.VersionCount = result.Results.length;\n this.cdr.detectChanges();\n }\n } catch {\n // Non-critical — badge just stays at 0\n }\n }\n\n // ---- Toolbar Event Handlers ----\n\n /**\n * Navigation events are always re-emitted for the host app to handle.\n */\n OnNavigate(event: FormNavigationEvent): void {\n this.Navigate.emit(event);\n }\n\n /**\n * Edit mode change: delegate to FormComponent if available, otherwise re-emit.\n */\n OnEditModeChange(editMode: boolean): void {\n if (this.fc) {\n if (editMode) {\n this.fc.StartEditMode();\n } else {\n this.fc.EndEditMode();\n }\n this.cdr.markForCheck();\n } else {\n this.EditModeChange.emit(editMode);\n }\n }\n\n /**\n * Save: delegate to FormComponent if available, otherwise re-emit.\n */\n async OnSaveRequested(): Promise<void> {\n if (this.fc?.SaveRecord) {\n // Mark as saving to prevent double-click\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n await this.fc.SaveRecord(true);\n\n // After successful save, refresh version count badge and record changes drawer\n this.RefreshAfterSave();\n } finally {\n // Use microtask timing to avoid ExpressionChangedAfterItHasBeenCheckedError\n await Promise.resolve();\n this.ngZone.run(() => {\n this.IsSaving = false;\n this.cdr.markForCheck();\n });\n }\n } else {\n this.SaveRequested.emit();\n }\n }\n\n /**\n * Refreshes the version count badge and record changes drawer after a save.\n * The save operation creates a new RecordChange entry server-side, so we need\n * to update the UI to reflect the new version.\n */\n private RefreshAfterSave(): void {\n const record = this.EffectiveRecord;\n if (!record?.EntityInfo?.TrackRecordChanges) return;\n\n // Refresh version count badge\n this.LoadVersionCount(record);\n\n // If the record changes drawer is open, refresh it too\n if (this.ShowRecordChanges && this.recordChangesDrawer) {\n this.recordChangesDrawer.Refresh();\n }\n }\n\n /**\n * Cancel: delegate to FormComponent if available, otherwise re-emit.\n */\n OnCancelRequested(): void {\n if (this.fc?.CancelEdit) {\n this.fc.CancelEdit();\n this.cdr.markForCheck();\n } else {\n this.CancelRequested.emit();\n }\n }\n\n /**\n * Refresh: delegate to FormComponent if available, otherwise re-emit.\n * Badge reload + related-grid fan-out happen on `RecordRefreshed` so\n * `host.Refresh()` (which calls `RefreshRecord()` directly) still notifies.\n */\n async OnRefreshRequested(): Promise<void> {\n if (this.fc?.RefreshRecord) {\n this.IsRefreshing = true;\n this.cdr.markForCheck();\n\n try {\n await this.fc.RefreshRecord();\n } finally {\n await Promise.resolve();\n this.ngZone.run(() => {\n this.IsRefreshing = false;\n this.cdr.markForCheck();\n });\n }\n } else {\n this.RefreshRequested.emit();\n }\n }\n\n /**\n * After the form reloads the parent record: refresh chrome that is not\n * the record itself (badges, open history drawer) and broadcast to\n * in-form listeners (related grids, IS-A panel, custom panels).\n */\n private OnFormRecordRefreshed(record: BaseEntity): void {\n this.badgeCountsLoaded = false;\n this.LoadBadgeCounts();\n if (this.ShowRecordChanges && this.recordChangesDrawer) {\n this.recordChangesDrawer.Refresh();\n }\n this.recordRefresh.Notify(record);\n }\n\n /**\n * Delete, Favorite, History, Lists, ShowChanges: always re-emit for host app.\n */\n OnDeleteRequested(): void {\n this.DeleteRequested.emit();\n }\n\n OnFavoriteToggled(): void {\n this.FavoriteToggled.emit();\n }\n\n OnHistoryRequested(): void {\n // Check if event should be cancelled\n const beforeEvent = new BeforeHistoryViewEventArgs();\n this.BeforeHistoryView.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n // If not cancelled, show built-in record changes drawer\n this.ShowRecordChanges = true;\n this.cdr.markForCheck();\n\n // Also emit for backward compatibility\n this.HistoryRequested.emit();\n }\n\n OnListManagementRequested(): void {\n // Check if event should be cancelled\n const beforeEvent = new BeforeListManagementEventArgs();\n this.BeforeListManagement.emit(beforeEvent);\n if (beforeEvent.Cancel) return;\n\n // If not cancelled, show built-in list management dialog\n this.ShowListManagement = true;\n this.cdr.markForCheck();\n\n // Also emit for backward compatibility\n this.ListManagementRequested.emit();\n }\n\n OnTagsPanelToggled(): void {\n this.ShowTagsPanel = !this.ShowTagsPanel;\n this.cdr.detectChanges();\n }\n\n OnTagsPanelClosed(): void {\n this.ShowTagsPanel = false;\n this.cdr.detectChanges();\n\n // Refresh tag count — tags may have been added/removed while panel was open\n const record = this.EffectiveRecord;\n if (record?.EntityInfo) {\n this.LoadTagCount(record);\n }\n }\n\n /**\n * Handles live tag count updates from the tags panel component.\n */\n OnTagCountChanged(count: number): void {\n this.TagCount = count;\n this.cdr.markForCheck();\n }\n\n OnTagsPanelWidthChanged(width: number): void {\n this.TagsPanelWidth = width;\n UserInfoEngine.Instance.SetSettingDebounced(MjRecordFormContainerComponent.TAGS_WIDTH_KEY, String(width));\n }\n\n OnAttachmentsPanelToggled(): void {\n this.ShowAttachmentsPanel = !this.ShowAttachmentsPanel;\n this.cdr.detectChanges();\n }\n\n OnAttachmentsPanelClosed(): void {\n this.ShowAttachmentsPanel = false;\n this.cdr.detectChanges();\n\n // Refresh attachment count — attachments may have been added/removed while panel was open\n const record = this.EffectiveRecord;\n if (record?.EntityInfo) {\n this.LoadAttachmentCount(record);\n }\n }\n\n /**\n * Handles live attachment count updates from the attachments panel component.\n */\n OnAttachmentCountChanged(count: number): void {\n this.AttachmentCount = count;\n this.cdr.markForCheck();\n }\n\n OnTagsRecordNavigate(event: { EntityName: string; RecordID: string }): void {\n const md = this.ProviderToUse;\n const entityInfo = md.Entities.find(e => e.Name === event.EntityName);\n const pkey = new CompositeKey();\n if (entityInfo) {\n pkey.LoadFromURLSegment(entityInfo, event.RecordID);\n } else {\n pkey.KeyValuePairs = [{ FieldName: 'ID', Value: event.RecordID }];\n }\n this.Navigate.emit({ Kind: 'record', EntityName: event.EntityName, PrimaryKey: pkey });\n }\n\n OnRecordChangesClosed(): void {\n this.ShowRecordChanges = false;\n this.cdr.markForCheck();\n\n // Refresh version count — new changes may have occurred\n const record = this.EffectiveRecord;\n if (record?.EntityInfo) {\n this.LoadVersionCount(record);\n }\n }\n\n /**\n * Handles a restore request from the record-changes panel.\n *\n * The event payload now carries the FULL snapshot the user opted to apply\n * (the panel computes current-vs-snapshot diffs using the source change's\n * FullRecordJSON, and the user can deselect individual fields). Setting\n * the restore context before Save() causes the data provider to write the\n * resulting RecordChange row with `Source='Restore'`, `RestoredFromID`,\n * and `RestoreReason` populated — building the auditable lineage chain.\n */\n async OnRestoreRequested(event: RestoreVersionEvent): Promise<void> {\n const record = this.EffectiveRecord;\n if (!record) return;\n\n try {\n // Apply each selected snapshot field\n for (const fv of event.FieldValues) {\n record.Set(fv.FieldName, fv.Value);\n }\n\n // Mark the next save as a restore so the provider populates the\n // lineage columns. ClearRestoreContext is called in finally{} below\n // so it doesn't leak into subsequent saves on this entity instance.\n record.SetRestoreContext(event.SourceChangeID, event.Reason);\n\n try {\n const saved = await record.Save();\n if (saved) {\n const fieldCount = event.FieldValues.length;\n const reasonSuffix = event.Reason ? ` — \"${event.Reason}\"` : '';\n this.notificationService.CreateSimpleNotification(\n `Restored ${fieldCount} field${fieldCount === 1 ? '' : 's'} from version dated ${new Date(event.ChangedAt).toLocaleDateString()}${reasonSuffix}`,\n 'info', 3500,\n );\n\n // Refresh version count — the save just produced a new restore-tagged change.\n this.LoadVersionCount(record);\n this.cdr.markForCheck();\n } else {\n const errMsg = record.LatestResult?.CompleteMessage ?? 'unknown error';\n this.notificationService.CreateSimpleNotification(\n `Failed to save restored values: ${errMsg}`,\n 'error', 4500,\n );\n }\n } finally {\n record.ClearRestoreContext();\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n this.notificationService.CreateSimpleNotification(\n `Restore failed: ${message}`,\n 'error', 4000,\n );\n }\n }\n\n OnListManagementClosed(): void {\n this.ShowListManagement = false;\n this.cdr.markForCheck();\n }\n\n /**\n * Fired when the list-management dialog applies changes. Surfaces the\n * outcome — especially silently-skipped duplicates and failures, which\n * users otherwise misread as \"everything was added\".\n */\n OnListManagementComplete(result: ListManagementResult): void {\n const s = result.summary;\n if (s && (s.added > 0 || s.removed > 0 || s.skipped > 0 || s.failed > 0)) {\n const parts: string[] = [];\n if (s.added > 0) parts.push(`added to ${result.added.length} list${result.added.length === 1 ? '' : 's'}`);\n if (s.removed > 0) parts.push(`removed from ${result.removed.length} list${result.removed.length === 1 ? '' : 's'}`);\n if (s.skipped > 0) parts.push(`${s.skipped} duplicate${s.skipped === 1 ? '' : 's'} skipped`);\n if (s.failed > 0) parts.push(`${s.failed} failed`);\n this.notificationService.CreateSimpleNotification(\n `List changes applied: ${parts.join(', ')}`,\n s.failed > 0 ? 'warning' : 'success',\n s.failed > 0 ? 5000 : 3500,\n );\n }\n this.OnListManagementClosed();\n }\n\n OnShowChangesRequested(): void {\n if (this.fc?.ShowChanges) {\n this.fc.ShowChanges();\n } else {\n this.ShowChangesRequested.emit();\n }\n }\n\n // ---- Section Control Handlers ----\n\n OnFilterChange(filter: string): void {\n if (this.fc?.onFilterChange) {\n this.fc.onFilterChange(filter);\n if (filter.trim() && this.ChromeMoreItems.length > 0) {\n this.chrome.MoreExpanded = true;\n }\n this.ensureActiveGroupVisible();\n this.applyChromeVisibility();\n this.cdr.markForCheck();\n }\n }\n\n OnExpandAll(): void {\n if (this.fc?.expandAllSections) {\n this.fc.expandAllSections();\n this.cdr.markForCheck();\n }\n }\n\n OnCollapseAll(): void {\n if (this.fc?.collapseAllSections) {\n this.fc.collapseAllSections();\n this.cdr.markForCheck();\n }\n }\n\n OnShowEmptyFieldsChange(show: boolean): void {\n if (this.fc) {\n this.fc.showEmptyFields = show;\n this.cdr.markForCheck();\n }\n }\n\n OnWidthModeChange(mode: FormWidthMode): void {\n if (this.fc?.setFormWidthMode) {\n this.fc.setFormWidthMode(mode);\n this.cdr.markForCheck();\n } else {\n this.WidthMode = mode;\n this.cdr.markForCheck();\n }\n }\n\n OnResetSectionOrder(): void {\n if (this.fc?.resetSectionOrder) {\n this.fc.resetSectionOrder();\n this.scheduleChromeResolve();\n this.cdr.markForCheck();\n }\n }\n\n // ---- Variant picker ----\n\n /** Whether the variant dropdown menu is currently open. Toggled by the\n * control's click handler; closed on blur or after a row is picked. */\n _variantMenuOpen = false;\n\n /**\n * Effective variants — prefer the form component's list (set by the host\n * resolver) when present, fall back to the directly-bound @Input. This\n * means generated form templates don't need to bind [Variants] explicitly;\n * the host populates `instance.Variants` post-construction and the\n * container reads it through this accessor.\n */\n get EffectiveVariants(): VariantPickerItem[] {\n return (this.fc?.Variants as VariantPickerItem[] | undefined)\n ?? this.Variants\n ?? [];\n }\n\n get EffectiveCurrentVariantID(): string | null {\n return this.fc?.CurrentVariantID ?? this.CurrentVariantID;\n }\n\n /** Whether to show the variant picker at all. Hidden when the entity has\n * zero or one applicable variant — there's nothing to switch between. */\n get ShowVariantPicker(): boolean {\n return (this.EffectiveVariants?.length ?? 0) > 1;\n }\n\n /** Label for the currently-selected variant (or \"Default form\" if none). */\n get CurrentVariantLabel(): string {\n const v = this.EffectiveVariants?.find(x => UUIDsEqual(x.ID, this.EffectiveCurrentVariantID));\n return v?.Label ?? 'Default form';\n }\n\n /** Compact subtitle: scope + status, e.g. \"User · Active\". */\n variantSubtitle(v: VariantPickerItem): string {\n return `${v.Scope} · ${v.Status}`;\n }\n\n /**\n * User picked an item from the variant menu. If the host installed a\n * handler via `instance.OnVariantChanged`, call it; otherwise emit the\n * VariantChange event for standalone consumers.\n */\n OnVariantPicked(variantID: string | null): void {\n if (variantID === this.EffectiveCurrentVariantID) return;\n if (this.fc && typeof this.fc.OnVariantChanged === 'function') {\n this.fc.OnVariantChanged(variantID);\n } else {\n this.VariantChange.emit(variantID);\n }\n }\n\n // ---- Section Manager Handlers ----\n\n OnManageSections(): void {\n this.ShowSectionManager = true;\n this.cdr.markForCheck();\n }\n\n OnSectionOrderChange(newOrder: string[]): void {\n if (this.fc?.setSectionOrder) {\n this.fc.setSectionOrder(newOrder);\n this.scheduleChromeResolve();\n this.cdr.markForCheck();\n }\n }\n\n OnChromeMembershipChange(change: ChromeMembershipChange): void {\n if (this.fc?.setChromeMembership) {\n this.fc.setChromeMembership(change.moreSectionKeys, change.firstClassSectionKeys);\n this.scheduleChromeResolve();\n this.cdr.markForCheck();\n }\n }\n\n OnSectionManagerReset(): void {\n this.OnResetSectionOrder();\n }\n\n OnSectionManagerClosed(): void {\n this.ShowSectionManager = false;\n this.cdr.markForCheck();\n }\n}\n\nfunction contributionRailKey(meta: FormPanelRegistrationMetadata): string | null {\n if (meta.contributionKey?.trim()) {\n return meta.contributionKey.trim();\n }\n if (!meta.relatedEntity) {\n return null;\n }\n const derived = meta.relatedEntity.split(':').pop()?.trim();\n if (!derived) {\n return null;\n }\n return derived.charAt(0).toLowerCase() + derived.slice(1).replace(/\\s+/g, '');\n}\n\nfunction ReadRegisteredInclusion(raw: FormInclusion | undefined): FormInclusion | null {\n if (raw === 'Primary' || raw === 'More' || raw === 'None') {\n return raw;\n }\n return null;\n}\n","<!-- ============================================\n BEFORE-TOOLBAR SLOT\n ============================================ -->\n<ng-content select=\"[before-toolbar]\"></ng-content>\n\n<!-- ============================================\n TOOLBAR (bridges FormComponent state → toolbar inputs)\n Hidden entirely when Config.Toolbar === null (dialog/slide-in surfaces).\n ============================================ -->\n@if (EffectiveShowToolbar) {\n<mj-form-toolbar\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [UserCanEdit]=\"EffectiveUserCanEdit\"\n [UserCanDelete]=\"EffectiveUserCanDelete\"\n [IsFavorite]=\"EffectiveIsFavorite\"\n [FavoriteInitDone]=\"EffectiveFavoriteInitDone\"\n [IsDirty]=\"EffectiveIsDirty\"\n [DirtyFieldNames]=\"EffectiveDirtyFieldNames\"\n [ListCount]=\"ListCount\"\n [TagCount]=\"TagCount\"\n [AttachmentCount]=\"AttachmentCount\"\n [AttachmentsAvailable]=\"AttachmentsAvailable\"\n [IsAttachmentsPanelOpen]=\"ShowAttachmentsPanel\"\n [VersionCount]=\"VersionCount\"\n [EntityInfo]=\"EffectiveEntityInfo\"\n [Config]=\"EffectiveToolbarConfig\"\n [IsSaving]=\"EffectiveIsSaving\"\n [IsRefreshing]=\"EffectiveIsRefreshing\"\n [VisibleSectionCount]=\"VisibleSectionCount\"\n [TotalSectionCount]=\"TotalSectionCount\"\n [ExpandedSectionCount]=\"ExpandedSectionCount\"\n [SearchFilter]=\"EffectiveSearchFilter\"\n [ShowEmptyFields]=\"EffectiveShowEmptyFields\"\n [WidthMode]=\"EffectiveWidthMode\"\n [HasCustomSectionOrder]=\"EffectiveHasCustomSectionOrder\"\n [ChromeLayout]=\"ChromeLayout\"\n [Variants]=\"EffectiveVariants\"\n [CurrentVariantID]=\"EffectiveCurrentVariantID\"\n [RegisteredItems]=\"EffectiveRegisteredToolbarItems\"\n [ItemOverrides]=\"EffectiveToolbarItemOverrides\"\n [FormComponent]=\"fc\"\n (Navigate)=\"OnNavigate($event)\"\n (EditModeChange)=\"OnEditModeChange($event)\"\n (BeforeSave)=\"BeforeSave.emit($event)\"\n (SaveRequested)=\"OnSaveRequested()\"\n (BeforeCancel)=\"BeforeCancel.emit($event)\"\n (CancelRequested)=\"OnCancelRequested()\"\n (BeforeDelete)=\"BeforeDelete.emit($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (BeforeRefresh)=\"BeforeRefresh.emit($event)\"\n (RefreshRequested)=\"OnRefreshRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (BeforeHistoryView)=\"BeforeHistoryView.emit($event)\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (BeforeListManagement)=\"BeforeListManagement.emit($event)\"\n (ListManagementRequested)=\"OnListManagementRequested()\"\n (ShowChangesRequested)=\"OnShowChangesRequested()\"\n (CustomButtonClick)=\"CustomButtonClick.emit($event)\"\n (ToolbarItemClick)=\"ToolbarItemClick.emit($event)\"\n (FilterChange)=\"OnFilterChange($event)\"\n (ExpandAllRequested)=\"OnExpandAll()\"\n (CollapseAllRequested)=\"OnCollapseAll()\"\n (ShowEmptyFieldsChange)=\"OnShowEmptyFieldsChange($event)\"\n (WidthModeChange)=\"OnWidthModeChange($event)\"\n (ResetSectionOrderRequested)=\"OnResetSectionOrder()\"\n (ManageSectionsRequested)=\"OnManageSections()\"\n (TagsPanelToggled)=\"OnTagsPanelToggled()\"\n (AttachmentsPanelToggled)=\"OnAttachmentsPanelToggled()\"\n (VariantPicked)=\"OnVariantPicked($event)\">\n</mj-form-toolbar>\n}\n\n<!-- ============================================\n SCROLL AREA (full-width so mouse wheel works anywhere)\n Variant picker is now embedded in <mj-form-toolbar> as a right-side\n button — see the [Variants]/[CurrentVariantID] inputs + (VariantPicked)\n output on the toolbar above. Inline strip was removed.\n ============================================ -->\n<div class=\"mj-forms-scroll-area\">\n <div class=\"mj-forms-panels-container\"\n [class.mj-forms-panels--full-width]=\"EffectiveWidthMode === 'full-width'\"\n [class.mj-forms-panels--edit-mode]=\"EffectiveEditMode\"\n [class.mj-forms-panels--has-isa-panel]=\"HasIsaRelatedItems\">\n <!-- Flex row: optional left-nav + form panels + ISA side panel -->\n <div class=\"mj-forms-layout-row\"\n [class.mj-forms-layout--left-nav]=\"ChromeLayout === 'left-nav'\"\n [class.mj-forms-layout--accordion]=\"ChromeLayout === 'accordion'\"\n [class.mj-forms-layout--more]=\"IsChromeMoreActive\">\n @if (ShowChromeRail) {\n <nav class=\"mj-forms-chrome-rail\"\n [class.is-collapsed]=\"ChromeRailCollapsed\"\n [class.is-resizing]=\"RailResizing\"\n [style.width.px]=\"ChromeRailCollapsed ? null : ChromeRailWidthPx\"\n [attr.aria-expanded]=\"!ChromeRailCollapsed\"\n aria-label=\"Form sections\">\n @if (ChromeRailCollapsed) {\n <button type=\"button\"\n class=\"mj-forms-chrome-rail-spine\"\n (click)=\"OnChromeRailExpand()\"\n [attr.aria-label]=\"'Show form sections — ' + ChromeActiveTitle\"\n [title]=\"'Show sections — ' + ChromeActiveTitle\">\n <i [class]=\"ChromeActiveIcon\"></i>\n <span class=\"mj-forms-chrome-rail-spine-label\"\n (mouseenter)=\"OnRailLabelHover($event, ChromeActiveTitle)\">{{ ChromeActiveTitle }}</span>\n </button>\n } @else {\n <div class=\"mj-forms-chrome-rail-resizer\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n [attr.aria-valuenow]=\"ChromeRailWidthPx\"\n [attr.aria-valuemin]=\"RailWidthMin\"\n [attr.aria-valuemax]=\"RailWidthMax\"\n title=\"Drag to resize sections\"\n (pointerdown)=\"OnRailResizeStart($event)\"\n (pointermove)=\"OnRailResizeMove($event)\"\n (pointerup)=\"OnRailResizeEnd()\"\n (pointercancel)=\"OnRailResizeEnd()\"></div>\n <div class=\"mj-forms-chrome-rail-toolbar\">\n <button type=\"button\"\n class=\"mj-forms-chrome-rail-pin\"\n [class.is-pinned]=\"ChromeRailPinned\"\n [attr.aria-pressed]=\"ChromeRailPinned\"\n [title]=\"ChromeRailPinned ? 'Unpin sections — they hide after you switch' : 'Pin sections open'\"\n (click)=\"OnChromeRailPinToggle()\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n </button>\n <button type=\"button\"\n class=\"mj-forms-chrome-rail-collapse\"\n title=\"Hide sections\"\n aria-label=\"Hide form sections\"\n (click)=\"OnChromeRailCollapse()\">\n <i class=\"fa-solid fa-angles-left\"></i>\n </button>\n </div>\n @for (group of ChromeFirstClassGroups; track group.Key) {\n <div class=\"mj-forms-chrome-rail-item\"\n role=\"button\"\n tabindex=\"0\"\n [class.is-active]=\"ChromeActiveGroupKey === group.Key\"\n [attr.aria-current]=\"ChromeActiveGroupKey === group.Key ? 'page' : null\"\n [class.is-drag-over]=\"RailDragOverKey === group.Key\"\n (click)=\"OnChromeGroupActivate(group.Key)\"\n (keydown.enter)=\"OnChromeGroupActivate(group.Key)\"\n (keydown.space)=\"$event.preventDefault(); OnChromeGroupActivate(group.Key)\"\n (dragover)=\"OnRailDragOver($event, group.Key)\"\n (dragleave)=\"OnRailDragLeave($event, group.Key)\"\n (drop)=\"OnRailDrop($event, group.Key)\">\n @if (ChromeReorderAllowed) {\n <span class=\"mj-forms-chrome-rail-handle\"\n title=\"Drag to reorder\"\n draggable=\"true\"\n (dragstart)=\"OnRailDragStart($event, group.Key)\"\n (dragend)=\"OnRailDragEnd()\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-grip-vertical\"></i>\n </span>\n }\n <i [class]=\"group.Icon\"></i>\n <span class=\"mj-forms-chrome-rail-label\"\n (mouseenter)=\"OnRailLabelHover($event, group.Title)\">{{ group.Title }}</span>\n @let rowCount = ChromeGroupRowCount(group);\n @if (rowCount != null) {\n <span class=\"mj-forms-chrome-rail-count\"\n [class.is-zero]=\"rowCount === 0\">{{ rowCount }}</span>\n }\n </div>\n }\n @if (ChromeMoreFolder; as more) {\n <div class=\"mj-forms-chrome-rail-item is-more-folder\"\n role=\"button\"\n tabindex=\"0\"\n [class.is-expanded]=\"MoreExpanded\"\n (click)=\"OnMoreFolderToggle()\"\n (keydown.enter)=\"OnMoreFolderToggle()\"\n (keydown.space)=\"$event.preventDefault(); OnMoreFolderToggle()\">\n <span class=\"mj-forms-chrome-rail-handle is-spacer\" aria-hidden=\"true\"></span>\n <i [class]=\"MoreExpanded ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder'\"></i>\n <span class=\"mj-forms-chrome-rail-label\"\n (mouseenter)=\"OnRailLabelHover($event, more.Title)\">{{ more.Title }}</span>\n <i class=\"fa-solid mj-forms-chrome-rail-more-toggle\"\n [class.fa-minus]=\"MoreExpanded\"\n [class.fa-plus]=\"!MoreExpanded\"\n aria-hidden=\"true\"></i>\n </div>\n @if (MoreExpanded) {\n <div class=\"mj-forms-chrome-rail-more-tree\">\n @for (child of ChromeMoreItems; track child.Key) {\n <div class=\"mj-forms-chrome-rail-item is-more-child\"\n role=\"button\"\n tabindex=\"0\"\n [class.is-active]=\"ChromeActiveGroupKey === child.Key\"\n [attr.aria-current]=\"ChromeActiveGroupKey === child.Key ? 'page' : null\"\n [class.is-drag-over]=\"RailDragOverKey === child.Key\"\n (click)=\"OnChromeGroupActivate(child.Key)\"\n (keydown.enter)=\"OnChromeGroupActivate(child.Key)\"\n (keydown.space)=\"$event.preventDefault(); OnChromeGroupActivate(child.Key)\"\n (dragover)=\"OnRailDragOver($event, child.Key)\"\n (dragleave)=\"OnRailDragLeave($event, child.Key)\"\n (drop)=\"OnRailDrop($event, child.Key)\">\n @if (ChromeReorderAllowed) {\n <span class=\"mj-forms-chrome-rail-handle\"\n title=\"Drag to reorder\"\n draggable=\"true\"\n (dragstart)=\"OnRailDragStart($event, child.Key)\"\n (dragend)=\"OnRailDragEnd()\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-grip-vertical\"></i>\n </span>\n }\n <i [class]=\"child.Icon\"></i>\n <span class=\"mj-forms-chrome-rail-label\"\n (mouseenter)=\"OnRailLabelHover($event, child.Title)\">{{ child.Title }}</span>\n @let childCount = ChromeGroupRowCount(child);\n @if (childCount != null) {\n <span class=\"mj-forms-chrome-rail-count\"\n [class.is-zero]=\"childCount === 0\">{{ childCount }}</span>\n }\n </div>\n }\n </div>\n }\n }\n }\n </nav>\n }\n <!-- All panels in a single flex container — CSS order drives sequencing -->\n <div class=\"mj-forms-all-panels\">\n <ng-content></ng-content>\n\n <!--\n Fill-in related grids for DisplayInForm relationships the template\n did not bake and no registered panel claimed. Claimed / extra panels\n still mount via mj-form-panel-slot. See plans/form-contributions.md.\n -->\n @if (Record && FormComponent) {\n <mj-form-contributions\n [Record]=\"Record\"\n [FormComponent]=\"FormComponent\"\n [FormContext]=\"FormComponent.formContext\"\n [BakedSectionKeys]=\"BakedRelatedSectionKeys\"\n [ShowRelatedEntities]=\"EffectiveShowRelatedEntities\">\n </mj-form-contributions>\n }\n\n <!--\n Container-provided fallback slot. ALWAYS present — last in document\n order — so any panel whose registered slot isn't found in the current\n form falls through here via FormSlotCoordinator's chain. Downstream\n consumers that haven't rerun CodeGen against the slot-emitting\n template still see every panel; they just render at the bottom\n instead of at their preferred position.\n -->\n @if (ShowMoreToggle) {\n <div class=\"mj-forms-more-overflow\" [class.is-expanded]=\"MoreExpanded\">\n <button type=\"button\"\n class=\"mj-forms-more-overflow-toggle\"\n (click)=\"OnMoreToggle()\">\n <i [class]=\"MoreExpanded ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder'\"></i>\n <span class=\"mj-forms-more-overflow-label\">{{ MoreExpanded ? 'Hide more' : 'More' }}</span>\n @if (!MoreExpanded && MorePreview) {\n <span class=\"mj-forms-more-overflow-preview\">{{ MorePreview }}</span>\n }\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"MoreExpanded\"\n [class.fa-chevron-right]=\"!MoreExpanded\"></i>\n </button>\n </div>\n }\n\n @if (Record && FormComponent) {\n <mj-form-panel-slot\n [Entity]=\"Record.EntityInfo.Name\"\n Slot=\"after-everything\"\n [Record]=\"Record\"\n [FormComponent]=\"FormComponent\">\n </mj-form-panel-slot>\n }\n\n <!-- Empty state when no sections match search -->\n @if (EffectiveSearchFilter && SearchHasNoMatches) {\n <mj-empty-state class=\"mj-forms-empty-search-state\"\n Variant=\"no-results\"\n Title=\"No sections found\"\n [Message]=\"'No sections match "' + EffectiveSearchFilter + '". Try a different search term.'\"\n ActionText=\"Clear search\"\n ActionIcon=\"fa-solid fa-rotate-left\"\n ActionVariant=\"flat\"\n (Action)=\"OnFilterChange('')\" />\n }\n </div>\n\n <!-- IS-A Related Records Side Panel -->\n <mj-isa-related-panel\n [Record]=\"EffectiveRecord\"\n [EditMode]=\"EffectiveEditMode\"\n [Collapsed]=\"EffectiveWidthMode === 'full-width'\"\n (Navigate)=\"OnNavigate($event)\">\n </mj-isa-related-panel>\n </div>\n </div>\n</div>\n\n<!-- ============================================\n RECORD CHANGES DRAWER (shown when history button clicked)\n ============================================ -->\n@if (ShowRecordChanges && EffectiveRecord) {\n <mj-record-changes\n [record]=\"EffectiveRecord\"\n [AllowRestore]=\"EffectiveUserCanEdit\"\n (RestoreRequested)=\"OnRestoreRequested($event)\"\n (dialogClosed)=\"OnRecordChangesClosed()\">\n </mj-record-changes>\n}\n\n<!-- ============================================\n TAGS PANEL (shown when tags button clicked)\n ============================================ -->\n@if (ShowTagsPanel && EffectiveRecord) {\n <mj-record-tags\n [Record]=\"EffectiveRecord\"\n [WidthPx]=\"TagsPanelWidth\"\n (PanelClosed)=\"OnTagsPanelClosed()\"\n (TagCountChanged)=\"OnTagCountChanged($event)\"\n (RecordNavigate)=\"OnTagsRecordNavigate($event)\"\n (WidthChanged)=\"OnTagsPanelWidthChanged($event)\">\n </mj-record-tags>\n}\n\n<!-- ============================================\n ATTACHMENTS PANEL (shown when attachments button clicked)\n ============================================ -->\n@if (ShowAttachmentsPanel && AttachmentsAvailable && EffectiveRecord) {\n <mj-record-attachments\n [Record]=\"EffectiveRecord\"\n [Visible]=\"true\"\n (PanelClosed)=\"OnAttachmentsPanelClosed()\"\n (AttachmentCountChanged)=\"OnAttachmentCountChanged($event)\">\n </mj-record-attachments>\n}\n\n<!-- ============================================\n LIST MANAGEMENT DIALOG (shown when lists button clicked)\n ============================================ -->\n@if (ShowListManagement && EffectiveRecord) {\n <mj-list-management-dialog\n [visible]=\"ShowListManagement\"\n [config]=\"{\n mode: 'manage',\n entityId: EffectiveRecord.EntityInfo.ID,\n entityName: EffectiveRecord.EntityInfo.Name,\n recordIds: [EffectiveRecord.PrimaryKey.Values()[0]],\n allowCreate: true\n }\"\n (complete)=\"OnListManagementComplete($event)\"\n (cancel)=\"OnListManagementClosed()\">\n </mj-list-management-dialog>\n}\n\n<!-- ============================================\n SECTION MANAGER DRAWER (shown when manage-sections button clicked)\n ============================================ -->\n<mj-section-manager\n [Sections]=\"SectionManagerItems\"\n [SectionOrder]=\"SectionManagerOrder\"\n [MoreSectionKeys]=\"SectionManagerMoreKeys\"\n [LockedMoreKeys]=\"SectionManagerLockedMoreKeys\"\n [Visible]=\"ShowSectionManager\"\n (SectionOrderChange)=\"OnSectionOrderChange($event)\"\n (MembershipChange)=\"OnChromeMembershipChange($event)\"\n (ResetRequested)=\"OnSectionManagerReset()\"\n (Closed)=\"OnSectionManagerClosed()\">\n</mj-section-manager>\n"]}
|
|
@@ -15,13 +15,55 @@ export declare class ExplorerEntityDataGridComponent implements AfterViewInit, O
|
|
|
15
15
|
private elementRef;
|
|
16
16
|
private cdr;
|
|
17
17
|
private ngZone;
|
|
18
|
+
private recordRefresh;
|
|
19
|
+
private destroy$;
|
|
18
20
|
Params: RunViewParams | null;
|
|
19
21
|
NewRecordValues: Record<string, unknown>;
|
|
20
22
|
AllowLoad: boolean;
|
|
21
23
|
ShowToolbar: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Existing generated forms still emit `[ShowToolbar]="false"` on related
|
|
26
|
+
* grids. Inside a related-entity panel we restore the toolbar so search /
|
|
27
|
+
* new / export / refresh come back without waiting for CodeGen.
|
|
28
|
+
*/
|
|
29
|
+
get EffectiveShowToolbar(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Related-entity accordion AND left-nav panels. Accordion used to leave
|
|
32
|
+
* Height='auto' (100% of an auto-sized parent) so AG Grid's viewport
|
|
33
|
+
* collapsed to 0 while the toolbar still showed "N rows".
|
|
34
|
+
*/
|
|
35
|
+
private isInsideRelatedEntityPanel;
|
|
36
|
+
private findRelatedEntityPanel;
|
|
37
|
+
/** Search box on the left of the toolbar. Default true. */
|
|
38
|
+
ShowSearch: boolean;
|
|
39
|
+
/** Forwarded to the inner grid. Defaults match `<mj-entity-data-grid>`. */
|
|
40
|
+
ShowNewButton: boolean;
|
|
41
|
+
ShowRefreshButton: boolean;
|
|
42
|
+
ShowExportButton: boolean;
|
|
43
|
+
ShowDeleteButton: boolean;
|
|
44
|
+
ShowCompareButton: boolean;
|
|
45
|
+
ShowMergeButton: boolean;
|
|
46
|
+
ShowAddToListButton: boolean;
|
|
47
|
+
ShowDuplicateSearchButton: boolean;
|
|
48
|
+
ShowCommunicationButton: boolean;
|
|
49
|
+
ShowRecycleBin: boolean;
|
|
22
50
|
Height: number | 'auto' | 'fit-content';
|
|
51
|
+
/**
|
|
52
|
+
* When the grid sizes to its rows (left-nav related panels), this is the
|
|
53
|
+
* cap. Content taller than the cap scrolls inside AG Grid — it does not
|
|
54
|
+
* switch to paging. `null` means grow with the rows, no cap.
|
|
55
|
+
*/
|
|
56
|
+
MaxHeight: number | null;
|
|
23
57
|
ToolbarConfig: GridToolbarConfig;
|
|
24
58
|
SelectionMode: GridSelectionMode;
|
|
59
|
+
/**
|
|
60
|
+
* Related-entity grids (accordion and left-nav) and explicit fit-content grids
|
|
61
|
+
* size to toolbar + header + rows instead of `height: 100%` of leftover / auto space.
|
|
62
|
+
*/
|
|
63
|
+
private sizedHeightPx;
|
|
64
|
+
get ResolvedHeight(): number | 'auto' | 'fit-content';
|
|
65
|
+
get hostHeightStyle(): string;
|
|
66
|
+
private shouldSizeToRows;
|
|
25
67
|
/**
|
|
26
68
|
* When true (default), the inner grid does not fetch until this component's host
|
|
27
69
|
* element first scrolls into the viewport. This prevents related-entity grids on a
|
|
@@ -42,6 +84,17 @@ export declare class ExplorerEntityDataGridComponent implements AfterViewInit, O
|
|
|
42
84
|
get EffectiveAllowLoad(): boolean;
|
|
43
85
|
ngAfterViewInit(): void;
|
|
44
86
|
ngOnDestroy(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Reload this grid from the database. Used by the grid's own refresh
|
|
89
|
+
* button and by the parent-form refresh broadcast.
|
|
90
|
+
*/
|
|
91
|
+
Refresh(): Promise<void>;
|
|
92
|
+
private subscribeToFormRefresh;
|
|
93
|
+
/**
|
|
94
|
+
* Parent-form refresh fan-out: only reload grids that have already paid
|
|
95
|
+
* for a RunView. Collapsed / never-seen related sections stay deferred.
|
|
96
|
+
*/
|
|
97
|
+
private refreshIfLoaded;
|
|
45
98
|
private onBecameVisible;
|
|
46
99
|
/**
|
|
47
100
|
* When true, double-clicking a row emits a Navigate event.
|
|
@@ -67,6 +120,6 @@ export declare class ExplorerEntityDataGridComponent implements AfterViewInit, O
|
|
|
67
120
|
defaultValues: Record<string, unknown>;
|
|
68
121
|
}): void;
|
|
69
122
|
static ɵfac: i0.ɵɵFactoryDeclaration<ExplorerEntityDataGridComponent, never>;
|
|
70
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "DeferLoadUntilVisible": { "alias": "DeferLoadUntilVisible"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; "Navigate": "Navigate"; }, never, never, false, never>;
|
|
123
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ExplorerEntityDataGridComponent, "mj-explorer-entity-data-grid", never, { "Params": { "alias": "Params"; "required": false; }; "NewRecordValues": { "alias": "NewRecordValues"; "required": false; }; "AllowLoad": { "alias": "AllowLoad"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "ShowSearch": { "alias": "ShowSearch"; "required": false; }; "ShowNewButton": { "alias": "ShowNewButton"; "required": false; }; "ShowRefreshButton": { "alias": "ShowRefreshButton"; "required": false; }; "ShowExportButton": { "alias": "ShowExportButton"; "required": false; }; "ShowDeleteButton": { "alias": "ShowDeleteButton"; "required": false; }; "ShowCompareButton": { "alias": "ShowCompareButton"; "required": false; }; "ShowMergeButton": { "alias": "ShowMergeButton"; "required": false; }; "ShowAddToListButton": { "alias": "ShowAddToListButton"; "required": false; }; "ShowDuplicateSearchButton": { "alias": "ShowDuplicateSearchButton"; "required": false; }; "ShowCommunicationButton": { "alias": "ShowCommunicationButton"; "required": false; }; "ShowRecycleBin": { "alias": "ShowRecycleBin"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "MaxHeight": { "alias": "MaxHeight"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "DeferLoadUntilVisible": { "alias": "DeferLoadUntilVisible"; "required": false; }; "NavigateOnDoubleClick": { "alias": "NavigateOnDoubleClick"; "required": false; }; }, { "AfterRowDoubleClick": "AfterRowDoubleClick"; "AfterRowClick": "AfterRowClick"; "AfterDataLoad": "AfterDataLoad"; "Navigate": "Navigate"; }, never, never, false, never>;
|
|
71
124
|
}
|
|
72
125
|
//# sourceMappingURL=explorer-entity-data-grid.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAoD,aAAa,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"explorer-entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../src/lib/explorer-entity-data-grid.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAoD,aAAa,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAG3J,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACH,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EAEpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;;AAGhE;;;;;GAKG;AACH,qBA4Ca,+BAAgC,YAAW,aAAa,EAAE,SAAS;IACpD,SAAS,EAAG,uBAAuB,CAAC;IAE5D,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAA4D;IACjF,OAAO,CAAC,QAAQ,CAAuB;IAG9B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC9C,SAAS,EAAE,OAAO,CAAQ;IAC1B,WAAW,EAAE,OAAO,CAAQ;IAErC;;;;OAIG;IACH,IAAI,oBAAoB,IAAI,OAAO,CAGlC;IAED;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,sBAAsB;IAW9B,2DAA2D;IAClD,UAAU,EAAE,OAAO,CAAQ;IACpC,2EAA2E;IAClE,aAAa,EAAE,OAAO,CAAQ;IAC9B,iBAAiB,EAAE,OAAO,CAAQ;IAClC,gBAAgB,EAAE,OAAO,CAAQ;IACjC,gBAAgB,EAAE,OAAO,CAAS;IAClC,iBAAiB,EAAE,OAAO,CAAS;IACnC,eAAe,EAAE,OAAO,CAAS;IACjC,mBAAmB,EAAE,OAAO,CAAS;IACrC,yBAAyB,EAAE,OAAO,CAAS;IAC3C,uBAAuB,EAAE,OAAO,CAAS;IACzC,cAAc,EAAE,OAAO,CAAQ;IAC/B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAU;IAC1D;;;;OAIG;IACM,SAAS,EAAE,MAAM,GAAG,IAAI,CAA+B;IACvD,aAAa,EAAE,iBAAiB,CAAM;IACtC,aAAa,EAAE,iBAAiB,CAAY;IAErD;;;OAGG;IACH,OAAO,CAAC,aAAa,CAA0C;IAE/D,IAAI,cAAc,IAAI,MAAM,GAAG,MAAM,GAAG,aAAa,CAEpD;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,OAAO,CAAC,gBAAgB;IAIxB;;;;;;;;OAQG;IACM,qBAAqB,EAAE,OAAO,CAAQ;IAE/C,qGAAqG;IACrG,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAuB;IAEnD;;;OAGG;IACH,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,eAAe,IAAI,IAAI;IAwBvB,WAAW,IAAI,IAAI;IAOnB;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,OAAO,CAAC,sBAAsB;IAM9B;;;OAGG;YACW,eAAe;IAO7B,OAAO,CAAC,eAAe;IAcvB;;;OAGG;IACM,qBAAqB,EAAE,OAAO,CAAQ;IAGrC,mBAAmB,6CAAoD;IACvE,aAAa,uCAA8C;IAC3D,aAAa,uCAA8C;IAErE,6EAA6E;IACnE,QAAQ,oCAA2C;IAE7D,gBAAgB,CAAC,KAAK,EAAE,4BAA4B,GAAG,IAAI;IAoB3D,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAK/C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAS/C;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;yCAzO/F,+BAA+B;2CAA/B,+BAA+B;CAgP3C"}
|