@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-routing.module.d.ts +23 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +50 -14
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +28 -14
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
- package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +19 -5
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +43 -13
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/entities.guard.d.ts +4 -0
- package/dist/lib/guards/entities.guard.d.ts.map +1 -1
- package/dist/lib/guards/entities.guard.js +10 -2
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
- package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
- package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
- package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +10 -2
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +194 -191
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +186 -23
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +500 -177
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +68 -10
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +178 -62
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/startup-validation.service.d.ts +4 -0
- package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
- package/dist/lib/services/startup-validation.service.js +10 -2
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.d.ts +13 -1
- package/dist/lib/services/system-validation.service.d.ts.map +1 -1
- package/dist/lib/services/system-validation.service.js +29 -5
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +56 -12
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.d.ts +16 -12
- package/dist/lib/shell/loading-themes.d.ts.map +1 -1
- package/dist/lib/shell/loading-themes.js +145 -137
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/readiness-beacon.d.ts +2 -0
- package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
- package/dist/lib/shell/readiness-beacon.js +5 -1
- package/dist/lib/shell/readiness-beacon.js.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.js +16 -4
- package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.js +16 -4
- package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +262 -39
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +688 -292
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.d.ts +22 -2
- package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
- package/dist/lib/single-query/single-query.component.js +40 -10
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +41 -3
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +71 -11
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +42 -12
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
- package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js +10 -2
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +151 -47
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
- package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +5 -4
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-feedback.js","sourceRoot":"","sources":["../../../src/lib/conversation-feedback/conversation-feedback.ts","../../../src/lib/conversation-feedback/conversation-feedback.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef, HostListener, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunQuery } from '@memberjunction/core';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\nexport interface FeedbackRow {\n ratingID: string;\n rating: number;\n comments: string | null;\n createdAt: string;\n raterName: string | null;\n raterEmail: string | null;\n conversationDetailID: string;\n conversationID: string | null;\n conversationName: string | null;\n messageText: string | null;\n messageSnippet: string | null;\n messageRole: string | null;\n agentID: string | null;\n agentName: string | null;\n}\n\nexport type RatingBand = 'all' | 'high' | 'mid' | 'low';\nexport type DateRange = 'all' | '1d' | '7d' | '30d' | '90d';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-feedback',\n templateUrl: './conversation-feedback.html',\n styleUrls: ['./conversation-feedback.css']\n})\n@RegisterClass(BaseResourceComponent, 'ConversationFeedbackResource')\nexport class ConversationFeedbackResource extends BaseResourceComponent implements OnInit {\n isInitializing = true;\n loading = false;\n statsLoading = false;\n error: string | null = null;\n\n ratingBand: RatingBand = 'all';\n dateRange: DateRange = '7d';\n searchTerm = '';\n\n rows: FeedbackRow[] = [];\n totalRowCount = 0;\n\n pageSize: number = 10;\n currentPage: number = 1;\n readonly pageSizeOptions: number[] = [10, 25, 50, 100];\n\n stats = { total: 0, avgRating: 0, percentPositive: 0, percentNegative: 0 };\n\n selectedRow: FeedbackRow | null = null;\n\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n private cdr = inject(ChangeDetectorRef);\n private appManager = inject(ApplicationManager);\n\n async GetResourceDisplayName(): Promise<string> {\n return 'Agent Feedback';\n }\n\n async GetResourceIconClass(): Promise<string> {\n return 'fa-solid fa-comment-dots';\n }\n\n override async ngOnInit(): Promise<void> {\n this.isInitializing = false;\n this.cdr.detectChanges();\n await this.applyFilters();\n this.NotifyLoadComplete();\n }\n\n /** Manual refresh from the page header — same path as a filter change. */\n async loadFeedback(): Promise<void> {\n await this.applyFilters();\n }\n\n setBand(band: RatingBand): void {\n if (this.ratingBand === band) return;\n this.ratingBand = band;\n this.currentPage = 1;\n void this.applyFilters();\n }\n\n setDateRange(range: DateRange): void {\n if (this.dateRange === range) return;\n this.dateRange = range;\n this.currentPage = 1;\n void this.applyFilters();\n }\n\n /**\n * Search input fires on every keystroke; debounce so we don't slam the\n * server while the user is typing. 250ms is enough to feel responsive\n * without firing on intermediate states.\n */\n onSearchChange(): void {\n if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = setTimeout(() => {\n this.currentPage = 1;\n void this.applyFilters();\n }, 250);\n }\n\n onPageChange(event: { PageNumber: number; PageSize: number; StartRow: number }): void {\n if (event.PageNumber === this.currentPage) return;\n this.currentPage = event.PageNumber;\n void this.loadRows();\n }\n\n onPageSizeChange(size: number): void {\n const next = Number(size);\n if (!next || next === this.pageSize) return;\n this.pageSize = next;\n this.currentPage = 1;\n void this.loadRows();\n }\n\n openDrawer(row: FeedbackRow): void {\n this.selectedRow = row;\n this.cdr.detectChanges();\n }\n\n closeDrawer(): void {\n this.selectedRow = null;\n this.cdr.detectChanges();\n }\n\n async openConversation(): Promise<void> {\n if (!this.selectedRow?.conversationID) return;\n const conversationID = this.selectedRow.conversationID;\n\n // The Chat app owns the Conversations nav item; the active app (Agent\n // Feedback) does not, so we must target Chat explicitly. Fall back to\n // scanning all apps for a nav item whose DriverClass is the chat resource.\n let appId: string | undefined = this.appManager.GetAppByName('Chat')?.ID;\n let navItemLabel = 'Conversations';\n\n if (!appId) {\n for (const app of this.appManager.GetAllApps()) {\n const navItems = await app.GetNavItems();\n const match = navItems.find(n => (n as any).DriverClass === 'ChatConversationsResource');\n if (match) {\n appId = app.ID;\n navItemLabel = match.Label;\n break;\n }\n }\n }\n\n if (!appId) {\n this.error = 'Could not find a Chat application to open this conversation in.';\n this.cdr.detectChanges();\n return;\n }\n\n this.closeDrawer();\n await this.navigationService.OpenNavItemByName(navItemLabel, { conversationId: conversationID }, appId);\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.selectedRow) this.closeDrawer();\n }\n\n bandClassFor(rating: number): string {\n if (rating >= 8) return 'rating-high';\n if (rating >= 4) return 'rating-mid';\n return 'rating-low';\n }\n\n trackByRatingID = (_: number, row: FeedbackRow): string => row.ratingID;\n\n /** 1-based index of the first row on the current page (0 when empty). */\n get rangeStart(): number {\n if (this.totalRowCount === 0) return 0;\n return (this.currentPage - 1) * this.pageSize + 1;\n }\n\n /** 1-based index of the last row on the current page (clamped to total). */\n get rangeEnd(): number {\n return Math.min(this.currentPage * this.pageSize, this.totalRowCount);\n }\n\n /**\n * True when the filtered set fits on a single page — in this case\n * mj-pagination hides itself, so the footer renders a fallback summary\n * line. When false we let mj-pagination own the bar (it has its own\n * `1-N of M` summary on the left + nav controls on the right).\n */\n get isSinglePage(): boolean {\n if (this.totalRowCount <= 0) return false;\n return Math.ceil(this.totalRowCount / this.pageSize) <= 1;\n }\n\n /**\n * Run both the rows-query (paged) and the stats-query (aggregate) against\n * the current filter state. Called when filters change or on initial load.\n */\n private async applyFilters(): Promise<void> {\n await Promise.all([this.loadRows(), this.loadStats()]);\n }\n\n /**\n * Fetch the current page of rows from the server. The mj-pagination\n * footer reads `totalRowCount` to derive the page count.\n */\n private async loadRows(): Promise<void> {\n this.loading = true;\n this.error = null;\n this.cdr.detectChanges();\n\n try {\n const rq = new RunQuery();\n const result = await rq.RunQuery({\n QueryName: 'ListConversationDetailFeedback',\n CategoryPath: '/MJ/Conversations',\n Parameters: this.buildQueryParameters(),\n StartRow: (this.currentPage - 1) * this.pageSize,\n MaxRows: this.pageSize\n });\n\n if (!result.Success) {\n this.error = result.ErrorMessage || 'Failed to load feedback';\n this.rows = [];\n this.totalRowCount = 0;\n return;\n }\n\n this.rows = (result.Results ?? []).map((r: any) => this.mapRow(r));\n this.totalRowCount = result.TotalRowCount ?? this.rows.length;\n } catch (e: any) {\n this.error = e?.message || 'Failed to load feedback';\n this.rows = [];\n this.totalRowCount = 0;\n } finally {\n this.loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Aggregate counts over the same filter universe as `loadRows()`. Runs in\n * parallel with the rows query so the stat cards and the table stay in\n * sync after every filter change.\n */\n private async loadStats(): Promise<void> {\n this.statsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rq = new RunQuery();\n const result = await rq.RunQuery({\n QueryName: 'ListConversationDetailFeedbackStats',\n CategoryPath: '/MJ/Conversations',\n Parameters: this.buildQueryParameters()\n });\n\n const row = (result.Results?.[0] as any) || {};\n const total = Number(row.Total ?? 0);\n const avg = Number(row.AvgRating ?? 0);\n const pos = Number(row.PositiveCount ?? 0);\n const neg = Number(row.NegativeCount ?? 0);\n\n this.stats = {\n total,\n avgRating: total ? Math.round(avg * 10) / 10 : 0,\n percentPositive: total ? Math.round((pos / total) * 100) : 0,\n percentNegative: total ? Math.round((neg / total) * 100) : 0\n };\n } catch (e) {\n // Stats are non-critical — the table is the primary surface. Log and\n // leave the previous stats values in place.\n console.warn('[Feedback] stats query failed', e);\n } finally {\n this.statsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Build the Nunjucks-bound parameter set passed to both queries. Server-side\n * filtering: emit only the keys that actually have a value so the SQL's\n * `{% if X %}` blocks stay inert when filters are at their default.\n */\n private buildQueryParameters(): Record<string, unknown> {\n const params: {\n MinRating?: number;\n MaxRating?: number;\n StartDate?: string;\n SearchText?: string;\n } = {};\n\n if (this.ratingBand === 'high') {\n params.MinRating = 8;\n } else if (this.ratingBand === 'mid') {\n params.MinRating = 4;\n params.MaxRating = 7;\n } else if (this.ratingBand === 'low') {\n params.MaxRating = 3;\n }\n\n const cutoffIso = this.dateRangeCutoffIso();\n if (cutoffIso) {\n params.StartDate = cutoffIso;\n }\n\n const term = this.searchTerm.trim();\n if (term) {\n params.SearchText = term;\n }\n\n return params;\n }\n\n private dateRangeCutoffIso(): string | null {\n if (this.dateRange === 'all') return null;\n const days = this.dateRange === '1d' ? 1\n : this.dateRange === '7d' ? 7\n : this.dateRange === '30d' ? 30\n : 90;\n const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000);\n return cutoff.toISOString();\n }\n\n private mapRow(r: any): FeedbackRow {\n const message: string | null = r.MessageText ?? null;\n const snippet = message\n ? (message.length > 160 ? message.slice(0, 160) + '…' : message)\n : null;\n return {\n ratingID: r.RatingID,\n rating: r.Rating,\n comments: r.Comments ?? null,\n createdAt: r.RatedAt ?? '',\n raterName: r.RaterName ?? null,\n raterEmail: r.RaterEmail ?? null,\n conversationDetailID: r.ConversationDetailID,\n conversationID: r.ConversationID ?? null,\n conversationName: r.ConversationName ?? null,\n messageText: message,\n messageSnippet: snippet,\n messageRole: r.MessageRole ?? null,\n agentID: r.AgentID ?? null,\n agentName: r.AgentName ?? null\n };\n }\n}\n","<div class=\"feedback-container\">\n\n @if (isInitializing) {\n <div class=\"loading-overlay\"><div class=\"spinner\"></div> Loading...</div>\n }\n\n @if (!isInitializing) {\n\n <div class=\"sticky-header\">\n <div class=\"page-header\">\n <div class=\"page-title-area\">\n <div class=\"page-icon\"><i class=\"fa-solid fa-comment-dots\"></i></div>\n <div>\n <h1 class=\"page-title\">Agent Feedback</h1>\n <p class=\"page-subtitle\">User ratings and comments on AI messages</p>\n </div>\n </div>\n <div class=\"page-actions\">\n <button class=\"btn-action\" (click)=\"loadFeedback()\" [disabled]=\"loading\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"loading\"></i> Refresh\n </button>\n </div>\n </div>\n\n @if (error) {\n <mj-alert Variant=\"error\" class=\"feedback-error-spacing\" Dismissible (Dismissed)=\"error = null\">{{ error }}</mj-alert>\n }\n\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-total\"><i class=\"fa-solid fa-comment-dots\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.total }}</div>\n <div class=\"stat-label\">Total Ratings</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-avg\"><i class=\"fa-solid fa-star\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.avgRating }}<span class=\"stat-unit\">/10</span></div>\n <div class=\"stat-label\">Avg Rating</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-positive\"><i class=\"fa-solid fa-thumbs-up\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value rating-high-text\">{{ stats.percentPositive }}%</div>\n <div class=\"stat-label\">Positive (8-10)</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-negative\"><i class=\"fa-solid fa-thumbs-down\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value rating-low-text\">{{ stats.percentNegative }}%</div>\n <div class=\"stat-label\">Negative (1-3)</div>\n </div>\n </div>\n </div>\n\n <div class=\"filter-bar\">\n <div class=\"filter-row\">\n <div class=\"filter-group\">\n <span class=\"filter-label\">Date Range</span>\n <div class=\"btn-group\">\n <button class=\"btn-filter\" [class.active]=\"dateRange === '1d'\" (click)=\"setDateRange('1d')\">1d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '7d'\" (click)=\"setDateRange('7d')\">7d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '30d'\" (click)=\"setDateRange('30d')\">30d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '90d'\" (click)=\"setDateRange('90d')\">90d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === 'all'\" (click)=\"setDateRange('all')\">All</button>\n </div>\n </div>\n <div class=\"filter-group\">\n <span class=\"filter-label\">Rating Band</span>\n <div class=\"btn-group\">\n <button class=\"btn-filter\" [class.active]=\"ratingBand === 'all'\" (click)=\"setBand('all')\">All</button>\n <button class=\"btn-filter band-high\" [class.active]=\"ratingBand === 'high'\" (click)=\"setBand('high')\">High 8-10</button>\n <button class=\"btn-filter band-mid\" [class.active]=\"ratingBand === 'mid'\" (click)=\"setBand('mid')\">Mid 4-7</button>\n <button class=\"btn-filter band-low\" [class.active]=\"ratingBand === 'low'\" (click)=\"setBand('low')\">Low 1-3</button>\n </div>\n </div>\n <div class=\"filter-group filter-search\">\n <span class=\"filter-label\">Search</span>\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"searchTerm\"\n (input)=\"onSearchChange()\"\n placeholder=\"Search comments, message, agent, rater...\" />\n </div>\n </div>\n <div class=\"diagnostic-line\">\n {{ totalRowCount }} {{ totalRowCount === 1 ? 'rating' : 'ratings' }} match the current filters\n </div>\n </div>\n </div>\n\n <div class=\"scrollable-content\">\n @if (loading) {\n <div class=\"loading-overlay\"><div class=\"spinner\"></div> Loading feedback...</div>\n }\n\n @if (!loading) {\n @if (rows.length === 0) {\n <mj-empty-state\n class=\"feedback-empty-state\"\n Variant=\"no-results\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No feedback matches the current filters.\" />\n } @else {\n <div class=\"feedback-table-wrapper\">\n <table class=\"feedback-table\">\n <thead>\n <tr>\n <th class=\"col-rating\">Rating</th>\n <th class=\"col-comment\">Comments</th>\n <th class=\"col-agent\">Agent</th>\n <th class=\"col-message\">Message</th>\n <th class=\"col-rater\">Rater</th>\n <th class=\"col-when\">When</th>\n </tr>\n </thead>\n <tbody>\n @for (row of rows; track trackByRatingID($index, row)) {\n <tr\n class=\"feedback-row\"\n [class.expanded]=\"selectedRow?.ratingID === row.ratingID\"\n (click)=\"openDrawer(row)\">\n <td class=\"col-rating\">\n <span class=\"rating-badge\" [ngClass]=\"bandClassFor(row.rating)\">\n {{ row.rating }}<small>/10</small>\n </span>\n </td>\n <td class=\"col-comment\">\n @if (row.comments) {\n <div class=\"comment-text clamped\">{{ row.comments }}</div>\n } @else {\n <span class=\"muted\">(no comment)</span>\n }\n </td>\n <td class=\"col-agent\">\n <span class=\"agent-name\">{{ row.agentName || '—' }}</span>\n </td>\n <td class=\"col-message\">\n @if (row.messageSnippet) {\n <span class=\"message-snippet\">{{ row.messageSnippet }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"col-rater\">\n <div class=\"rater-name\">{{ row.raterName || row.raterEmail || '—' }}</div>\n @if (row.raterEmail && row.raterName) {\n <div class=\"rater-email\">{{ row.raterEmail }}</div>\n }\n </td>\n <td class=\"col-when\">\n <span class=\"when\">{{ row.createdAt | date:'short' }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!--\n Bottom bar. When the filtered set spans multiple pages mj-pagination\n renders its own full-width `1-N of M | controls` row. When it fits\n on a single page mj-pagination self-hides, so the footer renders\n a single fallback summary line in its place.\n -->\n <!--\n Bottom bar: mj-pagination on the left (it has its own internal\n `1-N of M | nav controls` layout) + page-size selector hugging the\n right edge. The selector lives outside mj-pagination because the\n shared component doesn't expose a size-change output; the parent\n owns PageSize.\n -->\n <div class=\"pagination-bar\">\n @if (isSinglePage) {\n <span class=\"pagination-summary\">\n {{ rangeStart | number }}-{{ rangeEnd | number }} of {{ totalRowCount | number }}\n {{ totalRowCount === 1 ? 'rating' : 'ratings' }}\n </span>\n } @else {\n <mj-pagination\n class=\"feedback-pagination\"\n [TotalRowCount]=\"totalRowCount\"\n [PageNumber]=\"currentPage\"\n [PageSize]=\"pageSize\"\n [IsLoading]=\"loading\"\n (PageChange)=\"onPageChange($event)\">\n </mj-pagination>\n }\n\n <label class=\"page-size-control\">\n <span class=\"page-size-label\">Rows</span>\n <select\n class=\"page-size-select\"\n [ngModel]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\">\n @for (size of pageSizeOptions; track size) {\n <option [ngValue]=\"size\">{{ size }}</option>\n }\n </select>\n </label>\n </div>\n }\n }\n </div>\n }\n\n <!-- ===== Detail slide-out panel ===== -->\n @if (selectedRow) {\n <div class=\"slideout-backdrop\" (click)=\"closeDrawer()\"></div>\n }\n\n <aside class=\"slideout-panel\"\n [class.open]=\"!!selectedRow\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"slideout-title\">\n @if (selectedRow; as r) {\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <div class=\"slideout-title-text\">\n <h2 id=\"slideout-title\" class=\"slideout-title-line\">\n Feedback on {{ r.agentName || 'AI message' }}\n </h2>\n <div class=\"slideout-subtitle\">\n <span class=\"rating-badge\" [ngClass]=\"bandClassFor(r.rating)\">\n {{ r.rating }}<small>/10</small>\n </span>\n <span>\n Rated by <strong>{{ r.raterName || r.raterEmail || 'Unknown user' }}</strong>\n · {{ r.createdAt | date:'medium' }}\n </span>\n </div>\n </div>\n </div>\n <button class=\"slideout-close\" (click)=\"closeDrawer()\" title=\"Close (Esc)\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <div class=\"slideout-section\">\n <div class=\"section-label\">Reviewer Comment</div>\n @if (r.comments) {\n <div class=\"comment-body\">{{ r.comments }}</div>\n } @else {\n <div class=\"comment-body muted\">(no comment was provided)</div>\n }\n </div>\n\n <div class=\"slideout-section\">\n <div class=\"meta-grid\">\n <div class=\"meta-card\">\n <div class=\"meta-label\">Agent</div>\n <div class=\"meta-value\">{{ r.agentName || '—' }}</div>\n </div>\n <div class=\"meta-card\">\n <div class=\"meta-label\">Conversation</div>\n <div class=\"meta-value\">{{ r.conversationName || '—' }}</div>\n </div>\n <div class=\"meta-card\">\n <div class=\"meta-label\">Message Role</div>\n <div class=\"meta-value\">{{ r.messageRole || '—' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-section\">\n <div class=\"message-card\">\n <div class=\"message-card-header\">\n <i class=\"fa-solid fa-message\"></i> Rated Message\n </div>\n <div class=\"message-card-body\">\n @if (r.messageText) {\n {{ r.messageText }}\n } @else {\n <span class=\"muted\">(message text unavailable)</span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-footer\">\n <button mjButton variant=\"flat\" size=\"lg\" (click)=\"closeDrawer()\">Close</button>\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openConversation()\"\n [disabled]=\"!r.conversationID\"\n [title]=\"r.conversationID ? 'Open the source conversation' : 'No conversation linked'\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n Open Conversation\n </button>\n </div>\n }\n </aside>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"conversation-feedback.js","sourceRoot":"","sources":["../../../src/lib/conversation-feedback/conversation-feedback.ts","../../../src/lib/conversation-feedback/conversation-feedback.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef, HostListener, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunQuery } from '@memberjunction/core';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\nexport interface FeedbackRow {\n ratingID: string;\n rating: number;\n comments: string | null;\n createdAt: string;\n raterName: string | null;\n raterEmail: string | null;\n conversationDetailID: string;\n conversationID: string | null;\n conversationName: string | null;\n messageText: string | null;\n messageSnippet: string | null;\n messageRole: string | null;\n agentID: string | null;\n agentName: string | null;\n}\n\nexport type RatingBand = 'all' | 'high' | 'mid' | 'low';\nexport type DateRange = 'all' | '1d' | '7d' | '30d' | '90d';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-feedback',\n templateUrl: './conversation-feedback.html',\n styleUrls: ['./conversation-feedback.css']\n})\n@RegisterClass(BaseResourceComponent, 'ConversationFeedbackResource')\nexport class ConversationFeedbackResource extends BaseResourceComponent implements OnInit {\n IsInitializing = true;\n\n /** @deprecated Use {@link IsInitializing}. */\n get isInitializing() {\n return this.IsInitializing;\n }\n /** @deprecated Use {@link IsInitializing}. */\n set isInitializing(value) {\n this.IsInitializing = value;\n }\n Loading = false;\n\n /** @deprecated Use {@link Loading}. */\n get loading() {\n return this.Loading;\n }\n /** @deprecated Use {@link Loading}. */\n set loading(value) {\n this.Loading = value;\n }\n StatsLoading = false;\n\n /** @deprecated Use {@link StatsLoading}. */\n get statsLoading() {\n return this.StatsLoading;\n }\n /** @deprecated Use {@link StatsLoading}. */\n set statsLoading(value) {\n this.StatsLoading = value;\n }\n error: string | null = null;\n\n RatingBand: RatingBand = 'all';\n\n /** @deprecated Use {@link RatingBand}. */\n get ratingBand(): RatingBand {\n return this.RatingBand;\n }\n /** @deprecated Use {@link RatingBand}. */\n set ratingBand(value: RatingBand) {\n this.RatingBand = value;\n }\n DateRange: DateRange = '7d';\n\n /** @deprecated Use {@link DateRange}. */\n get dateRange(): DateRange {\n return this.DateRange;\n }\n /** @deprecated Use {@link DateRange}. */\n set dateRange(value: DateRange) {\n this.DateRange = value;\n }\n SearchTerm = '';\n\n /** @deprecated Use {@link SearchTerm}. */\n get searchTerm() {\n return this.SearchTerm;\n }\n /** @deprecated Use {@link SearchTerm}. */\n set searchTerm(value) {\n this.SearchTerm = value;\n }\n\n Rows: FeedbackRow[] = [];\n\n /** @deprecated Use {@link Rows}. */\n get rows(): FeedbackRow[] {\n return this.Rows;\n }\n /** @deprecated Use {@link Rows}. */\n set rows(value: FeedbackRow[]) {\n this.Rows = value;\n }\n TotalRowCount = 0;\n\n /** @deprecated Use {@link TotalRowCount}. */\n get totalRowCount() {\n return this.TotalRowCount;\n }\n /** @deprecated Use {@link TotalRowCount}. */\n set totalRowCount(value) {\n this.TotalRowCount = value;\n }\n\n pageSize: number = 10;\n CurrentPage: number = 1;\n\n /** @deprecated Use {@link CurrentPage}. */\n get currentPage(): number {\n return this.CurrentPage;\n }\n /** @deprecated Use {@link CurrentPage}. */\n set currentPage(value: number) {\n this.CurrentPage = value;\n }\n readonly PageSizeOptions: number[] = [10, 25, 50, 100];\n\n /** @deprecated Use {@link PageSizeOptions}. */\n get pageSizeOptions(): number[] {\n return this.PageSizeOptions;\n }\n\n Stats = { total: 0, avgRating: 0, percentPositive: 0, percentNegative: 0 };\n\n /** @deprecated Use {@link Stats}. */\n get stats() {\n return this.Stats;\n }\n /** @deprecated Use {@link Stats}. */\n set stats(value) {\n this.Stats = value;\n }\n\n SelectedRow: FeedbackRow | null = null;\n\n /** @deprecated Use {@link SelectedRow}. */\n get selectedRow(): FeedbackRow | null {\n return this.SelectedRow;\n }\n /** @deprecated Use {@link SelectedRow}. */\n set selectedRow(value: FeedbackRow | null) {\n this.SelectedRow = value;\n }\n\n private searchDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n private cdr = inject(ChangeDetectorRef);\n private appManager = inject(ApplicationManager);\n\n async GetResourceDisplayName(): Promise<string> {\n return 'Agent Feedback';\n }\n\n async GetResourceIconClass(): Promise<string> {\n return 'fa-solid fa-comment-dots';\n }\n\n override async ngOnInit(): Promise<void> {\n this.IsInitializing = false;\n this.cdr.detectChanges();\n await this.applyFilters();\n this.NotifyLoadComplete();\n }\n\n /** Manual refresh from the page header — same path as a filter change. */\n async LoadFeedback(): Promise<void> {\n await this.applyFilters();\n }\n\n /** @deprecated Use {@link LoadFeedback}. */\n async loadFeedback(): Promise<void> {\n return this.LoadFeedback();\n }\n\n SetBand(band: RatingBand): void {\n if (this.RatingBand === band) return;\n this.RatingBand = band;\n this.CurrentPage = 1;\n void this.applyFilters();\n }\n\n /** @deprecated Use {@link SetBand}. */\n setBand(band: RatingBand): void {\n return this.SetBand(band);\n }\n\n SetDateRange(range: DateRange): void {\n if (this.DateRange === range) return;\n this.DateRange = range;\n this.CurrentPage = 1;\n void this.applyFilters();\n }\n\n /** @deprecated Use {@link SetDateRange}. */\n setDateRange(range: DateRange): void {\n return this.SetDateRange(range);\n }\n\n /**\n * Search input fires on every keystroke; debounce so we don't slam the\n * server while the user is typing. 250ms is enough to feel responsive\n * without firing on intermediate states.\n */\n OnSearchChange(): void {\n if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = setTimeout(() => {\n this.CurrentPage = 1;\n void this.applyFilters();\n }, 250);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n onSearchChange(): void {\n return this.OnSearchChange();\n }\n\n OnPageChange(event: { PageNumber: number; PageSize: number; StartRow: number }): void {\n if (event.PageNumber === this.CurrentPage) return;\n this.CurrentPage = event.PageNumber;\n void this.loadRows();\n }\n\n /** @deprecated Use {@link OnPageChange}. */\n onPageChange(event: { PageNumber: number; PageSize: number; StartRow: number }): void {\n return this.OnPageChange(event);\n }\n\n OnPageSizeChange(size: number): void {\n const next = Number(size);\n if (!next || next === this.pageSize) return;\n this.pageSize = next;\n this.CurrentPage = 1;\n void this.loadRows();\n }\n\n /** @deprecated Use {@link OnPageSizeChange}. */\n onPageSizeChange(size: number): void {\n return this.OnPageSizeChange(size);\n }\n\n OpenDrawer(row: FeedbackRow): void {\n this.SelectedRow = row;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenDrawer}. */\n openDrawer(row: FeedbackRow): void {\n return this.OpenDrawer(row);\n }\n\n CloseDrawer(): void {\n this.SelectedRow = null;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseDrawer}. */\n closeDrawer(): void {\n return this.CloseDrawer();\n }\n\n async OpenConversation(): Promise<void> {\n if (!this.SelectedRow?.conversationID) return;\n const conversationID = this.SelectedRow.conversationID;\n\n // The Chat app owns the Conversations nav item; the active app (Agent\n // Feedback) does not, so we must target Chat explicitly. Fall back to\n // scanning all apps for a nav item whose DriverClass is the chat resource.\n let appId: string | undefined = this.appManager.GetAppByName('Chat')?.ID;\n let navItemLabel = 'Conversations';\n\n if (!appId) {\n for (const app of this.appManager.GetAllApps()) {\n const navItems = await app.GetNavItems();\n const match = navItems.find(n => (n as any).DriverClass === 'ChatConversationsResource');\n if (match) {\n appId = app.ID;\n navItemLabel = match.Label;\n break;\n }\n }\n }\n\n if (!appId) {\n this.error = 'Could not find a Chat application to open this conversation in.';\n this.cdr.detectChanges();\n return;\n }\n\n this.CloseDrawer();\n await this.navigationService.OpenNavItemByName(navItemLabel, { conversationId: conversationID }, appId);\n }\n\n /** @deprecated Use {@link OpenConversation}. */\n async openConversation(): Promise<void> {\n return this.OpenConversation();\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.SelectedRow) this.CloseDrawer();\n }\n\n BandClassFor(rating: number): string {\n if (rating >= 8) return 'rating-high';\n if (rating >= 4) return 'rating-mid';\n return 'rating-low';\n }\n\n /** @deprecated Use {@link BandClassFor}. */\n bandClassFor(rating: number): string {\n return this.BandClassFor(rating);\n }\n\n TrackByRatingID = (_: number, row: FeedbackRow): string => row.ratingID;\n\n /** @deprecated Use {@link TrackByRatingID}. */\n get trackByRatingID() {\n return this.TrackByRatingID;\n }\n /** @deprecated Use {@link TrackByRatingID}. */\n set trackByRatingID(value) {\n this.TrackByRatingID = value;\n }\n\n /** 1-based index of the first row on the current page (0 when empty). */\n get RangeStart(): number {\n if (this.TotalRowCount === 0) return 0;\n return (this.CurrentPage - 1) * this.pageSize + 1;\n }\n\n /** @deprecated Use {@link RangeStart}. */\n get rangeStart(): number {\n return this.RangeStart;\n }\n\n /** 1-based index of the last row on the current page (clamped to total). */\n get RangeEnd(): number {\n return Math.min(this.CurrentPage * this.pageSize, this.TotalRowCount);\n }\n\n /** @deprecated Use {@link RangeEnd}. */\n get rangeEnd(): number {\n return this.RangeEnd;\n }\n\n /**\n * True when the filtered set fits on a single page — in this case\n * mj-pagination hides itself, so the footer renders a fallback summary\n * line. When false we let mj-pagination own the bar (it has its own\n * `1-N of M` summary on the left + nav controls on the right).\n */\n get IsSinglePage(): boolean {\n if (this.TotalRowCount <= 0) return false;\n return Math.ceil(this.TotalRowCount / this.pageSize) <= 1;\n }\n\n /** @deprecated Use {@link IsSinglePage}. */\n get isSinglePage(): boolean {\n return this.IsSinglePage;\n }\n\n /**\n * Run both the rows-query (paged) and the stats-query (aggregate) against\n * the current filter state. Called when filters change or on initial load.\n */\n private async applyFilters(): Promise<void> {\n await Promise.all([this.loadRows(), this.loadStats()]);\n }\n\n /**\n * Fetch the current page of rows from the server. The mj-pagination\n * footer reads `totalRowCount` to derive the page count.\n */\n private async loadRows(): Promise<void> {\n this.Loading = true;\n this.error = null;\n this.cdr.detectChanges();\n\n try {\n const rq = new RunQuery();\n const result = await rq.RunQuery({\n QueryName: 'ListConversationDetailFeedback',\n CategoryPath: '/MJ/Conversations',\n Parameters: this.buildQueryParameters(),\n StartRow: (this.CurrentPage - 1) * this.pageSize,\n MaxRows: this.pageSize\n });\n\n if (!result.Success) {\n this.error = result.ErrorMessage || 'Failed to load feedback';\n this.Rows = [];\n this.TotalRowCount = 0;\n return;\n }\n\n this.Rows = (result.Results ?? []).map((r: any) => this.mapRow(r));\n this.TotalRowCount = result.TotalRowCount ?? this.Rows.length;\n } catch (e: any) {\n this.error = e?.message || 'Failed to load feedback';\n this.Rows = [];\n this.TotalRowCount = 0;\n } finally {\n this.Loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Aggregate counts over the same filter universe as `loadRows()`. Runs in\n * parallel with the rows query so the stat cards and the table stay in\n * sync after every filter change.\n */\n private async loadStats(): Promise<void> {\n this.StatsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rq = new RunQuery();\n const result = await rq.RunQuery({\n QueryName: 'ListConversationDetailFeedbackStats',\n CategoryPath: '/MJ/Conversations',\n Parameters: this.buildQueryParameters()\n });\n\n const row = (result.Results?.[0] as any) || {};\n const total = Number(row.Total ?? 0);\n const avg = Number(row.AvgRating ?? 0);\n const pos = Number(row.PositiveCount ?? 0);\n const neg = Number(row.NegativeCount ?? 0);\n\n this.Stats = {\n total,\n avgRating: total ? Math.round(avg * 10) / 10 : 0,\n percentPositive: total ? Math.round((pos / total) * 100) : 0,\n percentNegative: total ? Math.round((neg / total) * 100) : 0\n };\n } catch (e) {\n // Stats are non-critical — the table is the primary surface. Log and\n // leave the previous stats values in place.\n console.warn('[Feedback] stats query failed', e);\n } finally {\n this.StatsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Build the Nunjucks-bound parameter set passed to both queries. Server-side\n * filtering: emit only the keys that actually have a value so the SQL's\n * `{% if X %}` blocks stay inert when filters are at their default.\n */\n private buildQueryParameters(): Record<string, unknown> {\n const params: {\n MinRating?: number;\n MaxRating?: number;\n StartDate?: string;\n SearchText?: string;\n } = {};\n\n if (this.RatingBand === 'high') {\n params.MinRating = 8;\n } else if (this.RatingBand === 'mid') {\n params.MinRating = 4;\n params.MaxRating = 7;\n } else if (this.RatingBand === 'low') {\n params.MaxRating = 3;\n }\n\n const cutoffIso = this.dateRangeCutoffIso();\n if (cutoffIso) {\n params.StartDate = cutoffIso;\n }\n\n const term = this.SearchTerm.trim();\n if (term) {\n params.SearchText = term;\n }\n\n return params;\n }\n\n private dateRangeCutoffIso(): string | null {\n if (this.DateRange === 'all') return null;\n const days = this.DateRange === '1d' ? 1\n : this.DateRange === '7d' ? 7\n : this.DateRange === '30d' ? 30\n : 90;\n const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000);\n return cutoff.toISOString();\n }\n\n private mapRow(r: any): FeedbackRow {\n const message: string | null = r.MessageText ?? null;\n const snippet = message\n ? (message.length > 160 ? message.slice(0, 160) + '…' : message)\n : null;\n return {\n ratingID: r.RatingID,\n rating: r.Rating,\n comments: r.Comments ?? null,\n createdAt: r.RatedAt ?? '',\n raterName: r.RaterName ?? null,\n raterEmail: r.RaterEmail ?? null,\n conversationDetailID: r.ConversationDetailID,\n conversationID: r.ConversationID ?? null,\n conversationName: r.ConversationName ?? null,\n messageText: message,\n messageSnippet: snippet,\n messageRole: r.MessageRole ?? null,\n agentID: r.AgentID ?? null,\n agentName: r.AgentName ?? null\n };\n }\n}\n","<div class=\"feedback-container\">\n\n @if (isInitializing) {\n <div class=\"loading-overlay\"><div class=\"spinner\"></div> Loading...</div>\n }\n\n @if (!isInitializing) {\n\n <div class=\"sticky-header\">\n <div class=\"page-header\">\n <div class=\"page-title-area\">\n <div class=\"page-icon\"><i class=\"fa-solid fa-comment-dots\"></i></div>\n <div>\n <h1 class=\"page-title\">Agent Feedback</h1>\n <p class=\"page-subtitle\">User ratings and comments on AI messages</p>\n </div>\n </div>\n <div class=\"page-actions\">\n <button class=\"btn-action\" (click)=\"loadFeedback()\" [disabled]=\"loading\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"loading\"></i> Refresh\n </button>\n </div>\n </div>\n\n @if (error) {\n <mj-alert Variant=\"error\" class=\"feedback-error-spacing\" Dismissible (Dismissed)=\"error = null\">{{ error }}</mj-alert>\n }\n\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-total\"><i class=\"fa-solid fa-comment-dots\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.total }}</div>\n <div class=\"stat-label\">Total Ratings</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-avg\"><i class=\"fa-solid fa-star\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{ stats.avgRating }}<span class=\"stat-unit\">/10</span></div>\n <div class=\"stat-label\">Avg Rating</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-positive\"><i class=\"fa-solid fa-thumbs-up\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value rating-high-text\">{{ stats.percentPositive }}%</div>\n <div class=\"stat-label\">Positive (8-10)</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon stat-icon-negative\"><i class=\"fa-solid fa-thumbs-down\"></i></div>\n <div class=\"stat-content\">\n <div class=\"stat-value rating-low-text\">{{ stats.percentNegative }}%</div>\n <div class=\"stat-label\">Negative (1-3)</div>\n </div>\n </div>\n </div>\n\n <div class=\"filter-bar\">\n <div class=\"filter-row\">\n <div class=\"filter-group\">\n <span class=\"filter-label\">Date Range</span>\n <div class=\"btn-group\">\n <button class=\"btn-filter\" [class.active]=\"dateRange === '1d'\" (click)=\"setDateRange('1d')\">1d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '7d'\" (click)=\"setDateRange('7d')\">7d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '30d'\" (click)=\"setDateRange('30d')\">30d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === '90d'\" (click)=\"setDateRange('90d')\">90d</button>\n <button class=\"btn-filter\" [class.active]=\"dateRange === 'all'\" (click)=\"setDateRange('all')\">All</button>\n </div>\n </div>\n <div class=\"filter-group\">\n <span class=\"filter-label\">Rating Band</span>\n <div class=\"btn-group\">\n <button class=\"btn-filter\" [class.active]=\"ratingBand === 'all'\" (click)=\"setBand('all')\">All</button>\n <button class=\"btn-filter band-high\" [class.active]=\"ratingBand === 'high'\" (click)=\"setBand('high')\">High 8-10</button>\n <button class=\"btn-filter band-mid\" [class.active]=\"ratingBand === 'mid'\" (click)=\"setBand('mid')\">Mid 4-7</button>\n <button class=\"btn-filter band-low\" [class.active]=\"ratingBand === 'low'\" (click)=\"setBand('low')\">Low 1-3</button>\n </div>\n </div>\n <div class=\"filter-group filter-search\">\n <span class=\"filter-label\">Search</span>\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"searchTerm\"\n (input)=\"onSearchChange()\"\n placeholder=\"Search comments, message, agent, rater...\" />\n </div>\n </div>\n <div class=\"diagnostic-line\">\n {{ totalRowCount }} {{ totalRowCount === 1 ? 'rating' : 'ratings' }} match the current filters\n </div>\n </div>\n </div>\n\n <div class=\"scrollable-content\">\n @if (loading) {\n <div class=\"loading-overlay\"><div class=\"spinner\"></div> Loading feedback...</div>\n }\n\n @if (!loading) {\n @if (rows.length === 0) {\n <mj-empty-state\n class=\"feedback-empty-state\"\n Variant=\"no-results\"\n Icon=\"fa-solid fa-comment-slash\"\n Title=\"No feedback matches the current filters.\" />\n } @else {\n <div class=\"feedback-table-wrapper\">\n <table class=\"feedback-table\">\n <thead>\n <tr>\n <th class=\"col-rating\">Rating</th>\n <th class=\"col-comment\">Comments</th>\n <th class=\"col-agent\">Agent</th>\n <th class=\"col-message\">Message</th>\n <th class=\"col-rater\">Rater</th>\n <th class=\"col-when\">When</th>\n </tr>\n </thead>\n <tbody>\n @for (row of rows; track trackByRatingID($index, row)) {\n <tr\n class=\"feedback-row\"\n [class.expanded]=\"selectedRow?.ratingID === row.ratingID\"\n (click)=\"openDrawer(row)\">\n <td class=\"col-rating\">\n <span class=\"rating-badge\" [ngClass]=\"bandClassFor(row.rating)\">\n {{ row.rating }}<small>/10</small>\n </span>\n </td>\n <td class=\"col-comment\">\n @if (row.comments) {\n <div class=\"comment-text clamped\">{{ row.comments }}</div>\n } @else {\n <span class=\"muted\">(no comment)</span>\n }\n </td>\n <td class=\"col-agent\">\n <span class=\"agent-name\">{{ row.agentName || '—' }}</span>\n </td>\n <td class=\"col-message\">\n @if (row.messageSnippet) {\n <span class=\"message-snippet\">{{ row.messageSnippet }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"col-rater\">\n <div class=\"rater-name\">{{ row.raterName || row.raterEmail || '—' }}</div>\n @if (row.raterEmail && row.raterName) {\n <div class=\"rater-email\">{{ row.raterEmail }}</div>\n }\n </td>\n <td class=\"col-when\">\n <span class=\"when\">{{ row.createdAt | date:'short' }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!--\n Bottom bar. When the filtered set spans multiple pages mj-pagination\n renders its own full-width `1-N of M | controls` row. When it fits\n on a single page mj-pagination self-hides, so the footer renders\n a single fallback summary line in its place.\n -->\n <!--\n Bottom bar: mj-pagination on the left (it has its own internal\n `1-N of M | nav controls` layout) + page-size selector hugging the\n right edge. The selector lives outside mj-pagination because the\n shared component doesn't expose a size-change output; the parent\n owns PageSize.\n -->\n <div class=\"pagination-bar\">\n @if (isSinglePage) {\n <span class=\"pagination-summary\">\n {{ rangeStart | number }}-{{ rangeEnd | number }} of {{ totalRowCount | number }}\n {{ totalRowCount === 1 ? 'rating' : 'ratings' }}\n </span>\n } @else {\n <mj-pagination\n class=\"feedback-pagination\"\n [TotalRowCount]=\"totalRowCount\"\n [PageNumber]=\"currentPage\"\n [PageSize]=\"pageSize\"\n [IsLoading]=\"loading\"\n (PageChange)=\"onPageChange($event)\">\n </mj-pagination>\n }\n\n <label class=\"page-size-control\">\n <span class=\"page-size-label\">Rows</span>\n <select\n class=\"page-size-select\"\n [ngModel]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\">\n @for (size of pageSizeOptions; track size) {\n <option [ngValue]=\"size\">{{ size }}</option>\n }\n </select>\n </label>\n </div>\n }\n }\n </div>\n }\n\n <!-- ===== Detail slide-out panel ===== -->\n @if (selectedRow) {\n <div class=\"slideout-backdrop\" (click)=\"closeDrawer()\"></div>\n }\n\n <aside class=\"slideout-panel\"\n [class.open]=\"!!selectedRow\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"slideout-title\">\n @if (selectedRow; as r) {\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <div class=\"slideout-title-text\">\n <h2 id=\"slideout-title\" class=\"slideout-title-line\">\n Feedback on {{ r.agentName || 'AI message' }}\n </h2>\n <div class=\"slideout-subtitle\">\n <span class=\"rating-badge\" [ngClass]=\"bandClassFor(r.rating)\">\n {{ r.rating }}<small>/10</small>\n </span>\n <span>\n Rated by <strong>{{ r.raterName || r.raterEmail || 'Unknown user' }}</strong>\n · {{ r.createdAt | date:'medium' }}\n </span>\n </div>\n </div>\n </div>\n <button class=\"slideout-close\" (click)=\"closeDrawer()\" title=\"Close (Esc)\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <div class=\"slideout-section\">\n <div class=\"section-label\">Reviewer Comment</div>\n @if (r.comments) {\n <div class=\"comment-body\">{{ r.comments }}</div>\n } @else {\n <div class=\"comment-body muted\">(no comment was provided)</div>\n }\n </div>\n\n <div class=\"slideout-section\">\n <div class=\"meta-grid\">\n <div class=\"meta-card\">\n <div class=\"meta-label\">Agent</div>\n <div class=\"meta-value\">{{ r.agentName || '—' }}</div>\n </div>\n <div class=\"meta-card\">\n <div class=\"meta-label\">Conversation</div>\n <div class=\"meta-value\">{{ r.conversationName || '—' }}</div>\n </div>\n <div class=\"meta-card\">\n <div class=\"meta-label\">Message Role</div>\n <div class=\"meta-value\">{{ r.messageRole || '—' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-section\">\n <div class=\"message-card\">\n <div class=\"message-card-header\">\n <i class=\"fa-solid fa-message\"></i> Rated Message\n </div>\n <div class=\"message-card-body\">\n @if (r.messageText) {\n {{ r.messageText }}\n } @else {\n <span class=\"muted\">(message text unavailable)</span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-footer\">\n <button mjButton variant=\"flat\" size=\"lg\" (click)=\"closeDrawer()\">Close</button>\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openConversation()\"\n [disabled]=\"!r.conversationID\"\n [title]=\"r.conversationID ? 'Open the source conversation' : 'No conversation linked'\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n Open Conversation\n </button>\n </div>\n }\n </aside>\n</div>\n"]}
|
|
@@ -8,18 +8,62 @@ export interface DashboardPreferencesResult {
|
|
|
8
8
|
preferences?: MJDashboardUserPreferenceEntity[];
|
|
9
9
|
}
|
|
10
10
|
export declare class DashboardPreferencesDialogComponent extends BaseAngularComponent implements OnInit {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
ApplicationId: string | null;
|
|
12
|
+
/** @deprecated Use {@link ApplicationId}. */
|
|
13
|
+
set applicationId(value: string | null);
|
|
14
|
+
/** @deprecated Use {@link ApplicationId}. */
|
|
15
|
+
get applicationId(): string | null;
|
|
16
|
+
Scope: 'Global' | 'App';
|
|
17
|
+
/** @deprecated Use {@link Scope}. */
|
|
18
|
+
set scope(value: 'Global' | 'App');
|
|
19
|
+
/** @deprecated Use {@link Scope}. */
|
|
20
|
+
get scope(): 'Global' | 'App';
|
|
21
|
+
Result: EventEmitter<DashboardPreferencesResult>;
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use {@link Result}.
|
|
24
|
+
*
|
|
25
|
+
* The same emitter under the old binding name, so a template still binding
|
|
26
|
+
* (result) keeps working. Must stay AFTER Result: class fields
|
|
27
|
+
* initialise in order, and the other way round this captures undefined.
|
|
28
|
+
*/
|
|
13
29
|
result: EventEmitter<DashboardPreferencesResult>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
30
|
+
AvailableDashboards: MJDashboardEntityExtended[];
|
|
31
|
+
/** @deprecated Use {@link AvailableDashboards}. */
|
|
32
|
+
get availableDashboards(): MJDashboardEntityExtended[];
|
|
33
|
+
/** @deprecated Use {@link AvailableDashboards}. */
|
|
34
|
+
set availableDashboards(value: MJDashboardEntityExtended[]);
|
|
35
|
+
ConfiguredDashboards: MJDashboardEntityExtended[];
|
|
36
|
+
/** @deprecated Use {@link ConfiguredDashboards}. */
|
|
37
|
+
get configuredDashboards(): MJDashboardEntityExtended[];
|
|
38
|
+
/** @deprecated Use {@link ConfiguredDashboards}. */
|
|
39
|
+
set configuredDashboards(value: MJDashboardEntityExtended[]);
|
|
40
|
+
ApplicationName: string;
|
|
41
|
+
/** @deprecated Use {@link ApplicationName}. */
|
|
42
|
+
get applicationName(): string;
|
|
43
|
+
/** @deprecated Use {@link ApplicationName}. */
|
|
44
|
+
set applicationName(value: string);
|
|
45
|
+
Loading: boolean;
|
|
46
|
+
/** @deprecated Use {@link Loading}. */
|
|
47
|
+
get loading(): boolean;
|
|
48
|
+
/** @deprecated Use {@link Loading}. */
|
|
49
|
+
set loading(value: boolean);
|
|
18
50
|
saving: boolean;
|
|
19
51
|
error: string | null;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
52
|
+
HasChanges: boolean;
|
|
53
|
+
/** @deprecated Use {@link HasChanges}. */
|
|
54
|
+
get hasChanges(): boolean;
|
|
55
|
+
/** @deprecated Use {@link HasChanges}. */
|
|
56
|
+
set hasChanges(value: boolean);
|
|
57
|
+
IsSysAdmin: boolean;
|
|
58
|
+
/** @deprecated Use {@link IsSysAdmin}. */
|
|
59
|
+
get isSysAdmin(): boolean;
|
|
60
|
+
/** @deprecated Use {@link IsSysAdmin}. */
|
|
61
|
+
set isSysAdmin(value: boolean);
|
|
62
|
+
PreferenceMode: 'personal' | 'system';
|
|
63
|
+
/** @deprecated Use {@link PreferenceMode}. */
|
|
64
|
+
get preferenceMode(): 'personal' | 'system';
|
|
65
|
+
/** @deprecated Use {@link PreferenceMode}. */
|
|
66
|
+
set preferenceMode(value: 'personal' | 'system');
|
|
23
67
|
private originalConfiguredIds;
|
|
24
68
|
private currentUserPreferences;
|
|
25
69
|
private allAvailableDashboards;
|
|
@@ -28,14 +72,24 @@ export declare class DashboardPreferencesDialogComponent extends BaseAngularComp
|
|
|
28
72
|
private loadApplicationName;
|
|
29
73
|
private loadCurrentPreferences;
|
|
30
74
|
private splitDashboards;
|
|
75
|
+
OnDrop(event: CdkDragDrop<MJDashboardEntityExtended[]>): void;
|
|
76
|
+
/** @deprecated Use {@link OnDrop}. */
|
|
31
77
|
onDrop(event: CdkDragDrop<MJDashboardEntityExtended[]>): void;
|
|
78
|
+
AddDashboard(dashboard: MJDashboardEntityExtended): void;
|
|
79
|
+
/** @deprecated Use {@link AddDashboard}. */
|
|
32
80
|
addDashboard(dashboard: MJDashboardEntityExtended): void;
|
|
81
|
+
RemoveDashboard(dashboard: MJDashboardEntityExtended): void;
|
|
82
|
+
/** @deprecated Use {@link RemoveDashboard}. */
|
|
33
83
|
removeDashboard(dashboard: MJDashboardEntityExtended): void;
|
|
84
|
+
OnPreferenceModeChange(): Promise<void>;
|
|
85
|
+
/** @deprecated Use {@link OnPreferenceModeChange}. */
|
|
34
86
|
onPreferenceModeChange(): Promise<void>;
|
|
35
87
|
private checkForChanges;
|
|
88
|
+
OnSave(): Promise<void>;
|
|
89
|
+
/** @deprecated Use {@link OnSave}. */
|
|
36
90
|
onSave(): Promise<void>;
|
|
37
91
|
onCancel(): void;
|
|
38
92
|
static ɵfac: i0.ɵɵFactoryDeclaration<DashboardPreferencesDialogComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DashboardPreferencesDialogComponent, "mj-dashboard-preferences-dialog", never, { "applicationId": { "alias": "applicationId"; "required": false; }; "scope": { "alias": "scope"; "required": false; }; }, { "result": "result"; }, never, never, false, never>;
|
|
93
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DashboardPreferencesDialogComponent, "mj-dashboard-preferences-dialog", never, { "ApplicationId": { "alias": "ApplicationId"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "Scope": { "alias": "Scope"; "required": false; }; "scope": { "alias": "scope"; "required": false; }; }, { "Result": "Result"; "result": "result"; }, never, never, false, never>;
|
|
40
94
|
}
|
|
41
95
|
//# sourceMappingURL=dashboard-preferences-dialog.component.d.ts.map
|
package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-preferences-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAsC,MAAM,wBAAwB,CAAC;AAEzF,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAuB,MAAM,+BAA+B,CAAC;AAGhI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,+BAA+B,EAAE,CAAC;CACjD;AAED,qBAMa,mCAAoC,SAAQ,oBAAqB,YAAW,MAAM;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"dashboard-preferences-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.ts"],"names":[],"mappings":"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"}
|