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

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 (82) 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/Integration/components/connections/connections.component.d.ts +5 -0
  22. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  23. package/dist/Integration/components/connections/connections.component.js +151 -136
  24. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  25. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  26. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +3 -2
  27. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  28. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -0
  29. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  30. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +17 -1
  31. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  32. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +52 -45
  33. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  34. package/dist/QueryBrowser/query-browser-resource.component.d.ts +11 -0
  35. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  36. package/dist/QueryBrowser/query-browser-resource.component.js +47 -10
  37. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  38. package/dist/Rubrics/catalog-grid.d.ts +4 -0
  39. package/dist/Rubrics/catalog-grid.d.ts.map +1 -0
  40. package/dist/Rubrics/catalog-grid.js +22 -0
  41. package/dist/Rubrics/catalog-grid.js.map +1 -0
  42. package/dist/Rubrics/rubrics-dashboard.component.d.ts +31 -0
  43. package/dist/Rubrics/rubrics-dashboard.component.d.ts.map +1 -0
  44. package/dist/Rubrics/rubrics-dashboard.component.js +285 -0
  45. package/dist/Rubrics/rubrics-dashboard.component.js.map +1 -0
  46. package/dist/Rubrics/rubrics-resource.component.d.ts +13 -0
  47. package/dist/Rubrics/rubrics-resource.component.d.ts.map +1 -0
  48. package/dist/Rubrics/rubrics-resource.component.js +42 -0
  49. package/dist/Rubrics/rubrics-resource.component.js.map +1 -0
  50. package/dist/Rubrics/scales-dashboard.component.d.ts +34 -0
  51. package/dist/Rubrics/scales-dashboard.component.d.ts.map +1 -0
  52. package/dist/Rubrics/scales-dashboard.component.js +204 -0
  53. package/dist/Rubrics/scales-dashboard.component.js.map +1 -0
  54. package/dist/Rubrics/scales-resource.component.d.ts +13 -0
  55. package/dist/Rubrics/scales-resource.component.d.ts.map +1 -0
  56. package/dist/Rubrics/scales-resource.component.js +42 -0
  57. package/dist/Rubrics/scales-resource.component.js.map +1 -0
  58. package/dist/Testing/components/testing-analytics.component.d.ts +15 -0
  59. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  60. package/dist/Testing/components/testing-analytics.component.js +465 -296
  61. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  62. package/dist/Testing/components/testing-review.component.d.ts +6 -0
  63. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  64. package/dist/Testing/components/testing-review.component.js +289 -173
  65. package/dist/Testing/components/testing-review.component.js.map +1 -1
  66. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +8 -1
  67. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  68. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +68 -43
  69. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  70. package/dist/module.d.ts +23 -22
  71. package/dist/module.d.ts.map +1 -1
  72. package/dist/module.js +7 -0
  73. package/dist/module.js.map +1 -1
  74. package/dist/public-api.d.ts +1 -0
  75. package/dist/public-api.d.ts.map +1 -1
  76. package/dist/public-api.js +1 -0
  77. package/dist/public-api.js.map +1 -1
  78. package/dist/rubrics-dashboards.module.d.ts +17 -0
  79. package/dist/rubrics-dashboards.module.d.ts.map +1 -0
  80. package/dist/rubrics-dashboards.module.js +76 -0
  81. package/dist/rubrics-dashboards.module.js.map +1 -0
  82. package/package.json +70 -64
@@ -0,0 +1,204 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';
8
+ import { CompositeKey, RunView } from '@memberjunction/core';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { BaseDashboard } from '@memberjunction/ng-shared';
11
+ import { CatalogGridTheme } from './catalog-grid';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "ag-grid-angular";
14
+ import * as i2 from "@memberjunction/ng-shared-generic";
15
+ import * as i3 from "@memberjunction/ng-ui-components";
16
+ const _forTrack0 = ($index, $item) => $item.Id;
17
+ function RubricScalesDashboardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelement(0, "mj-loading", 6);
19
+ } }
20
+ function RubricScalesDashboardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementStart(0, "p", 7);
22
+ i0.ɵɵtext(1);
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const ctx_r0 = i0.ɵɵnextContext();
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵtextInterpolate(ctx_r0.LoadError);
28
+ } }
29
+ function RubricScalesDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelement(0, "mj-empty-state", 8);
31
+ } }
32
+ function RubricScalesDashboardComponent_Conditional_12_For_3_Template(rf, ctx) { if (rf & 1) {
33
+ const _r3 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementStart(0, "article", 11)(1, "strong");
35
+ i0.ɵɵtext(2);
36
+ i0.ɵɵelementEnd();
37
+ i0.ɵɵelementStart(3, "span");
38
+ i0.ɵɵtext(4);
39
+ i0.ɵɵelementEnd();
40
+ i0.ɵɵelementStart(5, "span");
41
+ i0.ɵɵtext(6);
42
+ i0.ɵɵelementEnd();
43
+ i0.ɵɵelementStart(7, "button", 12);
44
+ i0.ɵɵlistener("click", function RubricScalesDashboardComponent_Conditional_12_For_3_Template_button_click_7_listener() { const row_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Open(row_r4.Id)); });
45
+ i0.ɵɵtext(8, "Open");
46
+ i0.ɵɵelementEnd()();
47
+ } if (rf & 2) {
48
+ const row_r4 = ctx.$implicit;
49
+ i0.ɵɵadvance(2);
50
+ i0.ɵɵtextInterpolate(row_r4.Name);
51
+ i0.ɵɵadvance(2);
52
+ i0.ɵɵtextInterpolate(row_r4.Type);
53
+ i0.ɵɵadvance(2);
54
+ i0.ɵɵtextInterpolate(row_r4.Frozen ? "Locked by a published rubric" : "Editable");
55
+ } }
56
+ function RubricScalesDashboardComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
57
+ const _r2 = i0.ɵɵgetCurrentView();
58
+ i0.ɵɵelementStart(0, "ag-grid-angular", 9);
59
+ i0.ɵɵlistener("rowClicked", function RubricScalesDashboardComponent_Conditional_12_Template_ag_grid_angular_rowClicked_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnRow($event)); });
60
+ i0.ɵɵelementEnd();
61
+ i0.ɵɵelementStart(1, "div", 10);
62
+ i0.ɵɵrepeaterCreate(2, RubricScalesDashboardComponent_Conditional_12_For_3_Template, 9, 3, "article", 11, _forTrack0);
63
+ i0.ɵɵelementEnd();
64
+ } if (rf & 2) {
65
+ const ctx_r0 = i0.ɵɵnextContext();
66
+ i0.ɵɵproperty("theme", ctx_r0.Theme)("columnDefs", ctx_r0.ColumnDefs)("gridOptions", ctx_r0.GridOptions)("rowData", ctx_r0.Visible);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵrepeater(ctx_r0.Visible);
69
+ } }
70
+ /** Scales list. A scale is frozen when a published version uses it. */
71
+ let RubricScalesDashboardComponent = class RubricScalesDashboardComponent extends BaseDashboard {
72
+ Loading = true;
73
+ LoadError = '';
74
+ Search = '';
75
+ Rows = [];
76
+ Theme = CatalogGridTheme();
77
+ GridOptions = { domLayout: 'autoHeight', suppressCellFocus: true, animateRows: true };
78
+ ColumnDefs = [
79
+ { field: 'Name', headerName: 'Name', flex: 2 },
80
+ { field: 'Type', headerName: 'Type', flex: 1 },
81
+ { field: 'Frozen', headerName: 'Published use', flex: 1, valueFormatter: params => params.value ? 'Locked by a published rubric' : 'Editable' },
82
+ ];
83
+ changeDetector = inject(ChangeDetectorRef);
84
+ initDashboard() { }
85
+ async GetResourceDisplayName() {
86
+ return 'Scales';
87
+ }
88
+ async loadData() {
89
+ this.Loading = true;
90
+ this.changeDetector.markForCheck();
91
+ try {
92
+ const view = RunView.FromMetadataProvider(this.ProviderToUse);
93
+ const user = this.ProviderToUse.CurrentUser;
94
+ const [scales, criteria, versions] = await view.RunViews([
95
+ { EntityName: 'MJ: Rubric Scales', ResultType: 'simple', MaxRows: 300, OrderBy: 'Name' },
96
+ { EntityName: 'MJ: Rubric Criteria', ResultType: 'simple', MaxRows: 2000 },
97
+ { EntityName: 'MJ: Rubric Versions', ExtraFilter: "Status='Published'", ResultType: 'simple', MaxRows: 500 },
98
+ ], user);
99
+ const failed = [scales, criteria, versions].find(result => !result.Success);
100
+ if (failed) {
101
+ this.LoadError = failed.ErrorMessage || 'Could not load scales.';
102
+ this.Rows = [];
103
+ return;
104
+ }
105
+ this.LoadError = '';
106
+ const published = new Set(((versions.Results ?? [])).map(row => String(row.ID).toLowerCase()));
107
+ const frozenScales = new Set(((criteria.Results ?? []))
108
+ .filter(row => published.has(String(row.RubricVersionID ?? '').toLowerCase()) && row.ScaleID)
109
+ .map(row => String(row.ScaleID).toLowerCase()));
110
+ this.Rows = ((scales.Results ?? [])).map(row => ({
111
+ Id: String(row.ID),
112
+ Name: String(row.Name ?? ''),
113
+ Type: String(row.ScaleType ?? ''),
114
+ Frozen: frozenScales.has(String(row.ID).toLowerCase()),
115
+ }));
116
+ }
117
+ finally {
118
+ this.Loading = false;
119
+ this.changeDetector.markForCheck();
120
+ this.publishAgent();
121
+ }
122
+ }
123
+ ngAfterViewInit() {
124
+ this.publishAgent();
125
+ }
126
+ get Visible() {
127
+ const query = this.Search.trim().toLowerCase();
128
+ if (!query)
129
+ return this.Rows;
130
+ return this.Rows.filter(row => `${row.Name} ${row.Type}`.toLowerCase().includes(query));
131
+ }
132
+ OnSearch(value) {
133
+ this.Search = value;
134
+ this.publishAgent();
135
+ this.changeDetector.markForCheck();
136
+ }
137
+ Open(id) {
138
+ this.navigationService.OpenEntityRecord('MJ: Rubric Scales', CompositeKey.FromID(id));
139
+ }
140
+ OnRow(event) {
141
+ if (event.data)
142
+ this.Open(event.data.Id);
143
+ }
144
+ NewScale() {
145
+ this.navigationService.OpenNewEntityRecord('MJ: Rubric Scales');
146
+ }
147
+ publishAgent() {
148
+ this.navigationService.SetAgentContext(this, { Search: this.Search, RowCount: this.Visible.length });
149
+ this.navigationService.SetAgentClientTools(this, [
150
+ {
151
+ Name: 'OpenScale',
152
+ Description: 'Open a rubric scale record by its id.',
153
+ ParameterSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },
154
+ Handler: async (params) => {
155
+ const id = String(params['id'] ?? '');
156
+ if (!this.Rows.some(row => row.Id.toLowerCase() === id.toLowerCase()))
157
+ return { Success: false, ErrorMessage: 'That scale is not in the list.' };
158
+ this.Open(id);
159
+ return { Success: true };
160
+ },
161
+ },
162
+ {
163
+ Name: 'NewScale',
164
+ Description: 'Start a new rubric scale.',
165
+ ParameterSchema: { type: 'object', properties: {} },
166
+ Handler: async () => {
167
+ this.NewScale();
168
+ return { Success: true };
169
+ },
170
+ },
171
+ ]);
172
+ }
173
+ static ɵfac = /*@__PURE__*/ (() => { let ɵRubricScalesDashboardComponent_BaseFactory; return function RubricScalesDashboardComponent_Factory(__ngFactoryType__) { return (ɵRubricScalesDashboardComponent_BaseFactory || (ɵRubricScalesDashboardComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RubricScalesDashboardComponent)))(__ngFactoryType__ || RubricScalesDashboardComponent); }; })();
174
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RubricScalesDashboardComponent, selectors: [["mj-rubric-scales-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 2, consts: [["Title", "Scales", "Icon", "fa-solid fa-sliders", "Subtitle", "Level and numeric scales used by criteria."], ["actions", ""], [3, "Clicked"], ["mjButton", "", "variant", "primary", "type", "button", 3, "click"], ["toolbar", ""], ["Placeholder", "Search scales", 3, "ValueChange", "Value"], ["text", "Loading scales..."], ["role", "alert"], ["Icon", "fa-solid fa-sliders", "Title", "No scales", "Message", "Create a scale before a criterion can use it."], [1, "catalog-grid", 3, "rowClicked", "theme", "columnDefs", "gridOptions", "rowData"], [1, "catalog-cards"], [1, "catalog-card"], ["mjButton", "", "variant", "outline", "size", "sm", "type", "button", 3, "click"]], template: function RubricScalesDashboardComponent_Template(rf, ctx) { if (rf & 1) {
175
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "mj-refresh-button", 2);
176
+ i0.ɵɵlistener("Clicked", function RubricScalesDashboardComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.Refresh(); });
177
+ i0.ɵɵelementEnd();
178
+ i0.ɵɵelementStart(4, "button", 3);
179
+ i0.ɵɵlistener("click", function RubricScalesDashboardComponent_Template_button_click_4_listener() { return ctx.NewScale(); });
180
+ i0.ɵɵtext(5, "New scale");
181
+ i0.ɵɵelementEnd()();
182
+ i0.ɵɵelementStart(6, "div", 4)(7, "mj-page-search", 5);
183
+ i0.ɵɵlistener("ValueChange", function RubricScalesDashboardComponent_Template_mj_page_search_ValueChange_7_listener($event) { return ctx.OnSearch($event); });
184
+ i0.ɵɵelementEnd()()();
185
+ i0.ɵɵelementStart(8, "mj-page-body");
186
+ i0.ɵɵconditionalCreate(9, RubricScalesDashboardComponent_Conditional_9_Template, 1, 0, "mj-loading", 6)(10, RubricScalesDashboardComponent_Conditional_10_Template, 2, 1, "p", 7)(11, RubricScalesDashboardComponent_Conditional_11_Template, 1, 0, "mj-empty-state", 8)(12, RubricScalesDashboardComponent_Conditional_12_Template, 4, 4);
187
+ i0.ɵɵelementEnd()();
188
+ } if (rf & 2) {
189
+ i0.ɵɵadvance(7);
190
+ i0.ɵɵproperty("Value", ctx.Search);
191
+ i0.ɵɵadvance(2);
192
+ i0.ɵɵconditional(ctx.Loading ? 9 : ctx.LoadError ? 10 : ctx.Visible.length === 0 ? 11 : 12);
193
+ } }, dependencies: [i1.AgGridAngular, i2.LoadingComponent, i3.MJButtonDirective, i3.MJEmptyStateComponent, i3.MJPageBodyComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageSearchComponent, i3.MJRefreshButtonComponent], styles: [".catalog-grid[_ngcontent-%COMP%] { width: 100%; }\n.catalog-note[_ngcontent-%COMP%] { display: block; color: var(--mj-text-secondary); font-size: 0.85rem; }\n.catalog-cards[_ngcontent-%COMP%] { display: none; }\n.catalog-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2, 0.5rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n padding: var(--mj-space-3, 0.75rem);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n@media (max-width: 520px) {\n .catalog-grid[_ngcontent-%COMP%] { display: none; }\n .catalog-cards[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: var(--mj-space-3, 0.75rem); }\n}"], changeDetection: 0 });
194
+ };
195
+ RubricScalesDashboardComponent = __decorate([
196
+ RegisterClass(BaseDashboard, 'RubricScalesDashboard')
197
+ ], RubricScalesDashboardComponent);
198
+ export { RubricScalesDashboardComponent };
199
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RubricScalesDashboardComponent, [{
200
+ type: Component,
201
+ args: [{ standalone: false, selector: 'mj-rubric-scales-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header Title=\"Scales\" Icon=\"fa-solid fa-sliders\" Subtitle=\"Level and numeric scales used by criteria.\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" type=\"button\" (click)=\"NewScale()\">New scale</button>\n </div>\n <div toolbar>\n <mj-page-search Placeholder=\"Search scales\" [Value]=\"Search\" (ValueChange)=\"OnSearch($event)\"></mj-page-search>\n </div>\n </mj-page-header>\n <mj-page-body>\n @if (Loading) {\n <mj-loading text=\"Loading scales...\"></mj-loading>\n } @else if (LoadError) {\n <p role=\"alert\">{{ LoadError }}</p>\n } @else if (Visible.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-sliders\" Title=\"No scales\" Message=\"Create a scale before a criterion can use it.\"></mj-empty-state>\n } @else {\n <ag-grid-angular\n class=\"catalog-grid\"\n [theme]=\"Theme\"\n [columnDefs]=\"ColumnDefs\"\n [gridOptions]=\"GridOptions\"\n [rowData]=\"Visible\"\n (rowClicked)=\"OnRow($event)\">\n </ag-grid-angular>\n <div class=\"catalog-cards\">\n @for (row of Visible; track row.Id) {\n <article class=\"catalog-card\">\n <strong>{{ row.Name }}</strong>\n <span>{{ row.Type }}</span>\n <span>{{ row.Frozen ? 'Locked by a published rubric' : 'Editable' }}</span>\n <button mjButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"Open(row.Id)\">Open</button>\n </article>\n }\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: [".catalog-grid { width: 100%; }\n.catalog-note { display: block; color: var(--mj-text-secondary); font-size: 0.85rem; }\n.catalog-cards { display: none; }\n.catalog-card {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2, 0.5rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n padding: var(--mj-space-3, 0.75rem);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n@media (max-width: 520px) {\n .catalog-grid { display: none; }\n .catalog-cards { display: flex; flex-direction: column; gap: var(--mj-space-3, 0.75rem); }\n}\n"] }]
202
+ }], null, null); })();
203
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RubricScalesDashboardComponent, { className: "RubricScalesDashboardComponent", filePath: "src/Rubrics/scales-dashboard.component.ts", lineNumber: 26 }); })();
204
+ //# sourceMappingURL=scales-dashboard.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scales-dashboard.component.js","sourceRoot":"","sources":["../../src/Rubrics/scales-dashboard.component.ts","../../src/Rubrics/scales-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, AfterViewInit, inject } from '@angular/core';\nimport { ColDef, GridOptions, RowClickedEvent } from 'ag-grid-community';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { CatalogGridTheme } from './catalog-grid';\n\ntype Row = Record<string, unknown>;\n\nexport interface ScaleCatalogRow {\n Id: string;\n Name: string;\n Type: string;\n Frozen: boolean;\n}\n\n/** Scales list. A scale is frozen when a published version uses it. */\n@RegisterClass(BaseDashboard, 'RubricScalesDashboard')\n@Component({\n standalone: false,\n selector: 'mj-rubric-scales-dashboard',\n templateUrl: './scales-dashboard.component.html',\n styleUrls: ['./rubrics-catalog.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RubricScalesDashboardComponent extends BaseDashboard implements AfterViewInit {\n public Loading = true;\n public LoadError = '';\n public Search = '';\n public Rows: ScaleCatalogRow[] = [];\n public readonly Theme = CatalogGridTheme();\n public readonly GridOptions: GridOptions<ScaleCatalogRow> = { domLayout: 'autoHeight', suppressCellFocus: true, animateRows: true };\n public readonly ColumnDefs: ColDef<ScaleCatalogRow>[] = [\n { field: 'Name', headerName: 'Name', flex: 2 },\n { field: 'Type', headerName: 'Type', flex: 1 },\n { field: 'Frozen', headerName: 'Published use', flex: 1, valueFormatter: params => params.value ? 'Locked by a published rubric' : 'Editable' },\n ];\n private readonly changeDetector = inject(ChangeDetectorRef);\n\n protected initDashboard(): void {}\n\n public override async GetResourceDisplayName(): Promise<string> {\n return 'Scales';\n }\n\n protected async loadData(): Promise<void> {\n this.Loading = true;\n this.changeDetector.markForCheck();\n try {\n const view = RunView.FromMetadataProvider(this.ProviderToUse);\n const user = this.ProviderToUse.CurrentUser;\n const [scales, criteria, versions] = await view.RunViews([\n { EntityName: 'MJ: Rubric Scales', ResultType: 'simple', MaxRows: 300, OrderBy: 'Name' },\n { EntityName: 'MJ: Rubric Criteria', ResultType: 'simple', MaxRows: 2000 },\n { EntityName: 'MJ: Rubric Versions', ExtraFilter: \"Status='Published'\", ResultType: 'simple', MaxRows: 500 },\n ], user);\n const failed = [scales, criteria, versions].find(result => !result.Success);\n if (failed) {\n this.LoadError = failed.ErrorMessage || 'Could not load scales.';\n this.Rows = [];\n return;\n }\n this.LoadError = '';\n const published = new Set(((versions.Results as Row[] ?? [])).map(row => String(row.ID).toLowerCase()));\n const frozenScales = new Set(((criteria.Results as Row[] ?? []))\n .filter(row => published.has(String(row.RubricVersionID ?? '').toLowerCase()) && row.ScaleID)\n .map(row => String(row.ScaleID).toLowerCase()));\n this.Rows = ((scales.Results as Row[] ?? [])).map(row => ({\n Id: String(row.ID),\n Name: String(row.Name ?? ''),\n Type: String(row.ScaleType ?? ''),\n Frozen: frozenScales.has(String(row.ID).toLowerCase()),\n }));\n } finally {\n this.Loading = false;\n this.changeDetector.markForCheck();\n this.publishAgent();\n }\n }\n\n public ngAfterViewInit(): void {\n this.publishAgent();\n }\n\n public get Visible(): ScaleCatalogRow[] {\n const query = this.Search.trim().toLowerCase();\n if (!query) return this.Rows;\n return this.Rows.filter(row => `${row.Name} ${row.Type}`.toLowerCase().includes(query));\n }\n\n public OnSearch(value: string): void {\n this.Search = value;\n this.publishAgent();\n this.changeDetector.markForCheck();\n }\n\n public Open(id: string): void {\n this.navigationService.OpenEntityRecord('MJ: Rubric Scales', CompositeKey.FromID(id));\n }\n\n public OnRow(event: RowClickedEvent<ScaleCatalogRow>): void {\n if (event.data) this.Open(event.data.Id);\n }\n\n public NewScale(): void {\n this.navigationService.OpenNewEntityRecord('MJ: Rubric Scales');\n }\n\n private publishAgent(): void {\n this.navigationService.SetAgentContext(this, { Search: this.Search, RowCount: this.Visible.length });\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'OpenScale',\n Description: 'Open a rubric scale record by its id.',\n ParameterSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },\n Handler: async (params: Record<string, unknown>) => {\n const id = String(params['id'] ?? '');\n if (!this.Rows.some(row => row.Id.toLowerCase() === id.toLowerCase())) return { Success: false, ErrorMessage: 'That scale is not in the list.' };\n this.Open(id);\n return { Success: true };\n },\n },\n {\n Name: 'NewScale',\n Description: 'Start a new rubric scale.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.NewScale();\n return { Success: true };\n },\n },\n ]);\n }\n}\n","<mj-page-layout>\n <mj-page-header Title=\"Scales\" Icon=\"fa-solid fa-sliders\" Subtitle=\"Level and numeric scales used by criteria.\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" type=\"button\" (click)=\"NewScale()\">New scale</button>\n </div>\n <div toolbar>\n <mj-page-search Placeholder=\"Search scales\" [Value]=\"Search\" (ValueChange)=\"OnSearch($event)\"></mj-page-search>\n </div>\n </mj-page-header>\n <mj-page-body>\n @if (Loading) {\n <mj-loading text=\"Loading scales...\"></mj-loading>\n } @else if (LoadError) {\n <p role=\"alert\">{{ LoadError }}</p>\n } @else if (Visible.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-sliders\" Title=\"No scales\" Message=\"Create a scale before a criterion can use it.\"></mj-empty-state>\n } @else {\n <ag-grid-angular\n class=\"catalog-grid\"\n [theme]=\"Theme\"\n [columnDefs]=\"ColumnDefs\"\n [gridOptions]=\"GridOptions\"\n [rowData]=\"Visible\"\n (rowClicked)=\"OnRow($event)\">\n </ag-grid-angular>\n <div class=\"catalog-cards\">\n @for (row of Visible; track row.Id) {\n <article class=\"catalog-card\">\n <strong>{{ row.Name }}</strong>\n <span>{{ row.Type }}</span>\n <span>{{ row.Frozen ? 'Locked by a published rubric' : 'Editable' }}</span>\n <button mjButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"Open(row.Id)\">Open</button>\n </article>\n }\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -0,0 +1,13 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { ResourceData } from '@memberjunction/core-entities';
3
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
4
+ import * as i0 from "@angular/core";
5
+ /** Thin nav shim for the scales list. */
6
+ export declare class RubricScalesResourceComponent extends BaseResourceComponent implements OnInit {
7
+ ngOnInit(): void;
8
+ GetResourceDisplayName(_data: ResourceData): Promise<string>;
9
+ GetResourceIconClass(_data: ResourceData): Promise<string>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<RubricScalesResourceComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<RubricScalesResourceComponent, "mj-rubric-scales-resource", never, {}, {}, never, never, false, never>;
12
+ }
13
+ //# sourceMappingURL=scales-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scales-resource.component.d.ts","sourceRoot":"","sources":["../../src/Rubrics/scales-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAElE,yCAAyC;AACzC,qBAMa,6BAA8B,SAAQ,qBAAsB,YAAW,MAAM;IACtE,QAAQ,IAAI,IAAI;IAKV,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAVvE,6BAA6B;2CAA7B,6BAA6B;CAazC"}
@@ -0,0 +1,42 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./scales-dashboard.component";
12
+ /** Thin nav shim for the scales list. */
13
+ let RubricScalesResourceComponent = class RubricScalesResourceComponent extends BaseResourceComponent {
14
+ ngOnInit() {
15
+ super.ngOnInit();
16
+ this.NotifyLoadComplete();
17
+ }
18
+ async GetResourceDisplayName(_data) {
19
+ return 'Scales';
20
+ }
21
+ async GetResourceIconClass(_data) {
22
+ return 'fa-solid fa-sliders';
23
+ }
24
+ static ɵfac = /*@__PURE__*/ (() => { let ɵRubricScalesResourceComponent_BaseFactory; return function RubricScalesResourceComponent_Factory(__ngFactoryType__) { return (ɵRubricScalesResourceComponent_BaseFactory || (ɵRubricScalesResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RubricScalesResourceComponent)))(__ngFactoryType__ || RubricScalesResourceComponent); }; })();
25
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RubricScalesResourceComponent, selectors: [["mj-rubric-scales-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, template: function RubricScalesResourceComponent_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelement(0, "mj-rubric-scales-dashboard");
27
+ } }, dependencies: [i1.RubricScalesDashboardComponent], encapsulation: 2 });
28
+ };
29
+ RubricScalesResourceComponent = __decorate([
30
+ RegisterClass(BaseResourceComponent, 'RubricScalesResource')
31
+ ], RubricScalesResourceComponent);
32
+ export { RubricScalesResourceComponent };
33
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RubricScalesResourceComponent, [{
34
+ type: Component,
35
+ args: [{
36
+ standalone: false,
37
+ selector: 'mj-rubric-scales-resource',
38
+ template: `<mj-rubric-scales-dashboard></mj-rubric-scales-dashboard>`,
39
+ }]
40
+ }], null, null); })();
41
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RubricScalesResourceComponent, { className: "RubricScalesResourceComponent", filePath: "src/Rubrics/scales-resource.component.ts", lineNumber: 13 }); })();
42
+ //# sourceMappingURL=scales-resource.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scales-resource.component.js","sourceRoot":"","sources":["../../src/Rubrics/scales-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;AAElE,yCAAyC;AAOlC,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,qBAAqB;IACpD,QAAQ;QACpB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEe,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC5D,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEe,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC1D,OAAO,qBAAqB,CAAC;IACjC,CAAC;iSAZQ,6BAA6B,yBAA7B,6BAA6B;6DAA7B,6BAA6B;YAF3B,6CAAyD;;;AAE3D,6BAA6B;IANzC,aAAa,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;GAMhD,6BAA6B,CAazC;;iFAbY,6BAA6B;cALzC,SAAS;eAAC;gBACP,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,2DAA2D;aACxE;;kFACY,6BAA6B","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n/** Thin nav shim for the scales list. */\n@RegisterClass(BaseResourceComponent, 'RubricScalesResource')\n@Component({\n standalone: false,\n selector: 'mj-rubric-scales-resource',\n template: `<mj-rubric-scales-dashboard></mj-rubric-scales-dashboard>`,\n})\nexport class RubricScalesResourceComponent extends BaseResourceComponent implements OnInit {\n public override ngOnInit(): void {\n super.ngOnInit();\n this.NotifyLoadComplete();\n }\n\n public override async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Scales';\n }\n\n public override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-sliders';\n }\n}\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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"}