@memberjunction/ng-dashboards 5.35.0 → 5.37.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 (159) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +3 -3
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  11. package/dist/AI/components/models/model-management.component.js +4 -4
  12. package/dist/AI/components/models/model-management.component.js.map +1 -1
  13. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  14. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  15. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  16. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  17. package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
  18. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  19. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  20. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  22. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +137 -142
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/execution-monitoring.component.js +111 -116
  26. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  27. package/dist/Admin/admin-data-schema.component.js +13 -65
  28. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  29. package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
  30. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  31. package/dist/Admin/admin-identity-access.component.js +13 -65
  32. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  33. package/dist/Admin/admin-monitoring.component.js +13 -65
  34. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  35. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  36. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  37. package/dist/Admin/base-admin-container.component.js +26 -17
  38. package/dist/Admin/base-admin-container.component.js.map +1 -1
  39. package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
  40. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  41. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  42. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  43. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  44. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  45. package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
  46. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  47. package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
  48. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  49. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
  50. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  51. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  52. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  53. package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
  54. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  55. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  56. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  57. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
  58. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  59. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  60. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  61. package/dist/DevTools/app-state-inspector.component.js +46 -72
  62. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  63. package/dist/DevTools/class-registry.component.js +88 -100
  64. package/dist/DevTools/class-registry.component.js.map +1 -1
  65. package/dist/DevTools/event-monitor.component.js +158 -168
  66. package/dist/DevTools/event-monitor.component.js.map +1 -1
  67. package/dist/DevTools/graphql-console.component.js +257 -264
  68. package/dist/DevTools/graphql-console.component.js.map +1 -1
  69. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  70. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  71. package/dist/DevTools/layout-inspector.component.js +46 -64
  72. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  73. package/dist/DevTools/lazy-module-status.component.js +75 -84
  74. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  75. package/dist/DevTools/settings-explorer.component.js +76 -85
  76. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  77. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  78. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  79. package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
  80. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  81. package/dist/Integration/components/activity/activity.component.js +97 -99
  82. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  83. package/dist/Integration/components/connections/connections.component.js +842 -855
  84. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  85. package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
  86. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  87. package/dist/Integration/components/schedules/schedules.component.js +78 -89
  88. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  89. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  90. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  91. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
  92. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  93. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  94. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  95. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
  96. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  97. package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
  98. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  99. package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
  100. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  101. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  102. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  103. package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
  104. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  105. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  106. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  107. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  108. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  109. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  110. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  111. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  112. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  113. package/dist/Lists/index.d.ts +1 -0
  114. package/dist/Lists/index.d.ts.map +1 -1
  115. package/dist/Lists/index.js +1 -0
  116. package/dist/Lists/index.js.map +1 -1
  117. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  118. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  119. package/dist/Lists/services/list-set-operations.service.js +236 -10
  120. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  121. package/dist/MCP/mcp-dashboard.component.js +19 -19
  122. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  123. package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
  124. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  125. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  126. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  127. package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
  128. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  129. package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
  130. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  131. package/dist/Testing/components/testing-explorer.component.js +543 -629
  132. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  133. package/dist/Testing/testing-dashboard.component.js +50 -49
  134. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  135. package/dist/ai-dashboards.module.d.ts +1 -1
  136. package/dist/ai-dashboards.module.d.ts.map +1 -1
  137. package/dist/ai-dashboards.module.js +16 -1
  138. package/dist/ai-dashboards.module.js.map +1 -1
  139. package/dist/communication-dashboards.module.d.ts +9 -7
  140. package/dist/communication-dashboards.module.d.ts.map +1 -1
  141. package/dist/communication-dashboards.module.js +13 -4
  142. package/dist/communication-dashboards.module.js.map +1 -1
  143. package/dist/core-dashboards.module.d.ts +1 -1
  144. package/dist/core-dashboards.module.d.ts.map +1 -1
  145. package/dist/core-dashboards.module.js +16 -1
  146. package/dist/core-dashboards.module.js.map +1 -1
  147. package/dist/lists-dashboards.module.d.ts +10 -9
  148. package/dist/lists-dashboards.module.d.ts.map +1 -1
  149. package/dist/lists-dashboards.module.js +13 -2
  150. package/dist/lists-dashboards.module.js.map +1 -1
  151. package/dist/public-api.d.ts +1 -0
  152. package/dist/public-api.d.ts.map +1 -1
  153. package/dist/public-api.js +1 -0
  154. package/dist/public-api.js.map +1 -1
  155. package/dist/testing-dashboards.module.d.ts +1 -1
  156. package/dist/testing-dashboards.module.d.ts.map +1 -1
  157. package/dist/testing-dashboards.module.js +13 -1
  158. package/dist/testing-dashboards.module.js.map +1 -1
  159. package/package.json +53 -52
@@ -1 +1 @@
1
- {"version":3,"file":"event-monitor.component.js","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts","../../src/DevTools/event-monitor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal, MJEvent } from '@memberjunction/global';\nimport { Subscription } from 'rxjs';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface EventMonitorPrefs {\n filter?: string;\n typeFilter?: string;\n componentFilter?: string;\n codeFilter?: string;\n sortField?: SortField;\n sortDir?: SortDir;\n}\n\ninterface EventRow {\n seq: number;\n timestamp: Date;\n type: string;\n eventCode?: string;\n componentName: string;\n summary: string;\n args: unknown;\n expanded: boolean;\n /** True when args is null/undefined/empty — used to render a clean empty-state on expand. */\n hasPayload: boolean;\n}\n\ntype SortField = 'time' | 'type' | 'eventCode' | 'component';\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Event Monitor — live tail of `MJGlobal.Instance.GetEventListener()`.\n * Captures events into a ring buffer (configurable cap) with filtering,\n * pause/resume, click-to-expand-payload, copy.\n */\n@RegisterClass(BaseResourceComponent, 'EventMonitorInspector')\n@Component({\n standalone: false,\n selector: 'mj-event-monitor',\n templateUrl: './event-monitor.component.html',\n styleUrls: ['./inspector-shared.css', './event-monitor.component.css']\n})\nexport class EventMonitorComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public readonly MaxEvents = 500;\n public Events: EventRow[] = [];\n public Paused = false;\n public AutoScroll = true;\n public Filter = '';\n public TypeFilter = ''; // '' = all\n public ComponentFilter = ''; // '' = all\n public CodeFilter = ''; // '' = all\n public KnownTypes: string[] = [];\n public KnownComponents: string[] = [];\n public KnownCodes: string[] = [];\n public Stats = { captured: 0, perSecond: 0, kept: 0 };\n public StartedAt = new Date();\n public SortField: SortField = 'time';\n public SortDir: SortDir = 'desc';\n\n private sub?: Subscription;\n private seq = 0;\n private rateBucket: number[] = []; // event timestamps within last 1s\n private rateTimer?: ReturnType<typeof setInterval>;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadPrefs();\n this.subscribe();\n this.rateTimer = setInterval(() => this.tickRate(), 500);\n this.NotifyLoadComplete();\n }\n\n public ngOnDestroy(): void {\n this.savePrefs();\n this.sub?.unsubscribe();\n if (this.rateTimer) clearInterval(this.rateTimer);\n }\n\n private loadPrefs(): void {\n const p = DevToolsPrefs.Get<EventMonitorPrefs>('eventMonitor');\n if (!p) return;\n this.Filter = p.filter ?? '';\n this.TypeFilter = p.typeFilter ?? '';\n this.ComponentFilter = p.componentFilter ?? '';\n this.CodeFilter = p.codeFilter ?? '';\n this.SortField = p.sortField ?? 'time';\n this.SortDir = p.sortDir ?? 'desc';\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save<EventMonitorPrefs>('eventMonitor', {\n filter: this.Filter,\n typeFilter: this.TypeFilter,\n componentFilter: this.ComponentFilter,\n codeFilter: this.CodeFilter,\n sortField: this.SortField,\n sortDir: this.SortDir\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Event Monitor'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-bolt'; }\n\n public TogglePause(): void {\n this.Paused = !this.Paused;\n this.cdr.markForCheck();\n }\n\n public ToggleAutoScroll(): void {\n this.AutoScroll = !this.AutoScroll;\n }\n\n public Clear(): void {\n this.Events = [];\n this.seq = 0;\n this.Stats.kept = 0;\n this.cdr.markForCheck();\n }\n\n public ToggleRow(row: EventRow): void {\n row.expanded = !row.expanded;\n }\n\n public OnTypeFilterClick(type: string): void {\n this.TypeFilter = this.TypeFilter === type ? '' : type;\n }\n\n public OnSortClick(field: SortField): void {\n if (this.SortField === field) {\n this.SortDir = this.SortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDir = field === 'time' ? 'desc' : 'asc';\n }\n this.savePrefs();\n }\n\n /** Public so the template can call on every ngModelChange (filters, selects). */\n public PersistPrefs(): void {\n this.savePrefs();\n }\n\n public async OnCopyRow(row: EventRow): Promise<void> {\n const payload = {\n timestamp: row.timestamp.toISOString(),\n type: row.type,\n eventCode: row.eventCode,\n component: row.componentName,\n args: row.args\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n } catch { /* clipboard unavailable */ }\n }\n\n public get FilteredEvents(): EventRow[] {\n let list = this.Events;\n if (this.TypeFilter) list = list.filter(e => e.type === this.TypeFilter);\n if (this.ComponentFilter) list = list.filter(e => e.componentName === this.ComponentFilter);\n if (this.CodeFilter) list = list.filter(e => (e.eventCode ?? '') === this.CodeFilter);\n\n const q = this.Filter.trim().toLowerCase();\n if (q) {\n list = list.filter(e =>\n e.type.toLowerCase().includes(q) ||\n e.componentName.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n (e.eventCode && e.eventCode.toLowerCase().includes(q))\n );\n }\n\n // Sort (always returns a new array — preserves the natural seq order otherwise)\n const dir = this.SortDir === 'asc' ? 1 : -1;\n const sorted = [...list].sort((a, b) => {\n switch (this.SortField) {\n case 'time': return (a.seq - b.seq) * dir;\n case 'type': return a.type.localeCompare(b.type) * dir;\n case 'eventCode': return (a.eventCode ?? '').localeCompare(b.eventCode ?? '') * dir;\n case 'component': return a.componentName.localeCompare(b.componentName) * dir;\n default: return 0;\n }\n });\n return sorted;\n }\n\n public ClearFilters(): void {\n this.Filter = '';\n this.TypeFilter = '';\n this.ComponentFilter = '';\n this.CodeFilter = '';\n this.savePrefs();\n }\n\n public get HasActiveFilters(): boolean {\n return !!(this.Filter || this.TypeFilter || this.ComponentFilter || this.CodeFilter);\n }\n\n public get UptimeLabel(): string {\n const ms = Date.now() - this.StartedAt.getTime();\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const remainder = s % 60;\n return m > 0 ? `${m}m ${remainder}s` : `${s}s`;\n }\n\n public TrackBySeq = (_i: number, e: EventRow) => e.seq;\n\n // ---------- private ----------\n\n private subscribe(): void {\n try {\n // withReplay = true so we get historical events that were emitted\n // before this component mounted (within MJGlobal's replay buffer).\n this.sub = MJGlobal.Instance.GetEventListener(true).subscribe((evt: MJEvent) => {\n this.handleEvent(evt);\n });\n } catch {\n // Listener unavailable; silent (rare)\n }\n }\n\n private handleEvent(evt: MJEvent): void {\n this.Stats.captured++;\n this.rateBucket.push(Date.now());\n\n if (this.Paused) return;\n\n const type = String(evt.event ?? 'Unknown');\n if (!this.KnownTypes.includes(type)) {\n this.KnownTypes = [...this.KnownTypes, type].sort();\n }\n\n const componentName = (evt.component as { constructor?: { name?: string } } | null | undefined)?.constructor?.name ?? '(no component)';\n if (!this.KnownComponents.includes(componentName)) {\n this.KnownComponents = [...this.KnownComponents, componentName].sort();\n }\n const code = evt.eventCode;\n if (code && !this.KnownCodes.includes(code)) {\n this.KnownCodes = [...this.KnownCodes, code].sort();\n }\n\n const hasPayload = this.computeHasPayload(evt.args);\n\n const row: EventRow = {\n seq: ++this.seq,\n timestamp: new Date(),\n type,\n eventCode: code,\n componentName,\n summary: hasPayload ? this.summarizeArgs(evt.args) : '—',\n args: evt.args,\n expanded: false,\n hasPayload\n };\n\n this.Events = [row, ...this.Events];\n if (this.Events.length > this.MaxEvents) {\n this.Events = this.Events.slice(0, this.MaxEvents);\n }\n this.Stats.kept = this.Events.length;\n this.cdr.markForCheck();\n }\n\n private computeHasPayload(args: unknown): boolean {\n if (args === null || args === undefined) return false;\n if (typeof args === 'string') return args.length > 0;\n if (Array.isArray(args)) return args.length > 0;\n if (typeof args === 'object') return Object.keys(args as Record<string, unknown>).length > 0;\n return true; // numbers, booleans count as payload\n }\n\n private tickRate(): void {\n const cutoff = Date.now() - 1000;\n this.rateBucket = this.rateBucket.filter(t => t >= cutoff);\n this.Stats.perSecond = this.rateBucket.length;\n this.cdr.markForCheck();\n }\n\n private summarizeArgs(args: unknown): string {\n if (args === null || args === undefined) return '—';\n if (typeof args === 'string') return args.length > 80 ? args.slice(0, 77) + '…' : args;\n if (typeof args === 'number' || typeof args === 'boolean') return String(args);\n if (Array.isArray(args)) return `[ ${args.length} item${args.length === 1 ? '' : 's'} ]`;\n if (typeof args === 'object') {\n const keys = Object.keys(args as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(args);\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-bolt\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Event Monitor</h3>\n <div class=\"mj-inspector__header-sub\">Live tail of MJGlobal events with filter and pause</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\"\n [class.mj-inspector__btn--success]=\"!Paused\"\n [class.em-paused]=\"Paused\"\n type=\"button\" (click)=\"TogglePause()\"\n [title]=\"Paused ? 'Resume capture' : 'Pause capture'\">\n @if (Paused) {\n <i class=\"fa-solid fa-play\"></i> Resume\n } @else {\n <i class=\"fa-solid fa-pause\"></i> Pause\n }\n </button>\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"Clear()\" title=\"Clear all captured events\">\n <i class=\"fa-solid fa-broom\"></i> Clear\n </button>\n </div>\n </div>\n\n <div class=\"em-stats\">\n <div class=\"em-stat\">\n <i class=\"em-pulse\" [class.em-pulse--paused]=\"Paused\"></i>\n <div>\n <div class=\"em-stat-value\">{{ Paused ? 'PAUSED' : 'LIVE' }}</div>\n <div class=\"em-stat-label\">{{ Paused ? 'Capture suspended' : 'Capturing events' }}</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.captured }}</div>\n <div class=\"em-stat-label\">Total captured</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.kept }} / {{ MaxEvents }}</div>\n <div class=\"em-stat-label\">In buffer</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.perSecond }}/s</div>\n <div class=\"em-stat-label\">Last second</div>\n </div>\n </div>\n <div class=\"em-stat em-stat--right\">\n <div>\n <div class=\"em-stat-value em-stat-value--small\">{{ UptimeLabel }}</div>\n <div class=\"em-stat-label\">Watching for</div>\n </div>\n </div>\n </div>\n\n <div class=\"em-toolbar\">\n <div class=\"em-search-wrap\">\n <i class=\"fa-solid fa-search em-search-icon\"></i>\n <input type=\"search\"\n class=\"em-search\"\n placeholder=\"Filter by type, component, payload…\"\n [(ngModel)]=\"Filter\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (Filter) {\n <button class=\"em-search-clear\" (click)=\"Filter = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Type</label>\n <select class=\"em-select\" [(ngModel)]=\"TypeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All types ({{ KnownTypes.length }})</option>\n @for (t of KnownTypes; track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Component</label>\n <select class=\"em-select\" [(ngModel)]=\"ComponentFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All components ({{ KnownComponents.length }})</option>\n @for (c of KnownComponents; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n\n @if (KnownCodes.length > 0) {\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Code</label>\n <select class=\"em-select\" [(ngModel)]=\"CodeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All codes ({{ KnownCodes.length }})</option>\n @for (c of KnownCodes; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n }\n\n @if (HasActiveFilters) {\n <button class=\"em-clear-filters\" type=\"button\" (click)=\"ClearFilters()\" title=\"Clear all filters\">\n <i class=\"fa-solid fa-xmark\"></i> Clear filters\n </button>\n }\n </div>\n\n <div class=\"em-list\">\n <div class=\"em-table-head\">\n <button type=\"button\"\n class=\"em-th em-th--time\"\n [class.em-th--sorted]=\"SortField === 'time'\"\n (click)=\"OnSortClick('time')\">\n Time\n @if (SortField === 'time') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--type\"\n [class.em-th--sorted]=\"SortField === 'type'\"\n (click)=\"OnSortClick('type')\">\n Type\n @if (SortField === 'type') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--code\"\n [class.em-th--sorted]=\"SortField === 'eventCode'\"\n (click)=\"OnSortClick('eventCode')\">\n Code\n @if (SortField === 'eventCode') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--component\"\n [class.em-th--sorted]=\"SortField === 'component'\"\n (click)=\"OnSortClick('component')\">\n Component\n @if (SortField === 'component') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <span class=\"em-th em-th--summary\">Summary</span>\n <span class=\"em-th em-th--actions\"></span>\n </div>\n\n @if (FilteredEvents.length === 0) {\n <div class=\"em-empty\">\n @if (Stats.captured === 0) {\n <i class=\"fa-solid fa-radio em-empty-icon\"></i>\n <div class=\"em-empty-title\">Listening for events…</div>\n <div class=\"em-empty-sub\">Trigger an action — saves, navigation, AI events all show up here.</div>\n } @else if (Paused) {\n <i class=\"fa-solid fa-pause em-empty-icon\"></i>\n <div class=\"em-empty-title\">Capture is paused</div>\n <div class=\"em-empty-sub\">{{ Stats.captured }} events fired since you paused. Click Resume to start collecting again.</div>\n } @else {\n <i class=\"fa-solid fa-filter em-empty-icon\"></i>\n <div class=\"em-empty-title\">No events match your filter</div>\n <div class=\"em-empty-sub\">{{ Stats.kept }} events in buffer · clear filters to see them.</div>\n }\n </div>\n } @else {\n @for (evt of FilteredEvents; track TrackBySeq($index, evt)) {\n <div class=\"em-row\" [class.em-row--expanded]=\"evt.expanded\">\n <div class=\"em-row-head\" (click)=\"ToggleRow(evt)\">\n <i class=\"em-row-chev fa-solid fa-chevron-right\"\n [class.em-row-chev--down]=\"evt.expanded\"></i>\n <span class=\"em-row-time\">{{ evt.timestamp | date:'HH:mm:ss.SSS' }}</span>\n <span class=\"em-row-type\" [attr.data-type]=\"evt.type\">{{ evt.type }}</span>\n <span class=\"em-row-code\">{{ evt.eventCode || '—' }}</span>\n <span class=\"em-row-component\" [title]=\"evt.componentName\">{{ evt.componentName }}</span>\n <span class=\"em-row-summary\" [class.em-row-summary--empty]=\"!evt.hasPayload\">{{ evt.summary }}</span>\n <button class=\"em-row-copy\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); OnCopyRow(evt)\"\n title=\"Copy as JSON\">\n <i class=\"fa-solid fa-clipboard\"></i>\n </button>\n </div>\n @if (evt.expanded) {\n @if (evt.hasPayload) {\n <pre class=\"em-row-payload\"><code>{{ evt.args | json }}</code></pre>\n } @else {\n <div class=\"em-row-no-payload\">\n <i class=\"fa-regular fa-circle\"></i>\n <span>This event has no payload.</span>\n </div>\n }\n }\n </div>\n }\n }\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"event-monitor.component.js","sourceRoot":"","sources":["../../src/DevTools/event-monitor.component.ts","../../src/DevTools/event-monitor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass, MJGlobal, MJEvent } from '@memberjunction/global';\nimport { Subscription } from 'rxjs';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface EventMonitorPrefs {\n filter?: string;\n typeFilter?: string;\n componentFilter?: string;\n codeFilter?: string;\n sortField?: SortField;\n sortDir?: SortDir;\n}\n\ninterface EventRow {\n seq: number;\n timestamp: Date;\n type: string;\n eventCode?: string;\n componentName: string;\n summary: string;\n args: unknown;\n expanded: boolean;\n /** True when args is null/undefined/empty — used to render a clean empty-state on expand. */\n hasPayload: boolean;\n}\n\ntype SortField = 'time' | 'type' | 'eventCode' | 'component';\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Event Monitor — live tail of `MJGlobal.Instance.GetEventListener()`.\n * Captures events into a ring buffer (configurable cap) with filtering,\n * pause/resume, click-to-expand-payload, copy.\n */\n@RegisterClass(BaseResourceComponent, 'EventMonitorInspector')\n@Component({\n standalone: false,\n selector: 'mj-event-monitor',\n templateUrl: './event-monitor.component.html',\n styleUrls: ['./inspector-shared.css', './event-monitor.component.css']\n})\nexport class EventMonitorComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public readonly MaxEvents = 500;\n public Events: EventRow[] = [];\n public Paused = false;\n public AutoScroll = true;\n public Filter = '';\n public TypeFilter = ''; // '' = all\n public ComponentFilter = ''; // '' = all\n public CodeFilter = ''; // '' = all\n public KnownTypes: string[] = [];\n public KnownComponents: string[] = [];\n public KnownCodes: string[] = [];\n public Stats = { captured: 0, perSecond: 0, kept: 0 };\n public StartedAt = new Date();\n public SortField: SortField = 'time';\n public SortDir: SortDir = 'desc';\n\n private sub?: Subscription;\n private seq = 0;\n private rateBucket: number[] = []; // event timestamps within last 1s\n private rateTimer?: ReturnType<typeof setInterval>;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadPrefs();\n this.subscribe();\n this.rateTimer = setInterval(() => this.tickRate(), 500);\n this.NotifyLoadComplete();\n }\n\n public ngOnDestroy(): void {\n this.savePrefs();\n this.sub?.unsubscribe();\n if (this.rateTimer) clearInterval(this.rateTimer);\n }\n\n private loadPrefs(): void {\n const p = DevToolsPrefs.Get<EventMonitorPrefs>('eventMonitor');\n if (!p) return;\n this.Filter = p.filter ?? '';\n this.TypeFilter = p.typeFilter ?? '';\n this.ComponentFilter = p.componentFilter ?? '';\n this.CodeFilter = p.codeFilter ?? '';\n this.SortField = p.sortField ?? 'time';\n this.SortDir = p.sortDir ?? 'desc';\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save<EventMonitorPrefs>('eventMonitor', {\n filter: this.Filter,\n typeFilter: this.TypeFilter,\n componentFilter: this.ComponentFilter,\n codeFilter: this.CodeFilter,\n sortField: this.SortField,\n sortDir: this.SortDir\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Event Monitor'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-bolt'; }\n\n public TogglePause(): void {\n this.Paused = !this.Paused;\n this.cdr.markForCheck();\n }\n\n public ToggleAutoScroll(): void {\n this.AutoScroll = !this.AutoScroll;\n }\n\n public Clear(): void {\n this.Events = [];\n this.seq = 0;\n this.Stats.kept = 0;\n this.cdr.markForCheck();\n }\n\n public ToggleRow(row: EventRow): void {\n row.expanded = !row.expanded;\n }\n\n public OnTypeFilterClick(type: string): void {\n this.TypeFilter = this.TypeFilter === type ? '' : type;\n }\n\n public OnSortClick(field: SortField): void {\n if (this.SortField === field) {\n this.SortDir = this.SortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDir = field === 'time' ? 'desc' : 'asc';\n }\n this.savePrefs();\n }\n\n /** Public so the template can call on every ngModelChange (filters, selects). */\n public PersistPrefs(): void {\n this.savePrefs();\n }\n\n public async OnCopyRow(row: EventRow): Promise<void> {\n const payload = {\n timestamp: row.timestamp.toISOString(),\n type: row.type,\n eventCode: row.eventCode,\n component: row.componentName,\n args: row.args\n };\n try {\n await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));\n } catch { /* clipboard unavailable */ }\n }\n\n public get FilteredEvents(): EventRow[] {\n let list = this.Events;\n if (this.TypeFilter) list = list.filter(e => e.type === this.TypeFilter);\n if (this.ComponentFilter) list = list.filter(e => e.componentName === this.ComponentFilter);\n if (this.CodeFilter) list = list.filter(e => (e.eventCode ?? '') === this.CodeFilter);\n\n const q = this.Filter.trim().toLowerCase();\n if (q) {\n list = list.filter(e =>\n e.type.toLowerCase().includes(q) ||\n e.componentName.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n (e.eventCode && e.eventCode.toLowerCase().includes(q))\n );\n }\n\n // Sort (always returns a new array — preserves the natural seq order otherwise)\n const dir = this.SortDir === 'asc' ? 1 : -1;\n const sorted = [...list].sort((a, b) => {\n switch (this.SortField) {\n case 'time': return (a.seq - b.seq) * dir;\n case 'type': return a.type.localeCompare(b.type) * dir;\n case 'eventCode': return (a.eventCode ?? '').localeCompare(b.eventCode ?? '') * dir;\n case 'component': return a.componentName.localeCompare(b.componentName) * dir;\n default: return 0;\n }\n });\n return sorted;\n }\n\n public ClearFilters(): void {\n this.Filter = '';\n this.TypeFilter = '';\n this.ComponentFilter = '';\n this.CodeFilter = '';\n this.savePrefs();\n }\n\n public get HasActiveFilters(): boolean {\n return !!(this.Filter || this.TypeFilter || this.ComponentFilter || this.CodeFilter);\n }\n\n public get UptimeLabel(): string {\n const ms = Date.now() - this.StartedAt.getTime();\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const remainder = s % 60;\n return m > 0 ? `${m}m ${remainder}s` : `${s}s`;\n }\n\n public TrackBySeq = (_i: number, e: EventRow) => e.seq;\n\n // ---------- private ----------\n\n private subscribe(): void {\n try {\n // withReplay = true so we get historical events that were emitted\n // before this component mounted (within MJGlobal's replay buffer).\n this.sub = MJGlobal.Instance.GetEventListener(true).subscribe((evt: MJEvent) => {\n this.handleEvent(evt);\n });\n } catch {\n // Listener unavailable; silent (rare)\n }\n }\n\n private handleEvent(evt: MJEvent): void {\n this.Stats.captured++;\n this.rateBucket.push(Date.now());\n\n if (this.Paused) return;\n\n const type = String(evt.event ?? 'Unknown');\n if (!this.KnownTypes.includes(type)) {\n this.KnownTypes = [...this.KnownTypes, type].sort();\n }\n\n const componentName = (evt.component as { constructor?: { name?: string } } | null | undefined)?.constructor?.name ?? '(no component)';\n if (!this.KnownComponents.includes(componentName)) {\n this.KnownComponents = [...this.KnownComponents, componentName].sort();\n }\n const code = evt.eventCode;\n if (code && !this.KnownCodes.includes(code)) {\n this.KnownCodes = [...this.KnownCodes, code].sort();\n }\n\n const hasPayload = this.computeHasPayload(evt.args);\n\n const row: EventRow = {\n seq: ++this.seq,\n timestamp: new Date(),\n type,\n eventCode: code,\n componentName,\n summary: hasPayload ? this.summarizeArgs(evt.args) : '—',\n args: evt.args,\n expanded: false,\n hasPayload\n };\n\n this.Events = [row, ...this.Events];\n if (this.Events.length > this.MaxEvents) {\n this.Events = this.Events.slice(0, this.MaxEvents);\n }\n this.Stats.kept = this.Events.length;\n this.cdr.markForCheck();\n }\n\n private computeHasPayload(args: unknown): boolean {\n if (args === null || args === undefined) return false;\n if (typeof args === 'string') return args.length > 0;\n if (Array.isArray(args)) return args.length > 0;\n if (typeof args === 'object') return Object.keys(args as Record<string, unknown>).length > 0;\n return true; // numbers, booleans count as payload\n }\n\n private tickRate(): void {\n const cutoff = Date.now() - 1000;\n this.rateBucket = this.rateBucket.filter(t => t >= cutoff);\n this.Stats.perSecond = this.rateBucket.length;\n this.cdr.markForCheck();\n }\n\n private summarizeArgs(args: unknown): string {\n if (args === null || args === undefined) return '—';\n if (typeof args === 'string') return args.length > 80 ? args.slice(0, 77) + '…' : args;\n if (typeof args === 'number' || typeof args === 'boolean') return String(args);\n if (Array.isArray(args)) return `[ ${args.length} item${args.length === 1 ? '' : 's'} ]`;\n if (typeof args === 'object') {\n const keys = Object.keys(args as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(args);\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Event monitor\"\n Title=\"Event Monitor\"\n Subtitle=\"Live tail of MJGlobal events with filter and pause\">\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"TogglePause()\"\n [title]=\"Paused ? 'Resume capture' : 'Pause capture'\">\n @if (Paused) {\n <i class=\"fa-solid fa-play\" aria-hidden=\"true\"></i> Resume\n } @else {\n <i class=\"fa-solid fa-pause\" aria-hidden=\"true\"></i> Pause\n }\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"Clear()\" title=\"Clear all captured events\">\n <i class=\"fa-solid fa-broom\" aria-hidden=\"true\"></i> Clear\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"em-stats\">\n <div class=\"em-stat\">\n <i class=\"em-pulse\" [class.em-pulse--paused]=\"Paused\"></i>\n <div>\n <div class=\"em-stat-value\">{{ Paused ? 'PAUSED' : 'LIVE' }}</div>\n <div class=\"em-stat-label\">{{ Paused ? 'Capture suspended' : 'Capturing events' }}</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.captured }}</div>\n <div class=\"em-stat-label\">Total captured</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.kept }} / {{ MaxEvents }}</div>\n <div class=\"em-stat-label\">In buffer</div>\n </div>\n </div>\n <div class=\"em-stat\">\n <div>\n <div class=\"em-stat-value\">{{ Stats.perSecond }}/s</div>\n <div class=\"em-stat-label\">Last second</div>\n </div>\n </div>\n <div class=\"em-stat em-stat--right\">\n <div>\n <div class=\"em-stat-value em-stat-value--small\">{{ UptimeLabel }}</div>\n <div class=\"em-stat-label\">Watching for</div>\n </div>\n </div>\n </div>\n\n <div class=\"em-toolbar\">\n <div class=\"em-search-wrap\">\n <i class=\"fa-solid fa-search em-search-icon\"></i>\n <input type=\"search\"\n class=\"em-search\"\n placeholder=\"Filter by type, component, payload…\"\n [(ngModel)]=\"Filter\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (Filter) {\n <button class=\"em-search-clear\" (click)=\"Filter = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Type</label>\n <select class=\"em-select\" [(ngModel)]=\"TypeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All types ({{ KnownTypes.length }})</option>\n @for (t of KnownTypes; track t) {\n <option [value]=\"t\">{{ t }}</option>\n }\n </select>\n </div>\n\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Component</label>\n <select class=\"em-select\" [(ngModel)]=\"ComponentFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All components ({{ KnownComponents.length }})</option>\n @for (c of KnownComponents; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n\n @if (KnownCodes.length > 0) {\n <div class=\"em-select-wrap\">\n <label class=\"em-select-label\">Code</label>\n <select class=\"em-select\" [(ngModel)]=\"CodeFilter\" (ngModelChange)=\"PersistPrefs()\">\n <option value=\"\">All codes ({{ KnownCodes.length }})</option>\n @for (c of KnownCodes; track c) {\n <option [value]=\"c\">{{ c }}</option>\n }\n </select>\n </div>\n }\n\n @if (HasActiveFilters) {\n <button class=\"em-clear-filters\" type=\"button\" (click)=\"ClearFilters()\" title=\"Clear all filters\">\n <i class=\"fa-solid fa-xmark\"></i> Clear filters\n </button>\n }\n </div>\n\n <div class=\"em-list\">\n <div class=\"em-table-head\">\n <button type=\"button\"\n class=\"em-th em-th--time\"\n [class.em-th--sorted]=\"SortField === 'time'\"\n (click)=\"OnSortClick('time')\">\n Time\n @if (SortField === 'time') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--type\"\n [class.em-th--sorted]=\"SortField === 'type'\"\n (click)=\"OnSortClick('type')\">\n Type\n @if (SortField === 'type') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--code\"\n [class.em-th--sorted]=\"SortField === 'eventCode'\"\n (click)=\"OnSortClick('eventCode')\">\n Code\n @if (SortField === 'eventCode') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <button type=\"button\"\n class=\"em-th em-th--component\"\n [class.em-th--sorted]=\"SortField === 'component'\"\n (click)=\"OnSortClick('component')\">\n Component\n @if (SortField === 'component') {\n <i class=\"fa-solid\" [class.fa-arrow-down]=\"SortDir === 'desc'\" [class.fa-arrow-up]=\"SortDir === 'asc'\"></i>\n }\n </button>\n <span class=\"em-th em-th--summary\">Summary</span>\n <span class=\"em-th em-th--actions\"></span>\n </div>\n\n @if (FilteredEvents.length === 0) {\n <div class=\"em-empty\">\n @if (Stats.captured === 0) {\n <i class=\"fa-solid fa-radio em-empty-icon\"></i>\n <div class=\"em-empty-title\">Listening for events…</div>\n <div class=\"em-empty-sub\">Trigger an action — saves, navigation, AI events all show up here.</div>\n } @else if (Paused) {\n <i class=\"fa-solid fa-pause em-empty-icon\"></i>\n <div class=\"em-empty-title\">Capture is paused</div>\n <div class=\"em-empty-sub\">{{ Stats.captured }} events fired since you paused. Click Resume to start collecting again.</div>\n } @else {\n <i class=\"fa-solid fa-filter em-empty-icon\"></i>\n <div class=\"em-empty-title\">No events match your filter</div>\n <div class=\"em-empty-sub\">{{ Stats.kept }} events in buffer · clear filters to see them.</div>\n }\n </div>\n } @else {\n @for (evt of FilteredEvents; track TrackBySeq($index, evt)) {\n <div class=\"em-row\" [class.em-row--expanded]=\"evt.expanded\">\n <div class=\"em-row-head\" (click)=\"ToggleRow(evt)\">\n <i class=\"em-row-chev fa-solid fa-chevron-right\"\n [class.em-row-chev--down]=\"evt.expanded\"></i>\n <span class=\"em-row-time\">{{ evt.timestamp | date:'HH:mm:ss.SSS' }}</span>\n <span class=\"em-row-type\" [attr.data-type]=\"evt.type\">{{ evt.type }}</span>\n <span class=\"em-row-code\">{{ evt.eventCode || '—' }}</span>\n <span class=\"em-row-component\" [title]=\"evt.componentName\">{{ evt.componentName }}</span>\n <span class=\"em-row-summary\" [class.em-row-summary--empty]=\"!evt.hasPayload\">{{ evt.summary }}</span>\n <button class=\"em-row-copy\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); OnCopyRow(evt)\"\n title=\"Copy as JSON\">\n <i class=\"fa-solid fa-clipboard\"></i>\n </button>\n </div>\n @if (evt.expanded) {\n @if (evt.hasPayload) {\n <pre class=\"em-row-payload\"><code>{{ evt.args | json }}</code></pre>\n } @else {\n <div class=\"em-row-no-payload\">\n <i class=\"fa-regular fa-circle\"></i>\n <span>This event has no payload.</span>\n </div>\n }\n }\n </div>\n }\n }\n </div>\n</div>\n"]}