@memberjunction/ng-core-entity-forms 5.14.0 → 5.15.0
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/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +55 -33
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +340 -315
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +35 -2
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +917 -632
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js +16 -4
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +117 -113
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +23 -13
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +15 -11
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +91 -87
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +13 -15
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +39 -37
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +29 -27
- package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +109 -73
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +22 -4
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +22 -4
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +137 -135
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +49 -43
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +31 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Entities/entity-form.component.ts","../../../../src/lib/custom/Entities/entity-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport {\n EntityInfo,\n EntityFieldInfo,\n EntityRelationshipInfo,\n EntityPermissionInfo,\n Metadata,\n CompositeKey,\n RunView\n} from '@memberjunction/core';\nimport { MJEntityEntity } from '@memberjunction/core-entities';\nimport { ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RecordOpenedEvent } from '@memberjunction/ng-entity-viewer';\nimport { MJEntityFormComponent } from '../../generated/Entities/MJEntity/mjentity.form.component';\n\nexport type ExplorerSection =\n | 'overview'\n | 'fields'\n | 'relationships'\n | 'permissions'\n | 'data'\n | 'lineage'\n | 'history'\n | 'settings';\n\nexport interface NavItem {\n id: ExplorerSection;\n icon: string;\n label: string;\n badge?: number;\n}\n\nexport interface EntityStats {\n fieldCount: number;\n relationshipCount: number;\n permissionCount: number;\n rowCount: number | null;\n primaryKeyCount: number;\n foreignKeyCount: number;\n encryptedFieldCount: number;\n valueListFieldCount: number;\n}\n\nexport interface FieldGroup {\n id: string;\n label: string;\n icon: string;\n fields: EntityFieldInfo[];\n expanded: boolean;\n}\n\n/**\n * Represents a group of fields organized by their source entity in an IS-A hierarchy.\n */\nexport interface ISAFieldGroup {\n /** The source entity name (e.g., \"Products\", \"Meetings\") */\n EntityName: string;\n /** The EntityInfo for the source entity */\n EntityInfo: EntityInfo | null;\n /** Label like \"Own Fields\" or \"Inherited from Products\" */\n Label: string;\n /** Hierarchy level: 0 = own, 1 = parent, 2 = grandparent, etc. */\n Level: number;\n /** Fields belonging to this group */\n Fields: EntityFieldInfo[];\n /** Whether this group is expanded in the UI */\n Expanded: boolean;\n}\n\n/**\n * Record count for a child entity type\n */\nexport interface ChildEntityCount {\n EntityName: string;\n EntityInfo: EntityInfo;\n RecordCount: number | null;\n IsLoading: boolean;\n}\n\n/**\n * Grouped outgoing relationship - an entity this entity references via FK fields\n */\nexport interface GroupedOutgoingRelationship {\n /** The entity being referenced */\n entityId: string;\n entityName: string;\n /** All fields on THIS entity that reference the target entity */\n fields: EntityFieldInfo[];\n}\n\n/**\n * Grouped incoming relationship - an entity that references this entity\n */\nexport interface GroupedIncomingRelationship {\n /** The entity that references this entity */\n entityName: string;\n /** All fields on the OTHER entity that reference THIS entity */\n fields: { fieldName: string; type: string; bundleInAPI: boolean }[];\n}\n\n/**\n * World-class Entity Explorer form component that provides an exploration-focused\n * interface for understanding entities in the MemberJunction system.\n *\n * This component replaces the traditional edit-focused entity form with a rich\n * exploration experience featuring:\n * - Three-zone architecture (Header, Nav Rail, Main Canvas)\n * - Seven exploration sections: Overview, Fields, Relationships, Permissions, Lineage, History, Settings\n * - Semantic field grouping by purpose (Primary Keys, Foreign Keys, Encrypted, etc.)\n * - Visual ERD integration for relationship exploration\n * - Slide-in detail panels for contextual information\n */\n@RegisterClass(BaseFormComponent, 'MJ: Entities')\n@Component({\n standalone: false,\n selector: 'mj-entity-form',\n templateUrl: './entity-form.component.html',\n styleUrls: ['./entity-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJEntityFormComponentExtended extends MJEntityFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n\n /** The Entity record being displayed */\n public record!: MJEntityEntity;\n\n /** Runtime EntityInfo metadata (populated from record.ID) */\n public entity: EntityInfo | null = null;\n\n /** All entities for relationship lookups */\n public allEntities: EntityInfo[] = [];\n\n /** All entity fields (flattened from all entities) for ERD details panel */\n public allEntityFields: EntityFieldInfo[] = [];\n\n /** Loading state */\n public isExplorerLoading = true;\n\n /** Error message if loading fails */\n public explorerError: string | null = null;\n\n /** Current active section in the explorer */\n public activeSection: ExplorerSection = 'overview';\n\n /** Navigation items for the rail - world-class minimalist icons */\n public navItems: NavItem[] = [\n { id: 'overview', icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'fields', icon: 'fa-solid fa-table-cells', label: 'Fields' },\n { id: 'relationships', icon: 'fa-solid fa-diagram-project', label: 'Relations' },\n { id: 'permissions', icon: 'fa-solid fa-lock', label: 'Security' },\n { id: 'data', icon: 'fa-solid fa-table-list', label: 'Data' },\n { id: 'lineage', icon: 'fa-solid fa-code-branch', label: 'Lineage' },\n { id: 'history', icon: 'fa-solid fa-clock-rotate-left', label: 'History' },\n { id: 'settings', icon: 'fa-solid fa-sliders', label: 'Settings' }\n ];\n\n /** Computed statistics for the entity */\n public stats: EntityStats = {\n fieldCount: 0,\n relationshipCount: 0,\n permissionCount: 0,\n rowCount: null,\n primaryKeyCount: 0,\n foreignKeyCount: 0,\n encryptedFieldCount: 0,\n valueListFieldCount: 0\n };\n\n /** Semantically grouped fields */\n public fieldGroups: FieldGroup[] = [];\n\n /** Field search term for filtering */\n public fieldSearchTerm = '';\n\n /** Set of expanded field group IDs */\n public expandedFieldGroups = new Set<string>();\n\n /** Field view mode: grouped by category or flat list */\n public fieldViewMode: 'grouped' | 'list' = 'grouped';\n\n /** IS-A field groups organized by source entity */\n public isaFieldGroups: ISAFieldGroup[] = [];\n\n /** Child entity record counts for the IS-A parent type summary */\n public childEntityCounts: ChildEntityCount[] = [];\n\n /** Whether the IS-A field inspector panel is expanded */\n public isaFieldInspectorExpanded = true;\n\n /** Field list sort configuration */\n public fieldListSortColumn: string = 'Sequence';\n public fieldListSortDirection: 'asc' | 'desc' = 'asc';\n\n /** Relationship view mode toggle */\n public relationshipViewMode: 'diagram' | 'list' = 'diagram';\n\n /** ERD depth level (1-5) */\n public erdDepth: number = 1;\n\n /** Whether the row count is loading */\n public isRowCountLoading = false;\n\n /** Outgoing relationships (this entity references others) */\n public outgoingRelationships: EntityRelationshipInfo[] = [];\n\n /** Incoming relationships (other entities reference this one) */\n public incomingRelationships: EntityRelationshipInfo[] = [];\n\n /** Grouped outgoing relationships by target entity */\n public groupedOutgoingRelationships: GroupedOutgoingRelationship[] = [];\n\n /** Grouped incoming relationships by source entity */\n public groupedIncomingRelationships: GroupedIncomingRelationship[] = [];\n\n /** Whether detail panel is open */\n public detailPanelOpen = false;\n\n /** Currently selected field for detail panel */\n public selectedField: EntityFieldInfo | null = null;\n\n /** Currently selected relationship for detail panel */\n public selectedRelationship: EntityRelationshipInfo | null = null;\n\n private destroy$ = new Subject<void>();\n private stateChange$ = new Subject<void>();\n private _metadata = new Metadata();\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n this.setupStateManagement();\n this.loadExplorerData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupStateManagement(): void {\n this.stateChange$.pipe(\n debounceTime(100),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n private loadExplorerData(): void {\n this.isExplorerLoading = true;\n this.explorerError = null;\n this.cdr.markForCheck();\n\n try {\n this.allEntities = this._metadata.Entities;\n\n // Flatten all entity fields for ERD details panel\n this.allEntityFields = this.allEntities.flatMap(e => e.Fields);\n\n // Find the EntityInfo by the record's ID\n if (this.record?.ID) {\n this.entity = this.allEntities.find(e => UUIDsEqual(e.ID, this.record.ID)) || null;\n }\n\n if (this.entity) {\n this.computeStats();\n this.buildFieldGroups();\n this.buildISAFieldGroups();\n this.buildRelationships();\n this.updateNavBadges();\n\n // Load row count asynchronously (don't block UI)\n this.loadRowCountAsync();\n\n // Load IS-A child entity counts asynchronously\n if (this.IsParentType) {\n this.loadChildEntityCounts();\n }\n } else {\n this.explorerError = `Entity metadata not found for: ${this.record?.Name || 'Unknown'}`;\n }\n } catch (err) {\n this.explorerError = err instanceof Error ? err.message : 'Failed to load entity metadata';\n console.error('Error loading entity explorer data:', err);\n } finally {\n this.isExplorerLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Loads the row count asynchronously using RunView with count_only.\n * This doesn't block the UI - updates when complete.\n */\n private async loadRowCountAsync(): Promise<void> {\n if (!this.entity) return;\n\n this.isRowCountLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.entity.Name,\n ResultType: 'count_only'\n });\n\n if (result.Success) {\n this.stats = {\n ...this.stats,\n rowCount: result.TotalRowCount\n };\n }\n } catch (err) {\n console.warn('Failed to load row count:', err);\n // Keep the default N/A - don't show error for this\n } finally {\n this.isRowCountLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private computeStats(): void {\n if (!this.entity) return;\n\n const fields = this.entity.Fields;\n // Count unique outgoing relationships (fields with RelatedEntityID, grouped by target entity)\n const outgoingEntityIds = new Set(fields.filter(f => f.RelatedEntityID).map(f => f.RelatedEntityID));\n // Count unique incoming relationships (RelatedEntities, grouped by source entity)\n const incomingEntityNames = new Set(this.entity.RelatedEntities.map(r => r.RelatedEntity));\n\n this.stats = {\n fieldCount: fields.length,\n relationshipCount: outgoingEntityIds.size + incomingEntityNames.size,\n permissionCount: this.entity.Permissions.length,\n rowCount: this.entity.RowCount,\n primaryKeyCount: fields.filter(f => f.IsPrimaryKey).length,\n foreignKeyCount: fields.filter(f => f.RelatedEntityID).length,\n encryptedFieldCount: fields.filter(f => f.Encrypt).length,\n valueListFieldCount: fields.filter(f => f.ValueListType !== 'None').length\n };\n }\n\n private buildFieldGroups(): void {\n if (!this.entity) return;\n\n const fields = this.entity.Fields;\n const groups: FieldGroup[] = [];\n\n // Primary Keys\n const primaryKeys = fields.filter(f => f.IsPrimaryKey);\n if (primaryKeys.length > 0) {\n groups.push({\n id: 'primary-keys',\n label: 'Primary Keys',\n icon: 'fa-solid fa-key',\n fields: primaryKeys,\n expanded: true\n });\n }\n\n // Identity Fields (Name, Code, Description, DisplayName)\n const identityFields = fields.filter(f =>\n !f.IsPrimaryKey &&\n (f.IsNameField || ['Name', 'Code', 'Description', 'DisplayName'].includes(f.Name))\n );\n if (identityFields.length > 0) {\n groups.push({\n id: 'identity',\n label: 'Identity Fields',\n icon: 'fa-solid fa-id-card',\n fields: identityFields,\n expanded: true\n });\n }\n\n // Foreign Keys\n const foreignKeys = fields.filter(f => f.RelatedEntityID && !f.IsPrimaryKey);\n if (foreignKeys.length > 0) {\n groups.push({\n id: 'foreign-keys',\n label: 'Foreign Keys',\n icon: 'fa-solid fa-link',\n fields: foreignKeys,\n expanded: true\n });\n }\n\n // Encrypted Fields\n const encryptedFields = fields.filter(f => f.Encrypt);\n if (encryptedFields.length > 0) {\n groups.push({\n id: 'encrypted',\n label: 'Encrypted Fields',\n icon: 'fa-solid fa-lock',\n fields: encryptedFields,\n expanded: false\n });\n }\n\n // Value List Fields\n const valueListFields = fields.filter(f => f.ValueListType !== 'None' && !f.Encrypt);\n if (valueListFields.length > 0) {\n groups.push({\n id: 'value-lists',\n label: 'Value List Fields',\n icon: 'fa-solid fa-list-check',\n fields: valueListFields,\n expanded: false\n });\n }\n\n // Audit Fields\n const auditFields = fields.filter(f => f.IsSpecialDateField);\n if (auditFields.length > 0) {\n groups.push({\n id: 'audit',\n label: 'Audit Fields',\n icon: 'fa-solid fa-clock',\n fields: auditFields,\n expanded: false\n });\n }\n\n // Remaining fields grouped by Category\n const usedFieldIds = new Set(groups.flatMap(g => g.fields.map(f => f.ID)));\n const remainingFields = fields.filter(f => !usedFieldIds.has(f.ID));\n\n // Group by category\n const categoryMap = new Map<string, EntityFieldInfo[]>();\n for (const field of remainingFields) {\n const category = field.Category || 'General';\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n categoryMap.get(category)!.push(field);\n }\n\n // Sort categories and add as groups\n const sortedCategories = Array.from(categoryMap.keys()).sort();\n for (const category of sortedCategories) {\n const categoryFields = categoryMap.get(category)!;\n groups.push({\n id: `category-${category.toLowerCase().replace(/\\s+/g, '-')}`,\n label: category,\n icon: 'fa-solid fa-folder',\n fields: categoryFields.sort((a, b) => a.Sequence - b.Sequence),\n expanded: false\n });\n }\n\n this.fieldGroups = groups;\n\n // Initialize expanded state\n for (const group of groups) {\n if (group.expanded) {\n this.expandedFieldGroups.add(group.id);\n }\n }\n }\n\n /**\n * Builds field groups organized by source entity in the IS-A hierarchy.\n * Own fields first, then parent fields, then grandparent, etc.\n */\n private buildISAFieldGroups(): void {\n if (!this.entity) return;\n\n const groups: ISAFieldGroup[] = [];\n const allFields = this.entity.Fields;\n\n // Own fields (non-virtual, or virtual but NOT inherited from parent)\n const ownFields = allFields.filter(f => !this.IsInheritedField(f));\n groups.push({\n EntityName: this.entity.Name,\n EntityInfo: this.entity,\n Label: 'Own Fields',\n Level: 0,\n Fields: ownFields.sort((a, b) => a.Sequence - b.Sequence),\n Expanded: true\n });\n\n // Parent chain fields, grouped by source entity\n if (this.IsChildType) {\n for (let i = 0; i < this.ParentChain.length; i++) {\n const parent = this.ParentChain[i];\n const parentFields = allFields.filter(f => {\n const source = this.GetISAFieldSource(f);\n return source === parent.Name;\n });\n\n if (parentFields.length > 0) {\n const levelLabel = i === 0 ? 'parent' : i === 1 ? 'grandparent' : `ancestor level ${i + 1}`;\n groups.push({\n EntityName: parent.Name,\n EntityInfo: parent,\n Label: `Inherited from ${parent.Name} (${levelLabel})`,\n Level: i + 1,\n Fields: parentFields.sort((a, b) => a.Sequence - b.Sequence),\n Expanded: true\n });\n }\n }\n }\n\n this.isaFieldGroups = groups;\n }\n\n /**\n * Loads record counts for each IS-A child entity type asynchronously.\n */\n private async loadChildEntityCounts(): Promise<void> {\n if (!this.entity || !this.IsParentType) return;\n\n // Initialize with loading state\n this.childEntityCounts = this.ChildEntities.map(child => ({\n EntityName: child.Name,\n EntityInfo: child,\n RecordCount: null,\n IsLoading: true\n }));\n this.cdr.markForCheck();\n\n // Load counts in parallel using count_only for efficiency\n const rv = new RunView();\n const countPromises = this.ChildEntities.map(async (child, index) => {\n const result = await rv.RunView({\n EntityName: child.Name,\n ExtraFilter: '',\n ResultType: 'count_only'\n });\n\n if (this.childEntityCounts[index]) {\n this.childEntityCounts[index].RecordCount = result?.TotalRowCount ?? 0;\n this.childEntityCounts[index].IsLoading = false;\n }\n });\n\n await Promise.all(countPromises);\n this.cdr.markForCheck();\n }\n\n private buildRelationships(): void {\n if (!this.entity) return;\n\n // Incoming: Relationships defined on this entity (other entities that reference this one)\n this.incomingRelationships = this.entity.RelatedEntities;\n\n // Outgoing relationships could be computed from fields with RelatedEntityID\n this.outgoingRelationships = [];\n\n // Build grouped outgoing relationships (fields on THIS entity that reference OTHER entities)\n const outgoingMap = new Map<string, GroupedOutgoingRelationship>();\n for (const field of this.entity.Fields) {\n if (field.RelatedEntityID) {\n const existing = outgoingMap.get(field.RelatedEntityID);\n if (existing) {\n existing.fields.push(field);\n } else {\n const relatedEntity = this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID));\n outgoingMap.set(field.RelatedEntityID, {\n entityId: field.RelatedEntityID,\n entityName: relatedEntity?.Name || field.RelatedEntity || 'Unknown',\n fields: [field]\n });\n }\n }\n }\n this.groupedOutgoingRelationships = Array.from(outgoingMap.values())\n .sort((a, b) => a.entityName.localeCompare(b.entityName));\n\n // Build grouped incoming relationships (fields on OTHER entities that reference THIS entity)\n // Group by RelatedEntity name (the entity that references this one), deduplicate fields\n const incomingMap = new Map<string, GroupedIncomingRelationship>();\n for (const rel of this.entity.RelatedEntities) {\n // rel.RelatedEntity is the entity that has the FK pointing to THIS entity\n const existing = incomingMap.get(rel.RelatedEntity);\n if (existing) {\n // Only add if this field name isn't already in the list\n const fieldExists = existing.fields.some(f => f.fieldName === rel.RelatedEntityJoinField);\n if (!fieldExists) {\n existing.fields.push({\n fieldName: rel.RelatedEntityJoinField,\n type: rel.Type,\n bundleInAPI: rel.BundleInAPI\n });\n }\n } else {\n incomingMap.set(rel.RelatedEntity, {\n entityName: rel.RelatedEntity,\n fields: [{\n fieldName: rel.RelatedEntityJoinField,\n type: rel.Type,\n bundleInAPI: rel.BundleInAPI\n }]\n });\n }\n }\n this.groupedIncomingRelationships = Array.from(incomingMap.values())\n .sort((a, b) => a.entityName.localeCompare(b.entityName));\n }\n\n private updateNavBadges(): void {\n if (!this.entity) return;\n\n this.navItems = this.navItems.map(item => {\n switch (item.id) {\n case 'fields':\n return { ...item, badge: this.stats.fieldCount };\n case 'relationships':\n return { ...item, badge: this.stats.relationshipCount };\n case 'permissions':\n return { ...item, badge: this.stats.permissionCount };\n default:\n return item;\n }\n });\n }\n\n // === Public Methods ===\n\n public setActiveSection(section: ExplorerSection): void {\n this.activeSection = section;\n this.closeDetailPanel();\n this.cdr.markForCheck();\n }\n\n /**\n * Handle record opened from the entity viewer (double-click or open button).\n * Emits a Navigate event so the host app can open the record.\n */\n public OnRecordOpened(event: RecordOpenedEvent): void {\n this.Navigate.emit({\n Kind: 'record',\n EntityName: event.entity.Name,\n PrimaryKey: event.compositeKey\n });\n }\n\n /**\n * Handle add requested from the entity viewer toolbar.\n * Emits a Navigate event to create a new record of this entity type.\n */\n public OnAddRequested(): void {\n if (this.entity) {\n this.Navigate.emit({\n Kind: 'new-record',\n EntityName: this.entity.Name,\n DefaultValues: {}\n });\n }\n }\n\n public toggleFieldGroup(groupId: string): void {\n if (this.expandedFieldGroups.has(groupId)) {\n this.expandedFieldGroups.delete(groupId);\n } else {\n this.expandedFieldGroups.add(groupId);\n }\n this.cdr.markForCheck();\n }\n\n public isFieldGroupExpanded(groupId: string): boolean {\n return this.expandedFieldGroups.has(groupId);\n }\n\n public expandAllFieldGroups(): void {\n for (const group of this.fieldGroups) {\n this.expandedFieldGroups.add(group.id);\n }\n this.cdr.markForCheck();\n }\n\n public collapseAllFieldGroups(): void {\n this.expandedFieldGroups.clear();\n this.cdr.markForCheck();\n }\n\n public get allFieldGroupsExpanded(): boolean {\n return this.fieldGroups.length > 0 &&\n this.fieldGroups.every(g => this.expandedFieldGroups.has(g.id));\n }\n\n public get allFieldGroupsCollapsed(): boolean {\n return this.expandedFieldGroups.size === 0;\n }\n\n /**\n * Get all fields for the list view with sorting and filtering applied.\n */\n public getFilteredFieldsList(): EntityFieldInfo[] {\n if (!this.entity) return [];\n let fields = [...this.entity.Fields];\n\n // Apply search filter\n if (this.fieldSearchTerm) {\n const term = this.fieldSearchTerm.toLowerCase();\n fields = fields.filter(f =>\n f.Name.toLowerCase().includes(term) ||\n (f.DisplayName && f.DisplayName.toLowerCase().includes(term)) ||\n (f.Description && f.Description.toLowerCase().includes(term)) ||\n f.Type.toLowerCase().includes(term)\n );\n }\n\n // Apply sorting\n fields.sort((a, b) => {\n const col = this.fieldListSortColumn;\n const dir = this.fieldListSortDirection === 'asc' ? 1 : -1;\n\n let aVal = this.getFieldSortValue(a, col);\n let bVal = this.getFieldSortValue(b, col);\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n return aVal.localeCompare(bVal) * dir;\n }\n if (typeof aVal === 'boolean' && typeof bVal === 'boolean') {\n return (aVal === bVal ? 0 : aVal ? -1 : 1) * dir;\n }\n return ((aVal as number) - (bVal as number)) * dir;\n });\n\n return fields;\n }\n\n private getFieldSortValue(field: EntityFieldInfo, column: string): string | number | boolean | null {\n switch (column) {\n case 'Sequence': return field.Sequence;\n case 'Name': return field.Name;\n case 'DisplayName': return field.DisplayName || field.Name;\n case 'Type': return field.Type;\n case 'Length': return field.Length;\n case 'AllowsNull': return field.AllowsNull;\n case 'Description': return field.Description || '';\n default: return field.Sequence;\n }\n }\n\n public sortFieldList(column: string): void {\n if (this.fieldListSortColumn === column) {\n this.fieldListSortDirection = this.fieldListSortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.fieldListSortColumn = column;\n this.fieldListSortDirection = 'asc';\n }\n this.cdr.markForCheck();\n }\n\n public selectField(field: EntityFieldInfo): void {\n this.selectedField = field;\n this.selectedRelationship = null;\n this.detailPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n public selectRelationship(relationship: EntityRelationshipInfo): void {\n this.selectedRelationship = relationship;\n this.selectedField = null;\n this.detailPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n public closeDetailPanel(): void {\n this.detailPanelOpen = false;\n this.selectedField = null;\n this.selectedRelationship = null;\n this.cdr.markForCheck();\n }\n\n public toggleRelationshipView(): void {\n this.relationshipViewMode = this.relationshipViewMode === 'diagram' ? 'list' : 'diagram';\n this.cdr.markForCheck();\n }\n\n /**\n * Change the ERD depth level.\n */\n public setErdDepth(depth: number): void {\n if (depth >= 1 && depth <= 5) {\n this.erdDepth = depth;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Handle open record from the ERD composite component.\n * Navigates to the selected entity's form using SharedService.\n */\n public onERDOpenRecord(event: { EntityName: string; RecordID: string }): void {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: event.RecordID }]);\n this.sharedService.OpenEntityRecord(event.EntityName, pkey);\n }\n\n /**\n * Handle ERD composite state changes (for future persistence if needed).\n */\n public onERDStateChange(_state: ERDCompositeState): void {\n // ERD composite now handles all internal state management\n // This handler is kept for potential future state persistence needs\n }\n\n public onFieldSearch(term: string): void {\n this.fieldSearchTerm = term.toLowerCase();\n this.cdr.markForCheck();\n }\n\n public getFilteredFieldGroups(): FieldGroup[] {\n if (!this.fieldSearchTerm) {\n return this.fieldGroups;\n }\n\n return this.fieldGroups\n .map(group => ({\n ...group,\n fields: group.fields.filter(f =>\n f.Name.toLowerCase().includes(this.fieldSearchTerm) ||\n (f.DisplayName && f.DisplayName.toLowerCase().includes(this.fieldSearchTerm)) ||\n (f.Description && f.Description.toLowerCase().includes(this.fieldSearchTerm))\n )\n }))\n .filter(group => group.fields.length > 0);\n }\n\n // === Computed Getters ===\n\n // === IS-A Type Relationship Computed Properties ===\n\n /** Whether this entity is a virtual entity (read-only view) */\n public get IsVirtualEntity(): boolean {\n return this.entity?.VirtualEntity === true;\n }\n\n /** Whether this entity is a child type in an IS-A relationship */\n public get IsChildType(): boolean {\n return this.entity?.IsChildType === true;\n }\n\n /** Whether this entity is a parent type in an IS-A relationship */\n public get IsParentType(): boolean {\n return this.entity?.IsParentType === true;\n }\n\n /** Whether this entity allows overlapping subtypes (multiple children per parent record) */\n public get HasOverlappingSubtypes(): boolean {\n return this.entity?.HasOverlappingSubtypes === true;\n }\n\n /** The parent chain for IS-A child entities */\n public get ParentChain(): EntityInfo[] {\n return this.entity?.ParentChain ?? [];\n }\n\n /** Child entities for IS-A parent entities */\n public get ChildEntities(): EntityInfo[] {\n return this.entity?.ChildEntities ?? [];\n }\n\n /** Whether this entity has any IS-A relationship (parent or child) */\n public get HasISARelationship(): boolean {\n return this.IsChildType || this.IsParentType;\n }\n\n /** IS-A breadcrumb string: \"Webinar IS-A Meeting IS-A Product\" */\n public get IsaBreadcrumb(): string {\n if (!this.entity?.IsChildType) return '';\n const chain = [this.entity, ...this.entity.ParentChain];\n return chain.map(e => e.Name).join(' IS-A ');\n }\n\n /** Number of fields inherited from parent entities */\n public get InheritedFieldCount(): number {\n return this.entity?.AllParentFields?.length ?? 0;\n }\n\n /** Navigate to an entity record in the Entity Explorer */\n public NavigateToEntity(entityInfo: EntityInfo): void {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityInfo.ID }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n\n /**\n * Returns the source entity name for an IS-A inherited field, or null if the\n * field is owned by this entity. Used for displaying field source badges.\n */\n public GetISAFieldSource(field: EntityFieldInfo): string | null {\n if (!this.IsChildType || !field.IsVirtual || !field.AllowUpdateAPI) return null;\n for (const parent of this.ParentChain) {\n const parentField = parent.Fields.find(\n pf => pf.Name === field.Name && !pf.IsVirtual\n );\n if (parentField) return parent.Name;\n }\n return this.ParentChain[0]?.Name ?? null;\n }\n\n /**\n * Returns true if the given field is inherited from a parent entity via IS-A.\n */\n public IsInheritedField(field: EntityFieldInfo): boolean {\n return this.GetISAFieldSource(field) !== null;\n }\n\n /** All entities available as potential IS-A parents (excluding self and descendants) */\n public get AvailableParentEntities(): EntityInfo[] {\n if (!this.entity) return [];\n const md = new Metadata();\n const descendantIds = new Set<string>();\n const collectDescendants = (e: EntityInfo): void => {\n descendantIds.add(e.ID);\n for (const child of e.ChildEntities) {\n collectDescendants(child);\n }\n };\n collectDescendants(this.entity);\n return md.Entities\n .filter(e => !descendantIds.has(e.ID) && !UUIDsEqual(e.ID, this.entity!.ID) && !e.VirtualEntity)\n .sort((a, b) => a.Name.localeCompare(b.Name));\n }\n\n /** Sibling entities that share the same parent type */\n public get SiblingEntities(): EntityInfo[] {\n if (!this.IsChildType || !this.entity?.ParentEntityInfo) return [];\n return this.entity.ParentEntityInfo.ChildEntities\n .filter(e => !UUIDsEqual(e.ID, this.entity!.ID));\n }\n\n public get statusClass(): string {\n if (!this.entity) return '';\n switch (this.entity.Status) {\n case 'Active': return 'status-active';\n case 'Deprecated': return 'status-deprecated';\n case 'Disabled': return 'status-disabled';\n default: return '';\n }\n }\n\n public get entityIcon(): string {\n return this.entity?.Icon || 'fa-solid fa-database';\n }\n\n public get entityDisplayName(): string {\n if (!this.entity) return '';\n return this.entity.DisplayName || this.entity.Name;\n }\n\n public get formattedRowCount(): string {\n if (this.stats.rowCount === null) return 'N/A';\n return this.stats.rowCount.toLocaleString();\n }\n\n public get capabilitySummary(): string[] {\n if (!this.entity) return [];\n const caps: string[] = [];\n if (this.entity.IncludeInAPI) caps.push('API');\n if (this.entity.AllowCreateAPI) caps.push('Create');\n if (this.entity.AllowUpdateAPI) caps.push('Update');\n if (this.entity.AllowDeleteAPI) caps.push('Delete');\n if (this.entity.TrackRecordChanges) caps.push('Track Changes');\n if (this.entity.FullTextSearchEnabled) caps.push('FTS');\n return caps;\n }\n\n public getFieldTypeIcon(field: EntityFieldInfo): string {\n if (field.IsPrimaryKey) return 'fa-solid fa-key';\n if (field.RelatedEntityID) return 'fa-solid fa-link';\n if (field.Encrypt) return 'fa-solid fa-lock';\n if (field.ValueListType !== 'None') return 'fa-solid fa-list';\n if (field.IsSpecialDateField) return 'fa-solid fa-clock';\n\n // Type-based icons\n switch (field.TSType) {\n case 'number': return 'fa-solid fa-hashtag';\n case 'boolean': return 'fa-solid fa-toggle-on';\n case 'Date': return 'fa-solid fa-calendar';\n default: return 'fa-solid fa-font';\n }\n }\n\n public getRelatedEntityName(field: EntityFieldInfo): string | null {\n if (!field.RelatedEntityID) return null;\n const related = this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID));\n return related?.Name || null;\n }\n\n public getRelatedEntity(field: EntityFieldInfo): EntityInfo | null {\n if (!field.RelatedEntityID) return null;\n return this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID)) || null;\n }\n\n public navigateToRelatedEntity(field: EntityFieldInfo): void {\n const related = this.getRelatedEntity(field);\n if (related) {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: related.ID }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n }\n\n /**\n * Open an entity record from the field detail panel.\n */\n public openRelatedEntityFromField(entityId: string): void {\n if (entityId) {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityId }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n }\n\n public formatFieldType(field: EntityFieldInfo): string {\n let type = field.Type;\n if (field.Length && field.Length > 0) {\n type += `(${field.Length})`;\n } else if (field.Precision && field.Scale !== undefined) {\n type += `(${field.Precision},${field.Scale})`;\n }\n return type;\n }\n\n /**\n * Get the role name for a permission entry.\n * The EntityPermissionInfo.Role property is not populated because the database view\n * returns 'RoleName' but the class expects 'Role'. This helper looks up the role\n * from the Metadata.Roles collection using the RoleID.\n */\n public getRoleName(perm: EntityPermissionInfo): string {\n if (!perm.RoleID) return 'Unknown';\n const role = this._metadata.Roles.find(r => UUIDsEqual(r.ID, perm.RoleID));\n return role?.Name || 'Unknown';\n }\n\n /**\n * Checks if a string value is valid JSON (object or array).\n */\n public isJsonValue(value: string): boolean {\n if (!value || typeof value !== 'string') return false;\n const trimmed = value.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return false;\n try {\n JSON.parse(trimmed);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Formats a JSON string for display with proper indentation.\n */\n /** Case-insensitive UUID check whether an entity field is the currently selected field. */\n public IsFieldSelected(field: EntityFieldInfo): boolean {\n return UUIDsEqual(this.selectedField?.ID, field.ID);\n }\n\n public formatJsonValue(value: string): string {\n if (!value) return '';\n try {\n const parsed = JSON.parse(value.trim());\n return JSON.stringify(parsed, null, 2);\n } catch {\n return value;\n }\n }\n}\n","@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity — read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <div class=\"isa-chain-label clickable\" (click)=\"isaFieldInspectorExpanded = !isaFieldInspectorExpanded\">\n <i class=\"fa-solid\" [ngClass]=\"isaFieldInspectorExpanded ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n Field Source Inspector\n </div>\n @if (isaFieldInspectorExpanded) {\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <div\n class=\"field-group\"\n [class.expanded]=\"isFieldGroupExpanded(group.id)\">\n <div class=\"group-header\" (click)=\"toggleFieldGroup(group.id)\">\n <i class=\"expand-icon fa-solid\" [ngClass]=\"isFieldGroupExpanded(group.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"group-count\">{{ group.fields.length }}</span>\n </div>\n @if (isFieldGroupExpanded(group.id)) {\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">—</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '—' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <div class=\"list-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No fields match your search</span>\n </div>\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No outgoing relationships</p>\n </div>\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No incoming relationships</p>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <p>No permissions configured</p>\n </div>\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [entity]=\"entity\"\n [showGridToolbar]=\"true\"\n (recordOpened)=\"OnRecordOpened($event)\"\n (addRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes — read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced — a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <div class=\"empty-state\">\n <p>No custom settings configured</p>\n </div>\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <div class=\"empty-state\">\n <p>Full-text search is not enabled for this entity</p>\n </div>\n }\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <div class=\"explorer-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ explorerError }}</p>\n </div>\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <div class=\"explorer-empty\">\n <i class=\"fa-solid fa-database\"></i>\n <p>Entity metadata not available</p>\n </div>\n }\n}\n\n<!-- Loading / Error State -->\n"]}
|
|
1
|
+
{"version":3,"file":"entity-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Entities/entity-form.component.ts","../../../../src/lib/custom/Entities/entity-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport {\n EntityInfo,\n EntityFieldInfo,\n EntityRelationshipInfo,\n EntityOrganicKeyInfo,\n EntityOrganicKeyRelatedEntityInfo,\n EntityPermissionInfo,\n Metadata,\n CompositeKey,\n RunView\n} from '@memberjunction/core';\nimport { MJEntityEntity } from '@memberjunction/core-entities';\nimport { ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RecordOpenedEvent } from '@memberjunction/ng-entity-viewer';\nimport { MJEntityFormComponent } from '../../generated/Entities/MJEntity/mjentity.form.component';\n\nexport type ExplorerSection =\n | 'overview'\n | 'fields'\n | 'relationships'\n | 'organicKeys'\n | 'permissions'\n | 'data'\n | 'lineage'\n | 'history'\n | 'settings';\n\nexport interface NavItem {\n id: ExplorerSection;\n icon: string;\n label: string;\n badge?: number;\n}\n\nexport interface EntityStats {\n fieldCount: number;\n relationshipCount: number;\n permissionCount: number;\n rowCount: number | null;\n primaryKeyCount: number;\n foreignKeyCount: number;\n encryptedFieldCount: number;\n valueListFieldCount: number;\n}\n\nexport interface FieldGroup {\n id: string;\n label: string;\n icon: string;\n fields: EntityFieldInfo[];\n expanded: boolean;\n}\n\n/**\n * Represents a group of fields organized by their source entity in an IS-A hierarchy.\n */\nexport interface ISAFieldGroup {\n /** The source entity name (e.g., \"Products\", \"Meetings\") */\n EntityName: string;\n /** The EntityInfo for the source entity */\n EntityInfo: EntityInfo | null;\n /** Label like \"Own Fields\" or \"Inherited from Products\" */\n Label: string;\n /** Hierarchy level: 0 = own, 1 = parent, 2 = grandparent, etc. */\n Level: number;\n /** Fields belonging to this group */\n Fields: EntityFieldInfo[];\n /** Whether this group is expanded in the UI */\n Expanded: boolean;\n}\n\n/**\n * Record count for a child entity type\n */\nexport interface ChildEntityCount {\n EntityName: string;\n EntityInfo: EntityInfo;\n RecordCount: number | null;\n IsLoading: boolean;\n}\n\n/**\n * Grouped outgoing relationship - an entity this entity references via FK fields\n */\nexport interface GroupedOutgoingRelationship {\n /** The entity being referenced */\n entityId: string;\n entityName: string;\n /** All fields on THIS entity that reference the target entity */\n fields: EntityFieldInfo[];\n}\n\n/**\n * Grouped incoming relationship - an entity that references this entity\n */\nexport interface GroupedIncomingRelationship {\n /** The entity that references this entity */\n entityName: string;\n /** All fields on the OTHER entity that reference THIS entity */\n fields: { fieldName: string; type: string; bundleInAPI: boolean }[];\n}\n\n/**\n * An organic key defined on THIS entity, with its related entity targets\n */\nexport interface OrganicKeyOutgoing {\n OrganicKey: EntityOrganicKeyInfo;\n RelatedEntities: { Info: EntityOrganicKeyRelatedEntityInfo; EntityName: string; EntityIcon: string }[];\n}\n\n/**\n * An organic key on ANOTHER entity that targets THIS entity as a related entity\n */\nexport interface OrganicKeyIncoming {\n SourceEntityID: string;\n SourceEntityName: string;\n SourceEntityIcon: string;\n OrganicKey: EntityOrganicKeyInfo;\n RelatedEntityConfig: EntityOrganicKeyRelatedEntityInfo;\n MatchType: 'Direct' | 'Transitive';\n}\n\n/**\n * World-class Entity Explorer form component that provides an exploration-focused\n * interface for understanding entities in the MemberJunction system.\n *\n * This component replaces the traditional edit-focused entity form with a rich\n * exploration experience featuring:\n * - Three-zone architecture (Header, Nav Rail, Main Canvas)\n * - Seven exploration sections: Overview, Fields, Relationships, Permissions, Lineage, History, Settings\n * - Semantic field grouping by purpose (Primary Keys, Foreign Keys, Encrypted, etc.)\n * - Visual ERD integration for relationship exploration\n * - Slide-in detail panels for contextual information\n */\n@RegisterClass(BaseFormComponent, 'MJ: Entities')\n@Component({\n standalone: false,\n selector: 'mj-entity-form',\n templateUrl: './entity-form.component.html',\n styleUrls: ['./entity-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJEntityFormComponentExtended extends MJEntityFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n\n /** The Entity record being displayed */\n public record!: MJEntityEntity;\n\n /** Runtime EntityInfo metadata (populated from record.ID) */\n public entity: EntityInfo | null = null;\n\n /** All entities for relationship lookups */\n public allEntities: EntityInfo[] = [];\n\n /** All entity fields (flattened from all entities) for ERD details panel */\n public allEntityFields: EntityFieldInfo[] = [];\n\n /** Loading state */\n public isExplorerLoading = true;\n\n /** Error message if loading fails */\n public explorerError: string | null = null;\n\n /** Current active section in the explorer */\n public activeSection: ExplorerSection = 'overview';\n\n /** Navigation items for the rail - world-class minimalist icons */\n public navItems: NavItem[] = [\n { id: 'overview', icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'fields', icon: 'fa-solid fa-table-cells', label: 'Fields' },\n { id: 'relationships', icon: 'fa-solid fa-diagram-project', label: 'Relations' },\n { id: 'organicKeys', icon: 'fa-solid fa-fingerprint', label: 'Organic Keys' },\n { id: 'permissions', icon: 'fa-solid fa-lock', label: 'Security' },\n { id: 'data', icon: 'fa-solid fa-table-list', label: 'Data' },\n { id: 'lineage', icon: 'fa-solid fa-code-branch', label: 'Lineage' },\n { id: 'history', icon: 'fa-solid fa-clock-rotate-left', label: 'History' },\n { id: 'settings', icon: 'fa-solid fa-sliders', label: 'Settings' }\n ];\n\n /** Computed statistics for the entity */\n public stats: EntityStats = {\n fieldCount: 0,\n relationshipCount: 0,\n permissionCount: 0,\n rowCount: null,\n primaryKeyCount: 0,\n foreignKeyCount: 0,\n encryptedFieldCount: 0,\n valueListFieldCount: 0\n };\n\n /** Semantically grouped fields */\n public fieldGroups: FieldGroup[] = [];\n\n /** Field search term for filtering */\n public fieldSearchTerm = '';\n\n /** Set of expanded field group IDs */\n public expandedFieldGroups = new Set<string>();\n\n /** Field view mode: grouped by category or flat list */\n public fieldViewMode: 'grouped' | 'list' = 'grouped';\n\n /** IS-A field groups organized by source entity */\n public isaFieldGroups: ISAFieldGroup[] = [];\n\n /** Child entity record counts for the IS-A parent type summary */\n public childEntityCounts: ChildEntityCount[] = [];\n\n /** Whether the IS-A field inspector panel is expanded */\n public isaFieldInspectorExpanded = true;\n\n /** Field list sort configuration */\n public fieldListSortColumn: string = 'Sequence';\n public fieldListSortDirection: 'asc' | 'desc' = 'asc';\n\n /** Relationship view mode toggle */\n public relationshipViewMode: 'diagram' | 'list' = 'diagram';\n\n /** ERD depth level (1-5) */\n public erdDepth: number = 1;\n\n /** Whether the row count is loading */\n public isRowCountLoading = false;\n\n /** Outgoing relationships (this entity references others) */\n public outgoingRelationships: EntityRelationshipInfo[] = [];\n\n /** Incoming relationships (other entities reference this one) */\n public incomingRelationships: EntityRelationshipInfo[] = [];\n\n /** Grouped outgoing relationships by target entity */\n public groupedOutgoingRelationships: GroupedOutgoingRelationship[] = [];\n\n /** Grouped incoming relationships by source entity */\n public groupedIncomingRelationships: GroupedIncomingRelationship[] = [];\n\n /** Outgoing organic keys (defined on THIS entity) */\n public organicKeysOutgoing: OrganicKeyOutgoing[] = [];\n\n /** Incoming organic keys (other entities targeting THIS entity) */\n public organicKeysIncoming: OrganicKeyIncoming[] = [];\n\n /** Whether detail panel is open */\n public detailPanelOpen = false;\n\n /** Currently selected field for detail panel */\n public selectedField: EntityFieldInfo | null = null;\n\n /** Currently selected relationship for detail panel */\n public selectedRelationship: EntityRelationshipInfo | null = null;\n\n private destroy$ = new Subject<void>();\n private stateChange$ = new Subject<void>();\n private _metadata = new Metadata();\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n this.setupStateManagement();\n this.loadExplorerData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupStateManagement(): void {\n this.stateChange$.pipe(\n debounceTime(100),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n private loadExplorerData(): void {\n this.isExplorerLoading = true;\n this.explorerError = null;\n this.cdr.markForCheck();\n\n try {\n this.allEntities = this._metadata.Entities;\n\n // Flatten all entity fields for ERD details panel\n this.allEntityFields = this.allEntities.flatMap(e => e.Fields);\n\n // Find the EntityInfo by the record's ID\n if (this.record?.ID) {\n this.entity = this.allEntities.find(e => UUIDsEqual(e.ID, this.record.ID)) || null;\n }\n\n if (this.entity) {\n this.computeStats();\n this.buildFieldGroups();\n this.buildISAFieldGroups();\n this.buildRelationships();\n this.buildOrganicKeys();\n this.updateNavBadges();\n\n // Load row count asynchronously (don't block UI)\n this.loadRowCountAsync();\n\n // Load IS-A child entity counts asynchronously\n if (this.IsParentType) {\n this.loadChildEntityCounts();\n }\n } else {\n this.explorerError = `Entity metadata not found for: ${this.record?.Name || 'Unknown'}`;\n }\n } catch (err) {\n this.explorerError = err instanceof Error ? err.message : 'Failed to load entity metadata';\n console.error('Error loading entity explorer data:', err);\n } finally {\n this.isExplorerLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Loads the row count asynchronously using RunView with count_only.\n * This doesn't block the UI - updates when complete.\n */\n private async loadRowCountAsync(): Promise<void> {\n if (!this.entity) return;\n\n this.isRowCountLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.entity.Name,\n ResultType: 'count_only'\n });\n\n if (result.Success) {\n this.stats = {\n ...this.stats,\n rowCount: result.TotalRowCount\n };\n }\n } catch (err) {\n console.warn('Failed to load row count:', err);\n // Keep the default N/A - don't show error for this\n } finally {\n this.isRowCountLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private computeStats(): void {\n if (!this.entity) return;\n\n const fields = this.entity.Fields;\n // Count unique outgoing relationships (fields with RelatedEntityID, grouped by target entity)\n const outgoingEntityIds = new Set(fields.filter(f => f.RelatedEntityID).map(f => f.RelatedEntityID));\n // Count unique incoming relationships (RelatedEntities, grouped by source entity)\n const incomingEntityNames = new Set(this.entity.RelatedEntities.map(r => r.RelatedEntity));\n\n this.stats = {\n fieldCount: fields.length,\n relationshipCount: outgoingEntityIds.size + incomingEntityNames.size,\n permissionCount: this.entity.Permissions.length,\n rowCount: this.entity.RowCount,\n primaryKeyCount: fields.filter(f => f.IsPrimaryKey).length,\n foreignKeyCount: fields.filter(f => f.RelatedEntityID).length,\n encryptedFieldCount: fields.filter(f => f.Encrypt).length,\n valueListFieldCount: fields.filter(f => f.ValueListType !== 'None').length\n };\n }\n\n private buildFieldGroups(): void {\n if (!this.entity) return;\n\n const fields = this.entity.Fields;\n const groups: FieldGroup[] = [];\n\n // Primary Keys\n const primaryKeys = fields.filter(f => f.IsPrimaryKey);\n if (primaryKeys.length > 0) {\n groups.push({\n id: 'primary-keys',\n label: 'Primary Keys',\n icon: 'fa-solid fa-key',\n fields: primaryKeys,\n expanded: true\n });\n }\n\n // Identity Fields (Name, Code, Description, DisplayName)\n const identityFields = fields.filter(f =>\n !f.IsPrimaryKey &&\n (f.IsNameField || ['Name', 'Code', 'Description', 'DisplayName'].includes(f.Name))\n );\n if (identityFields.length > 0) {\n groups.push({\n id: 'identity',\n label: 'Identity Fields',\n icon: 'fa-solid fa-id-card',\n fields: identityFields,\n expanded: true\n });\n }\n\n // Foreign Keys\n const foreignKeys = fields.filter(f => f.RelatedEntityID && !f.IsPrimaryKey);\n if (foreignKeys.length > 0) {\n groups.push({\n id: 'foreign-keys',\n label: 'Foreign Keys',\n icon: 'fa-solid fa-link',\n fields: foreignKeys,\n expanded: true\n });\n }\n\n // Encrypted Fields\n const encryptedFields = fields.filter(f => f.Encrypt);\n if (encryptedFields.length > 0) {\n groups.push({\n id: 'encrypted',\n label: 'Encrypted Fields',\n icon: 'fa-solid fa-lock',\n fields: encryptedFields,\n expanded: false\n });\n }\n\n // Value List Fields\n const valueListFields = fields.filter(f => f.ValueListType !== 'None' && !f.Encrypt);\n if (valueListFields.length > 0) {\n groups.push({\n id: 'value-lists',\n label: 'Value List Fields',\n icon: 'fa-solid fa-list-check',\n fields: valueListFields,\n expanded: false\n });\n }\n\n // Audit Fields\n const auditFields = fields.filter(f => f.IsSpecialDateField);\n if (auditFields.length > 0) {\n groups.push({\n id: 'audit',\n label: 'Audit Fields',\n icon: 'fa-solid fa-clock',\n fields: auditFields,\n expanded: false\n });\n }\n\n // Remaining fields grouped by Category\n const usedFieldIds = new Set(groups.flatMap(g => g.fields.map(f => f.ID)));\n const remainingFields = fields.filter(f => !usedFieldIds.has(f.ID));\n\n // Group by category\n const categoryMap = new Map<string, EntityFieldInfo[]>();\n for (const field of remainingFields) {\n const category = field.Category || 'General';\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n categoryMap.get(category)!.push(field);\n }\n\n // Sort categories and add as groups\n const sortedCategories = Array.from(categoryMap.keys()).sort();\n for (const category of sortedCategories) {\n const categoryFields = categoryMap.get(category)!;\n groups.push({\n id: `category-${category.toLowerCase().replace(/\\s+/g, '-')}`,\n label: category,\n icon: 'fa-solid fa-folder',\n fields: categoryFields.sort((a, b) => a.Sequence - b.Sequence),\n expanded: false\n });\n }\n\n this.fieldGroups = groups;\n\n // Initialize expanded state\n for (const group of groups) {\n if (group.expanded) {\n this.expandedFieldGroups.add(group.id);\n }\n }\n }\n\n /**\n * Builds field groups organized by source entity in the IS-A hierarchy.\n * Own fields first, then parent fields, then grandparent, etc.\n */\n private buildISAFieldGroups(): void {\n if (!this.entity) return;\n\n const groups: ISAFieldGroup[] = [];\n const allFields = this.entity.Fields;\n\n // Own fields (non-virtual, or virtual but NOT inherited from parent)\n const ownFields = allFields.filter(f => !this.IsInheritedField(f));\n groups.push({\n EntityName: this.entity.Name,\n EntityInfo: this.entity,\n Label: 'Own Fields',\n Level: 0,\n Fields: ownFields.sort((a, b) => a.Sequence - b.Sequence),\n Expanded: true\n });\n\n // Parent chain fields, grouped by source entity\n if (this.IsChildType) {\n for (let i = 0; i < this.ParentChain.length; i++) {\n const parent = this.ParentChain[i];\n const parentFields = allFields.filter(f => {\n const source = this.GetISAFieldSource(f);\n return source === parent.Name;\n });\n\n if (parentFields.length > 0) {\n const levelLabel = i === 0 ? 'parent' : i === 1 ? 'grandparent' : `ancestor level ${i + 1}`;\n groups.push({\n EntityName: parent.Name,\n EntityInfo: parent,\n Label: `Inherited from ${parent.Name} (${levelLabel})`,\n Level: i + 1,\n Fields: parentFields.sort((a, b) => a.Sequence - b.Sequence),\n Expanded: true\n });\n }\n }\n }\n\n this.isaFieldGroups = groups;\n }\n\n /**\n * Loads record counts for each IS-A child entity type asynchronously.\n */\n private async loadChildEntityCounts(): Promise<void> {\n if (!this.entity || !this.IsParentType) return;\n\n // Initialize with loading state\n this.childEntityCounts = this.ChildEntities.map(child => ({\n EntityName: child.Name,\n EntityInfo: child,\n RecordCount: null,\n IsLoading: true\n }));\n this.cdr.markForCheck();\n\n // Load counts in parallel using count_only for efficiency\n const rv = new RunView();\n const countPromises = this.ChildEntities.map(async (child, index) => {\n const result = await rv.RunView({\n EntityName: child.Name,\n ExtraFilter: '',\n ResultType: 'count_only'\n });\n\n if (this.childEntityCounts[index]) {\n this.childEntityCounts[index].RecordCount = result?.TotalRowCount ?? 0;\n this.childEntityCounts[index].IsLoading = false;\n }\n });\n\n await Promise.all(countPromises);\n this.cdr.markForCheck();\n }\n\n private buildRelationships(): void {\n if (!this.entity) return;\n\n // Incoming: Relationships defined on this entity (other entities that reference this one)\n this.incomingRelationships = this.entity.RelatedEntities;\n\n // Outgoing relationships could be computed from fields with RelatedEntityID\n this.outgoingRelationships = [];\n\n // Build grouped outgoing relationships (fields on THIS entity that reference OTHER entities)\n const outgoingMap = new Map<string, GroupedOutgoingRelationship>();\n for (const field of this.entity.Fields) {\n if (field.RelatedEntityID) {\n const existing = outgoingMap.get(field.RelatedEntityID);\n if (existing) {\n existing.fields.push(field);\n } else {\n const relatedEntity = this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID));\n outgoingMap.set(field.RelatedEntityID, {\n entityId: field.RelatedEntityID,\n entityName: relatedEntity?.Name || field.RelatedEntity || 'Unknown',\n fields: [field]\n });\n }\n }\n }\n this.groupedOutgoingRelationships = Array.from(outgoingMap.values())\n .sort((a, b) => a.entityName.localeCompare(b.entityName));\n\n // Build grouped incoming relationships (fields on OTHER entities that reference THIS entity)\n // Group by RelatedEntity name (the entity that references this one), deduplicate fields\n const incomingMap = new Map<string, GroupedIncomingRelationship>();\n for (const rel of this.entity.RelatedEntities) {\n // rel.RelatedEntity is the entity that has the FK pointing to THIS entity\n const existing = incomingMap.get(rel.RelatedEntity);\n if (existing) {\n // Only add if this field name isn't already in the list\n const fieldExists = existing.fields.some(f => f.fieldName === rel.RelatedEntityJoinField);\n if (!fieldExists) {\n existing.fields.push({\n fieldName: rel.RelatedEntityJoinField,\n type: rel.Type,\n bundleInAPI: rel.BundleInAPI\n });\n }\n } else {\n incomingMap.set(rel.RelatedEntity, {\n entityName: rel.RelatedEntity,\n fields: [{\n fieldName: rel.RelatedEntityJoinField,\n type: rel.Type,\n bundleInAPI: rel.BundleInAPI\n }]\n });\n }\n }\n this.groupedIncomingRelationships = Array.from(incomingMap.values())\n .sort((a, b) => a.entityName.localeCompare(b.entityName));\n }\n\n private buildOrganicKeys(): void {\n if (!this.entity) return;\n\n // Outgoing: organic keys defined ON this entity\n this.organicKeysOutgoing = this.entity.OrganicKeys.map(ok => ({\n OrganicKey: ok,\n RelatedEntities: ok.RelatedEntities.map(re => {\n const relEntity = this.allEntities.find(e => UUIDsEqual(e.ID, re.RelatedEntityID));\n return {\n Info: re,\n EntityName: re.RelatedEntity || relEntity?.Name || 'Unknown',\n EntityIcon: relEntity?.Icon || 'fa-solid fa-table',\n };\n }),\n }));\n\n // Incoming: organic keys on OTHER entities that reference THIS entity\n this.organicKeysIncoming = [];\n for (const otherEntity of this.allEntities) {\n if (UUIDsEqual(otherEntity.ID, this.entity.ID)) continue;\n for (const ok of otherEntity.OrganicKeys) {\n for (const re of ok.RelatedEntities) {\n if (UUIDsEqual(re.RelatedEntityID, this.entity.ID)) {\n this.organicKeysIncoming.push({\n SourceEntityID: otherEntity.ID,\n SourceEntityName: otherEntity.Name,\n SourceEntityIcon: otherEntity.Icon || 'fa-solid fa-table',\n OrganicKey: ok,\n RelatedEntityConfig: re,\n MatchType: re.IsTransitiveMatch ? 'Transitive' : 'Direct',\n });\n }\n }\n }\n }\n }\n\n /**\n * Navigate to the Entity admin form for a given entity ID.\n */\n public NavigateToEntityByID(entityID: string): void {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityID }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n\n /** Total organic key connection count (outgoing targets + incoming sources) */\n get OrganicKeyTotalCount(): number {\n const outCount = this.organicKeysOutgoing.reduce((sum, ok) => sum + ok.RelatedEntities.length, 0);\n return outCount + this.organicKeysIncoming.length;\n }\n\n private updateNavBadges(): void {\n if (!this.entity) return;\n\n this.navItems = this.navItems.map(item => {\n switch (item.id) {\n case 'fields':\n return { ...item, badge: this.stats.fieldCount };\n case 'relationships':\n return { ...item, badge: this.stats.relationshipCount };\n case 'organicKeys':\n return { ...item, badge: this.OrganicKeyTotalCount > 0 ? this.OrganicKeyTotalCount : undefined };\n case 'permissions':\n return { ...item, badge: this.stats.permissionCount };\n default:\n return item;\n }\n });\n }\n\n // === Public Methods ===\n\n public setActiveSection(section: ExplorerSection): void {\n this.activeSection = section;\n this.closeDetailPanel();\n this.cdr.markForCheck();\n }\n\n /**\n * Handle record opened from the entity viewer (double-click or open button).\n * Emits a Navigate event so the host app can open the record.\n */\n public OnRecordOpened(event: RecordOpenedEvent): void {\n this.Navigate.emit({\n Kind: 'record',\n EntityName: event.entity.Name,\n PrimaryKey: event.compositeKey\n });\n }\n\n /**\n * Handle add requested from the entity viewer toolbar.\n * Emits a Navigate event to create a new record of this entity type.\n */\n public OnAddRequested(): void {\n if (this.entity) {\n this.Navigate.emit({\n Kind: 'new-record',\n EntityName: this.entity.Name,\n DefaultValues: {}\n });\n }\n }\n\n public toggleFieldGroup(groupId: string): void {\n if (this.expandedFieldGroups.has(groupId)) {\n this.expandedFieldGroups.delete(groupId);\n } else {\n this.expandedFieldGroups.add(groupId);\n }\n this.cdr.markForCheck();\n }\n\n public isFieldGroupExpanded(groupId: string): boolean {\n return this.expandedFieldGroups.has(groupId);\n }\n\n public expandAllFieldGroups(): void {\n for (const group of this.fieldGroups) {\n this.expandedFieldGroups.add(group.id);\n }\n this.cdr.markForCheck();\n }\n\n public collapseAllFieldGroups(): void {\n this.expandedFieldGroups.clear();\n this.cdr.markForCheck();\n }\n\n public get allFieldGroupsExpanded(): boolean {\n return this.fieldGroups.length > 0 &&\n this.fieldGroups.every(g => this.expandedFieldGroups.has(g.id));\n }\n\n public get allFieldGroupsCollapsed(): boolean {\n return this.expandedFieldGroups.size === 0;\n }\n\n /**\n * Get all fields for the list view with sorting and filtering applied.\n */\n public getFilteredFieldsList(): EntityFieldInfo[] {\n if (!this.entity) return [];\n let fields = [...this.entity.Fields];\n\n // Apply search filter\n if (this.fieldSearchTerm) {\n const term = this.fieldSearchTerm.toLowerCase();\n fields = fields.filter(f =>\n f.Name.toLowerCase().includes(term) ||\n (f.DisplayName && f.DisplayName.toLowerCase().includes(term)) ||\n (f.Description && f.Description.toLowerCase().includes(term)) ||\n f.Type.toLowerCase().includes(term)\n );\n }\n\n // Apply sorting\n fields.sort((a, b) => {\n const col = this.fieldListSortColumn;\n const dir = this.fieldListSortDirection === 'asc' ? 1 : -1;\n\n let aVal = this.getFieldSortValue(a, col);\n let bVal = this.getFieldSortValue(b, col);\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n return aVal.localeCompare(bVal) * dir;\n }\n if (typeof aVal === 'boolean' && typeof bVal === 'boolean') {\n return (aVal === bVal ? 0 : aVal ? -1 : 1) * dir;\n }\n return ((aVal as number) - (bVal as number)) * dir;\n });\n\n return fields;\n }\n\n private getFieldSortValue(field: EntityFieldInfo, column: string): string | number | boolean | null {\n switch (column) {\n case 'Sequence': return field.Sequence;\n case 'Name': return field.Name;\n case 'DisplayName': return field.DisplayName || field.Name;\n case 'Type': return field.Type;\n case 'Length': return field.Length;\n case 'AllowsNull': return field.AllowsNull;\n case 'Description': return field.Description || '';\n default: return field.Sequence;\n }\n }\n\n public sortFieldList(column: string): void {\n if (this.fieldListSortColumn === column) {\n this.fieldListSortDirection = this.fieldListSortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.fieldListSortColumn = column;\n this.fieldListSortDirection = 'asc';\n }\n this.cdr.markForCheck();\n }\n\n public selectField(field: EntityFieldInfo): void {\n this.selectedField = field;\n this.selectedRelationship = null;\n this.detailPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n public selectRelationship(relationship: EntityRelationshipInfo): void {\n this.selectedRelationship = relationship;\n this.selectedField = null;\n this.detailPanelOpen = true;\n this.cdr.markForCheck();\n }\n\n public closeDetailPanel(): void {\n this.detailPanelOpen = false;\n this.selectedField = null;\n this.selectedRelationship = null;\n this.cdr.markForCheck();\n }\n\n public toggleRelationshipView(): void {\n this.relationshipViewMode = this.relationshipViewMode === 'diagram' ? 'list' : 'diagram';\n this.cdr.markForCheck();\n }\n\n /**\n * Change the ERD depth level.\n */\n public setErdDepth(depth: number): void {\n if (depth >= 1 && depth <= 5) {\n this.erdDepth = depth;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Handle open record from the ERD composite component.\n * Navigates to the selected entity's form using SharedService.\n */\n public onERDOpenRecord(event: { EntityName: string; RecordID: string }): void {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: event.RecordID }]);\n this.sharedService.OpenEntityRecord(event.EntityName, pkey);\n }\n\n /**\n * Handle ERD composite state changes (for future persistence if needed).\n */\n public onERDStateChange(_state: ERDCompositeState): void {\n // ERD composite now handles all internal state management\n // This handler is kept for potential future state persistence needs\n }\n\n public onFieldSearch(term: string): void {\n this.fieldSearchTerm = term.toLowerCase();\n this.cdr.markForCheck();\n }\n\n public getFilteredFieldGroups(): FieldGroup[] {\n if (!this.fieldSearchTerm) {\n return this.fieldGroups;\n }\n\n return this.fieldGroups\n .map(group => ({\n ...group,\n fields: group.fields.filter(f =>\n f.Name.toLowerCase().includes(this.fieldSearchTerm) ||\n (f.DisplayName && f.DisplayName.toLowerCase().includes(this.fieldSearchTerm)) ||\n (f.Description && f.Description.toLowerCase().includes(this.fieldSearchTerm))\n )\n }))\n .filter(group => group.fields.length > 0);\n }\n\n // === Computed Getters ===\n\n // === IS-A Type Relationship Computed Properties ===\n\n /** Whether this entity is a virtual entity (read-only view) */\n public get IsVirtualEntity(): boolean {\n return this.entity?.VirtualEntity === true;\n }\n\n /** Whether this entity is a child type in an IS-A relationship */\n public get IsChildType(): boolean {\n return this.entity?.IsChildType === true;\n }\n\n /** Whether this entity is a parent type in an IS-A relationship */\n public get IsParentType(): boolean {\n return this.entity?.IsParentType === true;\n }\n\n /** Whether this entity allows overlapping subtypes (multiple children per parent record) */\n public get HasOverlappingSubtypes(): boolean {\n return this.entity?.HasOverlappingSubtypes === true;\n }\n\n /** The parent chain for IS-A child entities */\n public get ParentChain(): EntityInfo[] {\n return this.entity?.ParentChain ?? [];\n }\n\n /** Child entities for IS-A parent entities */\n public get ChildEntities(): EntityInfo[] {\n return this.entity?.ChildEntities ?? [];\n }\n\n /** Whether this entity has any IS-A relationship (parent or child) */\n public get HasISARelationship(): boolean {\n return this.IsChildType || this.IsParentType;\n }\n\n /** IS-A breadcrumb string: \"Webinar IS-A Meeting IS-A Product\" */\n public get IsaBreadcrumb(): string {\n if (!this.entity?.IsChildType) return '';\n const chain = [this.entity, ...this.entity.ParentChain];\n return chain.map(e => e.Name).join(' IS-A ');\n }\n\n /** Number of fields inherited from parent entities */\n public get InheritedFieldCount(): number {\n return this.entity?.AllParentFields?.length ?? 0;\n }\n\n /** Navigate to an entity record in the Entity Explorer */\n public NavigateToEntity(entityInfo: EntityInfo): void {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityInfo.ID }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n\n /**\n * Returns the source entity name for an IS-A inherited field, or null if the\n * field is owned by this entity. Used for displaying field source badges.\n */\n public GetISAFieldSource(field: EntityFieldInfo): string | null {\n if (!this.IsChildType || !field.IsVirtual || !field.AllowUpdateAPI) return null;\n for (const parent of this.ParentChain) {\n const parentField = parent.Fields.find(\n pf => pf.Name === field.Name && !pf.IsVirtual\n );\n if (parentField) return parent.Name;\n }\n return this.ParentChain[0]?.Name ?? null;\n }\n\n /**\n * Returns true if the given field is inherited from a parent entity via IS-A.\n */\n public IsInheritedField(field: EntityFieldInfo): boolean {\n return this.GetISAFieldSource(field) !== null;\n }\n\n /** All entities available as potential IS-A parents (excluding self and descendants) */\n public get AvailableParentEntities(): EntityInfo[] {\n if (!this.entity) return [];\n const md = new Metadata();\n const descendantIds = new Set<string>();\n const collectDescendants = (e: EntityInfo): void => {\n descendantIds.add(e.ID);\n for (const child of e.ChildEntities) {\n collectDescendants(child);\n }\n };\n collectDescendants(this.entity);\n return md.Entities\n .filter(e => !descendantIds.has(e.ID) && !UUIDsEqual(e.ID, this.entity!.ID) && !e.VirtualEntity)\n .sort((a, b) => a.Name.localeCompare(b.Name));\n }\n\n /** Sibling entities that share the same parent type */\n public get SiblingEntities(): EntityInfo[] {\n if (!this.IsChildType || !this.entity?.ParentEntityInfo) return [];\n return this.entity.ParentEntityInfo.ChildEntities\n .filter(e => !UUIDsEqual(e.ID, this.entity!.ID));\n }\n\n public get statusClass(): string {\n if (!this.entity) return '';\n switch (this.entity.Status) {\n case 'Active': return 'status-active';\n case 'Deprecated': return 'status-deprecated';\n case 'Disabled': return 'status-disabled';\n default: return '';\n }\n }\n\n public get entityIcon(): string {\n return this.entity?.Icon || 'fa-solid fa-database';\n }\n\n public get entityDisplayName(): string {\n if (!this.entity) return '';\n return this.entity.DisplayName || this.entity.Name;\n }\n\n public get formattedRowCount(): string {\n if (this.stats.rowCount === null) return 'N/A';\n return this.stats.rowCount.toLocaleString();\n }\n\n public get capabilitySummary(): string[] {\n if (!this.entity) return [];\n const caps: string[] = [];\n if (this.entity.IncludeInAPI) caps.push('API');\n if (this.entity.AllowCreateAPI) caps.push('Create');\n if (this.entity.AllowUpdateAPI) caps.push('Update');\n if (this.entity.AllowDeleteAPI) caps.push('Delete');\n if (this.entity.TrackRecordChanges) caps.push('Track Changes');\n if (this.entity.FullTextSearchEnabled) caps.push('FTS');\n return caps;\n }\n\n public getFieldTypeIcon(field: EntityFieldInfo): string {\n if (field.IsPrimaryKey) return 'fa-solid fa-key';\n if (field.RelatedEntityID) return 'fa-solid fa-link';\n if (field.Encrypt) return 'fa-solid fa-lock';\n if (field.ValueListType !== 'None') return 'fa-solid fa-list';\n if (field.IsSpecialDateField) return 'fa-solid fa-clock';\n\n // Type-based icons\n switch (field.TSType) {\n case 'number': return 'fa-solid fa-hashtag';\n case 'boolean': return 'fa-solid fa-toggle-on';\n case 'Date': return 'fa-solid fa-calendar';\n default: return 'fa-solid fa-font';\n }\n }\n\n public getRelatedEntityName(field: EntityFieldInfo): string | null {\n if (!field.RelatedEntityID) return null;\n const related = this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID));\n return related?.Name || null;\n }\n\n public getRelatedEntity(field: EntityFieldInfo): EntityInfo | null {\n if (!field.RelatedEntityID) return null;\n return this.allEntities.find(e => UUIDsEqual(e.ID, field.RelatedEntityID)) || null;\n }\n\n public navigateToRelatedEntity(field: EntityFieldInfo): void {\n const related = this.getRelatedEntity(field);\n if (related) {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: related.ID }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n }\n\n /**\n * Open an entity record from the field detail panel.\n */\n public openRelatedEntityFromField(entityId: string): void {\n if (entityId) {\n const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityId }]);\n this.sharedService.OpenEntityRecord('MJ: Entities', pkey);\n }\n }\n\n public formatFieldType(field: EntityFieldInfo): string {\n let type = field.Type;\n if (field.Length && field.Length > 0) {\n type += `(${field.Length})`;\n } else if (field.Precision && field.Scale !== undefined) {\n type += `(${field.Precision},${field.Scale})`;\n }\n return type;\n }\n\n /**\n * Get the role name for a permission entry.\n * The EntityPermissionInfo.Role property is not populated because the database view\n * returns 'RoleName' but the class expects 'Role'. This helper looks up the role\n * from the Metadata.Roles collection using the RoleID.\n */\n public getRoleName(perm: EntityPermissionInfo): string {\n if (!perm.RoleID) return 'Unknown';\n const role = this._metadata.Roles.find(r => UUIDsEqual(r.ID, perm.RoleID));\n return role?.Name || 'Unknown';\n }\n\n /**\n * Checks if a string value is valid JSON (object or array).\n */\n public isJsonValue(value: string): boolean {\n if (!value || typeof value !== 'string') return false;\n const trimmed = value.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return false;\n try {\n JSON.parse(trimmed);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Formats a JSON string for display with proper indentation.\n */\n /** Case-insensitive UUID check whether an entity field is the currently selected field. */\n public IsFieldSelected(field: EntityFieldInfo): boolean {\n return UUIDsEqual(this.selectedField?.ID, field.ID);\n }\n\n public formatJsonValue(value: string): string {\n if (!value) return '';\n try {\n const parsed = JSON.parse(value.trim());\n return JSON.stringify(parsed, null, 2);\n } catch {\n return value;\n }\n }\n}\n","@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity — read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <div class=\"isa-chain-label clickable\" (click)=\"isaFieldInspectorExpanded = !isaFieldInspectorExpanded\">\n <i class=\"fa-solid\" [ngClass]=\"isaFieldInspectorExpanded ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n Field Source Inspector\n </div>\n @if (isaFieldInspectorExpanded) {\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <div\n class=\"field-group\"\n [class.expanded]=\"isFieldGroupExpanded(group.id)\">\n <div class=\"group-header\" (click)=\"toggleFieldGroup(group.id)\">\n <i class=\"expand-icon fa-solid\" [ngClass]=\"isFieldGroupExpanded(group.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"group-count\">{{ group.fields.length }}</span>\n </div>\n @if (isFieldGroupExpanded(group.id)) {\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">—</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '—' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <div class=\"list-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No fields match your search</span>\n </div>\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No outgoing relationships</p>\n </div>\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No incoming relationships</p>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <div class=\"empty-state-card\">\n <i class=\"fa-solid fa-fingerprint empty-state-icon\"></i>\n <h3>No Organic Keys</h3>\n <p>This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names — without requiring foreign key constraints.</p>\n </div>\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} → {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <p>No permissions configured</p>\n </div>\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [entity]=\"entity\"\n [showGridToolbar]=\"true\"\n (recordOpened)=\"OnRecordOpened($event)\"\n (addRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes — read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced — a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <div class=\"empty-state\">\n <p>No custom settings configured</p>\n </div>\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <div class=\"empty-state\">\n <p>Full-text search is not enabled for this entity</p>\n </div>\n }\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <div class=\"explorer-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ explorerError }}</p>\n </div>\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <div class=\"explorer-empty\">\n <i class=\"fa-solid fa-database\"></i>\n <p>Entity metadata not available</p>\n </div>\n }\n}\n\n<!-- Loading / Error State -->\n"]}
|