@memberjunction/ng-entity-viewer 6.1.2 → 6.2.0-edge.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.
Files changed (40) hide show
  1. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts +18 -2
  2. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts.map +1 -1
  3. package/dist/lib/aggregate-panel/aggregate-panel.component.js +47 -18
  4. package/dist/lib/aggregate-panel/aggregate-panel.component.js.map +1 -1
  5. package/dist/lib/entity-cards/entity-cards.component.d.ts +1 -0
  6. package/dist/lib/entity-cards/entity-cards.component.d.ts.map +1 -1
  7. package/dist/lib/entity-cards/entity-cards.component.js +11 -2
  8. package/dist/lib/entity-cards/entity-cards.component.js.map +1 -1
  9. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +18 -0
  10. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
  11. package/dist/lib/entity-data-grid/entity-data-grid.component.js +71 -25
  12. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  13. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.d.ts.map +1 -1
  14. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js +10 -8
  15. package/dist/lib/entity-record-detail-panel/entity-record-detail-panel.component.js.map +1 -1
  16. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +11 -0
  17. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  18. package/dist/lib/entity-viewer/entity-viewer.component.js +29 -0
  19. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  20. package/dist/lib/utils/aggregate-field.util.d.ts +21 -0
  21. package/dist/lib/utils/aggregate-field.util.d.ts.map +1 -0
  22. package/dist/lib/utils/aggregate-field.util.js +40 -0
  23. package/dist/lib/utils/aggregate-field.util.js.map +1 -0
  24. package/dist/lib/view-config-panel/view-config-panel.component.d.ts +5 -1
  25. package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  26. package/dist/lib/view-config-panel/view-config-panel.component.js +15 -8
  27. package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
  28. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts +93 -3
  29. package/dist/lib/view-types/renderers/grid-view-renderer.component.d.ts.map +1 -1
  30. package/dist/lib/view-types/renderers/grid-view-renderer.component.js +432 -10
  31. package/dist/lib/view-types/renderers/grid-view-renderer.component.js.map +1 -1
  32. package/dist/module.d.ts +5 -4
  33. package/dist/module.d.ts.map +1 -1
  34. package/dist/module.js +8 -1
  35. package/dist/module.js.map +1 -1
  36. package/dist/public-api.d.ts +1 -0
  37. package/dist/public-api.d.ts.map +1 -1
  38. package/dist/public-api.js +1 -0
  39. package/dist/public-api.js.map +1 -1
  40. package/package.json +20 -19
@@ -1 +1 @@
1
- {"version":3,"file":"entity-cards.component.js","sourceRoot":"","sources":["../../../src/lib/entity-cards/entity-cards.component.ts","../../../src/lib/entity-cards/entity-cards.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, OnInit, SimpleChanges, ElementRef, AfterViewChecked, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityFieldInfo, EntityFieldValueListType, RunView, CoerceImageSrc } from '@memberjunction/core';\nimport { CardTemplate, CardDisplayField, CardFieldType, RecordSelectedEvent, RecordOpenedEvent } from '../types';\nimport { buildCompositeKey, buildPkString, computeFieldsList } from '../utils/record.util';\nimport { PillColorUtil } from '../pill/pill.component';\nimport { HighlightUtil } from '../utils/highlight.util';\n\n/**\n * Precomputed display field value for a card, resolved once per record per\n * (records/filter/template) change rather than via per-CD method calls.\n */\ninterface CardDisplayFieldVM {\n /** The underlying display field definition (name/type/label). */\n field: CardDisplayField;\n /** Boolean value (used when field.type === 'boolean'). */\n booleanValue: boolean;\n /** Numeric display string (used when field.type === 'number'). */\n numericValue: string;\n /** Date display string (used when field.type === 'date'). */\n dateValue: string;\n /** Highlighted text HTML (used for default/text fields). */\n highlightedText: string;\n}\n\n/**\n * Precomputed, per-record view-model backing a single card. Built once whenever\n * the source records, filter text, or template change — NOT on every Angular\n * change-detection cycle. Mirrors the canonical precompute pattern used by\n * conversations' MessageItemComponent (`_messageClasses` / `buildMessageClasses`).\n */\ninterface CardViewModel {\n /** The original record (passed through to event emitters). */\n record: Record<string, unknown>;\n /** Stable PK concatenated string — computed ONCE here instead of 4-5x/CD. */\n pkString: string;\n /** Stable track id for @for (falls back to record_<index> when no PK). */\n trackId: string;\n /** Whether this card is the currently selected record. */\n isSelected: boolean;\n /** Avatar/background color derived from the PK hash. */\n color: string;\n /** How to render the thumbnail (image/icon/none). */\n thumbnailType: 'image' | 'icon' | 'none';\n /** Thumbnail URL/value (image src or icon class). */\n thumbnailUrl: string;\n /** Two-letter initials shown when there is no thumbnail. */\n initials: string;\n /** Highlighted combined title HTML. */\n highlightedTitle: string;\n /** Raw subtitle value (used for the pill rendering path). */\n subtitleValue: string;\n /** Highlighted subtitle HTML (used for the non-pill rendering path). */\n highlightedSubtitle: string;\n /** Highlighted description HTML (empty when no description field). */\n highlightedDescription: string;\n /** Precomputed display field VMs in template order. */\n displayFields: CardDisplayFieldVM[];\n /** Raw badge value (used for the footer pill). */\n badgeValue: string;\n /** Whether this record matched on a hidden (non-visible) field. */\n hasHiddenFieldMatch: boolean;\n /** Display name of the hidden field that matched ('' when none). */\n hiddenMatchFieldName: string;\n}\n\n/**\n * EntityCardsComponent - Card-based view for entity records\n *\n * This component provides an auto-generated card layout for displaying\n * entity records. Cards are automatically structured based on entity metadata.\n *\n * Supports two modes:\n * 1. Parent-managed data: Records are passed in via [records] input\n * 2. Standalone: Component loads its own data with pagination\n *\n * @example\n * ```html\n * <mj-entity-cards\n * [entity]=\"selectedEntity\"\n * [records]=\"filteredRecords\"\n * [selectedRecordId]=\"selectedId\"\n * (recordSelected)=\"onRecordSelected($event)\"\n * (recordOpened)=\"onRecordOpened($event)\">\n * </mj-entity-cards>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-entity-cards',\n templateUrl: './entity-cards.component.html',\n styleUrls: ['./entity-cards.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class EntityCardsComponent extends BaseAngularComponent implements OnChanges, OnInit, AfterViewChecked {\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n /**\n * The entity metadata for the records being displayed\n */\n @Input() entity: EntityInfo | null = null;\n\n /**\n * The records to display as cards (optional - component can load its own)\n */\n @Input() records: Record<string, unknown>[] | null = null;\n\n /**\n * The currently selected record's primary key string\n */\n @Input() selectedRecordId: string | null = null;\n\n /**\n * Custom card template (optional - auto-generated if not provided)\n */\n @Input() cardTemplate: CardTemplate | null = null;\n\n /**\n * Map of record IDs to hidden field names that matched the filter\n * Used to display an indicator when a match occurred in a non-visible field\n */\n @Input() hiddenFieldMatches: Map<string, string> = new Map();\n\n /**\n * Current filter text for highlighting matches\n * Supports SQL-style % wildcards\n */\n @Input() filterText: string = '';\n\n /**\n * Page size for standalone data loading\n * @default 100\n */\n @Input() pageSize: number = 100;\n\n /**\n * Emitted when a record is selected (single click)\n */\n @Output() recordSelected = new EventEmitter<RecordSelectedEvent>();\n\n /**\n * Emitted when a record should be opened (double click or open button)\n */\n @Output() recordOpened = new EventEmitter<RecordOpenedEvent>();\n\n /** Auto-generated card template */\n public autoCardTemplate: CardTemplate | null = null;\n\n /** Internal records when loading standalone */\n private internalRecords: Record<string, unknown>[] = [];\n\n /** Track if we're in standalone mode */\n private standaloneMode: boolean = false;\n\n /** Loading state for standalone mode */\n public isLoading: boolean = false;\n\n /** Flag to trigger scroll to selected card after view renders */\n private pendingScrollToSelected: boolean = false;\n\n /**\n * Precomputed per-record view-models bound by the template's @for. Rebuilt\n * only when the source records, filter, selection, hidden matches, or template\n * change — never per change-detection cycle. This eliminates the 4-5\n * buildPkString() allocations + 4 RegExp-building highlight calls that the\n * previous per-card-per-CD method bindings incurred.\n */\n public cardViewModels: CardViewModel[] = [];\n\n ngOnInit(): void {\n this.standaloneMode = this.records === null;\n\n if (this.entity?.Fields && !this.effectiveTemplate) {\n this.autoCardTemplate = this.generateCardTemplate(this.entity);\n }\n\n if (this.standaloneMode && this.entity) {\n this.loadData();\n }\n\n this.buildCardViewModels();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['entity'] && this.entity?.Fields) {\n this.autoCardTemplate = this.generateCardTemplate(this.entity);\n } else if (changes['entity'] && !this.entity) {\n this.autoCardTemplate = null;\n }\n\n if (changes['entity'] && this.standaloneMode && this.entity) {\n this.loadData();\n }\n\n if (changes['records']) {\n this.standaloneMode = this.records === null;\n // When records change and we have a selection, scroll to it\n if (this.selectedRecordId) {\n this.pendingScrollToSelected = true;\n }\n }\n\n // When selectedRecordId changes programmatically, scroll to the selected card\n if (changes['selectedRecordId'] && this.selectedRecordId) {\n this.pendingScrollToSelected = true;\n }\n\n // Rebuild the precomputed VMs whenever any input that affects card *content*\n // changes. cardTemplate is included because effectiveTemplate derives from it.\n // A selection-only change must NOT trigger a full rebuild — that would re-run\n // the expensive per-card buildPkString()/CompositeKey allocations and the 4\n // RegExp-building highlightMatch() calls for every card on every selection\n // click (O(n) heavy work). Instead we only flip the cheap isSelected flags.\n const contentChanged = !!(changes['records'] || changes['filterText'] ||\n changes['hiddenFieldMatches'] || changes['entity'] || changes['cardTemplate']);\n if (contentChanged) {\n // Full rebuild also recomputes isSelected correctly (buildCardViewModel does).\n this.buildCardViewModels();\n } else if (changes['selectedRecordId']) {\n // Selection-only change: just update the isSelected flags on the existing\n // VMs (string compare per card — no rebuild, no regex, no allocation).\n this.updateSelectionFlags();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.pendingScrollToSelected && this.selectedRecordId) {\n this.pendingScrollToSelected = false;\n // Delay scroll to allow detail panel animation to complete and layout to stabilize\n // This ensures the scroll happens after the viewport width has adjusted\n setTimeout(() => this.scrollToSelectedCard(), 350);\n }\n }\n\n /**\n * Scroll the selected card into view\n */\n private scrollToSelectedCard(): void {\n if (!this.selectedRecordId) return;\n\n // Find the selected card element using the CSS class\n const selectedCard = this.elementRef.nativeElement.querySelector('.data-card.selected') as HTMLElement;\n if (selectedCard) {\n selectedCard.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n }\n }\n\n /**\n * Get effective records (external or internal)\n */\n get effectiveRecords(): Record<string, unknown>[] {\n return this.records ?? this.internalRecords;\n }\n\n /**\n * Load data in standalone mode\n */\n private async loadData(): Promise<void> {\n if (!this.entity) return;\n\n this.isLoading = true;\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<Record<string, unknown>>({\n EntityName: this.entity.Name,\n ResultType: 'simple',\n Fields: computeFieldsList(this.entity),\n MaxRows: this.pageSize\n });\n\n if (result.Success) {\n this.internalRecords = result.Results;\n this.buildCardViewModels();\n }\n } catch (error) {\n console.error('Error loading cards data:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n /**\n * Get the effective card template (custom or auto-generated)\n */\n get effectiveTemplate(): CardTemplate | null {\n return this.cardTemplate || this.autoCardTemplate;\n }\n\n // ========================================\n // TEMPLATE GENERATION\n // ========================================\n\n /**\n * Generate card template from entity metadata\n */\n private generateCardTemplate(entity: EntityInfo): CardTemplate | null {\n const fields = entity.Fields;\n if (!fields || fields.length === 0) return null;\n\n return {\n titleFields: this.findTitleFields(entity, fields),\n subtitleField: this.findSubtitleField(fields),\n descriptionField: this.findDescriptionField(fields),\n displayFields: this.findDisplayFields(fields),\n thumbnailFields: this.findThumbnailFields(fields),\n badgeField: this.findBadgeField(fields)\n };\n }\n\n /**\n * Find all fields that form the record title, in display order.\n * Supports multiple IsNameField fields (e.g., FirstName + LastName → \"Elizabeth Rodriguez\").\n */\n private findTitleFields(entity: EntityInfo, fields: EntityFieldInfo[]): string[] {\n // 1. All IsNameField fields, sorted by Sequence\n const nameFields = fields\n .filter(f => f.IsNameField)\n .sort((a, b) => (a.Sequence ?? 9999) - (b.Sequence ?? 9999));\n if (nameFields.length > 0) return nameFields.map(f => f.Name);\n\n // 2. Single NameField from entity\n if (entity.NameField) return [entity.NameField.Name];\n\n // 3. Heuristic: field named \"Name\" or \"Title\"\n const heuristic = fields.find(f =>\n (f.Name.toLowerCase() === 'name' || f.Name.toLowerCase() === 'title') &&\n f.TSType === 'string' && !f.IsPrimaryKey\n );\n if (heuristic) return [heuristic.Name];\n\n // 4. Field ending with \"Name\"\n const endsWithName = fields.find(f =>\n f.Name.toLowerCase().endsWith('name') && f.TSType === 'string' &&\n !f.IsPrimaryKey && !f.Name.toLowerCase().includes('file')\n );\n if (endsWithName) return [endsWithName.Name];\n\n // 5. First string field\n const firstString = fields.find(f =>\n f.TSType === 'string' && !f.IsPrimaryKey && !f.Name.toLowerCase().includes('id')\n );\n if (firstString) return [firstString.Name];\n\n const pk = fields.find(f => f.IsPrimaryKey);\n return [pk?.Name || 'ID'];\n }\n\n private findSubtitleField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['status', 'type', 'category', 'state', 'stage'];\n for (const keyword of keywords) {\n const field = fields.find(f =>\n f.Name.toLowerCase().includes(keyword) && f.TSType === 'string' && !f.IsPrimaryKey\n );\n if (field) return field.Name;\n }\n return null;\n }\n\n private findDescriptionField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['description', 'desc', 'summary', 'notes', 'comments'];\n for (const keyword of keywords) {\n const field = fields.find(f => f.Name.toLowerCase().includes(keyword) && f.TSType === 'string');\n if (field) return field.Name;\n }\n return null;\n }\n\n private findDisplayFields(fields: EntityFieldInfo[]): CardDisplayField[] {\n const displayFields: CardDisplayField[] = [];\n const excludePatterns = ['id', 'name', 'title', 'description', 'desc', 'summary', 'notes',\n 'status', 'type', 'category', 'state', 'stage', 'password', 'secret',\n '__mj_', 'createdat', 'updatedat', 'createdby', 'updatedby'];\n\n const defaultInViewFields = fields.filter(f =>\n f.DefaultInView === true && !f.IsPrimaryKey &&\n !excludePatterns.some(p => f.Name.toLowerCase().includes(p))\n );\n\n for (const field of defaultInViewFields) {\n if (displayFields.length >= 4) break;\n displayFields.push({\n name: field.Name,\n type: this.getFieldType(field),\n label: this.getFieldLabel(field)\n });\n }\n\n if (displayFields.length >= 2) return displayFields;\n\n const metricKeywords = ['amount', 'total', 'count', 'value', 'price', 'cost', 'quantity', 'qty', 'balance', 'revenue', 'score'];\n for (const field of fields) {\n if (displayFields.length >= 4) break;\n if (displayFields.some(df => df.name === field.Name)) continue;\n\n if (metricKeywords.some(kw => field.Name.toLowerCase().includes(kw))) {\n displayFields.push({\n name: field.Name,\n type: this.getFieldType(field),\n label: this.getFieldLabel(field)\n });\n }\n }\n\n return displayFields;\n }\n\n /**\n * Find all potential thumbnail fields in priority order\n * Returns an array so we can fall back per-record if one is empty\n */\n private findThumbnailFields(fields: EntityFieldInfo[]): string[] {\n const images = fields\n .filter(f => f.ExtendedType === 'Image' && f.TSType === 'string')\n .map(f => f.Name);\n const imageSet = new Set(images);\n const icons = fields\n .filter(f => f.ExtendedType === 'Icon' && f.TSType === 'string' && !imageSet.has(f.Name))\n .map(f => f.Name);\n return [...images, ...icons];\n }\n\n private findBadgeField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['priority', 'severity', 'importance', 'rating', 'rank', 'level'];\n for (const keyword of keywords) {\n const field = fields.find(f => f.Name.toLowerCase().includes(keyword));\n if (field) return field.Name;\n }\n return null;\n }\n\n private getFieldType(field: EntityFieldInfo): CardFieldType {\n if (field.TSType === 'boolean' || field.Type?.toLowerCase() === 'bit') return 'boolean';\n if (field.TSType === 'number') return 'number';\n if (field.TSType === 'Date' || field.Type?.toLowerCase().includes('date')) return 'date';\n return 'text';\n }\n\n // ========================================\n // VALUE FORMATTING\n // ========================================\n\n getFieldValue(record: Record<string, unknown>, fieldName: string | null): string {\n if (!fieldName) return '';\n const value = record[fieldName];\n if (value === null || value === undefined) return '';\n return String(value);\n }\n\n getNumericValue(record: Record<string, unknown>, fieldName: string): string {\n const value = record[fieldName];\n if (value === null || value === undefined) return '-';\n\n const num = Number(value);\n if (isNaN(num)) return String(value);\n\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n\n const fieldNameLower = fieldName.toLowerCase();\n if (['amount', 'price', 'cost', 'value', 'revenue', 'total'].some(k => fieldNameLower.includes(k))) {\n return `$${num.toLocaleString()}`;\n }\n\n return num.toLocaleString();\n }\n\n getBooleanValue(record: Record<string, unknown>, fieldName: string): boolean {\n const value = record[fieldName];\n if (value === null || value === undefined) return false;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') return value.toLowerCase() === 'true' || value === '1';\n return Boolean(value);\n }\n\n getTextValue(record: Record<string, unknown>, fieldName: string, maxLength: number = 50): string {\n const value = this.getFieldValue(record, fieldName);\n if (!value) return '-';\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength) + '...';\n }\n\n getDateValue(record: Record<string, unknown>, fieldName: string): string {\n const value = record[fieldName];\n if (value === null || value === undefined) return '-';\n\n try {\n const date = value instanceof Date ? value : new Date(value as string | number);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n } catch {\n return String(value);\n }\n }\n\n /**\n * Get display label for a field using EntityFieldInfo's built-in DisplayNameOrName property\n */\n getFieldLabel(field: EntityFieldInfo): string {\n return field.DisplayNameOrName;\n }\n\n // ========================================\n // CARD DISPLAY HELPERS\n // ========================================\n\n getRecordTrackId(record: Record<string, unknown>, index: number): string {\n if (!this.entity) return `record_${index}`;\n try {\n const pk = buildPkString(record, this.entity);\n if (pk && pk.trim().length > 0) return pk;\n } catch { /* ignore */ }\n return `record_${index}`;\n }\n\n isSelected(record: Record<string, unknown>): boolean {\n if (!this.entity) return false;\n return buildPkString(record, this.entity) === this.selectedRecordId;\n }\n\n onCardClick(record: Record<string, unknown>): void {\n if (!this.entity) return;\n this.recordSelected.emit({\n record,\n entity: this.entity,\n compositeKey: buildCompositeKey(record, this.entity)\n });\n }\n\n onOpenClick(event: Event, record: Record<string, unknown>): void {\n event.stopPropagation();\n if (!this.entity) return;\n this.recordOpened.emit({\n record,\n entity: this.entity,\n compositeKey: buildCompositeKey(record, this.entity)\n });\n }\n\n // ========================================\n // PRECOMPUTED VIEW-MODELS (perf)\n // ========================================\n\n /**\n * Rebuild the precomputed per-record view-models. Called from ngOnInit,\n * ngOnChanges (on any render-affecting input), and after standalone loadData.\n * Doing this work here — once per data/filter/selection change — instead of via\n * template method bindings avoids re-running it on every Angular CD cycle.\n */\n private buildCardViewModels(): void {\n const records = this.effectiveRecords;\n this.cardViewModels = records.map((record, index) => this.buildCardViewModel(record, index));\n }\n\n /**\n * Cheaply update the isSelected flag on the EXISTING card view-models in place,\n * preserving the array and every VM object reference. Called when ONLY\n * selectedRecordId changes — avoids a full buildCardViewModels() rebuild (which\n * re-runs buildPkString() allocations + RegExp-building highlightMatch() calls\n * per card). Uses the already-computed vm.pkString, so this is a plain string\n * compare per card with zero allocation or regex work.\n */\n private updateSelectionFlags(): void {\n for (const vm of this.cardViewModels) {\n vm.isSelected = vm.pkString.length > 0 && vm.pkString === this.selectedRecordId;\n }\n }\n\n /**\n * Build a single card view-model, computing the PK string exactly once and\n * reusing it for selection, color, hidden-match, and track-id derivation.\n */\n private buildCardViewModel(record: Record<string, unknown>, index: number): CardViewModel {\n const pkString = this.computePkString(record);\n const trackId = pkString && pkString.trim().length > 0 ? pkString : `record_${index}`;\n const template = this.effectiveTemplate;\n\n const subtitleField = template?.subtitleField ?? null;\n const subtitleValue = subtitleField ? this.getFieldValue(record, subtitleField) : '';\n const descriptionField = template?.descriptionField ?? null;\n\n return {\n record,\n pkString,\n trackId,\n isSelected: pkString.length > 0 && pkString === this.selectedRecordId,\n color: this.computeRecordColor(pkString),\n thumbnailType: this.getThumbnailType(record),\n thumbnailUrl: this.getThumbnailUrl(record),\n initials: this.getInitials(record),\n highlightedTitle: this.highlightMatch(this.getCombinedTitle(record)),\n subtitleValue,\n highlightedSubtitle: this.highlightMatch(subtitleValue),\n highlightedDescription: descriptionField\n ? this.highlightMatch(this.getTextValue(record, descriptionField, 100))\n : '',\n displayFields: this.buildDisplayFieldVMs(record, template),\n badgeValue: template?.badgeField ? this.getFieldValue(record, template.badgeField) : '',\n hasHiddenFieldMatch: this.computeHasHiddenFieldMatch(pkString),\n hiddenMatchFieldName: this.computeHiddenMatchFieldName(pkString)\n };\n }\n\n /**\n * Precompute the display-field VMs for a record, in template order.\n */\n private buildDisplayFieldVMs(record: Record<string, unknown>, template: CardTemplate | null): CardDisplayFieldVM[] {\n if (!template || template.displayFields.length === 0) return [];\n return template.displayFields.map(field => ({\n field,\n booleanValue: this.getBooleanValue(record, field.name),\n numericValue: this.getNumericValue(record, field.name),\n dateValue: this.getDateValue(record, field.name),\n highlightedText: this.highlightMatch(this.getTextValue(record, field.name, 40))\n }));\n }\n\n /**\n * Compute the PK concatenated string for a record. Returns '' when no entity\n * or on error, so callers can treat it as \"no stable key\".\n */\n private computePkString(record: Record<string, unknown>): string {\n if (!this.entity) return '';\n try {\n return buildPkString(record, this.entity);\n } catch {\n return '';\n }\n }\n\n /**\n * Derive the avatar/background color from an already-computed PK string.\n */\n private computeRecordColor(pkString: string): string {\n if (!this.entity || !pkString) return 'var(--mj-brand-primary)';\n const colors = ['var(--mj-brand-primary)', 'var(--mj-status-success)', 'var(--mj-status-warning)', 'var(--mj-brand-primary)', 'var(--mj-status-error)', 'var(--mj-brand-primary)', 'var(--mj-text-muted)', 'var(--mj-text-secondary)'];\n let hash = 0;\n for (let i = 0; i < pkString.length; i++) {\n hash = pkString.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n }\n\n /**\n * Whether the record (by PK string) matched on a hidden field.\n */\n private computeHasHiddenFieldMatch(pkString: string): boolean {\n if (!this.entity || !pkString) return false;\n return this.hiddenFieldMatches.has(pkString);\n }\n\n /**\n * Resolve the display name of the hidden field that matched, from a PK string.\n */\n private computeHiddenMatchFieldName(pkString: string): string {\n if (!this.entity || !pkString) return '';\n const fieldName = this.hiddenFieldMatches.get(pkString);\n if (!fieldName) return '';\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n return field ? field.DisplayNameOrName : fieldName;\n }\n\n /**\n * Get the combined title from all title fields for a record.\n * Joins multiple IsNameField values with spaces (e.g., \"Elizabeth Rodriguez\").\n */\n getCombinedTitle(record: Record<string, unknown>): string {\n const template = this.effectiveTemplate;\n if (!template?.titleFields || template.titleFields.length === 0) return '';\n const parts = template.titleFields\n .map(f => this.getFieldValue(record, f))\n .filter(v => v && v.trim().length > 0);\n return parts.length > 0 ? parts.join(' ') : '';\n }\n\n getInitials(record: Record<string, unknown>): string {\n const title = this.getCombinedTitle(record);\n if (!title) return '?';\n\n const words = title.split(/\\s+/).filter(w => w.length > 0);\n if (words.length === 1) return words[0].substring(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n }\n\n /**\n * Get the thumbnail type for a record, with per-record fallback through thumbnailFields\n */\n getThumbnailType(record: Record<string, unknown>): 'image' | 'icon' | 'none' {\n const fieldInfo = this.getEffectiveThumbnailField(record);\n if (!fieldInfo) return 'none';\n\n const { fieldName, value } = fieldInfo;\n const fieldMeta = this.entity?.Fields.find(f => f.Name === fieldName);\n\n if (fieldMeta?.ExtendedType === 'Image' && CoerceImageSrc(value)) return 'image';\n if (fieldMeta?.ExtendedType === 'Icon') return 'icon';\n\n if (this.isImageValue(value)) return 'image';\n if (this.isIconClass(value)) return 'icon';\n\n return 'none';\n }\n\n /**\n * Get the thumbnail URL/value for a record, with per-record fallback\n */\n getThumbnailUrl(record: Record<string, unknown>): string {\n const fieldInfo = this.getEffectiveThumbnailField(record);\n if (!fieldInfo) return '';\n return CoerceImageSrc(fieldInfo.value) || fieldInfo.value;\n }\n\n /**\n * Find the first thumbnail field that has a value for this record\n * Returns both the field name and value for type determination\n */\n private getEffectiveThumbnailField(record: Record<string, unknown>): { fieldName: string; value: string } | null {\n const template = this.effectiveTemplate;\n if (!template?.thumbnailFields || template.thumbnailFields.length === 0) return null;\n\n // Try each field in priority order until we find one with a value\n for (const fieldName of template.thumbnailFields) {\n const value = this.getFieldValue(record, fieldName);\n if (value && value.trim() !== '') {\n return { fieldName, value };\n }\n }\n\n return null;\n }\n\n private isImageValue(value: string): boolean {\n return CoerceImageSrc(value) != null;\n }\n\n private isIconClass(value: string): boolean {\n if (!value) return false;\n const trimmed = value.trim().toLowerCase();\n if (trimmed.startsWith('fa-') || trimmed.startsWith('fa ') ||\n trimmed.startsWith('fas ') || trimmed.startsWith('far ') ||\n trimmed.startsWith('fal ') || trimmed.startsWith('fab ')) return true;\n if (trimmed.includes('material-icons') || trimmed.startsWith('mat-icon')) return true;\n if (trimmed.startsWith('bi-') || trimmed.startsWith('bi ')) return true;\n return false;\n }\n\n getRecordColor(record: Record<string, unknown>): string {\n return this.computeRecordColor(this.computePkString(record));\n }\n\n isEnumField(fieldName: string): boolean {\n if (!this.entity) return false;\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n if (!field) return false;\n return field.ValueListTypeEnum !== EntityFieldValueListType.None && field.EntityFieldValues.length > 0;\n }\n\n get subtitleIsPill(): boolean {\n const template = this.effectiveTemplate;\n if (!template?.subtitleField || !this.entity) return false;\n return this.isEnumField(template.subtitleField);\n }\n\n getPillColorType(value: string): string {\n return PillColorUtil.getColorType(value);\n }\n\n /**\n * Check if a record matched on a hidden field\n */\n hasHiddenFieldMatch(record: Record<string, unknown>): boolean {\n if (!this.entity) return false;\n return this.hiddenFieldMatches.has(buildPkString(record, this.entity));\n }\n\n /**\n * Get the display name of the hidden field that matched\n */\n getHiddenMatchFieldName(record: Record<string, unknown>): string {\n if (!this.entity) return '';\n const fieldName = this.hiddenFieldMatches.get(buildPkString(record, this.entity));\n if (!fieldName || !this.entity) return '';\n // Look up the field in entity metadata and use DisplayNameOrName\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n return field ? field.DisplayNameOrName : fieldName;\n }\n\n /**\n * Highlight matching text in a string based on the filter text\n * Uses HighlightUtil which only highlights if the text actually matches the pattern\n */\n highlightMatch(text: string): string {\n return HighlightUtil.highlight(text, this.filterText, false);\n }\n}\n","<div class=\"cards-view-wrapper\">\n @if (isLoading && effectiveRecords.length === 0) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading records...\"></mj-loading>\n </div>\n } @else {\n <div class=\"cards-container\">\n @for (vm of cardViewModels; track vm.trackId) {\n <div\n class=\"data-card\"\n [class.selected]=\"vm.isSelected\"\n (click)=\"onCardClick(vm.record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (vm.thumbnailType) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"vm.thumbnailUrl\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"vm.color\">\n <i [class]=\"vm.thumbnailUrl\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"vm.color\">\n {{ vm.initials }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"vm.highlightedTitle\"></h3>\n @if (effectiveTemplate?.subtitleField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"vm.subtitleValue\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"vm.highlightedSubtitle\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, vm.record)\" title=\"Open Record\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (effectiveTemplate?.descriptionField) {\n <p class=\"card-description\" [innerHTML]=\"vm.highlightedDescription\"></p>\n }\n\n <!-- Display Fields -->\n @if (vm.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (df of vm.displayFields; track df.field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"df.field.type === 'boolean'\" [class.field-text]=\"df.field.type === 'text'\">\n @switch (df.field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"df.booleanValue\"\n [class.fa-minus]=\"!df.booleanValue\"\n [class.bool-true]=\"df.booleanValue\"\n [class.bool-false]=\"!df.booleanValue\"></i>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ df.numericValue }}</span>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ df.dateValue }}</span>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ df.field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"df.highlightedText\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"vm.badgeValue\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (vm.hasHiddenFieldMatch) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + vm.hiddenMatchFieldName\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ vm.hiddenMatchFieldName }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <mj-empty-state\n class=\"no-results\"\n Variant=\"no-results\"\n Title=\"No records to display\" />\n }\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"entity-cards.component.js","sourceRoot":"","sources":["../../../src/lib/entity-cards/entity-cards.component.ts","../../../src/lib/entity-cards/entity-cards.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAqF,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7K,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAA+B,wBAAwB,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzJ,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;;;;;;;;ICJpD,8BAA+B;IAC7B,gCAAmD;IACrD,iBAAM;;;IAaE,8BAA4B;IAC1B,0BAAsC;IACxC,iBAAM;;;IADC,cAAuB;IAAvB,0DAAuB;;;IAI9B,+BAA6D;IAC3D,oBAAiC;IACnC,iBAAM;;;IAFmB,+CAAmC;IACvD,cAAyB;IAAzB,iCAAyB;;;IAI9B,+BAA6D;IAC3D,YACF;IAAA,iBAAM;;;IAFmB,+CAAmC;IAC1D,cACF;IADE,+CACF;;;IAQE,8BAA8C;;;IAArC,2CAA0B;;;IAEnC,2BAAwE;;;IAA5C,wEAAoC;;;IADhE,AAFF,6HAAsB,oGAEb;;;IAFT,+CAIC;;;IAYH,wBAAwE;;;IAA5C,2EAAuC;;;IAUzD,wBAI6C;IAC7C,gCAA0B;IAAA,YAAoB;IAAA,iBAAO;;;IADlD,AADA,AADA,AADA,AADmB,gCAAuB,gCACR,iCACC,iCACA,mCACE;IACd,eAAoB;IAApB,uCAAoB;;;IAG9C,gCAA0B;IAAA,YAAqB;IAAA,iBAAO;IACtD,gCAA0B;IAAA,YAAoB;IAAA,iBAAO;;;IAD3B,cAAqB;IAArB,wCAAqB;IACrB,eAAoB;IAApB,uCAAoB;;;IAG9C,gCAAqC;IAAA,YAAkB;IAAA,iBAAO;IAC9D,gCAA0B;IAAA,YAAoB;IAAA,iBAAO;;;IADhB,cAAkB;IAAlB,qCAAkB;IAC7B,eAAoB;IAApB,uCAAoB;;;IAG9C,gCAA0B;IAAA,YAAoB;IAAA,iBAAO;IACrD,2BAAuE;;;IAD7C,cAAoB;IAApB,uCAAoB;IACf,cAAgC;IAAhC,oEAAgC;;;IApBrE,+BAA0H;IAkBtH,AAJA,AAJA,AARA,+GAAmB,wFAQD,wFAIF,wFAIN;IAKd,iBAAM;;;;IAvBsE,AAApD,+DAAmD,2CAA8C;IACvH,cAqBC;IArBD,mDAAA,SAAS,oBAAT,QAAQ,oBAAR,MAAM,SAqBL;;;IAxBP,+BAAyB;IACvB,2HAyBC;IACH,iBAAM;;;IA1BJ,cAyBC;IAzBD,kCAyBC;;;IAOL,+BAAyB;IACvB,8BAA2C;IAC7C,iBAAM;;;IADK,cAAuB;IAAvB,wCAAuB;;;IAMlC,+BAAuF;IACrF,wBAA4C;IAC5C,4BAAM;IAAA,YAA6B;IACrC,AADqC,iBAAO,EACtC;;;IAH8B,mEAAkD;IAE9E,eAA6B;IAA7B,gDAA6B;;;;IA3FzC,8BAGmC;IAAjC,oNAAS,gCAAsB,KAAC;IAGhC,8BAAyB;IAYrB,AALA,AALA,mGAAiB,6EAKD,6EAKN;IAOZ,+BAAiC;IAC/B,yBAA8D;IAC9D,gGAAwC;IAO1C,iBAAM;IAEN,kCAA2F;IAA7D,6NAAS,wCAA8B,KAAC;IACpE,wBAA6C;IAEjD,AADE,iBAAS,EACL;IAGN,gCAAuB;IACrB,2GAA2C;IAK3C,6GAAmC;IA8BrC,iBAAM;IAGN,6GAAqC;IAOrC,6GAA8B;IAMhC,iBAAM;;;;;IA5FJ,4CAAgC;IAK9B,eAgBC;IAhBD,sDAAA,OAAO,oBAAP,MAAM,SAgBL;IAGwB,eAAiC;IAAjC,qEAAiC;IACxD,cAMC;IAND,6GAMC;IAUH,eAEC;IAFD,iHAEC;IAGD,cA6BC;IA7BD,0DA6BC;IAIH,cAIC;IAJD,2GAIC;IAGD,cAKC;IALD,qDAKC;;;IAKD,oCAGkC;;;IAvGpC,8BAA6B;IAC3B,sGAgGD;IAED,+GAAqC;IAMrC,iBAAM;;;IAxGJ,cAgGD;IAhGC,oCAgGD;IAED,eAKC;IALD,+DAKC;;AD5CL;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,OAAO,oBAAqB,SAAQ,oBAAoB;IAElD;IACA;IAFV,YACU,UAAsB,EACtB,GAAsB;QAEhC,KAAK,EAAE,CAAC;QAHE,eAAU,GAAV,UAAU,CAAY;QACtB,QAAG,GAAH,GAAG,CAAmB;IAExB,CAAC;IACT;;OAEG;IACM,MAAM,GAAsB,IAAI,CAAC;IAE1C;;OAEG;IACM,OAAO,GAAqC,IAAI,CAAC;IAE1D;;OAEG;IACM,gBAAgB,GAAkB,IAAI,CAAC;IAEhD;;OAEG;IACM,YAAY,GAAwB,IAAI,CAAC;IAElD;;;OAGG;IACM,kBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE7D;;;OAGG;IACM,UAAU,GAAW,EAAE,CAAC;IAEjC;;;OAGG;IACM,QAAQ,GAAW,GAAG,CAAC;IAEhC;;OAEG;IACO,cAAc,GAAG,IAAI,YAAY,EAAuB,CAAC;IAEnE;;OAEG;IACO,YAAY,GAAG,IAAI,YAAY,EAAqB,CAAC;IAE/D,mCAAmC;IAC5B,gBAAgB,GAAwB,IAAI,CAAC;IAEpD,+CAA+C;IACvC,eAAe,GAA8B,EAAE,CAAC;IAExD,wCAAwC;IAChC,cAAc,GAAY,KAAK,CAAC;IAExC,wCAAwC;IACjC,SAAS,GAAY,KAAK,CAAC;IAElC,iEAAiE;IACzD,uBAAuB,GAAY,KAAK,CAAC;IAEjD;;;;;;OAMG;IACI,cAAc,GAAoB,EAAE,CAAC;IAE5C,QAAQ;QACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;YAC5C,4DAA4D;YAC5D,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACtC,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,6EAA6E;QAC7E,+EAA+E;QAC/E,8EAA8E;QAC9E,4EAA4E;QAC5E,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;YACjE,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QACnF,IAAI,cAAc,EAAE,CAAC;YACnB,+EAA+E;YAC/E,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1D,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,mFAAmF;YACnF,wEAAwE;YACxE,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAEnC,qDAAqD;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAgB,CAAC;QACvG,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAA0B;gBACvD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC5B,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtC,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;gBACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC;IACpD,CAAC;IAED,2CAA2C;IAC3C,sBAAsB;IACtB,2CAA2C;IAE3C;;OAEG;IACK,oBAAoB,CAAC,MAAkB;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhD,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;YACjD,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC7C,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACnD,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACjD,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;SACxC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,MAAkB,EAAE,MAAyB;QACnE,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE9D,kCAAkC;QAClC,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAErD,8CAA8C;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;YACrE,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CACzC,CAAC;QACF,IAAI,SAAS;YAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvC,8BAA8B;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;YAC9D,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1D,CAAC;QACF,IAAI,YAAY;YAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE7C,wBAAwB;QACxB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjF,CAAC;QACF,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,iBAAiB,CAAC,MAAyB;QACjD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC5B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CACnF,CAAC;YACF,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,oBAAoB,CAAC,MAAyB;QACpD,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACzE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;YAChG,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,iBAAiB,CAAC,MAAyB;QACjD,MAAM,aAAa,GAAuB,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;YACjE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;YACpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAErF,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC5C,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY;YAC3C,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACxC,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM;YACrC,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC9B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;aACjC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,aAAa,CAAC;QAEpD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAChI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM;YACrC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE/D,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrE,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC9B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,MAAyB;QACnD,MAAM,MAAM,GAAG,MAAM;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;aAChE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACxF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,MAAyB;QAC9C,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACnF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAC,KAAsB;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QACxF,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2CAA2C;IAC3C,mBAAmB;IACnB,2CAA2C;IAE3C,aAAa,CAAC,MAA+B,EAAE,SAAwB;QACrE,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,MAA+B,EAAE,SAAiB;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAEtD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,GAAG,IAAI,OAAO;YAAE,OAAO,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAEtD,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,OAAO,IAAI,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,eAAe,CAAC,MAA+B,EAAE,SAAiB;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,KAAK,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;QACtF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,MAA+B,EAAE,SAAiB,EAAE,YAAoB,EAAE;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,MAA+B,EAAE,SAAiB;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAwB,CAAC,CAAC;YAChF,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAA+B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAChG,yFAAyF;YACzF,2FAA2F;YAC3F,4CAA4C;YAC5C,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;gBAAE,OAAO,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,SAAiB;QACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAsB;QAClC,OAAO,KAAK,CAAC,iBAAiB,CAAC;IACjC,CAAC;IAED,2CAA2C;IAC3C,uBAAuB;IACvB,2CAA2C;IAE3C,gBAAgB,CAAC,MAA+B,EAAE,KAAa;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,UAAU,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,UAAU,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,MAA+B;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC;IACtE,CAAC;IAED,WAAW,CAAC,MAA+B;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAY,EAAE,MAA+B;QACvD,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,iCAAiC;IACjC,2CAA2C;IAE3C;;;;;OAKG;IACK,mBAAmB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;OAOG;IACK,oBAAoB;QAC1B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC;QAClF,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,MAA+B,EAAE,KAAa;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAExC,MAAM,aAAa,GAAG,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC;QACtD,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,gBAAgB,GAAG,QAAQ,EAAE,gBAAgB,IAAI,IAAI,CAAC;QAE5D,OAAO;YACL,MAAM;YACN,QAAQ;YACR,OAAO;YACP,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB;YACrE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACxC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpE,aAAa;YACb,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACvD,sBAAsB,EAAE,gBAAgB;gBACtC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBACvE,CAAC,CAAC,EAAE;YACN,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC1D,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YACvF,mBAAmB,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;YAC9D,oBAAoB,EAAE,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;SACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAA+B,EAAE,QAA6B;QACzF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChE,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,KAAK;YACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;YACtD,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;YACtD,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;YAChD,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SAChF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,MAA+B;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,QAAgB;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO,yBAAyB,CAAC;QAChE,MAAM,MAAM,GAAG,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;QACvO,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,QAAgB;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,QAAgB;QAClD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAA+B;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,MAA+B;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC;QAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAA+B;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QAE9B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAEtE,IAAI,SAAS,EAAE,YAAY,KAAK,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QACjF,IAAI,SAAS,EAAE,YAAY,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAEtD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAE3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAA+B;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAAC,MAA+B;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAErF,kEAAkE;QAClE,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACpD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACjC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;YACtD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YACxD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1E,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACtF,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,MAA+B;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC,iBAAiB,KAAK,wBAAwB,CAAC,IAAI,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IACzG,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA+B;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,MAA+B;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC1C,iEAAiE;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,OAAO,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;8GAxsBU,oBAAoB;6DAApB,oBAAoB;YC9FjC,8BAAgC;YAK5B,AAJF,sFAAkD,gEAIzC;YA4GX,iBAAM;;YAhHJ,cA+GC;YA/GD,4EA+GC;;;iFDlBU,oBAAoB;cAPhC,SAAS;6BACI,KAAK,YACP,iBAAiB,iBAGZ,iBAAiB,CAAC,IAAI;;kBAWpC,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBAKL,MAAM;;kBAKN,MAAM;;kFApDI,oBAAoB","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, OnInit, SimpleChanges, ElementRef, AfterViewChecked, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityFieldInfo, EntityFieldValueListType, RunView, CoerceImageSrc, IsDateOnlySQLType, FormatDateOnly } from '@memberjunction/core';\nimport { CardTemplate, CardDisplayField, CardFieldType, RecordSelectedEvent, RecordOpenedEvent } from '../types';\nimport { buildCompositeKey, buildPkString, computeFieldsList } from '../utils/record.util';\nimport { PillColorUtil } from '../pill/pill.component';\nimport { HighlightUtil } from '../utils/highlight.util';\n\n/**\n * Precomputed display field value for a card, resolved once per record per\n * (records/filter/template) change rather than via per-CD method calls.\n */\ninterface CardDisplayFieldVM {\n /** The underlying display field definition (name/type/label). */\n field: CardDisplayField;\n /** Boolean value (used when field.type === 'boolean'). */\n booleanValue: boolean;\n /** Numeric display string (used when field.type === 'number'). */\n numericValue: string;\n /** Date display string (used when field.type === 'date'). */\n dateValue: string;\n /** Highlighted text HTML (used for default/text fields). */\n highlightedText: string;\n}\n\n/**\n * Precomputed, per-record view-model backing a single card. Built once whenever\n * the source records, filter text, or template change — NOT on every Angular\n * change-detection cycle. Mirrors the canonical precompute pattern used by\n * conversations' MessageItemComponent (`_messageClasses` / `buildMessageClasses`).\n */\ninterface CardViewModel {\n /** The original record (passed through to event emitters). */\n record: Record<string, unknown>;\n /** Stable PK concatenated string — computed ONCE here instead of 4-5x/CD. */\n pkString: string;\n /** Stable track id for @for (falls back to record_<index> when no PK). */\n trackId: string;\n /** Whether this card is the currently selected record. */\n isSelected: boolean;\n /** Avatar/background color derived from the PK hash. */\n color: string;\n /** How to render the thumbnail (image/icon/none). */\n thumbnailType: 'image' | 'icon' | 'none';\n /** Thumbnail URL/value (image src or icon class). */\n thumbnailUrl: string;\n /** Two-letter initials shown when there is no thumbnail. */\n initials: string;\n /** Highlighted combined title HTML. */\n highlightedTitle: string;\n /** Raw subtitle value (used for the pill rendering path). */\n subtitleValue: string;\n /** Highlighted subtitle HTML (used for the non-pill rendering path). */\n highlightedSubtitle: string;\n /** Highlighted description HTML (empty when no description field). */\n highlightedDescription: string;\n /** Precomputed display field VMs in template order. */\n displayFields: CardDisplayFieldVM[];\n /** Raw badge value (used for the footer pill). */\n badgeValue: string;\n /** Whether this record matched on a hidden (non-visible) field. */\n hasHiddenFieldMatch: boolean;\n /** Display name of the hidden field that matched ('' when none). */\n hiddenMatchFieldName: string;\n}\n\n/**\n * EntityCardsComponent - Card-based view for entity records\n *\n * This component provides an auto-generated card layout for displaying\n * entity records. Cards are automatically structured based on entity metadata.\n *\n * Supports two modes:\n * 1. Parent-managed data: Records are passed in via [records] input\n * 2. Standalone: Component loads its own data with pagination\n *\n * @example\n * ```html\n * <mj-entity-cards\n * [entity]=\"selectedEntity\"\n * [records]=\"filteredRecords\"\n * [selectedRecordId]=\"selectedId\"\n * (recordSelected)=\"onRecordSelected($event)\"\n * (recordOpened)=\"onRecordOpened($event)\">\n * </mj-entity-cards>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-entity-cards',\n templateUrl: './entity-cards.component.html',\n styleUrls: ['./entity-cards.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class EntityCardsComponent extends BaseAngularComponent implements OnChanges, OnInit, AfterViewChecked {\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n /**\n * The entity metadata for the records being displayed\n */\n @Input() entity: EntityInfo | null = null;\n\n /**\n * The records to display as cards (optional - component can load its own)\n */\n @Input() records: Record<string, unknown>[] | null = null;\n\n /**\n * The currently selected record's primary key string\n */\n @Input() selectedRecordId: string | null = null;\n\n /**\n * Custom card template (optional - auto-generated if not provided)\n */\n @Input() cardTemplate: CardTemplate | null = null;\n\n /**\n * Map of record IDs to hidden field names that matched the filter\n * Used to display an indicator when a match occurred in a non-visible field\n */\n @Input() hiddenFieldMatches: Map<string, string> = new Map();\n\n /**\n * Current filter text for highlighting matches\n * Supports SQL-style % wildcards\n */\n @Input() filterText: string = '';\n\n /**\n * Page size for standalone data loading\n * @default 100\n */\n @Input() pageSize: number = 100;\n\n /**\n * Emitted when a record is selected (single click)\n */\n @Output() recordSelected = new EventEmitter<RecordSelectedEvent>();\n\n /**\n * Emitted when a record should be opened (double click or open button)\n */\n @Output() recordOpened = new EventEmitter<RecordOpenedEvent>();\n\n /** Auto-generated card template */\n public autoCardTemplate: CardTemplate | null = null;\n\n /** Internal records when loading standalone */\n private internalRecords: Record<string, unknown>[] = [];\n\n /** Track if we're in standalone mode */\n private standaloneMode: boolean = false;\n\n /** Loading state for standalone mode */\n public isLoading: boolean = false;\n\n /** Flag to trigger scroll to selected card after view renders */\n private pendingScrollToSelected: boolean = false;\n\n /**\n * Precomputed per-record view-models bound by the template's @for. Rebuilt\n * only when the source records, filter, selection, hidden matches, or template\n * change — never per change-detection cycle. This eliminates the 4-5\n * buildPkString() allocations + 4 RegExp-building highlight calls that the\n * previous per-card-per-CD method bindings incurred.\n */\n public cardViewModels: CardViewModel[] = [];\n\n ngOnInit(): void {\n this.standaloneMode = this.records === null;\n\n if (this.entity?.Fields && !this.effectiveTemplate) {\n this.autoCardTemplate = this.generateCardTemplate(this.entity);\n }\n\n if (this.standaloneMode && this.entity) {\n this.loadData();\n }\n\n this.buildCardViewModels();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['entity'] && this.entity?.Fields) {\n this.autoCardTemplate = this.generateCardTemplate(this.entity);\n } else if (changes['entity'] && !this.entity) {\n this.autoCardTemplate = null;\n }\n\n if (changes['entity'] && this.standaloneMode && this.entity) {\n this.loadData();\n }\n\n if (changes['records']) {\n this.standaloneMode = this.records === null;\n // When records change and we have a selection, scroll to it\n if (this.selectedRecordId) {\n this.pendingScrollToSelected = true;\n }\n }\n\n // When selectedRecordId changes programmatically, scroll to the selected card\n if (changes['selectedRecordId'] && this.selectedRecordId) {\n this.pendingScrollToSelected = true;\n }\n\n // Rebuild the precomputed VMs whenever any input that affects card *content*\n // changes. cardTemplate is included because effectiveTemplate derives from it.\n // A selection-only change must NOT trigger a full rebuild — that would re-run\n // the expensive per-card buildPkString()/CompositeKey allocations and the 4\n // RegExp-building highlightMatch() calls for every card on every selection\n // click (O(n) heavy work). Instead we only flip the cheap isSelected flags.\n const contentChanged = !!(changes['records'] || changes['filterText'] ||\n changes['hiddenFieldMatches'] || changes['entity'] || changes['cardTemplate']);\n if (contentChanged) {\n // Full rebuild also recomputes isSelected correctly (buildCardViewModel does).\n this.buildCardViewModels();\n } else if (changes['selectedRecordId']) {\n // Selection-only change: just update the isSelected flags on the existing\n // VMs (string compare per card — no rebuild, no regex, no allocation).\n this.updateSelectionFlags();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.pendingScrollToSelected && this.selectedRecordId) {\n this.pendingScrollToSelected = false;\n // Delay scroll to allow detail panel animation to complete and layout to stabilize\n // This ensures the scroll happens after the viewport width has adjusted\n setTimeout(() => this.scrollToSelectedCard(), 350);\n }\n }\n\n /**\n * Scroll the selected card into view\n */\n private scrollToSelectedCard(): void {\n if (!this.selectedRecordId) return;\n\n // Find the selected card element using the CSS class\n const selectedCard = this.elementRef.nativeElement.querySelector('.data-card.selected') as HTMLElement;\n if (selectedCard) {\n selectedCard.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n }\n }\n\n /**\n * Get effective records (external or internal)\n */\n get effectiveRecords(): Record<string, unknown>[] {\n return this.records ?? this.internalRecords;\n }\n\n /**\n * Load data in standalone mode\n */\n private async loadData(): Promise<void> {\n if (!this.entity) return;\n\n this.isLoading = true;\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<Record<string, unknown>>({\n EntityName: this.entity.Name,\n ResultType: 'simple',\n Fields: computeFieldsList(this.entity),\n MaxRows: this.pageSize\n });\n\n if (result.Success) {\n this.internalRecords = result.Results;\n this.buildCardViewModels();\n }\n } catch (error) {\n console.error('Error loading cards data:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n /**\n * Get the effective card template (custom or auto-generated)\n */\n get effectiveTemplate(): CardTemplate | null {\n return this.cardTemplate || this.autoCardTemplate;\n }\n\n // ========================================\n // TEMPLATE GENERATION\n // ========================================\n\n /**\n * Generate card template from entity metadata\n */\n private generateCardTemplate(entity: EntityInfo): CardTemplate | null {\n const fields = entity.Fields;\n if (!fields || fields.length === 0) return null;\n\n return {\n titleFields: this.findTitleFields(entity, fields),\n subtitleField: this.findSubtitleField(fields),\n descriptionField: this.findDescriptionField(fields),\n displayFields: this.findDisplayFields(fields),\n thumbnailFields: this.findThumbnailFields(fields),\n badgeField: this.findBadgeField(fields)\n };\n }\n\n /**\n * Find all fields that form the record title, in display order.\n * Supports multiple IsNameField fields (e.g., FirstName + LastName → \"Elizabeth Rodriguez\").\n */\n private findTitleFields(entity: EntityInfo, fields: EntityFieldInfo[]): string[] {\n // 1. All IsNameField fields, sorted by Sequence\n const nameFields = fields\n .filter(f => f.IsNameField)\n .sort((a, b) => (a.Sequence ?? 9999) - (b.Sequence ?? 9999));\n if (nameFields.length > 0) return nameFields.map(f => f.Name);\n\n // 2. Single NameField from entity\n if (entity.NameField) return [entity.NameField.Name];\n\n // 3. Heuristic: field named \"Name\" or \"Title\"\n const heuristic = fields.find(f =>\n (f.Name.toLowerCase() === 'name' || f.Name.toLowerCase() === 'title') &&\n f.TSType === 'string' && !f.IsPrimaryKey\n );\n if (heuristic) return [heuristic.Name];\n\n // 4. Field ending with \"Name\"\n const endsWithName = fields.find(f =>\n f.Name.toLowerCase().endsWith('name') && f.TSType === 'string' &&\n !f.IsPrimaryKey && !f.Name.toLowerCase().includes('file')\n );\n if (endsWithName) return [endsWithName.Name];\n\n // 5. First string field\n const firstString = fields.find(f =>\n f.TSType === 'string' && !f.IsPrimaryKey && !f.Name.toLowerCase().includes('id')\n );\n if (firstString) return [firstString.Name];\n\n const pk = fields.find(f => f.IsPrimaryKey);\n return [pk?.Name || 'ID'];\n }\n\n private findSubtitleField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['status', 'type', 'category', 'state', 'stage'];\n for (const keyword of keywords) {\n const field = fields.find(f =>\n f.Name.toLowerCase().includes(keyword) && f.TSType === 'string' && !f.IsPrimaryKey\n );\n if (field) return field.Name;\n }\n return null;\n }\n\n private findDescriptionField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['description', 'desc', 'summary', 'notes', 'comments'];\n for (const keyword of keywords) {\n const field = fields.find(f => f.Name.toLowerCase().includes(keyword) && f.TSType === 'string');\n if (field) return field.Name;\n }\n return null;\n }\n\n private findDisplayFields(fields: EntityFieldInfo[]): CardDisplayField[] {\n const displayFields: CardDisplayField[] = [];\n const excludePatterns = ['id', 'name', 'title', 'description', 'desc', 'summary', 'notes',\n 'status', 'type', 'category', 'state', 'stage', 'password', 'secret',\n '__mj_', 'createdat', 'updatedat', 'createdby', 'updatedby'];\n\n const defaultInViewFields = fields.filter(f =>\n f.DefaultInView === true && !f.IsPrimaryKey &&\n !excludePatterns.some(p => f.Name.toLowerCase().includes(p))\n );\n\n for (const field of defaultInViewFields) {\n if (displayFields.length >= 4) break;\n displayFields.push({\n name: field.Name,\n type: this.getFieldType(field),\n label: this.getFieldLabel(field)\n });\n }\n\n if (displayFields.length >= 2) return displayFields;\n\n const metricKeywords = ['amount', 'total', 'count', 'value', 'price', 'cost', 'quantity', 'qty', 'balance', 'revenue', 'score'];\n for (const field of fields) {\n if (displayFields.length >= 4) break;\n if (displayFields.some(df => df.name === field.Name)) continue;\n\n if (metricKeywords.some(kw => field.Name.toLowerCase().includes(kw))) {\n displayFields.push({\n name: field.Name,\n type: this.getFieldType(field),\n label: this.getFieldLabel(field)\n });\n }\n }\n\n return displayFields;\n }\n\n /**\n * Find all potential thumbnail fields in priority order\n * Returns an array so we can fall back per-record if one is empty\n */\n private findThumbnailFields(fields: EntityFieldInfo[]): string[] {\n const images = fields\n .filter(f => f.ExtendedType === 'Image' && f.TSType === 'string')\n .map(f => f.Name);\n const imageSet = new Set(images);\n const icons = fields\n .filter(f => f.ExtendedType === 'Icon' && f.TSType === 'string' && !imageSet.has(f.Name))\n .map(f => f.Name);\n return [...images, ...icons];\n }\n\n private findBadgeField(fields: EntityFieldInfo[]): string | null {\n const keywords = ['priority', 'severity', 'importance', 'rating', 'rank', 'level'];\n for (const keyword of keywords) {\n const field = fields.find(f => f.Name.toLowerCase().includes(keyword));\n if (field) return field.Name;\n }\n return null;\n }\n\n private getFieldType(field: EntityFieldInfo): CardFieldType {\n if (field.TSType === 'boolean' || field.Type?.toLowerCase() === 'bit') return 'boolean';\n if (field.TSType === 'number') return 'number';\n if (field.TSType === 'Date' || field.Type?.toLowerCase().includes('date')) return 'date';\n return 'text';\n }\n\n // ========================================\n // VALUE FORMATTING\n // ========================================\n\n getFieldValue(record: Record<string, unknown>, fieldName: string | null): string {\n if (!fieldName) return '';\n const value = record[fieldName];\n if (value === null || value === undefined) return '';\n return String(value);\n }\n\n getNumericValue(record: Record<string, unknown>, fieldName: string): string {\n const value = record[fieldName];\n if (value === null || value === undefined) return '-';\n\n const num = Number(value);\n if (isNaN(num)) return String(value);\n\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n\n const fieldNameLower = fieldName.toLowerCase();\n if (['amount', 'price', 'cost', 'value', 'revenue', 'total'].some(k => fieldNameLower.includes(k))) {\n return `$${num.toLocaleString()}`;\n }\n\n return num.toLocaleString();\n }\n\n getBooleanValue(record: Record<string, unknown>, fieldName: string): boolean {\n const value = record[fieldName];\n if (value === null || value === undefined) return false;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return value !== 0;\n if (typeof value === 'string') return value.toLowerCase() === 'true' || value === '1';\n return Boolean(value);\n }\n\n getTextValue(record: Record<string, unknown>, fieldName: string, maxLength: number = 50): string {\n const value = this.getFieldValue(record, fieldName);\n if (!value) return '-';\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength) + '...';\n }\n\n getDateValue(record: Record<string, unknown>, fieldName: string): string {\n const value = record[fieldName];\n if (value === null || value === undefined) return '-';\n\n try {\n const date = value instanceof Date ? value : new Date(value as string | number);\n if (isNaN(date.getTime())) return String(value);\n const options: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric', year: 'numeric' };\n // A `date` column is a calendar day that arrives as UTC midnight; a local-zone formatter\n // would land on the previous day for every reader west of Greenwich (MJ#4210). A timestamp\n // names an instant and stays in local time.\n if (this.isDateOnlyField(fieldName)) return FormatDateOnly(date, options);\n return date.toLocaleDateString(undefined, options);\n } catch {\n return String(value);\n }\n }\n\n private isDateOnlyField(fieldName: string): boolean {\n return IsDateOnlySQLType(this.entity?.Fields.find(f => f.Name === fieldName)?.Type);\n }\n\n /**\n * Get display label for a field using EntityFieldInfo's built-in DisplayNameOrName property\n */\n getFieldLabel(field: EntityFieldInfo): string {\n return field.DisplayNameOrName;\n }\n\n // ========================================\n // CARD DISPLAY HELPERS\n // ========================================\n\n getRecordTrackId(record: Record<string, unknown>, index: number): string {\n if (!this.entity) return `record_${index}`;\n try {\n const pk = buildPkString(record, this.entity);\n if (pk && pk.trim().length > 0) return pk;\n } catch { /* ignore */ }\n return `record_${index}`;\n }\n\n isSelected(record: Record<string, unknown>): boolean {\n if (!this.entity) return false;\n return buildPkString(record, this.entity) === this.selectedRecordId;\n }\n\n onCardClick(record: Record<string, unknown>): void {\n if (!this.entity) return;\n this.recordSelected.emit({\n record,\n entity: this.entity,\n compositeKey: buildCompositeKey(record, this.entity)\n });\n }\n\n onOpenClick(event: Event, record: Record<string, unknown>): void {\n event.stopPropagation();\n if (!this.entity) return;\n this.recordOpened.emit({\n record,\n entity: this.entity,\n compositeKey: buildCompositeKey(record, this.entity)\n });\n }\n\n // ========================================\n // PRECOMPUTED VIEW-MODELS (perf)\n // ========================================\n\n /**\n * Rebuild the precomputed per-record view-models. Called from ngOnInit,\n * ngOnChanges (on any render-affecting input), and after standalone loadData.\n * Doing this work here — once per data/filter/selection change — instead of via\n * template method bindings avoids re-running it on every Angular CD cycle.\n */\n private buildCardViewModels(): void {\n const records = this.effectiveRecords;\n this.cardViewModels = records.map((record, index) => this.buildCardViewModel(record, index));\n }\n\n /**\n * Cheaply update the isSelected flag on the EXISTING card view-models in place,\n * preserving the array and every VM object reference. Called when ONLY\n * selectedRecordId changes — avoids a full buildCardViewModels() rebuild (which\n * re-runs buildPkString() allocations + RegExp-building highlightMatch() calls\n * per card). Uses the already-computed vm.pkString, so this is a plain string\n * compare per card with zero allocation or regex work.\n */\n private updateSelectionFlags(): void {\n for (const vm of this.cardViewModels) {\n vm.isSelected = vm.pkString.length > 0 && vm.pkString === this.selectedRecordId;\n }\n }\n\n /**\n * Build a single card view-model, computing the PK string exactly once and\n * reusing it for selection, color, hidden-match, and track-id derivation.\n */\n private buildCardViewModel(record: Record<string, unknown>, index: number): CardViewModel {\n const pkString = this.computePkString(record);\n const trackId = pkString && pkString.trim().length > 0 ? pkString : `record_${index}`;\n const template = this.effectiveTemplate;\n\n const subtitleField = template?.subtitleField ?? null;\n const subtitleValue = subtitleField ? this.getFieldValue(record, subtitleField) : '';\n const descriptionField = template?.descriptionField ?? null;\n\n return {\n record,\n pkString,\n trackId,\n isSelected: pkString.length > 0 && pkString === this.selectedRecordId,\n color: this.computeRecordColor(pkString),\n thumbnailType: this.getThumbnailType(record),\n thumbnailUrl: this.getThumbnailUrl(record),\n initials: this.getInitials(record),\n highlightedTitle: this.highlightMatch(this.getCombinedTitle(record)),\n subtitleValue,\n highlightedSubtitle: this.highlightMatch(subtitleValue),\n highlightedDescription: descriptionField\n ? this.highlightMatch(this.getTextValue(record, descriptionField, 100))\n : '',\n displayFields: this.buildDisplayFieldVMs(record, template),\n badgeValue: template?.badgeField ? this.getFieldValue(record, template.badgeField) : '',\n hasHiddenFieldMatch: this.computeHasHiddenFieldMatch(pkString),\n hiddenMatchFieldName: this.computeHiddenMatchFieldName(pkString)\n };\n }\n\n /**\n * Precompute the display-field VMs for a record, in template order.\n */\n private buildDisplayFieldVMs(record: Record<string, unknown>, template: CardTemplate | null): CardDisplayFieldVM[] {\n if (!template || template.displayFields.length === 0) return [];\n return template.displayFields.map(field => ({\n field,\n booleanValue: this.getBooleanValue(record, field.name),\n numericValue: this.getNumericValue(record, field.name),\n dateValue: this.getDateValue(record, field.name),\n highlightedText: this.highlightMatch(this.getTextValue(record, field.name, 40))\n }));\n }\n\n /**\n * Compute the PK concatenated string for a record. Returns '' when no entity\n * or on error, so callers can treat it as \"no stable key\".\n */\n private computePkString(record: Record<string, unknown>): string {\n if (!this.entity) return '';\n try {\n return buildPkString(record, this.entity);\n } catch {\n return '';\n }\n }\n\n /**\n * Derive the avatar/background color from an already-computed PK string.\n */\n private computeRecordColor(pkString: string): string {\n if (!this.entity || !pkString) return 'var(--mj-brand-primary)';\n const colors = ['var(--mj-brand-primary)', 'var(--mj-status-success)', 'var(--mj-status-warning)', 'var(--mj-brand-primary)', 'var(--mj-status-error)', 'var(--mj-brand-primary)', 'var(--mj-text-muted)', 'var(--mj-text-secondary)'];\n let hash = 0;\n for (let i = 0; i < pkString.length; i++) {\n hash = pkString.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n }\n\n /**\n * Whether the record (by PK string) matched on a hidden field.\n */\n private computeHasHiddenFieldMatch(pkString: string): boolean {\n if (!this.entity || !pkString) return false;\n return this.hiddenFieldMatches.has(pkString);\n }\n\n /**\n * Resolve the display name of the hidden field that matched, from a PK string.\n */\n private computeHiddenMatchFieldName(pkString: string): string {\n if (!this.entity || !pkString) return '';\n const fieldName = this.hiddenFieldMatches.get(pkString);\n if (!fieldName) return '';\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n return field ? field.DisplayNameOrName : fieldName;\n }\n\n /**\n * Get the combined title from all title fields for a record.\n * Joins multiple IsNameField values with spaces (e.g., \"Elizabeth Rodriguez\").\n */\n getCombinedTitle(record: Record<string, unknown>): string {\n const template = this.effectiveTemplate;\n if (!template?.titleFields || template.titleFields.length === 0) return '';\n const parts = template.titleFields\n .map(f => this.getFieldValue(record, f))\n .filter(v => v && v.trim().length > 0);\n return parts.length > 0 ? parts.join(' ') : '';\n }\n\n getInitials(record: Record<string, unknown>): string {\n const title = this.getCombinedTitle(record);\n if (!title) return '?';\n\n const words = title.split(/\\s+/).filter(w => w.length > 0);\n if (words.length === 1) return words[0].substring(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n }\n\n /**\n * Get the thumbnail type for a record, with per-record fallback through thumbnailFields\n */\n getThumbnailType(record: Record<string, unknown>): 'image' | 'icon' | 'none' {\n const fieldInfo = this.getEffectiveThumbnailField(record);\n if (!fieldInfo) return 'none';\n\n const { fieldName, value } = fieldInfo;\n const fieldMeta = this.entity?.Fields.find(f => f.Name === fieldName);\n\n if (fieldMeta?.ExtendedType === 'Image' && CoerceImageSrc(value)) return 'image';\n if (fieldMeta?.ExtendedType === 'Icon') return 'icon';\n\n if (this.isImageValue(value)) return 'image';\n if (this.isIconClass(value)) return 'icon';\n\n return 'none';\n }\n\n /**\n * Get the thumbnail URL/value for a record, with per-record fallback\n */\n getThumbnailUrl(record: Record<string, unknown>): string {\n const fieldInfo = this.getEffectiveThumbnailField(record);\n if (!fieldInfo) return '';\n return CoerceImageSrc(fieldInfo.value) || fieldInfo.value;\n }\n\n /**\n * Find the first thumbnail field that has a value for this record\n * Returns both the field name and value for type determination\n */\n private getEffectiveThumbnailField(record: Record<string, unknown>): { fieldName: string; value: string } | null {\n const template = this.effectiveTemplate;\n if (!template?.thumbnailFields || template.thumbnailFields.length === 0) return null;\n\n // Try each field in priority order until we find one with a value\n for (const fieldName of template.thumbnailFields) {\n const value = this.getFieldValue(record, fieldName);\n if (value && value.trim() !== '') {\n return { fieldName, value };\n }\n }\n\n return null;\n }\n\n private isImageValue(value: string): boolean {\n return CoerceImageSrc(value) != null;\n }\n\n private isIconClass(value: string): boolean {\n if (!value) return false;\n const trimmed = value.trim().toLowerCase();\n if (trimmed.startsWith('fa-') || trimmed.startsWith('fa ') ||\n trimmed.startsWith('fas ') || trimmed.startsWith('far ') ||\n trimmed.startsWith('fal ') || trimmed.startsWith('fab ')) return true;\n if (trimmed.includes('material-icons') || trimmed.startsWith('mat-icon')) return true;\n if (trimmed.startsWith('bi-') || trimmed.startsWith('bi ')) return true;\n return false;\n }\n\n getRecordColor(record: Record<string, unknown>): string {\n return this.computeRecordColor(this.computePkString(record));\n }\n\n isEnumField(fieldName: string): boolean {\n if (!this.entity) return false;\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n if (!field) return false;\n return field.ValueListTypeEnum !== EntityFieldValueListType.None && field.EntityFieldValues.length > 0;\n }\n\n get subtitleIsPill(): boolean {\n const template = this.effectiveTemplate;\n if (!template?.subtitleField || !this.entity) return false;\n return this.isEnumField(template.subtitleField);\n }\n\n getPillColorType(value: string): string {\n return PillColorUtil.getColorType(value);\n }\n\n /**\n * Check if a record matched on a hidden field\n */\n hasHiddenFieldMatch(record: Record<string, unknown>): boolean {\n if (!this.entity) return false;\n return this.hiddenFieldMatches.has(buildPkString(record, this.entity));\n }\n\n /**\n * Get the display name of the hidden field that matched\n */\n getHiddenMatchFieldName(record: Record<string, unknown>): string {\n if (!this.entity) return '';\n const fieldName = this.hiddenFieldMatches.get(buildPkString(record, this.entity));\n if (!fieldName || !this.entity) return '';\n // Look up the field in entity metadata and use DisplayNameOrName\n const field = this.entity.Fields.find(f => f.Name === fieldName);\n return field ? field.DisplayNameOrName : fieldName;\n }\n\n /**\n * Highlight matching text in a string based on the filter text\n * Uses HighlightUtil which only highlights if the text actually matches the pattern\n */\n highlightMatch(text: string): string {\n return HighlightUtil.highlight(text, this.filterText, false);\n }\n}\n","<div class=\"cards-view-wrapper\">\n @if (isLoading && effectiveRecords.length === 0) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading records...\"></mj-loading>\n </div>\n } @else {\n <div class=\"cards-container\">\n @for (vm of cardViewModels; track vm.trackId) {\n <div\n class=\"data-card\"\n [class.selected]=\"vm.isSelected\"\n (click)=\"onCardClick(vm.record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (vm.thumbnailType) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"vm.thumbnailUrl\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"vm.color\">\n <i [class]=\"vm.thumbnailUrl\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"vm.color\">\n {{ vm.initials }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"vm.highlightedTitle\"></h3>\n @if (effectiveTemplate?.subtitleField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"vm.subtitleValue\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"vm.highlightedSubtitle\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, vm.record)\" title=\"Open Record\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (effectiveTemplate?.descriptionField) {\n <p class=\"card-description\" [innerHTML]=\"vm.highlightedDescription\"></p>\n }\n\n <!-- Display Fields -->\n @if (vm.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (df of vm.displayFields; track df.field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"df.field.type === 'boolean'\" [class.field-text]=\"df.field.type === 'text'\">\n @switch (df.field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"df.booleanValue\"\n [class.fa-minus]=\"!df.booleanValue\"\n [class.bool-true]=\"df.booleanValue\"\n [class.bool-false]=\"!df.booleanValue\"></i>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ df.numericValue }}</span>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ df.dateValue }}</span>\n <span class=\"field-label\">{{ df.field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ df.field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"df.highlightedText\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"vm.badgeValue\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (vm.hasHiddenFieldMatch) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + vm.hiddenMatchFieldName\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ vm.hiddenMatchFieldName }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <mj-empty-state\n class=\"no-results\"\n Variant=\"no-results\"\n Title=\"No records to display\" />\n }\n </div>\n }\n</div>\n"]}
@@ -447,6 +447,13 @@ export declare class EntityDataGridComponent extends BaseAngularComponent implem
447
447
  * Get formatted aggregate value for display
448
448
  */
449
449
  getAggregateValue(agg: ViewGridAggregate): string;
450
+ /**
451
+ * Whether an aggregate summarises a date-only column. An aggregate carries no field metadata of
452
+ * its own, so the column is read from a single-field expression such as `MIN(IntakeDate)` or
453
+ * from the column the aggregate is pinned under. A `date` column is a calendar day and must not
454
+ * be shifted into the reader's zone (MJ#4210).
455
+ */
456
+ private aggregateIsDateOnly;
450
457
  /**
451
458
  * Emitted when aggregate results are loaded.
452
459
  * Contains the array of AggregateResult objects and a values map for easy lookup.
@@ -911,10 +918,21 @@ export declare class EntityDataGridComponent extends BaseAngularComponent implem
911
918
  /**
912
919
  * Format a value using custom ColumnFormat settings
913
920
  */
921
+ /**
922
+ * Default rendering of a date-family cell. A `date` column is a calendar day that arrives as UTC
923
+ * midnight; a local-zone formatter would land on the previous day for every reader west of
924
+ * Greenwich (MJ#4210). A timestamp names an instant and stays in local time.
925
+ */
926
+ private formatDefaultDate;
914
927
  private formatValueWithCustomFormat;
915
928
  private formatCustomNumber;
916
929
  private formatCustomCurrency;
917
930
  private formatCustomPercent;
931
+ /**
932
+ * @param dateOnly The column is a SQL `date`: a calendar day at UTC midnight with no time to show.
933
+ * It is rendered in UTC so the day does not shift west of Greenwich, and a `datetime` column
934
+ * format cannot add a time of day to it (MJ#4210). A timestamp column keeps local rendering.
935
+ */
918
936
  private formatCustomDate;
919
937
  private formatCustomBoolean;
920
938
  private updateAgRowSelection;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-data-grid/entity-data-grid.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-data-grid.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-data-grid/entity-data-grid.component.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,11 @@ import { trigger, transition, style, animate } from '@angular/animations';
3
3
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
4
  import { Subject } from 'rxjs';
5
5
  import { debounceTime, takeUntil } from 'rxjs/operators';
6
- import { LogError, RunView, RunViewParams, CoerceImageSrc, ParseCssHexColor, CompositeKey } from '@memberjunction/core';
6
+ import { LogError, RunView, RunViewParams, CoerceImageSrc, ParseCssHexColor, CompositeKey, IsDateOnlySQLType, FormatDateOnly, EntityFieldTSType } from '@memberjunction/core';
7
7
  import { UUIDsEqual } from '@memberjunction/global';
8
8
  import { EntityActionEngineBase } from '@memberjunction/actions-base';
9
9
  import { buildPkString, canonicalizeColumnFields, computeFieldsList } from '../utils/record.util';
10
+ import { AggregateField } from '../utils/aggregate-field.util';
10
11
  import { ViewInfo, UserViewEngine, UserInfoEngine } from '@memberjunction/core-entities';
11
12
  import { ModuleRegistry, AllCommunityModule, themeAlpine } from 'ag-grid-community';
12
13
  // Use the existing HighlightUtil from entity-viewer package
@@ -1548,11 +1549,33 @@ export class EntityDataGridComponent extends BaseAngularComponent {
1548
1549
  minimumFractionDigits: 0
1549
1550
  });
1550
1551
  }
1552
+ // A date aggregate reaches the browser as an ISO string: the server JSON-stringifies the value
1553
+ // and the client parses it back, which turns a Date into text. Resolve the column's type first
1554
+ // so a `date` column renders as its stored day whether the value is a Date or that string.
1555
+ if (typeof value !== 'boolean' && this.aggregateIsDateOnly(agg)) {
1556
+ return FormatDateOnly(value);
1557
+ }
1551
1558
  if (value instanceof Date) {
1552
1559
  return value.toLocaleDateString();
1553
1560
  }
1561
+ // A timestamp aggregate arrives as the same ISO string. It names an instant, so it is rendered
1562
+ // in local time, as a Date instance would be — not printed as the wire text.
1563
+ if (typeof value === 'string' && AggregateField(agg, this._entityInfo)?.TSType === EntityFieldTSType.Date) {
1564
+ const date = new Date(value);
1565
+ if (!isNaN(date.getTime()))
1566
+ return date.toLocaleDateString();
1567
+ }
1554
1568
  return String(value);
1555
1569
  }
1570
+ /**
1571
+ * Whether an aggregate summarises a date-only column. An aggregate carries no field metadata of
1572
+ * its own, so the column is read from a single-field expression such as `MIN(IntakeDate)` or
1573
+ * from the column the aggregate is pinned under. A `date` column is a calendar day and must not
1574
+ * be shifted into the reader's zone (MJ#4210).
1575
+ */
1576
+ aggregateIsDateOnly(agg) {
1577
+ return IsDateOnlySQLType(AggregateField(agg, this._entityInfo)?.Type);
1578
+ }
1556
1579
  // ========================================
1557
1580
  // Event Outputs
1558
1581
  // ========================================
@@ -2621,8 +2644,24 @@ export class EntityDataGridComponent extends BaseAngularComponent {
2621
2644
  // AG Grid Column Building
2622
2645
  // ========================================
2623
2646
  buildAgColumnDefs() {
2624
- if (this._gridState?.columnSettings?.length && this._entityInfo) {
2625
- this.agColumnDefs = this.buildAgColumnDefsFromGridState(this._gridState.columnSettings);
2647
+ // A grid state whose settings name NONE of this entity's fields is not a column preference —
2648
+ // it is evidence the state belongs to a different entity. `_gridState` outlives an entity
2649
+ // change when one viewer is rebound from entity A to entity B (`EntityName` is a rebindable
2650
+ // input), every setting is then dropped for naming a field B does not have, and taking that
2651
+ // empty array as the answer rendered a grid with no header and no cells while the rows loaded
2652
+ // and the row count read correctly — no error, no warning. So treat an empty result as NO
2653
+ // usable state and fall through to the sources that describe the entity actually in hand.
2654
+ // This is the floor `generateAgColumnDefs()` already has for an entity with no DefaultInView
2655
+ // fields; the grid-state branch was the one path without one.
2656
+ //
2657
+ // Only a TOTAL miss is treated this way. One surviving setting is a real preference — a saved
2658
+ // view whose entity has since lost a field — and discarding it would throw away the user's
2659
+ // columns to guess at state that is legitimately theirs.
2660
+ const fromGridState = (this._gridState?.columnSettings?.length && this._entityInfo)
2661
+ ? this.buildAgColumnDefsFromGridState(this._gridState.columnSettings)
2662
+ : [];
2663
+ if (fromGridState.length > 0) {
2664
+ this.agColumnDefs = fromGridState;
2626
2665
  }
2627
2666
  else if (this._columns.length > 0) {
2628
2667
  this.agColumnDefs = this._columns.map(col => this.mapColumnConfigToColDef(col));
@@ -3088,7 +3127,7 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3088
3127
  const useCustomFormat = customFormat && customFormat.type && customFormat.type !== 'auto';
3089
3128
  if (useCustomFormat) {
3090
3129
  // Use custom formatting
3091
- displayValue = this.formatValueWithCustomFormat(params.value, customFormat);
3130
+ displayValue = this.formatValueWithCustomFormat(params.value, customFormat, field);
3092
3131
  // Check if formatCustomBoolean returned HTML (icon or checkbox)
3093
3132
  if (customFormat.type === 'boolean' &&
3094
3133
  (customFormat.booleanDisplay === 'icon' || customFormat.booleanDisplay === 'checkbox')) {
@@ -3112,20 +3151,7 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3112
3151
  }
3113
3152
  // Date formatting
3114
3153
  else if (fieldType === 'Date') {
3115
- const date = params.value instanceof Date ? params.value : new Date(params.value);
3116
- if (isNaN(date.getTime())) {
3117
- displayValue = String(params.value);
3118
- }
3119
- else if (vc.friendlyDates) {
3120
- displayValue = date.toLocaleDateString(undefined, {
3121
- month: 'short',
3122
- day: 'numeric',
3123
- year: 'numeric'
3124
- });
3125
- }
3126
- else {
3127
- displayValue = date.toISOString().split('T')[0];
3128
- }
3154
+ displayValue = this.formatDefaultDate(params.value, field, !!vc.friendlyDates);
3129
3155
  }
3130
3156
  // Currency formatting
3131
3157
  else if (fieldType === 'number' && isCurrency) {
@@ -3243,7 +3269,21 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3243
3269
  /**
3244
3270
  * Format a value using custom ColumnFormat settings
3245
3271
  */
3246
- formatValueWithCustomFormat(value, format) {
3272
+ /**
3273
+ * Default rendering of a date-family cell. A `date` column is a calendar day that arrives as UTC
3274
+ * midnight; a local-zone formatter would land on the previous day for every reader west of
3275
+ * Greenwich (MJ#4210). A timestamp names an instant and stays in local time.
3276
+ */
3277
+ formatDefaultDate(value, field, friendlyDates) {
3278
+ const date = value instanceof Date ? value : new Date(value);
3279
+ if (isNaN(date.getTime()))
3280
+ return String(value);
3281
+ if (!friendlyDates)
3282
+ return date.toISOString().split('T')[0];
3283
+ const options = { month: 'short', day: 'numeric', year: 'numeric' };
3284
+ return IsDateOnlySQLType(field.Type) ? FormatDateOnly(date, options) : date.toLocaleDateString(undefined, options);
3285
+ }
3286
+ formatValueWithCustomFormat(value, format, field) {
3247
3287
  if (value == null)
3248
3288
  return '—';
3249
3289
  switch (format.type) {
@@ -3255,7 +3295,7 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3255
3295
  return this.formatCustomPercent(value, format);
3256
3296
  case 'date':
3257
3297
  case 'datetime':
3258
- return this.formatCustomDate(value, format);
3298
+ return this.formatCustomDate(value, format, IsDateOnlySQLType(field.Type));
3259
3299
  case 'boolean':
3260
3300
  return this.formatCustomBoolean(value, format);
3261
3301
  default:
@@ -3297,7 +3337,12 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3297
3337
  // Assume value is already a percentage (e.g., 50 = 50%), divide by 100
3298
3338
  return new Intl.NumberFormat('en-US', options).format(num / 100);
3299
3339
  }
3300
- formatCustomDate(value, format) {
3340
+ /**
3341
+ * @param dateOnly The column is a SQL `date`: a calendar day at UTC midnight with no time to show.
3342
+ * It is rendered in UTC so the day does not shift west of Greenwich, and a `datetime` column
3343
+ * format cannot add a time of day to it (MJ#4210). A timestamp column keeps local rendering.
3344
+ */
3345
+ formatCustomDate(value, format, dateOnly) {
3301
3346
  const date = value instanceof Date ? value : new Date(value);
3302
3347
  if (isNaN(date.getTime()))
3303
3348
  return String(value);
@@ -3305,6 +3350,7 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3305
3350
  const formatStr = format.dateFormat || 'medium';
3306
3351
  const includeWeekday = formatStr.includes('-weekday');
3307
3352
  const baseFormat = formatStr.replace('-weekday', '');
3353
+ const withTime = format.type === 'datetime' && !dateOnly;
3308
3354
  let options;
3309
3355
  // Intl.DateTimeFormat doesn't allow combining dateStyle with weekday
3310
3356
  // So we must use individual components when weekday is requested
@@ -3319,7 +3365,7 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3319
3365
  // medium
3320
3366
  options = { weekday: 'short', month: 'short', day: 'numeric', year: 'numeric' };
3321
3367
  }
3322
- if (format.type === 'datetime') {
3368
+ if (withTime) {
3323
3369
  options.hour = 'numeric';
3324
3370
  options.minute = '2-digit';
3325
3371
  }
@@ -3329,11 +3375,11 @@ export class EntityDataGridComponent extends BaseAngularComponent {
3329
3375
  options = {
3330
3376
  dateStyle: baseFormat === 'short' ? 'short' : baseFormat === 'long' ? 'long' : 'medium'
3331
3377
  };
3332
- if (format.type === 'datetime') {
3378
+ if (withTime) {
3333
3379
  options.timeStyle = 'short';
3334
3380
  }
3335
3381
  }
3336
- return new Intl.DateTimeFormat('en-US', options).format(date);
3382
+ return dateOnly ? FormatDateOnly(date, options, 'en-US') : new Intl.DateTimeFormat('en-US', options).format(date);
3337
3383
  }
3338
3384
  formatCustomBoolean(value, format) {
3339
3385
  if (format.booleanDisplay === 'icon') {
@@ -5268,5 +5314,5 @@ export class EntityDataGridComponent extends BaseAngularComponent {
5268
5314
  type: ViewChild,
5269
5315
  args: ['gridContainer']
5270
5316
  }] }); })();
5271
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityDataGridComponent, { className: "EntityDataGridComponent", filePath: "src/lib/entity-data-grid/entity-data-grid.component.ts", lineNumber: 190 }); })();
5317
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityDataGridComponent, { className: "EntityDataGridComponent", filePath: "src/lib/entity-data-grid/entity-data-grid.component.ts", lineNumber: 191 }); })();
5272
5318
  //# sourceMappingURL=entity-data-grid.component.js.map