@memberjunction/ng-entity-viewer 5.23.0 → 5.24.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 (32) hide show
  1. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts +1 -1
  2. package/dist/lib/aggregate-panel/aggregate-panel.component.d.ts.map +1 -1
  3. package/dist/lib/aggregate-panel/aggregate-panel.component.js.map +1 -1
  4. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts +3 -1
  5. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.d.ts.map +1 -1
  6. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js +1 -1
  7. package/dist/lib/aggregate-setup-dialog/aggregate-setup-dialog.component.js.map +1 -1
  8. package/dist/lib/entity-cards/entity-cards.component.d.ts +10 -1
  9. package/dist/lib/entity-cards/entity-cards.component.d.ts.map +1 -1
  10. package/dist/lib/entity-cards/entity-cards.component.js +43 -20
  11. package/dist/lib/entity-cards/entity-cards.component.js.map +1 -1
  12. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +1 -1
  13. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
  14. package/dist/lib/entity-data-grid/entity-data-grid.component.js +12 -17
  15. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  16. package/dist/lib/entity-data-grid/models/grid-types.js +3 -0
  17. package/dist/lib/entity-data-grid/models/grid-types.js.map +1 -1
  18. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +1 -1
  19. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  20. package/dist/lib/entity-viewer/entity-viewer.component.js +8 -13
  21. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  22. package/dist/lib/types.d.ts +20 -35
  23. package/dist/lib/types.d.ts.map +1 -1
  24. package/dist/lib/types.js +3 -1
  25. package/dist/lib/types.js.map +1 -1
  26. package/dist/lib/utils/record.util.d.ts +1 -1
  27. package/dist/lib/utils/record.util.d.ts.map +1 -1
  28. package/dist/lib/utils/record.util.js.map +1 -1
  29. package/dist/lib/view-config-panel/view-config-panel.component.d.ts +1 -1
  30. package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  31. package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
  32. package/package.json +10 -10
@@ -208,7 +208,7 @@ function EntityCardsComponent_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1
208
208
  i0.ɵɵadvance(2);
209
209
  i0.ɵɵconditional((tmp_12_0 = ctx_r2.getThumbnailType(record_r2)) === "image" ? 2 : tmp_12_0 === "icon" ? 3 : 4);
210
210
  i0.ɵɵadvance(4);
211
- i0.ɵɵproperty("innerHTML", ctx_r2.highlightMatch(ctx_r2.getFieldValue(record_r2, (ctx_r2.effectiveTemplate == null ? null : ctx_r2.effectiveTemplate.titleField) ?? null)), i0.ɵɵsanitizeHtml);
211
+ i0.ɵɵproperty("innerHTML", ctx_r2.highlightMatch(ctx_r2.getCombinedTitle(record_r2)), i0.ɵɵsanitizeHtml);
212
212
  i0.ɵɵadvance();
213
213
  i0.ɵɵconditional((tmp_14_0 = ctx_r2.effectiveTemplate == null ? null : ctx_r2.effectiveTemplate.subtitleField) ? 7 : -1, tmp_14_0);
214
214
  i0.ɵɵadvance(4);
@@ -416,7 +416,7 @@ export class EntityCardsComponent {
416
416
  if (!fields || fields.length === 0)
417
417
  return null;
418
418
  return {
419
- titleField: this.findTitleField(entity, fields),
419
+ titleFields: this.findTitleFields(entity, fields),
420
420
  subtitleField: this.findSubtitleField(fields),
421
421
  descriptionField: this.findDescriptionField(fields),
422
422
  displayFields: this.findDisplayFields(fields),
@@ -424,23 +424,36 @@ export class EntityCardsComponent {
424
424
  badgeField: this.findBadgeField(fields)
425
425
  };
426
426
  }
427
- findTitleField(entity, fields) {
427
+ /**
428
+ * Find all fields that form the record title, in display order.
429
+ * Supports multiple IsNameField fields (e.g., FirstName + LastName → "Elizabeth Rodriguez").
430
+ */
431
+ findTitleFields(entity, fields) {
432
+ // 1. All IsNameField fields, sorted by Sequence
433
+ const nameFields = fields
434
+ .filter(f => f.IsNameField)
435
+ .sort((a, b) => (a.Sequence ?? 9999) - (b.Sequence ?? 9999));
436
+ if (nameFields.length > 0)
437
+ return nameFields.map(f => f.Name);
438
+ // 2. Single NameField from entity
428
439
  if (entity.NameField)
429
- return entity.NameField.Name;
430
- const nameField = fields.find(f => f.Name.toLowerCase() === 'name' || f.Name.toLowerCase() === 'title');
431
- if (nameField)
432
- return nameField.Name;
433
- const endsWithName = fields.find(f => f.Name.toLowerCase().endsWith('name') &&
434
- f.TSType === 'string' &&
435
- !f.Name.toLowerCase().includes('file') &&
436
- !f.IsPrimaryKey);
440
+ return [entity.NameField.Name];
441
+ // 3. Heuristic: field named "Name" or "Title"
442
+ const heuristic = fields.find(f => (f.Name.toLowerCase() === 'name' || f.Name.toLowerCase() === 'title') &&
443
+ f.TSType === 'string' && !f.IsPrimaryKey);
444
+ if (heuristic)
445
+ return [heuristic.Name];
446
+ // 4. Field ending with "Name"
447
+ const endsWithName = fields.find(f => f.Name.toLowerCase().endsWith('name') && f.TSType === 'string' &&
448
+ !f.IsPrimaryKey && !f.Name.toLowerCase().includes('file'));
437
449
  if (endsWithName)
438
- return endsWithName.Name;
450
+ return [endsWithName.Name];
451
+ // 5. First string field
439
452
  const firstString = fields.find(f => f.TSType === 'string' && !f.IsPrimaryKey && !f.Name.toLowerCase().includes('id'));
440
453
  if (firstString)
441
- return firstString.Name;
454
+ return [firstString.Name];
442
455
  const pk = fields.find(f => f.IsPrimaryKey);
443
- return pk?.Name || 'ID';
456
+ return [pk?.Name || 'ID'];
444
457
  }
445
458
  findSubtitleField(fields) {
446
459
  const keywords = ['status', 'type', 'category', 'state', 'stage'];
@@ -637,17 +650,27 @@ export class EntityCardsComponent {
637
650
  compositeKey: buildCompositeKey(record, this.entity)
638
651
  });
639
652
  }
640
- getInitials(record) {
653
+ /**
654
+ * Get the combined title from all title fields for a record.
655
+ * Joins multiple IsNameField values with spaces (e.g., "Elizabeth Rodriguez").
656
+ */
657
+ getCombinedTitle(record) {
641
658
  const template = this.effectiveTemplate;
642
- if (!template?.titleField)
643
- return '?';
644
- const title = this.getFieldValue(record, template.titleField);
659
+ if (!template?.titleFields || template.titleFields.length === 0)
660
+ return '';
661
+ const parts = template.titleFields
662
+ .map(f => this.getFieldValue(record, f))
663
+ .filter(v => v && v.trim().length > 0);
664
+ return parts.length > 0 ? parts.join(' ') : '';
665
+ }
666
+ getInitials(record) {
667
+ const title = this.getCombinedTitle(record);
645
668
  if (!title)
646
669
  return '?';
647
670
  const words = title.split(/\s+/).filter(w => w.length > 0);
648
671
  if (words.length === 1)
649
672
  return words[0].substring(0, 2).toUpperCase();
650
- return (words[0][0] + words[1][0]).toUpperCase();
673
+ return (words[0][0] + words[words.length - 1][0]).toUpperCase();
651
674
  }
652
675
  /**
653
676
  * Get the thumbnail type for a record, with per-record fallback through thumbnailFields
@@ -786,7 +809,7 @@ export class EntityCardsComponent {
786
809
  }
787
810
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityCardsComponent, [{
788
811
  type: Component,
789
- args: [{ standalone: false, selector: 'mj-entity-cards', encapsulation: ViewEncapsulation.None, template: "<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 (record of effectiveRecords; track getRecordTrackId(record, $index)) {\n <div\n class=\"data-card\"\n [class.selected]=\"isSelected(record)\"\n (click)=\"onCardClick(record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (getThumbnailType(record)) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"getThumbnailUrl(record)\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n <i [class]=\"getThumbnailUrl(record)\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n {{ getInitials(record) }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"highlightMatch(getFieldValue(record, effectiveTemplate?.titleField ?? null))\"></h3>\n @if (effectiveTemplate?.subtitleField; as subField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"getFieldValue(record, subField)\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"highlightMatch(getFieldValue(record, subField))\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, 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; as descField) {\n <p class=\"card-description\" [innerHTML]=\"highlightMatch(getTextValue(record, descField, 100))\"></p>\n }\n\n <!-- Display Fields -->\n @if (effectiveTemplate && effectiveTemplate.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (field of effectiveTemplate.displayFields; track field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"field.type === 'boolean'\" [class.field-text]=\"field.type === 'text'\">\n @switch (field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"getBooleanValue(record, field.name)\"\n [class.fa-minus]=\"!getBooleanValue(record, field.name)\"\n [class.bool-true]=\"getBooleanValue(record, field.name)\"\n [class.bool-false]=\"!getBooleanValue(record, field.name)\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ getNumericValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ getDateValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"highlightMatch(getTextValue(record, field.name, 40))\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField; as badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"getFieldValue(record, badgeField)\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (hasHiddenFieldMatch(record)) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + getHiddenMatchFieldName(record)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ getHiddenMatchFieldName(record) }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No records to display</p>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["/* Scoped to mj-entity-cards to prevent style leakage with ViewEncapsulation.None */\nmj-entity-cards .cards-view-wrapper {\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\nmj-entity-cards .cards-container {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 20px;\n padding: 4px;\n}\n\nmj-entity-cards .data-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n/* Hover state for unselected cards */\nmj-entity-cards .data-card:hover:not(.selected) {\n border-color: var(--mj-border-strong);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\nmj-entity-cards .data-card:hover .card-open-btn {\n opacity: 1;\n}\n\n/* Selected state - subtle but clear */\nmj-entity-cards .data-card.selected {\n border-color: var(--mj-brand-primary);\n}\n\nmj-entity-cards .data-card.selected .card-title {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Selected + hover state - same as regular hover */\nmj-entity-cards .data-card.selected:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\nmj-entity-cards .card-header {\n display: flex;\n align-items: flex-start;\n padding: 16px;\n gap: 12px;\n}\n\nmj-entity-cards .card-thumbnail {\n width: 48px;\n height: 48px;\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n}\nmj-entity-cards .card-thumbnail img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\nmj-entity-cards .card-avatar {\n width: 48px;\n height: 48px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\nmj-entity-cards .card-header-content {\n flex: 1;\n min-width: 0;\n}\n\nmj-entity-cards .card-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\nmj-entity-cards .card-subtitle {\n display: block;\n margin-top: 2px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\nmj-entity-cards .card-open-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n opacity: 0;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\nmj-entity-cards .card-open-btn:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary);\n}\n\nmj-entity-cards .card-body {\n padding: 0 16px 16px 16px;\n}\n\nmj-entity-cards .card-description {\n margin: 0 0 12px 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n/* Card Display Fields */\nmj-entity-cards .card-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\nmj-entity-cards .field-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 60px;\n}\n\nmj-entity-cards .field-item .field-value {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\nmj-entity-cards .field-item .field-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Boolean fields */\nmj-entity-cards .field-item.field-boolean {\n flex-direction: row;\n align-items: center;\n gap: 6px;\n min-width: auto;\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon {\n font-size: 14px;\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon.bool-true {\n color: var(--mj-status-success);\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon.bool-false {\n color: var(--mj-text-muted);\n}\n\nmj-entity-cards .field-item.field-boolean .field-label {\n font-size: 12px;\n text-transform: none;\n color: var(--mj-text-secondary);\n}\n\n/* Text fields */\nmj-entity-cards .field-item.field-text {\n flex: 1 1 100%;\n max-width: 100%;\n}\n\nmj-entity-cards .field-item .field-text-value {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n word-break: break-word;\n}\n\n/* Date fields */\nmj-entity-cards .field-item .field-date {\n font-size: 13px;\n font-weight: 500;\n}\n\nmj-entity-cards .card-footer {\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Highlight matches - scoped to work with innerHTML */\nmj-entity-cards .highlight-match {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-radius: 2px;\n}\n\n/* Pill spacing when used as subtitle */\nmj-entity-cards .card-header-content mj-pill {\n display: block;\n margin-top: 4px;\n}\n\n/* Hidden field match indicator */\nmj-entity-cards .hidden-match-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-status-warning-bg);\n border-top: 1px solid var(--mj-status-warning-border);\n font-size: 11px;\n color: var(--mj-status-warning);\n}\n\nmj-entity-cards .hidden-match-indicator i {\n font-size: 10px;\n}\n\nmj-entity-cards .hidden-match-indicator span {\n font-weight: 500;\n}\n\n/* Loading state */\nmj-entity-cards .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: 40px;\n}\n\n/* No results state */\nmj-entity-cards .no-results {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n}\nmj-entity-cards .no-results i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\nmj-entity-cards .no-results p {\n margin: 0;\n font-size: 14px;\n}\n"] }]
812
+ args: [{ standalone: false, selector: 'mj-entity-cards', encapsulation: ViewEncapsulation.None, template: "<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 (record of effectiveRecords; track getRecordTrackId(record, $index)) {\n <div\n class=\"data-card\"\n [class.selected]=\"isSelected(record)\"\n (click)=\"onCardClick(record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (getThumbnailType(record)) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"getThumbnailUrl(record)\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n <i [class]=\"getThumbnailUrl(record)\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n {{ getInitials(record) }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"highlightMatch(getCombinedTitle(record))\"></h3>\n @if (effectiveTemplate?.subtitleField; as subField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"getFieldValue(record, subField)\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"highlightMatch(getFieldValue(record, subField))\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, 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; as descField) {\n <p class=\"card-description\" [innerHTML]=\"highlightMatch(getTextValue(record, descField, 100))\"></p>\n }\n\n <!-- Display Fields -->\n @if (effectiveTemplate && effectiveTemplate.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (field of effectiveTemplate.displayFields; track field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"field.type === 'boolean'\" [class.field-text]=\"field.type === 'text'\">\n @switch (field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"getBooleanValue(record, field.name)\"\n [class.fa-minus]=\"!getBooleanValue(record, field.name)\"\n [class.bool-true]=\"getBooleanValue(record, field.name)\"\n [class.bool-false]=\"!getBooleanValue(record, field.name)\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ getNumericValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ getDateValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"highlightMatch(getTextValue(record, field.name, 40))\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField; as badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"getFieldValue(record, badgeField)\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (hasHiddenFieldMatch(record)) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + getHiddenMatchFieldName(record)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ getHiddenMatchFieldName(record) }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No records to display</p>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["/* Scoped to mj-entity-cards to prevent style leakage with ViewEncapsulation.None */\nmj-entity-cards .cards-view-wrapper {\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\nmj-entity-cards .cards-container {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 20px;\n padding: 4px;\n}\n\nmj-entity-cards .data-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n/* Hover state for unselected cards */\nmj-entity-cards .data-card:hover:not(.selected) {\n border-color: var(--mj-border-strong);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\nmj-entity-cards .data-card:hover .card-open-btn {\n opacity: 1;\n}\n\n/* Selected state - subtle but clear */\nmj-entity-cards .data-card.selected {\n border-color: var(--mj-brand-primary);\n}\n\nmj-entity-cards .data-card.selected .card-title {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Selected + hover state - same as regular hover */\nmj-entity-cards .data-card.selected:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\nmj-entity-cards .card-header {\n display: flex;\n align-items: flex-start;\n padding: 16px;\n gap: 12px;\n}\n\nmj-entity-cards .card-thumbnail {\n width: 48px;\n height: 48px;\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n}\nmj-entity-cards .card-thumbnail img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\nmj-entity-cards .card-avatar {\n width: 48px;\n height: 48px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\nmj-entity-cards .card-header-content {\n flex: 1;\n min-width: 0;\n}\n\nmj-entity-cards .card-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\nmj-entity-cards .card-subtitle {\n display: block;\n margin-top: 2px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\nmj-entity-cards .card-open-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n opacity: 0;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\nmj-entity-cards .card-open-btn:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary);\n}\n\nmj-entity-cards .card-body {\n padding: 0 16px 16px 16px;\n}\n\nmj-entity-cards .card-description {\n margin: 0 0 12px 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n/* Card Display Fields */\nmj-entity-cards .card-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\nmj-entity-cards .field-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 60px;\n}\n\nmj-entity-cards .field-item .field-value {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\nmj-entity-cards .field-item .field-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Boolean fields */\nmj-entity-cards .field-item.field-boolean {\n flex-direction: row;\n align-items: center;\n gap: 6px;\n min-width: auto;\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon {\n font-size: 14px;\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon.bool-true {\n color: var(--mj-status-success);\n}\n\nmj-entity-cards .field-item.field-boolean .field-icon.bool-false {\n color: var(--mj-text-muted);\n}\n\nmj-entity-cards .field-item.field-boolean .field-label {\n font-size: 12px;\n text-transform: none;\n color: var(--mj-text-secondary);\n}\n\n/* Text fields */\nmj-entity-cards .field-item.field-text {\n flex: 1 1 100%;\n max-width: 100%;\n}\n\nmj-entity-cards .field-item .field-text-value {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n word-break: break-word;\n}\n\n/* Date fields */\nmj-entity-cards .field-item .field-date {\n font-size: 13px;\n font-weight: 500;\n}\n\nmj-entity-cards .card-footer {\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Highlight matches - scoped to work with innerHTML */\nmj-entity-cards .highlight-match {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n border-radius: 2px;\n}\n\n/* Pill spacing when used as subtitle */\nmj-entity-cards .card-header-content mj-pill {\n display: block;\n margin-top: 4px;\n}\n\n/* Hidden field match indicator */\nmj-entity-cards .hidden-match-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-status-warning-bg);\n border-top: 1px solid var(--mj-status-warning-border);\n font-size: 11px;\n color: var(--mj-status-warning);\n}\n\nmj-entity-cards .hidden-match-indicator i {\n font-size: 10px;\n}\n\nmj-entity-cards .hidden-match-indicator span {\n font-weight: 500;\n}\n\n/* Loading state */\nmj-entity-cards .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: 40px;\n}\n\n/* No results state */\nmj-entity-cards .no-results {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n text-align: center;\n}\nmj-entity-cards .no-results i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\nmj-entity-cards .no-results p {\n margin: 0;\n font-size: 14px;\n}\n"] }]
790
813
  }], () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], { entity: [{
791
814
  type: Input
792
815
  }], records: [{
@@ -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":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAqF,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7K,OAAO,EAA+B,wBAAwB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEtG,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;;;;4CCElD,oCAAgC;;;IALlC,8BAA+B;IAC7B,gCAAmD;IACrD,iBAAM;;;IAaE,8BAA4B;IAC1B,0BAA8C;IAChD,iBAAM;;;;IADC,cAA+B;IAA/B,yEAA+B;;;IAItC,+BAA2E;IACzE,oBAAyC;IAC3C,iBAAM;;;;IAFmB,oEAAiD;IACrE,cAAiC;IAAjC,gDAAiC;;;IAItC,+BAA2E;IACzE,YACF;IAAA,iBAAM;;;;IAFmB,oEAAiD;IACxE,cACF;IADE,8DACF;;;IAQE,8BAA6D;;;;;IAApD,oEAAyC;;;IAElD,2BAAiG;;;;;IAArE,kHAA6D;;;IADzF,AAFF,6HAAsB,oGAEb;;;IAFT,+CAIC;;;IAYH,wBAAmG;;;;IAAvE,8GAAkE;;;IAUpF,wBAIiE;IACjE,gCAA0B;IAAA,YAAiB;IAAA,iBAAO;;;;;IAD/C,AADA,AADA,AADA,AADmB,gCAAuB,8DACY,+DACC,+DACA,iEACE;IAClC,eAAiB;IAAjB,oCAAiB;;;IAG3C,gCAA0B;IAAA,YAAyC;IAAA,iBAAO;IAC1E,gCAA0B;IAAA,YAAiB;IAAA,iBAAO;;;;;IADxB,cAAyC;IAAzC,sEAAyC;IACzC,eAAiB;IAAjB,oCAAiB;;;IAG3C,gCAAqC;IAAA,YAAsC;IAAA,iBAAO;IAClF,gCAA0B;IAAA,YAAiB;IAAA,iBAAO;;;;;IADb,cAAsC;IAAtC,mEAAsC;IACjD,eAAiB;IAAjB,oCAAiB;;;IAG3C,gCAA0B;IAAA,YAAiB;IAAA,iBAAO;IAClD,2BAAyG;;;;;IAD/E,cAAiB;IAAjB,oCAAiB;IACZ,cAAkE;IAAlE,uHAAkE;;;IApBvG,+BAAoH;IAkBhH,AAJA,AAJA,AARA,+GAAmB,wFAQD,wFAIF,wFAIN;IAKd,iBAAM;;;;IAvBmE,AAAjD,4DAAgD,wCAA2C;IACjH,cAqBC;IArBD,gDAAA,SAAS,oBAAT,QAAQ,oBAAR,MAAM,SAqBL;;;IAxBP,+BAAyB;IACvB,2HAyBC;IACH,iBAAM;;;IA1BJ,cAyBC;IAzBD,qDAyBC;;;IAOL,+BAAyB;IACvB,8BAA+D;IACjE,iBAAM;;;;IADK,cAA2C;IAA3C,4DAA2C;;;IAMtD,+BAA+F;IAC7F,wBAA4C;IAC5C,4BAAM;IAAA,YAAqC;IAC7C,AAD6C,iBAAO,EAC9C;;;;IAH8B,kFAA0D;IAEtF,eAAqC;IAArC,+DAAqC;;;;IA3FjD,8BAGgC;IAA9B,wNAAS,6BAAmB,KAAC;IAG7B,8BAAyB;IAYrB,AALA,AALA,mGAAiB,6EAKD,6EAKN;IAOZ,+BAAiC;IAC/B,yBAAuH;IACvH,gGAAqD;IAOvD,iBAAM;IAEN,kCAAwF;IAA1D,iOAAS,qCAA2B,KAAC;IACjE,wBAA6C;IAEjD,AADE,iBAAS,EACL;IAGN,gCAAuB;IACrB,2GAAyD;IAKzD,6GAAuE;IA8BzE,iBAAM;IAGN,6GAAoD;IAOpD,6GAAmC;IAMrC,iBAAM;;;;;;;;IA5FJ,wDAAqC;IAKnC,eAgBC;IAhBD,qEAAA,OAAO,oBAAP,MAAM,SAgBL;IAGwB,eAA0F;IAA1F,8LAA0F;IACjH,cAMC;IAND,kIAMC;IAUH,eAEC;IAFD,sIAEC;IAGD,cA6BC;IA7BD,yGA6BC;IAIH,cAIC;IAJD,gIAIC;IAGD,cAKC;IALD,iEAKC;;;IAKD,8BAAwB;IACtB,wBAAiC;IACjC,yBAAG;IAAA,qCAAqB;IAC1B,AAD0B,iBAAI,EACxB;;;IAvGR,8BAA6B;IAC3B,4GAgGD;IAED,oGAAqC;IAMrC,iBAAM;;;IAxGJ,cAgGD;IAhGC,sCAgGD;IAED,eAKC;IALD,+DAKC;;ADvGL;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,OAAO,oBAAoB;IAErB;IACA;IAFV,YACU,UAAsB,EACtB,GAAsB;QADtB,eAAU,GAAV,UAAU,CAAY;QACtB,QAAG,GAAH,GAAG,CAAmB;IAC7B,CAAC;IACJ;;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,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;IACH,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;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,IAAI,OAAO,EAAE,CAAC;YACzB,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;YACxC,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,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;YAC/C,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;IAEO,cAAc,CAAC,MAAkB,EAAE,MAAyB;QAClE,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAEnD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CACpE,CAAC;QACF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC;QAErC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrC,CAAC,CAAC,MAAM,KAAK,QAAQ;YACrB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,CAAC,YAAY,CAChB,CAAC;QACF,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC,IAAI,CAAC;QAE3C,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,WAAW,CAAC,IAAI,CAAC;QAEzC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC;IAC1B,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,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3F,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACtC,CAAC,CAAC,MAAM,KAAK,QAAQ;gBACrB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7B,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,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,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACjG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,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,WAAW,CAAC,MAA+B;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,UAAU;YAAE,OAAO,GAAG,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9D,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,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,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;QAEvC,iCAAiC;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAE7C,0CAA0C;QAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAE3C,kFAAkF;QAClF,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAA+B;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IAChC,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,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,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,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,yBAAyB,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;QACvO,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,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;8GAriBU,oBAAoB;6DAApB,oBAAoB;YCnCjC,8BAAgC;YAK5B,AAJF,sFAAkD,gEAIzC;YA4GX,iBAAM;;YAhHJ,cA+GC;YA/GD,4EA+GC;;;iFD7EU,oBAAoB;cAPhC,SAAS;6BACI,KAAK,YACP,iBAAiB,iBAGZ,iBAAiB,CAAC,IAAI;;kBAUpC,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBAKL,MAAM;;kBAKN,MAAM;;kFAnDI,oBAAoB","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, OnInit, SimpleChanges, ElementRef, AfterViewChecked, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { EntityInfo, EntityFieldInfo, EntityFieldValueListType, RunView } 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 * 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 implements OnChanges, OnInit, AfterViewChecked {\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef\n ) {}\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 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\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\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 = new RunView();\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 }\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 titleField: this.findTitleField(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 private findTitleField(entity: EntityInfo, fields: EntityFieldInfo[]): string {\n if (entity.NameField) return entity.NameField.Name;\n\n const nameField = fields.find(f =>\n f.Name.toLowerCase() === 'name' || f.Name.toLowerCase() === 'title'\n );\n if (nameField) return nameField.Name;\n\n const endsWithName = fields.find(f =>\n f.Name.toLowerCase().endsWith('name') &&\n f.TSType === 'string' &&\n !f.Name.toLowerCase().includes('file') &&\n !f.IsPrimaryKey\n );\n if (endsWithName) return endsWithName.Name;\n\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 imageKeywords = ['image', 'photo', 'picture', 'thumbnail', 'avatar', 'logo', 'icon'];\n const foundFields: string[] = [];\n const foundFieldNames = new Set<string>();\n\n for (const keyword of imageKeywords) {\n const matchingFields = fields.filter(f =>\n f.Name.toLowerCase().includes(keyword) &&\n f.TSType === 'string' &&\n !foundFieldNames.has(f.Name)\n );\n for (const field of matchingFields) {\n foundFields.push(field.Name);\n foundFieldNames.add(field.Name);\n }\n }\n return foundFields;\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 getInitials(record: Record<string, unknown>): string {\n const template = this.effectiveTemplate;\n if (!template?.titleField) return '?';\n const title = this.getFieldValue(record, template.titleField);\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[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\n // Check if value is an image URL\n if (this.isImageValue(value)) return 'image';\n\n // Check if value looks like an icon class\n if (this.isIconClass(value)) return 'icon';\n\n // If field name suggests it's an icon field, treat non-URL values as icon classes\n const fieldNameLower = fieldName.toLowerCase();\n if (fieldNameLower.includes('icon') || fieldNameLower.includes('class')) {\n return 'icon';\n }\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 return 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 if (!value) return false;\n const trimmed = value.trim();\n if (trimmed.startsWith('data:image/')) return true;\n if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) return true;\n return false;\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 if (!this.entity) 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 const pk = buildPkString(record, this.entity);\n let hash = 0;\n for (let i = 0; i < pk.length; i++) {\n hash = pk.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\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 (record of effectiveRecords; track getRecordTrackId(record, $index)) {\n <div\n class=\"data-card\"\n [class.selected]=\"isSelected(record)\"\n (click)=\"onCardClick(record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (getThumbnailType(record)) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"getThumbnailUrl(record)\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n <i [class]=\"getThumbnailUrl(record)\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n {{ getInitials(record) }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"highlightMatch(getFieldValue(record, effectiveTemplate?.titleField ?? null))\"></h3>\n @if (effectiveTemplate?.subtitleField; as subField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"getFieldValue(record, subField)\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"highlightMatch(getFieldValue(record, subField))\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, 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; as descField) {\n <p class=\"card-description\" [innerHTML]=\"highlightMatch(getTextValue(record, descField, 100))\"></p>\n }\n\n <!-- Display Fields -->\n @if (effectiveTemplate && effectiveTemplate.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (field of effectiveTemplate.displayFields; track field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"field.type === 'boolean'\" [class.field-text]=\"field.type === 'text'\">\n @switch (field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"getBooleanValue(record, field.name)\"\n [class.fa-minus]=\"!getBooleanValue(record, field.name)\"\n [class.bool-true]=\"getBooleanValue(record, field.name)\"\n [class.bool-false]=\"!getBooleanValue(record, field.name)\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ getNumericValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ getDateValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"highlightMatch(getTextValue(record, field.name, 40))\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField; as badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"getFieldValue(record, badgeField)\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (hasHiddenFieldMatch(record)) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + getHiddenMatchFieldName(record)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ getHiddenMatchFieldName(record) }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No records to display</p>\n </div>\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":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, OnInit, SimpleChanges, ElementRef, AfterViewChecked, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { EntityInfo, EntityFieldInfo, EntityFieldValueListType, RunView } 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 * 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 implements OnChanges, OnInit, AfterViewChecked {\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef\n ) {}\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 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\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\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 = new RunView();\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 }\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 imageKeywords = ['image', 'photo', 'picture', 'thumbnail', 'avatar', 'logo', 'icon'];\n const foundFields: string[] = [];\n const foundFieldNames = new Set<string>();\n\n for (const keyword of imageKeywords) {\n const matchingFields = fields.filter(f =>\n f.Name.toLowerCase().includes(keyword) &&\n f.TSType === 'string' &&\n !foundFieldNames.has(f.Name)\n );\n for (const field of matchingFields) {\n foundFields.push(field.Name);\n foundFieldNames.add(field.Name);\n }\n }\n return foundFields;\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 * 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\n // Check if value is an image URL\n if (this.isImageValue(value)) return 'image';\n\n // Check if value looks like an icon class\n if (this.isIconClass(value)) return 'icon';\n\n // If field name suggests it's an icon field, treat non-URL values as icon classes\n const fieldNameLower = fieldName.toLowerCase();\n if (fieldNameLower.includes('icon') || fieldNameLower.includes('class')) {\n return 'icon';\n }\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 return 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 if (!value) return false;\n const trimmed = value.trim();\n if (trimmed.startsWith('data:image/')) return true;\n if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) return true;\n return false;\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 if (!this.entity) 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 const pk = buildPkString(record, this.entity);\n let hash = 0;\n for (let i = 0; i < pk.length; i++) {\n hash = pk.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\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 (record of effectiveRecords; track getRecordTrackId(record, $index)) {\n <div\n class=\"data-card\"\n [class.selected]=\"isSelected(record)\"\n (click)=\"onCardClick(record)\">\n\n <!-- Card Header with Avatar/Icon -->\n <div class=\"card-header\">\n @switch (getThumbnailType(record)) {\n @case ('image') {\n <div class=\"card-thumbnail\">\n <img [src]=\"getThumbnailUrl(record)\" alt=\"\" />\n </div>\n }\n @case ('icon') {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n <i [class]=\"getThumbnailUrl(record)\"></i>\n </div>\n }\n @default {\n <div class=\"card-avatar\" [style.background-color]=\"getRecordColor(record)\">\n {{ getInitials(record) }}\n </div>\n }\n }\n\n <div class=\"card-header-content\">\n <h3 class=\"card-title\" [innerHTML]=\"highlightMatch(getCombinedTitle(record))\"></h3>\n @if (effectiveTemplate?.subtitleField; as subField) {\n @if (subtitleIsPill) {\n <mj-pill [value]=\"getFieldValue(record, subField)\"></mj-pill>\n } @else {\n <span class=\"card-subtitle\" [innerHTML]=\"highlightMatch(getFieldValue(record, subField))\"></span>\n }\n }\n </div>\n\n <button class=\"card-open-btn\" (click)=\"onOpenClick($event, 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; as descField) {\n <p class=\"card-description\" [innerHTML]=\"highlightMatch(getTextValue(record, descField, 100))\"></p>\n }\n\n <!-- Display Fields -->\n @if (effectiveTemplate && effectiveTemplate.displayFields.length > 0) {\n <div class=\"card-fields\">\n @for (field of effectiveTemplate.displayFields; track field.name) {\n <div class=\"field-item\" [class.field-boolean]=\"field.type === 'boolean'\" [class.field-text]=\"field.type === 'text'\">\n @switch (field.type) {\n @case ('boolean') {\n <i class=\"field-icon\" [class.fa-solid]=\"true\"\n [class.fa-check]=\"getBooleanValue(record, field.name)\"\n [class.fa-minus]=\"!getBooleanValue(record, field.name)\"\n [class.bool-true]=\"getBooleanValue(record, field.name)\"\n [class.bool-false]=\"!getBooleanValue(record, field.name)\"></i>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('number') {\n <span class=\"field-value\">{{ getNumericValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @case ('date') {\n <span class=\"field-value field-date\">{{ getDateValue(record, field.name) }}</span>\n <span class=\"field-label\">{{ field.label }}</span>\n }\n @default {\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-text-value\" [innerHTML]=\"highlightMatch(getTextValue(record, field.name, 40))\"></span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Footer with Badge -->\n @if (effectiveTemplate?.badgeField; as badgeField) {\n <div class=\"card-footer\">\n <mj-pill [value]=\"getFieldValue(record, badgeField)\"></mj-pill>\n </div>\n }\n\n <!-- Hidden field match indicator -->\n @if (hasHiddenFieldMatch(record)) {\n <div class=\"hidden-match-indicator\" [title]=\"'Matched in: ' + getHiddenMatchFieldName(record)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>{{ getHiddenMatchFieldName(record) }}</span>\n </div>\n }\n </div>\n }\n\n @if (effectiveRecords.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No records to display</p>\n </div>\n }\n </div>\n }\n</div>\n"]}
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, NgZone } from '@angular/core';
2
2
  import { RunViewParams, EntityInfo, AggregateResult, AggregateValue } from '@memberjunction/core';
3
3
  import { PageChangeEvent } from '@memberjunction/ng-pagination';
4
- import { MJUserViewEntityExtended, ViewGridState, ViewGridAggregatesConfig, ViewGridAggregate } from '@memberjunction/core-entities';
4
+ import { MJUserViewEntityExtended, ViewGridState, MJUserViewEntity_IGridAggregatesConfig as ViewGridAggregatesConfig, MJUserViewEntity_IGridAggregate as ViewGridAggregate } from '@memberjunction/core-entities';
5
5
  import { ColDef, GridReadyEvent, RowClickedEvent, RowDoubleClickedEvent, RowSelectionOptions, GetRowIdParams, SortChangedEvent as AgSortChangedEvent, type Theme, ColumnResizedEvent, ColumnMovedEvent, SelectionChangedEvent, CellClickedEvent, GridOptions } from 'ag-grid-community';
6
6
  import { GridSelectionMode, GridEditMode, GridLinesMode, GridColumnConfig, GridToolbarConfig, GridToolbarButton, GridState, GridRowData, ColumnRuntimeState, GridStateChangedEvent, EntityActionConfig, GridVisualConfig, ForeignKeyClickEvent } from './models/grid-types';
7
7
  import { BeforeRowSelectEventArgs, AfterRowSelectEventArgs, BeforeRowDeselectEventArgs, AfterRowDeselectEventArgs, BeforeRowClickEventArgs, AfterRowClickEventArgs, BeforeRowDoubleClickEventArgs, AfterRowDoubleClickEventArgs, BeforeCellEditEventArgs, AfterCellEditBeginEventArgs, BeforeCellEditCommitEventArgs, AfterCellEditCommitEventArgs, BeforeCellEditCancelEventArgs, AfterCellEditCancelEventArgs, BeforeRowSaveEventArgs, AfterRowSaveEventArgs, BeforeRowDeleteEventArgs, AfterRowDeleteEventArgs, BeforeDataLoadEventArgs, AfterDataLoadEventArgs, BeforeDataRefreshEventArgs, AfterDataRefreshEventArgs, BeforeSortEventArgs, AfterSortEventArgs, BeforeColumnReorderEventArgs, AfterColumnReorderEventArgs, BeforeColumnResizeEventArgs, AfterColumnResizeEventArgs, BeforeColumnVisibilityChangeEventArgs, AfterColumnVisibilityChangeEventArgs } from './events/grid-events';
@@ -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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"}
@@ -1970,8 +1970,8 @@ export class EntityDataGridComponent {
1970
1970
  // Only apply grid state from view entity if not already set via props
1971
1971
  // (gridState input takes precedence)
1972
1972
  if (!this._gridState && this._viewEntity.GridState) {
1973
- try {
1974
- const gridState = JSON.parse(this._viewEntity.GridState);
1973
+ const gridState = this._viewEntity.GridStateObject;
1974
+ if (gridState) {
1975
1975
  if (gridState.columnSettings?.length) {
1976
1976
  this._gridState = {
1977
1977
  columnSettings: gridState.columnSettings,
@@ -1984,9 +1984,6 @@ export class EntityDataGridComponent {
1984
1984
  this._aggregatesConfig = gridState.aggregates;
1985
1985
  }
1986
1986
  }
1987
- catch (e) {
1988
- console.warn('Failed to parse view GridState:', e);
1989
- }
1990
1987
  }
1991
1988
  // Only apply sort state if:
1992
1989
  // 1. No explicit OrderBy in Params
@@ -3572,20 +3569,18 @@ export class EntityDataGridComponent {
3572
3569
  try {
3573
3570
  this.isSavingState = true;
3574
3571
  this.pendingStateToSave = state;
3575
- // Build the grid state JSON matching ViewGridState format
3576
- const gridStateJson = {
3577
- columnSettings: state.columnSettings,
3578
- sortSettings: state.sortSettings,
3579
- aggregates: state.aggregates
3580
- };
3581
- // Update the view entity's GridState
3582
- this._viewEntity.GridState = JSON.stringify(gridStateJson);
3572
+ // Mutate the existing GridState object and write back via typed setter
3573
+ const gridState = this._viewEntity.GridStateObject ?? {};
3574
+ gridState.columnSettings = state.columnSettings;
3575
+ gridState.sortSettings = state.sortSettings;
3576
+ gridState.aggregates = state.aggregates;
3577
+ this._viewEntity.GridStateObject = gridState;
3583
3578
  // Update SortState separately if changed
3584
3579
  if (state.sortSettings?.length) {
3585
- this._viewEntity.SortState = JSON.stringify(state.sortSettings.map(s => ({
3580
+ this._viewEntity.SortStateObject = state.sortSettings.map(s => ({
3586
3581
  field: s.field,
3587
- dir: s.dir
3588
- })));
3582
+ direction: s.dir
3583
+ }));
3589
3584
  }
3590
3585
  // Save the view entity
3591
3586
  const success = await this._viewEntity.Save();
@@ -4603,5 +4598,5 @@ export class EntityDataGridComponent {
4603
4598
  type: ViewChild,
4604
4599
  args: ['gridContainer']
4605
4600
  }] }); })();
4606
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityDataGridComponent, { className: "EntityDataGridComponent", filePath: "src/lib/entity-data-grid/entity-data-grid.component.ts", lineNumber: 157 }); })();
4601
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityDataGridComponent, { className: "EntityDataGridComponent", filePath: "src/lib/entity-data-grid/entity-data-grid.component.ts", lineNumber: 167 }); })();
4607
4602
  //# sourceMappingURL=entity-data-grid.component.js.map