@memberjunction/ng-dashboards 6.2.0-edge.1 → 6.2.0-edge.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  2. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +3 -1
  3. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  4. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  5. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -2
  6. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  7. package/dist/AI/components/rubric-drift-series.d.ts +32 -0
  8. package/dist/AI/components/rubric-drift-series.d.ts.map +1 -0
  9. package/dist/AI/components/rubric-drift-series.js +49 -0
  10. package/dist/AI/components/rubric-drift-series.js.map +1 -0
  11. package/dist/AI/components/rubric-drift.component.d.ts +42 -0
  12. package/dist/AI/components/rubric-drift.component.d.ts.map +1 -0
  13. package/dist/AI/components/rubric-drift.component.js +197 -0
  14. package/dist/AI/components/rubric-drift.component.js.map +1 -0
  15. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  16. package/dist/AI/components/tags/tags-resource.component.js +4 -3
  17. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  18. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  19. package/dist/AI/components/vectors/vector-management-resource.component.js +5 -2
  20. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  21. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
  22. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
  23. package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
  24. package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
  25. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
  26. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  27. package/dist/DataExplorer/data-explorer-dashboard.component.js +47 -13
  28. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  29. package/dist/Integration/components/connections/connections.component.d.ts +5 -0
  30. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  31. package/dist/Integration/components/connections/connections.component.js +151 -136
  32. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  33. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  34. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +3 -2
  35. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  36. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -0
  37. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  38. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +17 -1
  39. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  40. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +52 -45
  41. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  42. package/dist/QueryBrowser/query-browser-resource.component.d.ts +11 -0
  43. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  44. package/dist/QueryBrowser/query-browser-resource.component.js +47 -10
  45. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  46. package/dist/Rubrics/catalog-grid.d.ts +4 -0
  47. package/dist/Rubrics/catalog-grid.d.ts.map +1 -0
  48. package/dist/Rubrics/catalog-grid.js +22 -0
  49. package/dist/Rubrics/catalog-grid.js.map +1 -0
  50. package/dist/Rubrics/rubrics-dashboard.component.d.ts +31 -0
  51. package/dist/Rubrics/rubrics-dashboard.component.d.ts.map +1 -0
  52. package/dist/Rubrics/rubrics-dashboard.component.js +285 -0
  53. package/dist/Rubrics/rubrics-dashboard.component.js.map +1 -0
  54. package/dist/Rubrics/rubrics-resource.component.d.ts +13 -0
  55. package/dist/Rubrics/rubrics-resource.component.d.ts.map +1 -0
  56. package/dist/Rubrics/rubrics-resource.component.js +42 -0
  57. package/dist/Rubrics/rubrics-resource.component.js.map +1 -0
  58. package/dist/Rubrics/scales-dashboard.component.d.ts +34 -0
  59. package/dist/Rubrics/scales-dashboard.component.d.ts.map +1 -0
  60. package/dist/Rubrics/scales-dashboard.component.js +204 -0
  61. package/dist/Rubrics/scales-dashboard.component.js.map +1 -0
  62. package/dist/Rubrics/scales-resource.component.d.ts +13 -0
  63. package/dist/Rubrics/scales-resource.component.d.ts.map +1 -0
  64. package/dist/Rubrics/scales-resource.component.js +42 -0
  65. package/dist/Rubrics/scales-resource.component.js.map +1 -0
  66. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
  67. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
  68. package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
  69. package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
  70. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +57 -0
  71. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
  72. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +805 -0
  73. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
  74. package/dist/Testing/components/testing-analytics.component.d.ts +15 -0
  75. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  76. package/dist/Testing/components/testing-analytics.component.js +465 -296
  77. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  78. package/dist/Testing/components/testing-review.component.d.ts +6 -0
  79. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  80. package/dist/Testing/components/testing-review.component.js +289 -173
  81. package/dist/Testing/components/testing-review.component.js.map +1 -1
  82. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +8 -1
  83. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  84. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +68 -43
  85. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  86. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
  87. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
  88. package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
  89. package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
  90. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
  91. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
  92. package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
  93. package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
  94. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
  95. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
  96. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
  97. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
  98. package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
  99. package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
  100. package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
  101. package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
  102. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
  103. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
  104. package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
  105. package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
  106. package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
  107. package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
  108. package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
  109. package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
  110. package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
  111. package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
  112. package/dist/WorkQueue/work-queue-agent-context.js +119 -0
  113. package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
  114. package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
  115. package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
  116. package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
  117. package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
  118. package/dist/WorkQueue/work-queue-types.d.ts +40 -0
  119. package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
  120. package/dist/WorkQueue/work-queue-types.js +2 -0
  121. package/dist/WorkQueue/work-queue-types.js.map +1 -0
  122. package/dist/core-dashboards.module.d.ts +29 -28
  123. package/dist/core-dashboards.module.d.ts.map +1 -1
  124. package/dist/core-dashboards.module.js +7 -0
  125. package/dist/core-dashboards.module.js.map +1 -1
  126. package/dist/module.d.ts +24 -22
  127. package/dist/module.d.ts.map +1 -1
  128. package/dist/module.js +14 -0
  129. package/dist/module.js.map +1 -1
  130. package/dist/public-api.d.ts +5 -0
  131. package/dist/public-api.d.ts.map +1 -1
  132. package/dist/public-api.js +7 -0
  133. package/dist/public-api.js.map +1 -1
  134. package/dist/rubrics-dashboards.module.d.ts +17 -0
  135. package/dist/rubrics-dashboards.module.d.ts.map +1 -0
  136. package/dist/rubrics-dashboards.module.js +76 -0
  137. package/dist/rubrics-dashboards.module.js.map +1 -0
  138. package/dist/work-queue-dashboards.module.d.ts +23 -0
  139. package/dist/work-queue-dashboards.module.d.ts.map +1 -0
  140. package/dist/work-queue-dashboards.module.js +92 -0
  141. package/dist/work-queue-dashboards.module.js.map +1 -0
  142. package/package.json +76 -64
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telephony-operations-dashboard.component.js","sourceRoot":"","sources":["../../src/TelephonyOperations/telephony-operations-dashboard.component.ts","../../src/TelephonyOperations/telephony-operations-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport {\n BuildTelephonyOperationsAgentContext,\n CalculateOperationsMetrics,\n FormatCurrency,\n FormatDuration,\n ValidateChannelParam,\n ValidateTimeRangeParam,\n type ChannelFilter,\n type InteractionEventRecordLike,\n type InteractionRecordLike,\n type OperationsMetrics,\n type PhoneNumberRecordLike,\n type TimeRangeFilter,\n} from './telephony-operations-agent-context';\n\n/**\n * TELEPHONY & INTERACTION OPERATIONS DASHBOARD\n *\n * An Explorer L3 dashboard providing operational analytics across phone calls, web realtime\n * sessions, and multi-party meetings.\n *\n * Metrics computed from `MJ: Interactions`, `MJ: Interaction Events`, and `MJ: Phone Numbers`:\n * - Volume by channel (Phone, Web, Meeting) and direction (Inbound, Outbound, Internal)\n * - Answer rate and abandonment rate\n * - Average handle time (AHT) and speed to answer (ASA)\n * - Transfer and escalation volumes\n * - Cost estimates by day and by phone number\n * - Active live calls / sessions in real time\n *\n * Data is loaded in a single batched `RunViews` call and aggregated in memory.\n */\n@RegisterClass(BaseResourceComponent, 'TelephonyOperationsDashboard')\n@RegisterClass(BaseResourceComponent, 'InteractionOperationsDashboard')\n@Component({\n standalone: false,\n selector: 'mj-telephony-operations-dashboard',\n templateUrl: './telephony-operations-dashboard.component.html',\n styleUrls: ['./telephony-operations-dashboard.component.css'],\n})\nexport class TelephonyOperationsDashboardComponent\n extends BaseResourceComponent\n implements OnInit, OnDestroy, AfterViewInit\n{\n public IsLoading = true;\n public ErrorMessage: string | null = null;\n\n public SelectedTimeRange: TimeRangeFilter = '7d';\n public SelectedChannelFilter: ChannelFilter = 'all';\n public SearchQuery = '';\n\n public RawInteractions: InteractionRecordLike[] = [];\n public RawEvents: InteractionEventRecordLike[] = [];\n public RawPhoneNumbers: PhoneNumberRecordLike[] = [];\n\n public Metrics: OperationsMetrics = CalculateOperationsMetrics([], [], []);\n\n private refreshTimer: ReturnType<typeof setInterval> | null = null;\n private readonly cdr = inject(ChangeDetectorRef);\n\n override async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Telephony & Interaction Operations';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.LoadData();\n this.NotifyLoadComplete();\n\n // Auto-refresh live status every 15 seconds\n this.refreshTimer = setInterval(() => {\n this.recalculateMetrics();\n this.cdr.markForCheck();\n }, 15000);\n }\n\n ngAfterViewInit(): void {\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n public async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n const dateFilterInteractions = this.getDateFilter('StartedAt');\n const dateFilterEvents = this.getDateFilter('OccurredAt');\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [interactionsResult, eventsResult, phoneNumbersResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Interactions',\n ResultType: 'simple',\n ExtraFilter: dateFilterInteractions,\n OrderBy: 'StartedAt DESC',\n MaxRows: 1000,\n },\n {\n EntityName: 'MJ: Interaction Events',\n ResultType: 'simple',\n ExtraFilter: dateFilterEvents,\n OrderBy: 'OccurredAt DESC',\n MaxRows: 2500,\n },\n {\n EntityName: 'MJ: Phone Numbers',\n ResultType: 'simple',\n ExtraFilter: \"Status = 'Active'\",\n MaxRows: 200,\n },\n ]);\n\n if (interactionsResult.Success && Array.isArray(interactionsResult.Results)) {\n this.RawInteractions = interactionsResult.Results as unknown as InteractionRecordLike[];\n } else {\n this.RawInteractions = [];\n }\n\n if (eventsResult.Success && Array.isArray(eventsResult.Results)) {\n this.RawEvents = eventsResult.Results as unknown as InteractionEventRecordLike[];\n } else {\n this.RawEvents = [];\n }\n\n if (phoneNumbersResult.Success && Array.isArray(phoneNumbersResult.Results)) {\n this.RawPhoneNumbers = phoneNumbersResult.Results as unknown as PhoneNumberRecordLike[];\n } else {\n this.RawPhoneNumbers = [];\n }\n\n this.recalculateMetrics();\n } catch (err) {\n this.ErrorMessage = err instanceof Error ? err.message : String(err);\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n }\n\n public SetTimeRange(range: TimeRangeFilter): void {\n if (this.SelectedTimeRange !== range) {\n this.SelectedTimeRange = range;\n void this.LoadData();\n }\n }\n\n public SetChannelFilter(channel: ChannelFilter): void {\n if (this.SelectedChannelFilter !== channel) {\n this.SelectedChannelFilter = channel;\n this.recalculateMetrics();\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n }\n\n public OnSearchQueryChange(query: string): void {\n this.SearchQuery = query;\n this.cdr.markForCheck();\n }\n\n public get FilteredLiveInteractions(): OperationsMetrics['LiveInteractions'] {\n if (!this.SearchQuery.trim()) {\n return this.Metrics.LiveInteractions;\n }\n const q = this.SearchQuery.toLowerCase();\n return this.Metrics.LiveInteractions.filter(\n (i) =>\n (i.RemoteAddress && i.RemoteAddress.toLowerCase().includes(q)) ||\n i.Channel.toLowerCase().includes(q) ||\n i.Direction.toLowerCase().includes(q) ||\n i.ID.toLowerCase().includes(q),\n );\n }\n\n public get FilteredRecentInteractions(): InteractionRecordLike[] {\n let rows = this.filteredRawInteractions;\n if (this.SearchQuery.trim()) {\n const q = this.SearchQuery.toLowerCase();\n rows = rows.filter(\n (r) =>\n (r.RemoteAddress && r.RemoteAddress.toLowerCase().includes(q)) ||\n (r.EndReason && r.EndReason.toLowerCase().includes(q)) ||\n r.Channel.toLowerCase().includes(q) ||\n r.Direction.toLowerCase().includes(q) ||\n r.ID.toLowerCase().includes(q),\n );\n }\n return rows.slice(0, 15);\n }\n\n public FormatCost(amount: number | null): string {\n return FormatCurrency(amount ?? 0);\n }\n\n public FormatTime(date: Date | string | null): string {\n if (!date) return '-';\n const d = date instanceof Date ? date : new Date(date);\n return isNaN(d.getTime()) ? '-' : d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n }\n\n public FormatDate(date: Date | string | null): string {\n if (!date) return '-';\n const d = date instanceof Date ? date : new Date(date);\n return isNaN(d.getTime()) ? '-' : d.toLocaleDateString([], { month: 'short', day: 'numeric' });\n }\n\n public ComputeDuration(started: Date | string, ended: Date | string | null): string {\n const s = started instanceof Date ? started : new Date(started);\n if (isNaN(s.getTime())) return '-';\n const e = ended ? (ended instanceof Date ? ended : new Date(ended)) : new Date();\n if (isNaN(e.getTime())) return '-';\n const sec = Math.max(0, Math.floor((e.getTime() - s.getTime()) / 1000));\n return FormatDuration(sec);\n }\n\n private get filteredRawInteractions(): InteractionRecordLike[] {\n if (this.SelectedChannelFilter === 'all') {\n return this.RawInteractions;\n }\n return this.RawInteractions.filter((i) => i.Channel === this.SelectedChannelFilter);\n }\n\n private recalculateMetrics(): void {\n const filtered = this.filteredRawInteractions;\n const activeIds = new Set(filtered.map((i) => i.ID.toLowerCase()));\n const relevantEvents = this.RawEvents.filter((e) => activeIds.has(e.InteractionID.toLowerCase()));\n\n this.Metrics = CalculateOperationsMetrics(filtered, relevantEvents, this.RawPhoneNumbers);\n }\n\n private getDateFilter(field: string): string {\n switch (this.SelectedTimeRange) {\n case '24h':\n return `${field} >= DATEADD(hour, -24, GETUTCDATE())`;\n case '7d':\n return `${field} >= DATEADD(day, -7, GETUTCDATE())`;\n case '30d':\n return `${field} >= DATEADD(day, -30, GETUTCDATE())`;\n case 'all':\n default:\n return '1=1';\n }\n }\n\n private publishAgentContext(): void {\n if (!this.navigationService) return;\n const snapshot = BuildTelephonyOperationsAgentContext(\n this.Metrics,\n this.SelectedTimeRange,\n this.SelectedChannelFilter,\n );\n this.navigationService.SetAgentContext(this, snapshot);\n }\n\n private registerAgentClientTools(): void {\n if (!this.navigationService) return;\n\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'RefreshOperationsData',\n Description: 'Refresh telephony and interaction operations data from the database.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.LoadData();\n return { Success: true };\n },\n },\n {\n Name: 'SetTimeRange',\n Description: 'Set the active time range window (24h, 7d, 30d, all).',\n ParameterSchema: {\n type: 'object',\n properties: {\n timeRange: {\n type: 'string',\n description: 'Time range to display: 24h, 7d, 30d, or all',\n enum: ['24h', '7d', '30d', 'all'],\n },\n },\n required: ['timeRange'],\n },\n Handler: async (params: Record<string, unknown>) => {\n const validated = ValidateTimeRangeParam(params['timeRange']);\n if (!validated.ok) {\n return validated.result;\n }\n this.SetTimeRange(validated.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterByChannel',\n Description: 'Filter operations metrics by interaction channel (all, Phone, Web, Meeting).',\n ParameterSchema: {\n type: 'object',\n properties: {\n channel: {\n type: 'string',\n description: 'Channel to filter: all, Phone, Web, or Meeting',\n enum: ['all', 'Phone', 'Web', 'Meeting'],\n },\n },\n required: ['channel'],\n },\n Handler: async (params: Record<string, unknown>) => {\n const validated = ValidateChannelParam(params['channel']);\n if (!validated.ok) {\n return validated.result;\n }\n this.SetChannelFilter(validated.value);\n return { Success: true };\n },\n },\n ]);\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Telephony & Interaction Operations\"\n Subtitle=\"Real-time metrics, volume breakdown, answer rates, and cost analysis across channels\"\n Icon=\"fa-solid fa-chart-line\"\n >\n <div meta>\n <mj-stat-badge\n [Count]=\"Metrics.LiveCallsCount\"\n [Total]=\"Metrics.TotalVolume\"\n Label=\"live now\"\n [Variant]=\"Metrics.LiveCallsCount > 0 ? 'success' : 'default'\"\n />\n </div>\n\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\" />\n </div>\n\n <div toolbar>\n <div class=\"toolbar-controls\">\n <mj-page-search [Value]=\"SearchQuery\" (ValueChange)=\"OnSearchQueryChange($event)\" />\n\n <div class=\"time-range-pills\" role=\"radiogroup\" aria-label=\"Time Range\">\n <button\n type=\"button\"\n class=\"range-pill\"\n [class.active]=\"SelectedTimeRange === '24h'\"\n (click)=\"SetTimeRange('24h')\"\n >\n 24h\n </button>\n <button\n type=\"button\"\n class=\"range-pill\"\n [class.active]=\"SelectedTimeRange === '7d'\"\n (click)=\"SetTimeRange('7d')\"\n >\n 7d\n </button>\n <button\n type=\"button\"\n class=\"range-pill\"\n [class.active]=\"SelectedTimeRange === '30d'\"\n (click)=\"SetTimeRange('30d')\"\n >\n 30d\n </button>\n <button\n type=\"button\"\n class=\"range-pill\"\n [class.active]=\"SelectedTimeRange === 'all'\"\n (click)=\"SetTimeRange('all')\"\n >\n All Time\n </button>\n </div>\n\n <div class=\"channel-filter-pills\" role=\"radiogroup\" aria-label=\"Channel Filter\">\n <button\n type=\"button\"\n class=\"channel-pill\"\n [class.active]=\"SelectedChannelFilter === 'all'\"\n (click)=\"SetChannelFilter('all')\"\n >\n All Channels\n </button>\n <button\n type=\"button\"\n class=\"channel-pill\"\n [class.active]=\"SelectedChannelFilter === 'Phone'\"\n (click)=\"SetChannelFilter('Phone')\"\n >\n <i class=\"fa-solid fa-phone\"></i> Phone\n </button>\n <button\n type=\"button\"\n class=\"channel-pill\"\n [class.active]=\"SelectedChannelFilter === 'Web'\"\n (click)=\"SetChannelFilter('Web')\"\n >\n <i class=\"fa-solid fa-globe\"></i> Web\n </button>\n <button\n type=\"button\"\n class=\"channel-pill\"\n [class.active]=\"SelectedChannelFilter === 'Meeting'\"\n (click)=\"SetChannelFilter('Meeting')\"\n >\n <i class=\"fa-solid fa-users\"></i> Meeting\n </button>\n </div>\n </div>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (ErrorMessage) {\n <div class=\"error-banner\" role=\"alert\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n <!-- KPI Metric Cards Grid -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap primary\">\n <i class=\"fa-solid fa-headset\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Total Volume</span>\n <span class=\"kpi-value\">{{ Metrics.TotalVolume }}</span>\n <span class=\"kpi-subtext\">in selected window</span>\n </div>\n </div>\n\n <div class=\"kpi-card\" [class.live-active]=\"Metrics.LiveCallsCount > 0\">\n <div class=\"kpi-icon-wrap success\">\n <span class=\"live-dot-ping\"></span>\n <i class=\"fa-solid fa-phone-volume\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Live Now</span>\n <span class=\"kpi-value\">{{ Metrics.LiveCallsCount }}</span>\n <span class=\"kpi-subtext\">active sessions</span>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap success\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Answer Rate</span>\n <span class=\"kpi-value\">{{ Metrics.AnswerRate | number:'1.0-1' }}%</span>\n <span class=\"kpi-subtext\">{{ Metrics.AnsweredCount }} answered</span>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap warning\">\n <i class=\"fa-solid fa-phone-slash\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Abandonment Rate</span>\n <span class=\"kpi-value\">{{ Metrics.AbandonmentRate | number:'1.0-1' }}%</span>\n <span class=\"kpi-subtext\">{{ Metrics.AbandonedCount }} caller abandons</span>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap info\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Avg Handle Time</span>\n <span class=\"kpi-value\">{{ Metrics.AverageHandleTimeFormatted }}</span>\n <span class=\"kpi-subtext\">ASA: {{ Metrics.AverageSpeedToAnswerFormatted }}</span>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap accent\">\n <i class=\"fa-solid fa-arrows-split-up-and-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Transfers & Esc.</span>\n <span class=\"kpi-value\">{{ Metrics.TransferCount }} / {{ Metrics.EscalationCount }}</span>\n <span class=\"kpi-subtext\">transfers / escalations</span>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon-wrap cost\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n </div>\n <div class=\"kpi-content\">\n <span class=\"kpi-label\">Total Cost Est.</span>\n <span class=\"kpi-value\">{{ Metrics.TotalCostFormatted }}</span>\n <span class=\"kpi-subtext\">usage & carrier minutes</span>\n </div>\n </div>\n </div>\n\n <!-- Active Live Calls Section -->\n <div class=\"dashboard-section live-section\">\n <div class=\"section-header\">\n <div class=\"section-title\">\n <span class=\"live-pulse-badge\"></span>\n <h2>Active Live Sessions</h2>\n <span class=\"count-pill\">{{ FilteredLiveInteractions.length }}</span>\n </div>\n </div>\n\n @if (FilteredLiveInteractions.length === 0) {\n <div class=\"empty-feed\">\n <i class=\"fa-solid fa-phone-slash empty-icon\"></i>\n <p>No active live interactions at this moment.</p>\n </div>\n } @else {\n <div class=\"live-table-container\">\n <table class=\"ops-table\">\n <thead>\n <tr>\n <th>Remote Address</th>\n <th>Channel</th>\n <th>Direction</th>\n <th>Status</th>\n <th>Started</th>\n <th>Elapsed</th>\n </tr>\n </thead>\n <tbody>\n @for (live of FilteredLiveInteractions; track live.ID) {\n <tr class=\"live-row\">\n <td class=\"address-col\">\n <i class=\"fa-solid fa-user-circle address-icon\"></i>\n <span class=\"address-text\">{{ live.RemoteAddress || 'Unknown' }}</span>\n </td>\n <td>\n <span class=\"badge channel-badge {{ live.Channel.toLowerCase() }}\">\n {{ live.Channel }}\n </span>\n </td>\n <td>\n <span class=\"badge direction-badge {{ live.Direction.toLowerCase() }}\">\n {{ live.Direction }}\n </span>\n </td>\n <td>\n <span class=\"status-indicator active\">\n <span class=\"dot\"></span>\n {{ live.Status }}\n </span>\n </td>\n <td>{{ FormatTime(live.StartedAt) }}</td>\n <td class=\"elapsed-col\">\n <span class=\"elapsed-badge\">{{ live.ElapsedLabel }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n\n <!-- Middle Row: Volume Breakdown Cards -->\n <div class=\"two-col-grid\">\n <!-- Volume by Channel & Direction -->\n <div class=\"dashboard-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Volume Distribution</h3>\n </div>\n <div class=\"card-body\">\n <div class=\"distribution-group\">\n <h4>By Channel</h4>\n <div class=\"bars-container\">\n @for (item of Metrics.VolumeByChannel; track item.Channel) {\n <div class=\"bar-row\">\n <div class=\"bar-info\">\n <span class=\"bar-label\">{{ item.Channel }}</span>\n <span class=\"bar-stats\">{{ item.Count }} ({{ item.Percentage }}%)</span>\n </div>\n <div class=\"bar-track\">\n <div class=\"bar-fill channel-{{ item.Channel.toLowerCase() }}\" [style.width.%]=\"item.Percentage\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"distribution-group\">\n <h4>By Direction</h4>\n <div class=\"bars-container\">\n @for (item of Metrics.VolumeByDirection; track item.Direction) {\n <div class=\"bar-row\">\n <div class=\"bar-info\">\n <span class=\"bar-label\">{{ item.Direction }}</span>\n <span class=\"bar-stats\">{{ item.Count }} ({{ item.Percentage }}%)</span>\n </div>\n <div class=\"bar-track\">\n <div class=\"bar-fill direction-{{ item.Direction.toLowerCase() }}\" [style.width.%]=\"item.Percentage\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cost by Number -->\n <div class=\"dashboard-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-money-bill-wave\"></i> Cost by Phone Number</h3>\n </div>\n <div class=\"card-body\">\n @if (Metrics.CostByNumber.length === 0) {\n <div class=\"empty-feed\">\n <p>No phone number cost records in this window.</p>\n </div>\n } @else {\n <div class=\"cost-table-container\">\n <table class=\"ops-table compact\">\n <thead>\n <tr>\n <th>Phone Number / Target</th>\n <th>Calls</th>\n <th class=\"text-right\">Est. Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (num of Metrics.CostByNumber; track num.PhoneNumber) {\n <tr>\n <td class=\"font-medium\">{{ num.PhoneNumber }}</td>\n <td>{{ num.Count }}</td>\n <td class=\"text-right font-semibold\">{{ FormatCost(num.Cost) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Bottom Row: Recent Interactions Audit Table -->\n <div class=\"dashboard-section\">\n <div class=\"section-header\">\n <div class=\"section-title\">\n <i class=\"fa-solid fa-list-check\"></i>\n <h2>Recent Interactions</h2>\n <span class=\"count-pill\">{{ FilteredRecentInteractions.length }}</span>\n </div>\n </div>\n\n @if (FilteredRecentInteractions.length === 0) {\n <div class=\"empty-feed\">\n <p>No interactions found matching criteria.</p>\n </div>\n } @else {\n <div class=\"table-container\">\n <table class=\"ops-table\">\n <thead>\n <tr>\n <th>Date / Time</th>\n <th>Remote Party</th>\n <th>Channel</th>\n <th>Direction</th>\n <th>Status</th>\n <th>Duration</th>\n <th>End Reason</th>\n <th class=\"text-right\">Est. Cost</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredRecentInteractions; track row.ID) {\n <tr>\n <td>\n <div class=\"datetime-cell\">\n <span class=\"date\">{{ FormatDate(row.StartedAt) }}</span>\n <span class=\"time\">{{ FormatTime(row.StartedAt) }}</span>\n </div>\n </td>\n <td class=\"address-col\">\n <span>{{ row.RemoteAddress || 'Unknown' }}</span>\n </td>\n <td>\n <span class=\"badge channel-badge {{ row.Channel.toLowerCase() }}\">\n {{ row.Channel }}\n </span>\n </td>\n <td>\n <span class=\"badge direction-badge {{ row.Direction.toLowerCase() }}\">\n {{ row.Direction }}\n </span>\n </td>\n <td>\n <span class=\"status-indicator {{ row.Status.toLowerCase() }}\">\n <span class=\"dot\"></span>\n {{ row.Status }}\n </span>\n </td>\n <td>{{ ComputeDuration(row.StartedAt, row.EndedAt) }}</td>\n <td class=\"end-reason-cell\">{{ row.EndReason || '-' }}</td>\n <td class=\"text-right\">{{ FormatCost(row.CostEstimate) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -46,6 +46,18 @@ export declare class TestingAnalyticsComponent implements OnInit, OnDestroy {
46
46
  SelectedDays: number;
47
47
  VersionRows: VersionRow[];
48
48
  IsLoadingVersions: boolean;
49
+ RubricTrend: {
50
+ at: string;
51
+ score: number;
52
+ runId: string;
53
+ }[];
54
+ FailureRates: {
55
+ key: string;
56
+ rate: number;
57
+ count: number;
58
+ }[];
59
+ RubricAnalyticsError: string;
60
+ VersionMetricsError: string;
49
61
  private topFailingNames;
50
62
  private slowestNames;
51
63
  private mostExpensiveNames;
@@ -59,6 +71,9 @@ export declare class TestingAnalyticsComponent implements OnInit, OnDestroy {
59
71
  private maxTrendRuns;
60
72
  constructor(instrumentationService: TestingInstrumentationService, cdr: ChangeDetectorRef);
61
73
  ngOnInit(): void;
74
+ /** Submitted evaluation scores over time, and per-criterion failure rates. Suite-run scores are not rubric scores. */
75
+ LoadRubricAnalytics(): Promise<void>;
76
+ OpenRun(runId: string): void;
62
77
  ngOnDestroy(): void;
63
78
  OnTimeRangeSelect(days: number): void;
64
79
  Refresh(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"testing-analytics.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-analytics.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing-analytics.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-analytics.component.ts"],"names":[],"mappings":"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"}