@memberjunction/ng-dashboards 5.39.0 → 5.40.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.
Files changed (129) hide show
  1. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +128 -4
  2. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  3. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +548 -145
  4. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  5. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  6. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  7. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  8. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  9. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  10. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  11. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  12. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  13. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  14. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  15. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  16. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  17. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  18. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  19. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  20. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  21. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  22. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  23. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  24. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  25. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  26. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  27. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  28. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  29. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +100 -2
  30. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  31. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +603 -213
  32. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  33. package/dist/AI/components/autotagging/shared/classify.format.d.ts +15 -0
  34. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -1
  35. package/dist/AI/components/autotagging/shared/classify.format.js +51 -0
  36. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -1
  37. package/dist/AI/components/autotagging/shared/classify.types.d.ts +43 -0
  38. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -1
  39. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -1
  40. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +38 -1
  41. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -1
  42. package/dist/AI/components/autotagging/tabs/history-tab.component.js +185 -68
  43. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -1
  44. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +10 -1
  45. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -1
  46. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +249 -188
  47. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -1
  48. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +12 -1
  49. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  50. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +377 -296
  51. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  52. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +8 -0
  53. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -1
  54. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +112 -68
  55. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -1
  56. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +9 -0
  57. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -1
  58. package/dist/AI/components/autotagging/tabs/types-tab.component.js +87 -36
  59. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -1
  60. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  61. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  62. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -3
  63. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  64. package/dist/AI/components/execution-monitoring.component.js +1 -1
  65. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  66. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  67. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  68. package/dist/AI/components/tags/tags-resource.component.js +28 -6
  69. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  70. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  71. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  72. package/dist/AI/components/vectors/vector-management-resource.component.js +330 -302
  73. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  74. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  75. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  76. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  77. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  78. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  79. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  80. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  81. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  82. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  83. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  84. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +12 -9
  85. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  86. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  87. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  88. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -120
  89. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  90. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  91. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  92. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  93. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  94. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  95. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  96. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  97. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  98. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  99. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  100. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  101. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  102. package/dist/KnowledgeHub/index.d.ts +3 -0
  103. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  104. package/dist/KnowledgeHub/index.js +3 -0
  105. package/dist/KnowledgeHub/index.js.map +1 -1
  106. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  107. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  108. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  109. package/dist/ai-dashboards.module.d.ts +48 -38
  110. package/dist/ai-dashboards.module.d.ts.map +1 -1
  111. package/dist/ai-dashboards.module.js +41 -1
  112. package/dist/ai-dashboards.module.js.map +1 -1
  113. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  114. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  115. package/dist/data-explorer-dashboards.module.js +5 -14
  116. package/dist/data-explorer-dashboards.module.js.map +1 -1
  117. package/dist/public-api.d.ts +3 -0
  118. package/dist/public-api.d.ts.map +1 -1
  119. package/dist/public-api.js +3 -0
  120. package/dist/public-api.js.map +1 -1
  121. package/package.json +57 -55
  122. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  123. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  124. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  125. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  126. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  127. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  128. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  129. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -20,7 +20,8 @@ import { formatTokenCount } from '../shared/classify.format';
20
20
  import * as i0 from "@angular/core";
21
21
  import * as i1 from "@angular/forms";
22
22
  import * as i2 from "@memberjunction/ng-ui-components";
23
- import * as i3 from "@angular/common";
23
+ import * as i3 from "../components/classify-overview-analytics.component";
24
+ import * as i4 from "@angular/common";
24
25
  const _forTrack0 = ($index, $item) => $item.Label;
25
26
  const _forTrack1 = ($index, $item) => $item.Name + $item.SourceName + $item.TimeAgo;
26
27
  const _forTrack2 = ($index, $item) => $item.ID;
@@ -28,11 +29,11 @@ const _forTrack3 = ($index, $item) => $item.Tag;
28
29
  const _forTrack4 = ($index, $item) => $item.Name;
29
30
  const _forTrack5 = ($index, $item) => $item.SourceName;
30
31
  function ClassifyPipelineTabComponent_For_11_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
31
- i0.ɵɵelement(0, "i", 50);
32
+ i0.ɵɵelement(0, "i", 53);
32
33
  } }
33
34
  function ClassifyPipelineTabComponent_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "div", 49);
35
- i0.ɵɵconditionalCreate(1, ClassifyPipelineTabComponent_For_11_Conditional_6_Conditional_1_Template, 1, 0, "i", 50);
35
+ i0.ɵɵelementStart(0, "div", 52);
36
+ i0.ɵɵconditionalCreate(1, ClassifyPipelineTabComponent_For_11_Conditional_6_Conditional_1_Template, 1, 0, "i", 53);
36
37
  i0.ɵɵtext(2);
37
38
  i0.ɵɵelementEnd();
38
39
  } if (rf & 2) {
@@ -44,14 +45,14 @@ function ClassifyPipelineTabComponent_For_11_Conditional_6_Template(rf, ctx) { i
44
45
  i0.ɵɵtextInterpolate1(" ", kpi_r1.Trend, " ");
45
46
  } }
46
47
  function ClassifyPipelineTabComponent_For_11_Template(rf, ctx) { if (rf & 1) {
47
- i0.ɵɵelementStart(0, "div", 9)(1, "div", 46);
48
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 49);
48
49
  i0.ɵɵtext(2);
49
50
  i0.ɵɵpipe(3, "number");
50
51
  i0.ɵɵelementEnd();
51
- i0.ɵɵelementStart(4, "div", 47);
52
+ i0.ɵɵelementStart(4, "div", 50);
52
53
  i0.ɵɵtext(5);
53
54
  i0.ɵɵelementEnd();
54
- i0.ɵɵconditionalCreate(6, ClassifyPipelineTabComponent_For_11_Conditional_6_Template, 3, 4, "div", 48);
55
+ i0.ɵɵconditionalCreate(6, ClassifyPipelineTabComponent_For_11_Conditional_6_Template, 3, 4, "div", 51);
55
56
  i0.ɵɵelementEnd();
56
57
  } if (rf & 2) {
57
58
  const kpi_r1 = ctx.$implicit;
@@ -64,55 +65,55 @@ function ClassifyPipelineTabComponent_For_11_Template(rf, ctx) { if (rf & 1) {
64
65
  i0.ɵɵadvance();
65
66
  i0.ɵɵconditional(kpi_r1.Trend ? 6 : -1);
66
67
  } }
67
- function ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelement(0, "i", 53);
68
+ function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelement(0, "i", 56);
69
70
  } }
70
- function ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
71
- i0.ɵɵelement(0, "i", 54);
71
+ function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
72
+ i0.ɵɵelement(0, "i", 57);
72
73
  } }
73
- function ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
74
+ function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
74
75
  i0.ɵɵelement(0, "i");
75
76
  } if (rf & 2) {
76
77
  const stage_r2 = i0.ɵɵnextContext().$implicit;
77
78
  i0.ɵɵclassMap(stage_r2.Icon);
78
79
  } }
79
- function ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
80
- i0.ɵɵelement(0, "div", 58);
80
+ function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
81
+ i0.ɵɵelement(0, "div", 61);
81
82
  } if (rf & 2) {
82
83
  const stage_r2 = i0.ɵɵnextContext().$implicit;
83
84
  i0.ɵɵclassProp("connector-complete", stage_r2.Status === "complete");
84
85
  } }
85
- function ClassifyPipelineTabComponent_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
86
- i0.ɵɵelementStart(0, "div", 51)(1, "div", 52);
87
- i0.ɵɵconditionalCreate(2, ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_2_Template, 1, 0, "i", 53)(3, ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_3_Template, 1, 0, "i", 54)(4, ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_4_Template, 1, 2, "i", 55);
86
+ function ClassifyPipelineTabComponent_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelementStart(0, "div", 54)(1, "div", 55);
88
+ i0.ɵɵconditionalCreate(2, ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_2_Template, 1, 0, "i", 56)(3, ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_3_Template, 1, 0, "i", 57)(4, ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_4_Template, 1, 2, "i", 58);
88
89
  i0.ɵɵelementEnd();
89
- i0.ɵɵelementStart(5, "div", 56);
90
+ i0.ɵɵelementStart(5, "div", 59);
90
91
  i0.ɵɵtext(6);
91
92
  i0.ɵɵelementEnd()();
92
- i0.ɵɵconditionalCreate(7, ClassifyPipelineTabComponent_Conditional_14_For_2_Conditional_7_Template, 1, 2, "div", 57);
93
+ i0.ɵɵconditionalCreate(7, ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_7_Template, 1, 2, "div", 60);
93
94
  } if (rf & 2) {
94
95
  const stage_r2 = ctx.$implicit;
95
- const ɵ$index_44_r3 = ctx.$index;
96
- const ɵ$count_44_r4 = ctx.$count;
96
+ const ɵ$index_48_r3 = ctx.$index;
97
+ const ɵ$count_48_r4 = ctx.$count;
97
98
  i0.ɵɵclassProp("stage-idle", stage_r2.Status === "idle")("stage-active", stage_r2.Status === "active")("stage-complete", stage_r2.Status === "complete");
98
99
  i0.ɵɵadvance(2);
99
100
  i0.ɵɵconditional(stage_r2.Status === "active" ? 2 : stage_r2.Status === "complete" ? 3 : 4);
100
101
  i0.ɵɵadvance(4);
101
102
  i0.ɵɵtextInterpolate(stage_r2.Name);
102
103
  i0.ɵɵadvance();
103
- i0.ɵɵconditional(!(ɵ$index_44_r3 === ɵ$count_44_r4 - 1) ? 7 : -1);
104
+ i0.ɵɵconditional(!(ɵ$index_48_r3 === ɵ$count_48_r4 - 1) ? 7 : -1);
104
105
  } }
105
- function ClassifyPipelineTabComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
106
- i0.ɵɵelementStart(0, "div", 12);
107
- i0.ɵɵrepeaterCreate(1, ClassifyPipelineTabComponent_Conditional_14_For_2_Template, 8, 9, null, null, _forTrack4);
106
+ function ClassifyPipelineTabComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
107
+ i0.ɵɵelementStart(0, "div", 14);
108
+ i0.ɵɵrepeaterCreate(1, ClassifyPipelineTabComponent_Conditional_16_For_2_Template, 8, 9, null, null, _forTrack4);
108
109
  i0.ɵɵelementEnd();
109
110
  } if (rf & 2) {
110
111
  const ctx_r4 = i0.ɵɵnextContext();
111
112
  i0.ɵɵadvance();
112
113
  i0.ɵɵrepeater(ctx_r4.PipelineStages);
113
114
  } }
114
- function ClassifyPipelineTabComponent_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "div", 64);
115
+ function ClassifyPipelineTabComponent_Conditional_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelementStart(0, "div", 67);
116
117
  i0.ɵɵtext(1);
117
118
  i0.ɵɵelementEnd();
118
119
  } if (rf & 2) {
@@ -120,44 +121,44 @@ function ClassifyPipelineTabComponent_Conditional_15_Conditional_9_Template(rf,
120
121
  i0.ɵɵadvance();
121
122
  i0.ɵɵtextInterpolate(ctx_r4.RunCurrentItem);
122
123
  } }
123
- function ClassifyPipelineTabComponent_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
124
+ function ClassifyPipelineTabComponent_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
124
125
  const _r7 = i0.ɵɵgetCurrentView();
125
- i0.ɵɵelementStart(0, "button", 70);
126
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_15_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onPause()); });
127
- i0.ɵɵelement(1, "i", 71);
126
+ i0.ɵɵelementStart(0, "button", 73);
127
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_17_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onPause()); });
128
+ i0.ɵɵelement(1, "i", 74);
128
129
  i0.ɵɵtext(2, " Pause ");
129
130
  i0.ɵɵelementEnd();
130
131
  } if (rf & 2) {
131
132
  const ctx_r4 = i0.ɵɵnextContext(2);
132
133
  i0.ɵɵproperty("disabled", !ctx_r4.CurrentProcessRunID);
133
134
  } }
134
- function ClassifyPipelineTabComponent_Conditional_15_Conditional_12_Template(rf, ctx) { if (rf & 1) {
135
+ function ClassifyPipelineTabComponent_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
135
136
  const _r8 = i0.ɵɵgetCurrentView();
136
- i0.ɵɵelementStart(0, "button", 72);
137
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_15_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onResume()); });
138
- i0.ɵɵelement(1, "i", 73);
137
+ i0.ɵɵelementStart(0, "button", 75);
138
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_17_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onResume()); });
139
+ i0.ɵɵelement(1, "i", 76);
139
140
  i0.ɵɵtext(2, " Resume ");
140
141
  i0.ɵɵelementEnd();
141
142
  } }
142
- function ClassifyPipelineTabComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
143
+ function ClassifyPipelineTabComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
143
144
  const _r6 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "div", 13)(1, "div", 59)(2, "span", 60);
145
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 62)(2, "span", 63);
145
146
  i0.ɵɵtext(3);
146
147
  i0.ɵɵelementEnd();
147
- i0.ɵɵelementStart(4, "span", 61);
148
+ i0.ɵɵelementStart(4, "span", 64);
148
149
  i0.ɵɵtext(5);
149
150
  i0.ɵɵpipe(6, "number");
150
151
  i0.ɵɵelementEnd()();
151
- i0.ɵɵelementStart(7, "div", 62);
152
- i0.ɵɵelement(8, "div", 63);
153
- i0.ɵɵelementEnd();
154
- i0.ɵɵconditionalCreate(9, ClassifyPipelineTabComponent_Conditional_15_Conditional_9_Template, 2, 1, "div", 64);
155
- i0.ɵɵelementStart(10, "div", 65);
156
- i0.ɵɵconditionalCreate(11, ClassifyPipelineTabComponent_Conditional_15_Conditional_11_Template, 3, 1, "button", 66);
157
- i0.ɵɵconditionalCreate(12, ClassifyPipelineTabComponent_Conditional_15_Conditional_12_Template, 3, 0, "button", 67);
158
- i0.ɵɵelementStart(13, "button", 68);
159
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_15_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r6); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onCancel()); });
160
- i0.ɵɵelement(14, "i", 69);
152
+ i0.ɵɵelementStart(7, "div", 65);
153
+ i0.ɵɵelement(8, "div", 66);
154
+ i0.ɵɵelementEnd();
155
+ i0.ɵɵconditionalCreate(9, ClassifyPipelineTabComponent_Conditional_17_Conditional_9_Template, 2, 1, "div", 67);
156
+ i0.ɵɵelementStart(10, "div", 68);
157
+ i0.ɵɵconditionalCreate(11, ClassifyPipelineTabComponent_Conditional_17_Conditional_11_Template, 3, 1, "button", 69);
158
+ i0.ɵɵconditionalCreate(12, ClassifyPipelineTabComponent_Conditional_17_Conditional_12_Template, 3, 0, "button", 70);
159
+ i0.ɵɵelementStart(13, "button", 71);
160
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_17_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r6); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onCancel()); });
161
+ i0.ɵɵelement(14, "i", 72);
161
162
  i0.ɵɵtext(15, " Cancel ");
162
163
  i0.ɵɵelementEnd()()();
163
164
  } if (rf & 2) {
@@ -176,15 +177,15 @@ function ClassifyPipelineTabComponent_Conditional_15_Template(rf, ctx) { if (rf
176
177
  i0.ɵɵadvance();
177
178
  i0.ɵɵconditional(ctx_r4.IsPaused ? 12 : -1);
178
179
  } }
179
- function ClassifyPipelineTabComponent_Conditional_16_For_25_Conditional_5_Template(rf, ctx) { if (rf & 1) {
180
- i0.ɵɵelement(0, "i", 80);
180
+ function ClassifyPipelineTabComponent_Conditional_18_For_25_Conditional_5_Template(rf, ctx) { if (rf & 1) {
181
+ i0.ɵɵelement(0, "i", 83);
181
182
  } }
182
- function ClassifyPipelineTabComponent_Conditional_16_For_25_Template(rf, ctx) { if (rf & 1) {
183
- i0.ɵɵelementStart(0, "tr")(1, "td", 78);
183
+ function ClassifyPipelineTabComponent_Conditional_18_For_25_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "tr")(1, "td", 81);
184
185
  i0.ɵɵtext(2);
185
186
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(3, "td")(4, "span", 79);
187
- i0.ɵɵconditionalCreate(5, ClassifyPipelineTabComponent_Conditional_16_For_25_Conditional_5_Template, 1, 0, "i", 80);
187
+ i0.ɵɵelementStart(3, "td")(4, "span", 82);
188
+ i0.ɵɵconditionalCreate(5, ClassifyPipelineTabComponent_Conditional_18_For_25_Conditional_5_Template, 1, 0, "i", 83);
188
189
  i0.ɵɵtext(6);
189
190
  i0.ɵɵelementEnd()();
190
191
  i0.ɵɵelementStart(7, "td");
@@ -220,17 +221,17 @@ function ClassifyPipelineTabComponent_Conditional_16_For_25_Template(rf, ctx) {
220
221
  i0.ɵɵadvance();
221
222
  i0.ɵɵtextInterpolate(row_r10.ErrorCount);
222
223
  } }
223
- function ClassifyPipelineTabComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
224
+ function ClassifyPipelineTabComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
224
225
  const _r9 = i0.ɵɵgetCurrentView();
225
- i0.ɵɵelementStart(0, "div", 14)(1, "div", 16)(2, "span", 17);
226
- i0.ɵɵelement(3, "i", 74);
226
+ i0.ɵɵelementStart(0, "div", 16)(1, "div", 18)(2, "span", 19);
227
+ i0.ɵɵelement(3, "i", 77);
227
228
  i0.ɵɵtext(4, " Per-Source Progress");
228
229
  i0.ɵɵelementEnd();
229
- i0.ɵɵelementStart(5, "button", 75);
230
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_16_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onLoadLiveRunDetails()); });
230
+ i0.ɵɵelementStart(5, "button", 78);
231
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_18_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onLoadLiveRunDetails()); });
231
232
  i0.ɵɵelement(6, "i", 3);
232
233
  i0.ɵɵelementEnd()();
233
- i0.ɵɵelementStart(7, "div", 76)(8, "table", 77)(9, "thead")(10, "tr")(11, "th");
234
+ i0.ɵɵelementStart(7, "div", 79)(8, "table", 80)(9, "thead")(10, "tr")(11, "th");
234
235
  i0.ɵɵtext(12, "Source");
235
236
  i0.ɵɵelementEnd();
236
237
  i0.ɵɵelementStart(13, "th");
@@ -249,21 +250,21 @@ function ClassifyPipelineTabComponent_Conditional_16_Template(rf, ctx) { if (rf
249
250
  i0.ɵɵtext(22, "Errors");
250
251
  i0.ɵɵelementEnd()()();
251
252
  i0.ɵɵelementStart(23, "tbody");
252
- i0.ɵɵrepeaterCreate(24, ClassifyPipelineTabComponent_Conditional_16_For_25_Template, 15, 11, "tr", null, _forTrack5);
253
+ i0.ɵɵrepeaterCreate(24, ClassifyPipelineTabComponent_Conditional_18_For_25_Template, 15, 11, "tr", null, _forTrack5);
253
254
  i0.ɵɵelementEnd()()()();
254
255
  } if (rf & 2) {
255
256
  const ctx_r4 = i0.ɵɵnextContext();
256
257
  i0.ɵɵadvance(24);
257
258
  i0.ɵɵrepeater(ctx_r4.LiveRunDetailRows);
258
259
  } }
259
- function ClassifyPipelineTabComponent_Conditional_31_Template(rf, ctx) { if (rf & 1) {
260
+ function ClassifyPipelineTabComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
260
261
  const _r11 = i0.ɵɵgetCurrentView();
261
- i0.ɵɵelementStart(0, "button", 81);
262
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r4 = i0.ɵɵnextContext(); ctx_r4.FeedSearchQuery = ""; return i0.ɵɵresetView(ctx_r4.OnFeedSearchChange()); });
263
- i0.ɵɵelement(1, "i", 82);
262
+ i0.ɵɵelementStart(0, "button", 84);
263
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r4 = i0.ɵɵnextContext(); ctx_r4.FeedSearchQuery = ""; return i0.ɵɵresetView(ctx_r4.OnFeedSearchChange()); });
264
+ i0.ɵɵelement(1, "i", 85);
264
265
  i0.ɵɵelementEnd();
265
266
  } }
266
- function ClassifyPipelineTabComponent_Conditional_33_Conditional_2_Template(rf, ctx) { if (rf & 1) {
267
+ function ClassifyPipelineTabComponent_Conditional_35_Conditional_2_Template(rf, ctx) { if (rf & 1) {
267
268
  i0.ɵɵelementStart(0, "p");
268
269
  i0.ɵɵtext(1);
269
270
  i0.ɵɵelementEnd();
@@ -272,23 +273,23 @@ function ClassifyPipelineTabComponent_Conditional_33_Conditional_2_Template(rf,
272
273
  i0.ɵɵadvance();
273
274
  i0.ɵɵtextInterpolate1("No items match \"", ctx_r4.FeedSearchQuery, "\"");
274
275
  } }
275
- function ClassifyPipelineTabComponent_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
276
+ function ClassifyPipelineTabComponent_Conditional_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
276
277
  i0.ɵɵelementStart(0, "p");
277
278
  i0.ɵɵtext(1, "No processed items yet.");
278
279
  i0.ɵɵelementEnd();
279
280
  } }
280
- function ClassifyPipelineTabComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
281
- i0.ɵɵelementStart(0, "div", 28);
282
- i0.ɵɵelement(1, "i", 83);
283
- i0.ɵɵconditionalCreate(2, ClassifyPipelineTabComponent_Conditional_33_Conditional_2_Template, 2, 1, "p")(3, ClassifyPipelineTabComponent_Conditional_33_Conditional_3_Template, 2, 0, "p");
281
+ function ClassifyPipelineTabComponent_Conditional_35_Template(rf, ctx) { if (rf & 1) {
282
+ i0.ɵɵelementStart(0, "div", 30);
283
+ i0.ɵɵelement(1, "i", 86);
284
+ i0.ɵɵconditionalCreate(2, ClassifyPipelineTabComponent_Conditional_35_Conditional_2_Template, 2, 1, "p")(3, ClassifyPipelineTabComponent_Conditional_35_Conditional_3_Template, 2, 0, "p");
284
285
  i0.ɵɵelementEnd();
285
286
  } if (rf & 2) {
286
287
  const ctx_r4 = i0.ɵɵnextContext();
287
288
  i0.ɵɵadvance(2);
288
289
  i0.ɵɵconditional(ctx_r4.FeedSearchQuery ? 2 : 3);
289
290
  } }
290
- function ClassifyPipelineTabComponent_For_35_For_9_Template(rf, ctx) { if (rf & 1) {
291
- i0.ɵɵelementStart(0, "span", 90);
291
+ function ClassifyPipelineTabComponent_For_37_For_9_Template(rf, ctx) { if (rf & 1) {
292
+ i0.ɵɵelementStart(0, "span", 93);
292
293
  i0.ɵɵtext(1);
293
294
  i0.ɵɵelementEnd();
294
295
  } if (rf & 2) {
@@ -296,21 +297,21 @@ function ClassifyPipelineTabComponent_For_35_For_9_Template(rf, ctx) { if (rf &
296
297
  i0.ɵɵadvance();
297
298
  i0.ɵɵtextInterpolate(tag_r14);
298
299
  } }
299
- function ClassifyPipelineTabComponent_For_35_Template(rf, ctx) { if (rf & 1) {
300
+ function ClassifyPipelineTabComponent_For_37_Template(rf, ctx) { if (rf & 1) {
300
301
  const _r12 = i0.ɵɵgetCurrentView();
301
- i0.ɵɵelementStart(0, "div", 84);
302
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_For_35_Template_div_click_0_listener() { const item_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onFeedItemClick(ctx_r4.GetFeedItemOriginalIndex(item_r13))); });
303
- i0.ɵɵelement(1, "div", 85);
304
- i0.ɵɵelementStart(2, "div", 86)(3, "span", 87);
302
+ i0.ɵɵelementStart(0, "div", 87);
303
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_For_37_Template_div_click_0_listener() { const item_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onFeedItemClick(ctx_r4.GetFeedItemOriginalIndex(item_r13))); });
304
+ i0.ɵɵelement(1, "div", 88);
305
+ i0.ɵɵelementStart(2, "div", 89)(3, "span", 90);
305
306
  i0.ɵɵtext(4);
306
307
  i0.ɵɵelementEnd();
307
- i0.ɵɵelementStart(5, "span", 88);
308
+ i0.ɵɵelementStart(5, "span", 91);
308
309
  i0.ɵɵtext(6);
309
310
  i0.ɵɵelementEnd()();
310
- i0.ɵɵelementStart(7, "div", 89);
311
- i0.ɵɵrepeaterCreate(8, ClassifyPipelineTabComponent_For_35_For_9_Template, 2, 1, "span", 90, i0.ɵɵrepeaterTrackByIdentity);
311
+ i0.ɵɵelementStart(7, "div", 92);
312
+ i0.ɵɵrepeaterCreate(8, ClassifyPipelineTabComponent_For_37_For_9_Template, 2, 1, "span", 93, i0.ɵɵrepeaterTrackByIdentity);
312
313
  i0.ɵɵelementEnd();
313
- i0.ɵɵelementStart(10, "span", 91);
314
+ i0.ɵɵelementStart(10, "span", 94);
314
315
  i0.ɵɵtext(11);
315
316
  i0.ɵɵelementEnd()();
316
317
  } if (rf & 2) {
@@ -326,18 +327,18 @@ function ClassifyPipelineTabComponent_For_35_Template(rf, ctx) { if (rf & 1) {
326
327
  i0.ɵɵadvance(3);
327
328
  i0.ɵɵtextInterpolate(item_r13.TimeAgo);
328
329
  } }
329
- function ClassifyPipelineTabComponent_Conditional_36_Template(rf, ctx) { if (rf & 1) {
330
+ function ClassifyPipelineTabComponent_Conditional_38_Template(rf, ctx) { if (rf & 1) {
330
331
  const _r15 = i0.ɵɵgetCurrentView();
331
- i0.ɵɵelementStart(0, "div", 30)(1, "button", 70);
332
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_36_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.FeedPrevPage()); });
333
- i0.ɵɵelement(2, "i", 92);
332
+ i0.ɵɵelementStart(0, "div", 32)(1, "button", 73);
333
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_38_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.FeedPrevPage()); });
334
+ i0.ɵɵelement(2, "i", 95);
334
335
  i0.ɵɵelementEnd();
335
- i0.ɵɵelementStart(3, "span", 93);
336
+ i0.ɵɵelementStart(3, "span", 96);
336
337
  i0.ɵɵtext(4);
337
338
  i0.ɵɵelementEnd();
338
- i0.ɵɵelementStart(5, "button", 70);
339
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_36_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r15); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.FeedNextPage()); });
340
- i0.ɵɵelement(6, "i", 94);
339
+ i0.ɵɵelementStart(5, "button", 73);
340
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_38_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r15); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.FeedNextPage()); });
341
+ i0.ɵɵelement(6, "i", 97);
341
342
  i0.ɵɵelementEnd()();
342
343
  } if (rf & 2) {
343
344
  const ctx_r4 = i0.ɵɵnextContext();
@@ -348,103 +349,136 @@ function ClassifyPipelineTabComponent_Conditional_36_Template(rf, ctx) { if (rf
348
349
  i0.ɵɵadvance();
349
350
  i0.ɵɵproperty("disabled", ctx_r4.FeedPage >= ctx_r4.FeedTotalPages - 1);
350
351
  } }
351
- function ClassifyPipelineTabComponent_For_45_Template(rf, ctx) { if (rf & 1) {
352
- i0.ɵɵelementStart(0, "div", 35)(1, "div", 95);
352
+ function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
353
+ i0.ɵɵelement(0, "i", 56);
354
+ i0.ɵɵtext(1, " Loading\u2026 ");
355
+ } }
356
+ function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
357
+ i0.ɵɵelement(0, "i", 101);
358
+ i0.ɵɵtext(1, " Load more ");
359
+ } }
360
+ function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
361
+ const _r16 = i0.ɵɵgetCurrentView();
362
+ i0.ɵɵelementStart(0, "button", 100);
363
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.onLoadMoreItems()); });
364
+ i0.ɵɵconditionalCreate(1, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_1_Template, 2, 0)(2, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_2_Template, 2, 0);
365
+ i0.ɵɵelementEnd();
366
+ } if (rf & 2) {
367
+ const ctx_r4 = i0.ɵɵnextContext(2);
368
+ i0.ɵɵproperty("disabled", ctx_r4.IsLoadingMoreItems);
369
+ i0.ɵɵadvance();
370
+ i0.ɵɵconditional(ctx_r4.IsLoadingMoreItems ? 1 : 2);
371
+ } }
372
+ function ClassifyPipelineTabComponent_Conditional_39_Template(rf, ctx) { if (rf & 1) {
373
+ i0.ɵɵelementStart(0, "div", 33)(1, "span", 98);
374
+ i0.ɵɵtext(2);
375
+ i0.ɵɵelementEnd();
376
+ i0.ɵɵconditionalCreate(3, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Template, 3, 2, "button", 99);
377
+ i0.ɵɵelementEnd();
378
+ } if (rf & 2) {
379
+ const ctx_r4 = i0.ɵɵnextContext();
380
+ i0.ɵɵadvance(2);
381
+ i0.ɵɵtextInterpolate2("Showing ", ctx_r4.FeedItems.length, " of ", ctx_r4.TotalItemCount, " items");
382
+ i0.ɵɵadvance();
383
+ i0.ɵɵconditional(ctx_r4.HasMoreItems ? 3 : -1);
384
+ } }
385
+ function ClassifyPipelineTabComponent_For_48_Template(rf, ctx) { if (rf & 1) {
386
+ i0.ɵɵelementStart(0, "div", 38)(1, "div", 102);
353
387
  i0.ɵɵelement(2, "i");
354
388
  i0.ɵɵelementEnd();
355
- i0.ɵɵelementStart(3, "div", 96)(4, "div", 97);
389
+ i0.ɵɵelementStart(3, "div", 103)(4, "div", 104);
356
390
  i0.ɵɵtext(5);
357
391
  i0.ɵɵelementEnd();
358
- i0.ɵɵelementStart(6, "div", 98);
392
+ i0.ɵɵelementStart(6, "div", 105);
359
393
  i0.ɵɵtext(7);
360
394
  i0.ɵɵelementEnd()();
361
- i0.ɵɵelement(8, "div", 99);
395
+ i0.ɵɵelement(8, "div", 106);
362
396
  i0.ɵɵelementEnd();
363
397
  } if (rf & 2) {
364
- const source_r16 = ctx.$implicit;
398
+ const source_r17 = ctx.$implicit;
365
399
  i0.ɵɵadvance(2);
366
- i0.ɵɵclassMap(source_r16.Icon);
400
+ i0.ɵɵclassMap(source_r17.Icon);
367
401
  i0.ɵɵadvance(3);
368
- i0.ɵɵtextInterpolate(source_r16.Name);
402
+ i0.ɵɵtextInterpolate(source_r17.Name);
369
403
  i0.ɵɵadvance(2);
370
- i0.ɵɵtextInterpolate(source_r16.Meta);
404
+ i0.ɵɵtextInterpolate(source_r17.Meta);
371
405
  i0.ɵɵadvance();
372
- i0.ɵɵclassMap(source_r16.StatusClass);
406
+ i0.ɵɵclassMap(source_r17.StatusClass);
373
407
  } }
374
- function ClassifyPipelineTabComponent_For_52_Template(rf, ctx) { if (rf & 1) {
375
- i0.ɵɵelementStart(0, "span", 100);
408
+ function ClassifyPipelineTabComponent_For_55_Template(rf, ctx) { if (rf & 1) {
409
+ i0.ɵɵelementStart(0, "span", 107);
376
410
  i0.ɵɵtext(1);
377
411
  i0.ɵɵelementEnd();
378
412
  } if (rf & 2) {
379
- const tag_r17 = ctx.$implicit;
380
- i0.ɵɵclassMap(tag_r17.SizeClass);
381
- i0.ɵɵstyleProp("opacity", 0.4 + tag_r17.AvgWeight * 0.6);
382
- i0.ɵɵproperty("title", "Weight: " + tag_r17.AvgWeight.toFixed(2));
413
+ const tag_r18 = ctx.$implicit;
414
+ i0.ɵɵclassMap(tag_r18.SizeClass);
415
+ i0.ɵɵstyleProp("opacity", 0.4 + tag_r18.AvgWeight * 0.6);
416
+ i0.ɵɵproperty("title", "Weight: " + tag_r18.AvgWeight.toFixed(2));
383
417
  i0.ɵɵadvance();
384
- i0.ɵɵtextInterpolate(tag_r17.Tag);
418
+ i0.ɵɵtextInterpolate(tag_r18.Tag);
385
419
  } }
386
- function ClassifyPipelineTabComponent_Conditional_59_Template(rf, ctx) { if (rf & 1) {
387
- const _r18 = i0.ɵɵgetCurrentView();
388
- i0.ɵɵelementStart(0, "div", 45)(1, "div", 101)(2, "label", 102);
420
+ function ClassifyPipelineTabComponent_Conditional_62_Template(rf, ctx) { if (rf & 1) {
421
+ const _r19 = i0.ɵɵgetCurrentView();
422
+ i0.ɵɵelementStart(0, "div", 48)(1, "div", 108)(2, "label", 109);
389
423
  i0.ɵɵtext(3, "Batch Size");
390
424
  i0.ɵɵelementEnd();
391
- i0.ɵɵelementStart(4, "div", 103)(5, "input", 104);
392
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.BatchSize, $event) || (ctx_r4.PipelineConfig.Pipeline.BatchSize = $event); return i0.ɵɵresetView($event); });
425
+ i0.ɵɵelementStart(4, "div", 110)(5, "input", 111);
426
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.BatchSize, $event) || (ctx_r4.PipelineConfig.Pipeline.BatchSize = $event); return i0.ɵɵresetView($event); });
393
427
  i0.ɵɵelementEnd()()();
394
- i0.ɵɵelementStart(6, "div", 101)(7, "label", 102);
428
+ i0.ɵɵelementStart(6, "div", 108)(7, "label", 109);
395
429
  i0.ɵɵtext(8, "Throttle (ms)");
396
430
  i0.ɵɵelementEnd();
397
- i0.ɵɵelementStart(9, "div", 103)(10, "input", 105);
398
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs, $event) || (ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs = $event); return i0.ɵɵresetView($event); });
431
+ i0.ɵɵelementStart(9, "div", 110)(10, "input", 112);
432
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs, $event) || (ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs = $event); return i0.ɵɵresetView($event); });
399
433
  i0.ɵɵelementEnd();
400
- i0.ɵɵelementStart(11, "span", 106);
434
+ i0.ɵɵelementStart(11, "span", 113);
401
435
  i0.ɵɵtext(12);
402
436
  i0.ɵɵelementEnd()()();
403
- i0.ɵɵelementStart(13, "div", 101)(14, "label", 102);
437
+ i0.ɵɵelementStart(13, "div", 108)(14, "label", 109);
404
438
  i0.ɵɵtext(15, "Error Tolerance");
405
439
  i0.ɵɵelementEnd();
406
- i0.ɵɵelementStart(16, "div", 103)(17, "input", 107);
407
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent, $event) || (ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent = $event); return i0.ɵɵresetView($event); });
440
+ i0.ɵɵelementStart(16, "div", 110)(17, "input", 114);
441
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent, $event) || (ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent = $event); return i0.ɵɵresetView($event); });
408
442
  i0.ɵɵelementEnd();
409
- i0.ɵɵelementStart(18, "span", 106);
443
+ i0.ɵɵelementStart(18, "span", 113);
410
444
  i0.ɵɵtext(19);
411
445
  i0.ɵɵelementEnd()()();
412
- i0.ɵɵelementStart(20, "div", 101)(21, "label", 102);
446
+ i0.ɵɵelementStart(20, "div", 108)(21, "label", 109);
413
447
  i0.ɵɵtext(22, "Auto-resume");
414
448
  i0.ɵɵelementEnd();
415
- i0.ɵɵelementStart(23, "div", 103)(24, "label", 108)(25, "input", 109);
416
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_25_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.ResumeFromLastBatch, $event) || (ctx_r4.PipelineConfig.Pipeline.ResumeFromLastBatch = $event); return i0.ɵɵresetView($event); });
449
+ i0.ɵɵelementStart(23, "div", 110)(24, "label", 115)(25, "input", 116);
450
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_25_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.Pipeline.ResumeFromLastBatch, $event) || (ctx_r4.PipelineConfig.Pipeline.ResumeFromLastBatch = $event); return i0.ɵɵresetView($event); });
417
451
  i0.ɵɵelementEnd();
418
- i0.ɵɵelementStart(26, "span", 110);
419
- i0.ɵɵelement(27, "span", 111);
452
+ i0.ɵɵelementStart(26, "span", 117);
453
+ i0.ɵɵelement(27, "span", 118);
420
454
  i0.ɵɵelementEnd()()()();
421
- i0.ɵɵelement(28, "div", 112);
422
- i0.ɵɵelementStart(29, "div", 113);
455
+ i0.ɵɵelement(28, "div", 119);
456
+ i0.ɵɵelementStart(29, "div", 120);
423
457
  i0.ɵɵtext(30, "LLM Rate Limits");
424
458
  i0.ɵɵelementEnd();
425
- i0.ɵɵelementStart(31, "div", 101)(32, "label", 102);
459
+ i0.ɵɵelementStart(31, "div", 108)(32, "label", 109);
426
460
  i0.ɵɵtext(33, "Requests/min");
427
461
  i0.ɵɵelementEnd();
428
- i0.ɵɵelementStart(34, "div", 103)(35, "input", 114);
429
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_35_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.LLM.RequestsPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.LLM.RequestsPerMinute = $event); return i0.ɵɵresetView($event); });
462
+ i0.ɵɵelementStart(34, "div", 110)(35, "input", 121);
463
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_35_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.LLM.RequestsPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.LLM.RequestsPerMinute = $event); return i0.ɵɵresetView($event); });
430
464
  i0.ɵɵelementEnd()()();
431
- i0.ɵɵelementStart(36, "div", 101)(37, "label", 102);
465
+ i0.ɵɵelementStart(36, "div", 108)(37, "label", 109);
432
466
  i0.ɵɵtext(38, "Tokens/min");
433
467
  i0.ɵɵelementEnd();
434
- i0.ɵɵelementStart(39, "div", 103)(40, "input", 115);
435
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_40_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute = $event); return i0.ɵɵresetView($event); });
468
+ i0.ɵɵelementStart(39, "div", 110)(40, "input", 122);
469
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_40_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute = $event); return i0.ɵɵresetView($event); });
436
470
  i0.ɵɵelementEnd();
437
- i0.ɵɵelementStart(41, "span", 106);
471
+ i0.ɵɵelementStart(41, "span", 113);
438
472
  i0.ɵɵtext(42);
439
473
  i0.ɵɵelementEnd()()();
440
- i0.ɵɵelementStart(43, "div", 113);
474
+ i0.ɵɵelementStart(43, "div", 120);
441
475
  i0.ɵɵtext(44, "Embedding Rate Limits");
442
476
  i0.ɵɵelementEnd();
443
- i0.ɵɵelementStart(45, "div", 101)(46, "label", 102);
477
+ i0.ɵɵelementStart(45, "div", 108)(46, "label", 109);
444
478
  i0.ɵɵtext(47, "Requests/min");
445
479
  i0.ɵɵelementEnd();
446
- i0.ɵɵelementStart(48, "div", 103)(49, "input", 116);
447
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_59_Template_input_ngModelChange_49_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.Embedding.RequestsPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.Embedding.RequestsPerMinute = $event); return i0.ɵɵresetView($event); });
480
+ i0.ɵɵelementStart(48, "div", 110)(49, "input", 123);
481
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Conditional_62_Template_input_ngModelChange_49_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r4.PipelineConfig.RateLimits.Embedding.RequestsPerMinute, $event) || (ctx_r4.PipelineConfig.RateLimits.Embedding.RequestsPerMinute = $event); return i0.ɵɵresetView($event); });
448
482
  i0.ɵɵelementEnd()()()();
449
483
  } if (rf & 2) {
450
484
  const ctx_r4 = i0.ɵɵnextContext();
@@ -483,6 +517,10 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
483
517
  TrendingTags = [];
484
518
  /** Per-source live-run detail rows (shown during an active run). */
485
519
  LiveRunDetailRows = [];
520
+ /** Total content-item count in the DB (from TotalRowCount) — drives the "Showing X of Y" line. */
521
+ TotalItemCount = 0;
522
+ /** True while the host is loading the next page of content items. */
523
+ IsLoadingMoreItems = false;
486
524
  // ── Run state (data DOWN from the host) ──
487
525
  IsRunning = false;
488
526
  IsPaused = false;
@@ -524,6 +562,15 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
524
562
  FeedItemClicked = new EventEmitter();
525
563
  /** Toggle the config panel → host `TogglePipelineConfig()` (persists + reports to agent). */
526
564
  ConfigToggled = new EventEmitter();
565
+ /** Request the host load the next page of content items (no silent truncation). */
566
+ LoadMoreItemsRequested = new EventEmitter();
567
+ /** Whether more content items exist in the DB than are currently loaded into the feed. */
568
+ get HasMoreItems() {
569
+ return this.TotalItemCount > this.FeedItems.length;
570
+ }
571
+ onLoadMoreItems() {
572
+ this.LoadMoreItemsRequested.emit();
573
+ }
527
574
  // ════════════════════════════════════════════
528
575
  // FEED — search, sort, pagination (presentational)
529
576
  // ════════════════════════════════════════════
@@ -599,7 +646,7 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
599
646
  this.ConfigToggled.emit();
600
647
  }
601
648
  static ɵfac = /*@__PURE__*/ (() => { let ɵClassifyPipelineTabComponent_BaseFactory; return function ClassifyPipelineTabComponent_Factory(__ngFactoryType__) { return (ɵClassifyPipelineTabComponent_BaseFactory || (ɵClassifyPipelineTabComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ClassifyPipelineTabComponent)))(__ngFactoryType__ || ClassifyPipelineTabComponent); }; })();
602
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassifyPipelineTabComponent, selectors: [["classify-pipeline-tab"]], inputs: { KPIMetrics: "KPIMetrics", PipelineStages: "PipelineStages", FeedItems: "FeedItems", SourceMinis: "SourceMinis", TrendingTags: "TrendingTags", LiveRunDetailRows: "LiveRunDetailRows", IsRunning: "IsRunning", IsPaused: "IsPaused", RunProgress: "RunProgress", RunStage: "RunStage", RunCurrentItem: "RunCurrentItem", CurrentProcessRunID: "CurrentProcessRunID", PipelineConfig: "PipelineConfig", ShowPipelineConfig: "ShowPipelineConfig" }, outputs: { RefreshRequested: "RefreshRequested", PauseRequested: "PauseRequested", ResumeRequested: "ResumeRequested", CancelRequested: "CancelRequested", LoadLiveRunDetailsRequested: "LoadLiveRunDetailsRequested", FeedItemClicked: "FeedItemClicked", ConfigToggled: "ConfigToggled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 60, vars: 21, consts: [["Title", "Pipeline Monitor", "Subtitle", "Real-time processing status and recent activity"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "mj-action-label"], [3, "Padding", "Flex"], [1, "at-main-area"], [1, "at-page-body"], [1, "at-kpi-strip"], [1, "at-kpi-card"], [1, "at-pipeline-layout"], [1, "at-pipeline-center"], [1, "at-pipeline-stages"], [1, "at-progress-section"], [1, "at-card", 2, "margin-bottom", "12px"], [1, "at-card", "at-feed-card"], [1, "at-card-header"], [1, "at-card-title"], [1, "fa-solid", "fa-bolt"], [1, "at-feed-header-actions"], [1, "at-feed-sort-btn", 3, "click", "title"], [1, "fa-solid"], [1, "at-feed-count"], [1, "at-feed-search-bar"], [1, "fa-solid", "fa-search", "at-feed-search-icon"], ["type", "text", "placeholder", "Search items, sources, or tags...", 1, "mj-input", "at-feed-search-input", 3, "ngModelChange", "input", "ngModel"], [1, "at-feed-search-clear"], [1, "at-card-body", "at-feed-scroll-body"], [1, "at-empty-state"], [1, "at-feed-item", "at-feed-item-clickable"], [1, "at-feed-pagination"], [1, "at-pipeline-right"], [1, "at-card"], [1, "fa-solid", "fa-database"], [1, "at-card-body"], [1, "at-source-mini"], [1, "at-card", "at-tag-cloud-card"], [1, "at-card-title", 2, "margin-bottom", "10px"], [1, "fa-solid", "fa-chart-bar"], [1, "at-tag-cloud"], [1, "at-tag-pill", 3, "class", "opacity", "title"], [1, "at-card", "at-config-card"], [1, "at-card-header", 2, "cursor", "pointer", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", 2, "font-size", "0.7rem", "color", "var(--mj-text-muted)"], [1, "at-card-body", "at-config-body"], [1, "at-kpi-value"], [1, "at-kpi-label"], [1, "at-kpi-trend", 3, "up"], [1, "at-kpi-trend"], [1, "fa-solid", "fa-arrow-up"], [1, "at-pipeline-stage"], [1, "at-pipeline-stage-icon"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"], [3, "class"], [1, "at-pipeline-stage-name"], [1, "at-stage-connector", 3, "connector-complete"], [1, "at-stage-connector"], [1, "at-progress-header"], [1, "at-progress-stage-label"], [1, "at-progress-pct"], [1, "at-progress-bar"], [1, "at-progress-fill"], [1, "at-progress-current"], [1, "at-pipeline-controls"], [1, "at-action-btn", "at-secondary-btn", 3, "disabled"], [1, "at-action-btn", "at-primary-btn"], [1, "at-action-btn", "at-danger-btn", 3, "click"], [1, "fa-solid", "fa-stop"], [1, "at-action-btn", "at-secondary-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-pause"], [1, "at-action-btn", "at-primary-btn", 3, "click"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-list-check"], [1, "at-action-btn", "at-secondary-btn", 2, "font-size", "11px", "padding", "3px 8px", 3, "click"], [1, "at-card-body", 2, "max-height", "200px", "overflow-y", "auto"], [1, "at-run-table"], [1, "at-run-source-name"], [1, "at-run-status-badge"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "0.55rem"], [1, "at-feed-search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-inbox"], [1, "at-feed-item", "at-feed-item-clickable", 3, "click"], [1, "at-feed-status-dot"], [1, "at-feed-item-content"], [1, "at-feed-item-name"], [1, "at-feed-item-source-label"], [1, "at-feed-item-tags"], [1, "at-feed-tag"], [1, "at-feed-item-time"], [1, "fa-solid", "fa-chevron-left"], [1, "at-feed-pagination-label"], [1, "fa-solid", "fa-chevron-right"], [1, "at-source-mini-icon"], [1, "at-source-mini-info"], [1, "at-source-mini-name"], [1, "at-source-mini-meta"], [1, "at-source-mini-status"], [1, "at-tag-pill", 3, "title"], [1, "at-config-row"], [1, "at-config-label"], [1, "at-config-control"], ["type", "number", "min", "10", "max", "1000", "step", "10", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "range", "min", "0", "max", "5000", "step", "100", 1, "at-config-slider", 3, "ngModelChange", "ngModel"], [1, "at-config-value"], ["type", "range", "min", "5", "max", "50", "step", "5", 1, "at-config-slider", 3, "ngModelChange", "ngModel"], [1, "at-config-toggle"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "at-toggle-track"], [1, "at-toggle-thumb"], [1, "at-config-divider"], [1, "at-config-section-label"], ["type", "number", "min", "1", "max", "500", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "1000", "max", "5000000", "step", "10000", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "1", "max", "1000", 1, "at-config-input", 3, "ngModelChange", "ngModel"]], template: function ClassifyPipelineTabComponent_Template(rf, ctx) { if (rf & 1) {
649
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassifyPipelineTabComponent, selectors: [["classify-pipeline-tab"]], inputs: { KPIMetrics: "KPIMetrics", PipelineStages: "PipelineStages", FeedItems: "FeedItems", SourceMinis: "SourceMinis", TrendingTags: "TrendingTags", LiveRunDetailRows: "LiveRunDetailRows", TotalItemCount: "TotalItemCount", IsLoadingMoreItems: "IsLoadingMoreItems", IsRunning: "IsRunning", IsPaused: "IsPaused", RunProgress: "RunProgress", RunStage: "RunStage", RunCurrentItem: "RunCurrentItem", CurrentProcessRunID: "CurrentProcessRunID", PipelineConfig: "PipelineConfig", ShowPipelineConfig: "ShowPipelineConfig" }, outputs: { RefreshRequested: "RefreshRequested", PauseRequested: "PauseRequested", ResumeRequested: "ResumeRequested", CancelRequested: "CancelRequested", LoadLiveRunDetailsRequested: "LoadLiveRunDetailsRequested", FeedItemClicked: "FeedItemClicked", ConfigToggled: "ConfigToggled", LoadMoreItemsRequested: "LoadMoreItemsRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 63, vars: 23, consts: [["Title", "Pipeline Monitor", "Subtitle", "Real-time processing status and recent activity"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "mj-action-label"], [3, "Padding", "Flex"], [1, "at-main-area"], [1, "at-page-body"], [1, "at-kpi-strip"], [1, "at-kpi-card"], [1, "at-analytics-section"], [3, "Provider"], [1, "at-pipeline-layout"], [1, "at-pipeline-center"], [1, "at-pipeline-stages"], [1, "at-progress-section"], [1, "at-card", 2, "margin-bottom", "12px"], [1, "at-card", "at-feed-card"], [1, "at-card-header"], [1, "at-card-title"], [1, "fa-solid", "fa-bolt"], [1, "at-feed-header-actions"], [1, "at-feed-sort-btn", 3, "click", "title"], [1, "fa-solid"], [1, "at-feed-count"], [1, "at-feed-search-bar"], [1, "fa-solid", "fa-search", "at-feed-search-icon"], ["type", "text", "placeholder", "Search items, sources, or tags...", 1, "mj-input", "at-feed-search-input", 3, "ngModelChange", "input", "ngModel"], [1, "at-feed-search-clear"], [1, "at-card-body", "at-feed-scroll-body"], [1, "at-empty-state"], [1, "at-feed-item", "at-feed-item-clickable"], [1, "at-feed-pagination"], [1, "at-load-more-bar"], [1, "at-pipeline-right"], [1, "at-card"], [1, "fa-solid", "fa-database"], [1, "at-card-body"], [1, "at-source-mini"], [1, "at-card", "at-tag-cloud-card"], [1, "at-card-title", 2, "margin-bottom", "10px"], [1, "fa-solid", "fa-chart-bar"], [1, "at-tag-cloud"], [1, "at-tag-pill", 3, "class", "opacity", "title"], [1, "at-card", "at-config-card"], [1, "at-card-header", 2, "cursor", "pointer", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", 2, "font-size", "0.7rem", "color", "var(--mj-text-muted)"], [1, "at-card-body", "at-config-body"], [1, "at-kpi-value"], [1, "at-kpi-label"], [1, "at-kpi-trend", 3, "up"], [1, "at-kpi-trend"], [1, "fa-solid", "fa-arrow-up"], [1, "at-pipeline-stage"], [1, "at-pipeline-stage-icon"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"], [3, "class"], [1, "at-pipeline-stage-name"], [1, "at-stage-connector", 3, "connector-complete"], [1, "at-stage-connector"], [1, "at-progress-header"], [1, "at-progress-stage-label"], [1, "at-progress-pct"], [1, "at-progress-bar"], [1, "at-progress-fill"], [1, "at-progress-current"], [1, "at-pipeline-controls"], [1, "at-action-btn", "at-secondary-btn", 3, "disabled"], [1, "at-action-btn", "at-primary-btn"], [1, "at-action-btn", "at-danger-btn", 3, "click"], [1, "fa-solid", "fa-stop"], [1, "at-action-btn", "at-secondary-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-pause"], [1, "at-action-btn", "at-primary-btn", 3, "click"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-list-check"], [1, "at-action-btn", "at-secondary-btn", 2, "font-size", "11px", "padding", "3px 8px", 3, "click"], [1, "at-card-body", 2, "max-height", "200px", "overflow-y", "auto"], [1, "at-run-table"], [1, "at-run-source-name"], [1, "at-run-status-badge"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "0.55rem"], [1, "at-feed-search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-inbox"], [1, "at-feed-item", "at-feed-item-clickable", 3, "click"], [1, "at-feed-status-dot"], [1, "at-feed-item-content"], [1, "at-feed-item-name"], [1, "at-feed-item-source-label"], [1, "at-feed-item-tags"], [1, "at-feed-tag"], [1, "at-feed-item-time"], [1, "fa-solid", "fa-chevron-left"], [1, "at-feed-pagination-label"], [1, "fa-solid", "fa-chevron-right"], [1, "at-load-more-count"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "disabled"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], [1, "at-source-mini-icon"], [1, "at-source-mini-info"], [1, "at-source-mini-name"], [1, "at-source-mini-meta"], [1, "at-source-mini-status"], [1, "at-tag-pill", 3, "title"], [1, "at-config-row"], [1, "at-config-label"], [1, "at-config-control"], ["type", "number", "min", "10", "max", "1000", "step", "10", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "range", "min", "0", "max", "5000", "step", "100", 1, "at-config-slider", 3, "ngModelChange", "ngModel"], [1, "at-config-value"], ["type", "range", "min", "5", "max", "50", "step", "5", 1, "at-config-slider", 3, "ngModelChange", "ngModel"], [1, "at-config-toggle"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "at-toggle-track"], [1, "at-toggle-thumb"], [1, "at-config-divider"], [1, "at-config-section-label"], ["type", "number", "min", "1", "max", "500", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "1000", "max", "5000000", "step", "10000", 1, "at-config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "1", "max", "1000", 1, "at-config-input", 3, "ngModelChange", "ngModel"]], template: function ClassifyPipelineTabComponent_Template(rf, ctx) { if (rf & 1) {
603
650
  i0.ɵɵelementStart(0, "mj-page-header-interior", 0)(1, "div", 1)(2, "button", 2);
604
651
  i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_button_click_2_listener() { return ctx.onRefresh(); });
605
652
  i0.ɵɵelement(3, "i", 3);
@@ -609,71 +656,77 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
609
656
  i0.ɵɵelementStart(6, "mj-page-body-interior", 5)(7, "div", 6)(8, "div", 7)(9, "div", 8);
610
657
  i0.ɵɵrepeaterCreate(10, ClassifyPipelineTabComponent_For_11_Template, 7, 7, "div", 9, _forTrack0);
611
658
  i0.ɵɵelementEnd();
612
- i0.ɵɵelementStart(12, "div", 10)(13, "div", 11);
613
- i0.ɵɵconditionalCreate(14, ClassifyPipelineTabComponent_Conditional_14_Template, 3, 0, "div", 12);
614
- i0.ɵɵconditionalCreate(15, ClassifyPipelineTabComponent_Conditional_15_Template, 16, 12, "div", 13);
615
- i0.ɵɵconditionalCreate(16, ClassifyPipelineTabComponent_Conditional_16_Template, 26, 0, "div", 14);
616
- i0.ɵɵelementStart(17, "div", 15)(18, "div", 16)(19, "span", 17);
617
- i0.ɵɵelement(20, "i", 18);
618
- i0.ɵɵtext(21, " Recent Processing");
659
+ i0.ɵɵelementStart(12, "div", 10);
660
+ i0.ɵɵelement(13, "classify-overview-analytics", 11);
619
661
  i0.ɵɵelementEnd();
620
- i0.ɵɵelementStart(22, "div", 19)(23, "button", 20);
621
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_button_click_23_listener() { return ctx.ToggleFeedSort(); });
622
- i0.ɵɵelement(24, "i", 21);
623
- i0.ɵɵtext(25);
662
+ i0.ɵɵelementStart(14, "div", 12)(15, "div", 13);
663
+ i0.ɵɵconditionalCreate(16, ClassifyPipelineTabComponent_Conditional_16_Template, 3, 0, "div", 14);
664
+ i0.ɵɵconditionalCreate(17, ClassifyPipelineTabComponent_Conditional_17_Template, 16, 12, "div", 15);
665
+ i0.ɵɵconditionalCreate(18, ClassifyPipelineTabComponent_Conditional_18_Template, 26, 0, "div", 16);
666
+ i0.ɵɵelementStart(19, "div", 17)(20, "div", 18)(21, "span", 19);
667
+ i0.ɵɵelement(22, "i", 20);
668
+ i0.ɵɵtext(23, " Recent Processing");
624
669
  i0.ɵɵelementEnd();
625
- i0.ɵɵelementStart(26, "span", 22);
670
+ i0.ɵɵelementStart(24, "div", 21)(25, "button", 22);
671
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_button_click_25_listener() { return ctx.ToggleFeedSort(); });
672
+ i0.ɵɵelement(26, "i", 23);
626
673
  i0.ɵɵtext(27);
674
+ i0.ɵɵelementEnd();
675
+ i0.ɵɵelementStart(28, "span", 24);
676
+ i0.ɵɵtext(29);
627
677
  i0.ɵɵelementEnd()()();
628
- i0.ɵɵelementStart(28, "div", 23);
629
- i0.ɵɵelement(29, "i", 24);
630
- i0.ɵɵelementStart(30, "input", 25);
631
- i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Template_input_ngModelChange_30_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.FeedSearchQuery, $event) || (ctx.FeedSearchQuery = $event); return $event; });
632
- i0.ɵɵlistener("input", function ClassifyPipelineTabComponent_Template_input_input_30_listener() { return ctx.OnFeedSearchChange(); });
678
+ i0.ɵɵelementStart(30, "div", 25);
679
+ i0.ɵɵelement(31, "i", 26);
680
+ i0.ɵɵelementStart(32, "input", 27);
681
+ i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Template_input_ngModelChange_32_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.FeedSearchQuery, $event) || (ctx.FeedSearchQuery = $event); return $event; });
682
+ i0.ɵɵlistener("input", function ClassifyPipelineTabComponent_Template_input_input_32_listener() { return ctx.OnFeedSearchChange(); });
633
683
  i0.ɵɵelementEnd();
634
- i0.ɵɵconditionalCreate(31, ClassifyPipelineTabComponent_Conditional_31_Template, 2, 0, "button", 26);
684
+ i0.ɵɵconditionalCreate(33, ClassifyPipelineTabComponent_Conditional_33_Template, 2, 0, "button", 28);
635
685
  i0.ɵɵelementEnd();
636
- i0.ɵɵelementStart(32, "div", 27);
637
- i0.ɵɵconditionalCreate(33, ClassifyPipelineTabComponent_Conditional_33_Template, 4, 1, "div", 28);
638
- i0.ɵɵrepeaterCreate(34, ClassifyPipelineTabComponent_For_35_Template, 12, 5, "div", 29, _forTrack1);
686
+ i0.ɵɵelementStart(34, "div", 29);
687
+ i0.ɵɵconditionalCreate(35, ClassifyPipelineTabComponent_Conditional_35_Template, 4, 1, "div", 30);
688
+ i0.ɵɵrepeaterCreate(36, ClassifyPipelineTabComponent_For_37_Template, 12, 5, "div", 31, _forTrack1);
639
689
  i0.ɵɵelementEnd();
640
- i0.ɵɵconditionalCreate(36, ClassifyPipelineTabComponent_Conditional_36_Template, 7, 4, "div", 30);
690
+ i0.ɵɵconditionalCreate(38, ClassifyPipelineTabComponent_Conditional_38_Template, 7, 4, "div", 32);
691
+ i0.ɵɵconditionalCreate(39, ClassifyPipelineTabComponent_Conditional_39_Template, 4, 3, "div", 33);
641
692
  i0.ɵɵelementEnd()();
642
- i0.ɵɵelementStart(37, "div", 31)(38, "div", 32)(39, "div", 16)(40, "span", 17);
643
- i0.ɵɵelement(41, "i", 33);
644
- i0.ɵɵtext(42, " Sources");
693
+ i0.ɵɵelementStart(40, "div", 34)(41, "div", 35)(42, "div", 18)(43, "span", 19);
694
+ i0.ɵɵelement(44, "i", 36);
695
+ i0.ɵɵtext(45, " Sources");
645
696
  i0.ɵɵelementEnd()();
646
- i0.ɵɵelementStart(43, "div", 34);
647
- i0.ɵɵrepeaterCreate(44, ClassifyPipelineTabComponent_For_45_Template, 9, 6, "div", 35, _forTrack2);
697
+ i0.ɵɵelementStart(46, "div", 37);
698
+ i0.ɵɵrepeaterCreate(47, ClassifyPipelineTabComponent_For_48_Template, 9, 6, "div", 38, _forTrack2);
648
699
  i0.ɵɵelementEnd()();
649
- i0.ɵɵelementStart(46, "div", 36)(47, "div", 37);
650
- i0.ɵɵelement(48, "i", 38);
651
- i0.ɵɵtext(49, " Trending Tags");
700
+ i0.ɵɵelementStart(49, "div", 39)(50, "div", 40);
701
+ i0.ɵɵelement(51, "i", 41);
702
+ i0.ɵɵtext(52, " Trending Tags");
652
703
  i0.ɵɵelementEnd();
653
- i0.ɵɵelementStart(50, "div", 39);
654
- i0.ɵɵrepeaterCreate(51, ClassifyPipelineTabComponent_For_52_Template, 2, 6, "span", 40, _forTrack3);
704
+ i0.ɵɵelementStart(53, "div", 42);
705
+ i0.ɵɵrepeaterCreate(54, ClassifyPipelineTabComponent_For_55_Template, 2, 6, "span", 43, _forTrack3);
655
706
  i0.ɵɵelementEnd()();
656
- i0.ɵɵelementStart(53, "div", 41)(54, "div", 42);
657
- i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_div_click_54_listener() { return ctx.onToggleConfig(); });
658
- i0.ɵɵelementStart(55, "span", 17);
659
- i0.ɵɵelement(56, "i", 43);
660
- i0.ɵɵtext(57, " Pipeline Settings");
707
+ i0.ɵɵelementStart(56, "div", 44)(57, "div", 45);
708
+ i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_div_click_57_listener() { return ctx.onToggleConfig(); });
709
+ i0.ɵɵelementStart(58, "span", 19);
710
+ i0.ɵɵelement(59, "i", 46);
711
+ i0.ɵɵtext(60, " Pipeline Settings");
661
712
  i0.ɵɵelementEnd();
662
- i0.ɵɵelement(58, "i", 44);
713
+ i0.ɵɵelement(61, "i", 47);
663
714
  i0.ɵɵelementEnd();
664
- i0.ɵɵconditionalCreate(59, ClassifyPipelineTabComponent_Conditional_59_Template, 50, 10, "div", 45);
715
+ i0.ɵɵconditionalCreate(62, ClassifyPipelineTabComponent_Conditional_62_Template, 50, 10, "div", 48);
665
716
  i0.ɵɵelementEnd()()()()()();
666
717
  } if (rf & 2) {
667
718
  i0.ɵɵadvance(6);
668
719
  i0.ɵɵproperty("Padding", false)("Flex", true);
669
720
  i0.ɵɵadvance(4);
670
721
  i0.ɵɵrepeater(ctx.KPIMetrics);
671
- i0.ɵɵadvance(4);
672
- i0.ɵɵconditional(ctx.PipelineStages.length > 0 && (ctx.IsRunning || ctx.IsPaused) ? 14 : -1);
722
+ i0.ɵɵadvance(3);
723
+ i0.ɵɵproperty("Provider", ctx.Provider);
724
+ i0.ɵɵadvance(3);
725
+ i0.ɵɵconditional(ctx.PipelineStages.length > 0 && (ctx.IsRunning || ctx.IsPaused) ? 16 : -1);
673
726
  i0.ɵɵadvance();
674
- i0.ɵɵconditional(ctx.IsRunning || ctx.IsPaused ? 15 : -1);
727
+ i0.ɵɵconditional(ctx.IsRunning || ctx.IsPaused ? 17 : -1);
675
728
  i0.ɵɵadvance();
676
- i0.ɵɵconditional(ctx.IsRunning && ctx.LiveRunDetailRows.length > 0 ? 16 : -1);
729
+ i0.ɵɵconditional(ctx.IsRunning && ctx.LiveRunDetailRows.length > 0 ? 18 : -1);
677
730
  i0.ɵɵadvance(7);
678
731
  i0.ɵɵproperty("title", ctx.FeedSortOrder === "newest" ? "Showing newest first" : "Showing oldest first");
679
732
  i0.ɵɵadvance();
@@ -685,13 +738,15 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
685
738
  i0.ɵɵadvance(3);
686
739
  i0.ɵɵtwoWayProperty("ngModel", ctx.FeedSearchQuery);
687
740
  i0.ɵɵadvance();
688
- i0.ɵɵconditional(ctx.FeedSearchQuery ? 31 : -1);
741
+ i0.ɵɵconditional(ctx.FeedSearchQuery ? 33 : -1);
689
742
  i0.ɵɵadvance(2);
690
- i0.ɵɵconditional(ctx.FilteredFeedItems.length === 0 ? 33 : -1);
743
+ i0.ɵɵconditional(ctx.FilteredFeedItems.length === 0 ? 35 : -1);
691
744
  i0.ɵɵadvance();
692
745
  i0.ɵɵrepeater(ctx.PaginatedFeedItems);
693
746
  i0.ɵɵadvance(2);
694
- i0.ɵɵconditional(ctx.FeedTotalPages > 1 ? 36 : -1);
747
+ i0.ɵɵconditional(ctx.FeedTotalPages > 1 ? 38 : -1);
748
+ i0.ɵɵadvance();
749
+ i0.ɵɵconditional(ctx.TotalItemCount > 0 ? 39 : -1);
695
750
  i0.ɵɵadvance(8);
696
751
  i0.ɵɵrepeater(ctx.SourceMinis);
697
752
  i0.ɵɵadvance(7);
@@ -699,12 +754,12 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
699
754
  i0.ɵɵadvance(7);
700
755
  i0.ɵɵclassProp("fa-chevron-down", !ctx.ShowPipelineConfig)("fa-chevron-up", ctx.ShowPipelineConfig);
701
756
  i0.ɵɵadvance();
702
- i0.ɵɵconditional(ctx.ShowPipelineConfig ? 59 : -1);
703
- } }, dependencies: [i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.RangeValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJPageBodyInteriorComponent, i3.DecimalPipe], encapsulation: 2 });
757
+ i0.ɵɵconditional(ctx.ShowPipelineConfig ? 62 : -1);
758
+ } }, dependencies: [i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.RangeValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJPageBodyInteriorComponent, i3.ClassifyOverviewAnalyticsComponent, i4.DecimalPipe], styles: ["\n\n\n\n\n\n\n\n\n\n.at-analytics-section[_ngcontent-%COMP%] {\n margin: 12px 0 16px;\n}"] });
704
759
  }
705
760
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassifyPipelineTabComponent, [{
706
761
  type: Component,
707
- args: [{ standalone: false, selector: 'classify-pipeline-tab', template: "<mj-page-header-interior\n Title=\"Pipeline Monitor\"\n Subtitle=\"Real-time processing status and recent activity\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"onRefresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> <span class=\"mj-action-label\">Refresh</span>\n </button>\n </div>\n</mj-page-header-interior>\n\n<mj-page-body-interior [Padding]=\"false\" [Flex]=\"true\">\n<div class=\"at-main-area\">\n <div class=\"at-page-body\">\n <!-- KPIs -->\n <div class=\"at-kpi-strip\">\n @for (kpi of KPIMetrics; track kpi.Label) {\n <div class=\"at-kpi-card\">\n <div class=\"at-kpi-value\" [class.at-kpi-error-value]=\"kpi.Label === 'Errors' && kpi.Value > 0\">{{ kpi.Value | number }}</div>\n <div class=\"at-kpi-label\">{{ kpi.Label }}</div>\n @if (kpi.Trend) {\n <div class=\"at-kpi-trend\" [class.up]=\"kpi.TrendUp\">\n @if (kpi.TrendUp) { <i class=\"fa-solid fa-arrow-up\"></i> }\n {{ kpi.Trend }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"at-pipeline-layout\">\n <div class=\"at-pipeline-center\">\n <!-- Pipeline stages visualization (only during active run) -->\n @if (PipelineStages.length > 0 && (IsRunning || IsPaused)) {\n <div class=\"at-pipeline-stages\">\n @for (stage of PipelineStages; track stage.Name; let last = $last) {\n <div class=\"at-pipeline-stage\"\n [class.stage-idle]=\"stage.Status === 'idle'\"\n [class.stage-active]=\"stage.Status === 'active'\"\n [class.stage-complete]=\"stage.Status === 'complete'\">\n <div class=\"at-pipeline-stage-icon\">\n @if (stage.Status === 'active') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (stage.Status === 'complete') {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n <i [class]=\"stage.Icon\"></i>\n }\n </div>\n <div class=\"at-pipeline-stage-name\">{{ stage.Name }}</div>\n </div>\n @if (!last) {\n <div class=\"at-stage-connector\"\n [class.connector-complete]=\"stage.Status === 'complete'\">\n </div>\n }\n }\n </div>\n }\n\n <!-- Progress bar (visible during run or paused) -->\n @if (IsRunning || IsPaused) {\n <div class=\"at-progress-section\">\n <div class=\"at-progress-header\">\n <span class=\"at-progress-stage-label\">{{ RunStage }}</span>\n <span class=\"at-progress-pct\">{{ RunProgress | number:'1.0-0' }}%</span>\n </div>\n <div class=\"at-progress-bar\"><div class=\"at-progress-fill\" [style.width.%]=\"RunProgress\" [class.at-progress-fill-paused]=\"IsPaused\"></div></div>\n @if (RunCurrentItem) {\n <div class=\"at-progress-current\">{{ RunCurrentItem }}</div>\n }\n <div class=\"at-pipeline-controls\">\n @if (IsRunning && !IsPaused) {\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"onPause()\" [disabled]=\"!CurrentProcessRunID\">\n <i class=\"fa-solid fa-pause\"></i> Pause\n </button>\n }\n @if (IsPaused) {\n <button class=\"at-action-btn at-primary-btn\" (click)=\"onResume()\">\n <i class=\"fa-solid fa-play\"></i> Resume\n </button>\n }\n <button class=\"at-action-btn at-danger-btn\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-stop\"></i> Cancel\n </button>\n </div>\n </div>\n }\n\n <!-- D2: Live Per-Source Progress (visible during run) -->\n @if (IsRunning && LiveRunDetailRows.length > 0) {\n <div class=\"at-card\" style=\"margin-bottom: 12px;\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-list-check\"></i> Per-Source Progress</span>\n <button class=\"at-action-btn at-secondary-btn\" style=\"font-size: 11px; padding: 3px 8px;\" (click)=\"onLoadLiveRunDetails()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n <div class=\"at-card-body\" style=\"max-height: 200px; overflow-y: auto;\">\n <table class=\"at-run-table\">\n <thead>\n <tr>\n <th>Source</th>\n <th>Status</th>\n <th>Items</th>\n <th>Tagged</th>\n <th>Vectorized</th>\n <th>Errors</th>\n </tr>\n </thead>\n <tbody>\n @for (row of LiveRunDetailRows; track row.SourceName) {\n <tr>\n <td class=\"at-run-source-name\">{{ row.SourceName }}</td>\n <td>\n <span class=\"at-run-status-badge\" [class]=\"row.StatusClass\">\n @if (row.StatusClass === 'running') {\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 0.55rem\"></i>\n }\n {{ row.Status }}\n </span>\n </td>\n <td>{{ row.ItemsProcessed }}</td>\n <td>{{ row.ItemsTagged }}</td>\n <td>{{ row.ItemsVectorized }}</td>\n <td [class.run-error-text]=\"row.ErrorCount > 0\">{{ row.ErrorCount }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Recent Processing Feed -->\n <div class=\"at-card at-feed-card\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-bolt\"></i> Recent Processing</span>\n <div class=\"at-feed-header-actions\">\n <button class=\"at-feed-sort-btn\" (click)=\"ToggleFeedSort()\"\n [title]=\"FeedSortOrder === 'newest' ? 'Showing newest first' : 'Showing oldest first'\">\n <i class=\"fa-solid\" [class.fa-arrow-down-short-wide]=\"FeedSortOrder === 'newest'\"\n [class.fa-arrow-up-short-wide]=\"FeedSortOrder === 'oldest'\"></i>\n {{ FeedSortOrder === 'newest' ? 'Newest' : 'Oldest' }}\n </button>\n <span class=\"at-feed-count\">{{ FilteredFeedItems.length }} items</span>\n </div>\n </div>\n <!-- Feed search bar -->\n <div class=\"at-feed-search-bar\">\n <i class=\"fa-solid fa-search at-feed-search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input at-feed-search-input\"\n placeholder=\"Search items, sources, or tags...\"\n [(ngModel)]=\"FeedSearchQuery\"\n (input)=\"OnFeedSearchChange()\">\n @if (FeedSearchQuery) {\n <button class=\"at-feed-search-clear\" (click)=\"FeedSearchQuery = ''; OnFeedSearchChange()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"at-card-body at-feed-scroll-body\">\n @if (FilteredFeedItems.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n @if (FeedSearchQuery) {\n <p>No items match \"{{ FeedSearchQuery }}\"</p>\n } @else {\n <p>No processed items yet.</p>\n }\n </div>\n }\n @for (item of PaginatedFeedItems; track item.Name + item.SourceName + item.TimeAgo) {\n <div class=\"at-feed-item at-feed-item-clickable\" (click)=\"onFeedItemClick(GetFeedItemOriginalIndex(item))\">\n <div class=\"at-feed-status-dot\" [class]=\"item.Status\"></div>\n <div class=\"at-feed-item-content\">\n <span class=\"at-feed-item-name\">{{ item.Name }}</span>\n <span class=\"at-feed-item-source-label\">{{ item.SourceName }}</span>\n </div>\n <div class=\"at-feed-item-tags\">\n @for (tag of item.Tags; track tag) {\n <span class=\"at-feed-tag\">{{ tag }}</span>\n }\n </div>\n <span class=\"at-feed-item-time\">{{ item.TimeAgo }}</span>\n </div>\n }\n </div>\n <!-- Feed pagination -->\n @if (FeedTotalPages > 1) {\n <div class=\"at-feed-pagination\">\n <button class=\"at-action-btn at-secondary-btn\" [disabled]=\"FeedPage === 0\" (click)=\"FeedPrevPage()\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <span class=\"at-feed-pagination-label\">Page {{ FeedPage + 1 }} of {{ FeedTotalPages }}</span>\n <button class=\"at-action-btn at-secondary-btn\" [disabled]=\"FeedPage >= FeedTotalPages - 1\" (click)=\"FeedNextPage()\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n\n <!-- Right sidebar -->\n <div class=\"at-pipeline-right\">\n <!-- Sources Quick List -->\n <div class=\"at-card\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-database\"></i> Sources</span>\n </div>\n <div class=\"at-card-body\">\n @for (source of SourceMinis; track source.ID) {\n <div class=\"at-source-mini\">\n <div class=\"at-source-mini-icon\"><i [class]=\"source.Icon\"></i></div>\n <div class=\"at-source-mini-info\">\n <div class=\"at-source-mini-name\">{{ source.Name }}</div>\n <div class=\"at-source-mini-meta\">{{ source.Meta }}</div>\n </div>\n <div class=\"at-source-mini-status\" [class]=\"source.StatusClass\"></div>\n </div>\n }\n </div>\n </div>\n <!-- Trending Tags -->\n <div class=\"at-card at-tag-cloud-card\">\n <div class=\"at-card-title\" style=\"margin-bottom: 10px;\"><i class=\"fa-solid fa-chart-bar\"></i> Trending Tags</div>\n <div class=\"at-tag-cloud\">\n @for (tag of TrendingTags; track tag.Tag) {\n <span class=\"at-tag-pill\" [class]=\"tag.SizeClass\"\n [style.opacity]=\"0.4 + tag.AvgWeight * 0.6\"\n [title]=\"'Weight: ' + tag.AvgWeight.toFixed(2)\">{{ tag.Tag }}</span>\n }\n </div>\n </div>\n\n <!-- Pipeline Settings Widget -->\n <div class=\"at-card at-config-card\">\n <div class=\"at-card-header\" (click)=\"onToggleConfig()\" style=\"cursor:pointer\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-sliders\"></i> Pipeline Settings</span>\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!ShowPipelineConfig\" [class.fa-chevron-up]=\"ShowPipelineConfig\" style=\"font-size:0.7rem; color:var(--mj-text-muted)\"></i>\n </div>\n @if (ShowPipelineConfig) {\n <div class=\"at-card-body at-config-body\">\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Batch Size</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"10\" max=\"1000\" step=\"10\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.BatchSize\">\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Throttle (ms)</label>\n <div class=\"at-config-control\">\n <input type=\"range\" class=\"at-config-slider\" min=\"0\" max=\"5000\" step=\"100\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.DelayBetweenBatchesMs\">\n <span class=\"at-config-value\">{{ PipelineConfig.Pipeline!.DelayBetweenBatchesMs }}ms</span>\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Error Tolerance</label>\n <div class=\"at-config-control\">\n <input type=\"range\" class=\"at-config-slider\" min=\"5\" max=\"50\" step=\"5\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.ErrorThresholdPercent\">\n <span class=\"at-config-value\">{{ PipelineConfig.Pipeline!.ErrorThresholdPercent }}%</span>\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Auto-resume</label>\n <div class=\"at-config-control\">\n <label class=\"at-config-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"PipelineConfig.Pipeline!.ResumeFromLastBatch\">\n <span class=\"at-toggle-track\"><span class=\"at-toggle-thumb\"></span></span>\n </label>\n </div>\n </div>\n <div class=\"at-config-divider\"></div>\n <div class=\"at-config-section-label\">LLM Rate Limits</div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Requests/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1\" max=\"500\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.LLM!.RequestsPerMinute\">\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Tokens/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1000\" max=\"5000000\" step=\"10000\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.LLM!.TokensPerMinute\">\n <span class=\"at-config-value\">{{ formatTokenCount(PipelineConfig.RateLimits!.LLM!.TokensPerMinute ?? 0) }}</span>\n </div>\n </div>\n <div class=\"at-config-section-label\">Embedding Rate Limits</div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Requests/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1\" max=\"1000\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.Embedding!.RequestsPerMinute\">\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n</mj-page-body-interior>\n", styles: ["/*\n * Pipeline Monitor tab styles.\n *\n * The host (AutotaggingPipelineResourceComponent) uses ViewEncapsulation.None,\n * so its `.at-*` rules are global and already style this tab's markup while it\n * renders inside the host shell. Tab-specific rules would live here as the\n * shared CSS is partitioned during the host-slim step.\n */\n"] }]
762
+ args: [{ standalone: false, selector: 'classify-pipeline-tab', template: "<mj-page-header-interior\n Title=\"Pipeline Monitor\"\n Subtitle=\"Real-time processing status and recent activity\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"onRefresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> <span class=\"mj-action-label\">Refresh</span>\n </button>\n </div>\n</mj-page-header-interior>\n\n<mj-page-body-interior [Padding]=\"false\" [Flex]=\"true\">\n<div class=\"at-main-area\">\n <div class=\"at-page-body\">\n <!-- KPIs -->\n <div class=\"at-kpi-strip\">\n @for (kpi of KPIMetrics; track kpi.Label) {\n <div class=\"at-kpi-card\">\n <div class=\"at-kpi-value\" [class.at-kpi-error-value]=\"kpi.Label === 'Errors' && kpi.Value > 0\">{{ kpi.Value | number }}</div>\n <div class=\"at-kpi-label\">{{ kpi.Label }}</div>\n @if (kpi.Trend) {\n <div class=\"at-kpi-trend\" [class.up]=\"kpi.TrendUp\">\n @if (kpi.TrendUp) { <i class=\"fa-solid fa-arrow-up\"></i> }\n {{ kpi.Trend }}\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Phase 4: Overview analytics (KPI cards + hand-rolled SVG charts) -->\n <div class=\"at-analytics-section\">\n <classify-overview-analytics [Provider]=\"Provider\"></classify-overview-analytics>\n </div>\n\n <div class=\"at-pipeline-layout\">\n <div class=\"at-pipeline-center\">\n <!-- Pipeline stages visualization (only during active run) -->\n @if (PipelineStages.length > 0 && (IsRunning || IsPaused)) {\n <div class=\"at-pipeline-stages\">\n @for (stage of PipelineStages; track stage.Name; let last = $last) {\n <div class=\"at-pipeline-stage\"\n [class.stage-idle]=\"stage.Status === 'idle'\"\n [class.stage-active]=\"stage.Status === 'active'\"\n [class.stage-complete]=\"stage.Status === 'complete'\">\n <div class=\"at-pipeline-stage-icon\">\n @if (stage.Status === 'active') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (stage.Status === 'complete') {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n <i [class]=\"stage.Icon\"></i>\n }\n </div>\n <div class=\"at-pipeline-stage-name\">{{ stage.Name }}</div>\n </div>\n @if (!last) {\n <div class=\"at-stage-connector\"\n [class.connector-complete]=\"stage.Status === 'complete'\">\n </div>\n }\n }\n </div>\n }\n\n <!-- Progress bar (visible during run or paused) -->\n @if (IsRunning || IsPaused) {\n <div class=\"at-progress-section\">\n <div class=\"at-progress-header\">\n <span class=\"at-progress-stage-label\">{{ RunStage }}</span>\n <span class=\"at-progress-pct\">{{ RunProgress | number:'1.0-0' }}%</span>\n </div>\n <div class=\"at-progress-bar\"><div class=\"at-progress-fill\" [style.width.%]=\"RunProgress\" [class.at-progress-fill-paused]=\"IsPaused\"></div></div>\n @if (RunCurrentItem) {\n <div class=\"at-progress-current\">{{ RunCurrentItem }}</div>\n }\n <div class=\"at-pipeline-controls\">\n @if (IsRunning && !IsPaused) {\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"onPause()\" [disabled]=\"!CurrentProcessRunID\">\n <i class=\"fa-solid fa-pause\"></i> Pause\n </button>\n }\n @if (IsPaused) {\n <button class=\"at-action-btn at-primary-btn\" (click)=\"onResume()\">\n <i class=\"fa-solid fa-play\"></i> Resume\n </button>\n }\n <button class=\"at-action-btn at-danger-btn\" (click)=\"onCancel()\">\n <i class=\"fa-solid fa-stop\"></i> Cancel\n </button>\n </div>\n </div>\n }\n\n <!-- D2: Live Per-Source Progress (visible during run) -->\n @if (IsRunning && LiveRunDetailRows.length > 0) {\n <div class=\"at-card\" style=\"margin-bottom: 12px;\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-list-check\"></i> Per-Source Progress</span>\n <button class=\"at-action-btn at-secondary-btn\" style=\"font-size: 11px; padding: 3px 8px;\" (click)=\"onLoadLiveRunDetails()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n <div class=\"at-card-body\" style=\"max-height: 200px; overflow-y: auto;\">\n <table class=\"at-run-table\">\n <thead>\n <tr>\n <th>Source</th>\n <th>Status</th>\n <th>Items</th>\n <th>Tagged</th>\n <th>Vectorized</th>\n <th>Errors</th>\n </tr>\n </thead>\n <tbody>\n @for (row of LiveRunDetailRows; track row.SourceName) {\n <tr>\n <td class=\"at-run-source-name\">{{ row.SourceName }}</td>\n <td>\n <span class=\"at-run-status-badge\" [class]=\"row.StatusClass\">\n @if (row.StatusClass === 'running') {\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 0.55rem\"></i>\n }\n {{ row.Status }}\n </span>\n </td>\n <td>{{ row.ItemsProcessed }}</td>\n <td>{{ row.ItemsTagged }}</td>\n <td>{{ row.ItemsVectorized }}</td>\n <td [class.run-error-text]=\"row.ErrorCount > 0\">{{ row.ErrorCount }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Recent Processing Feed -->\n <div class=\"at-card at-feed-card\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-bolt\"></i> Recent Processing</span>\n <div class=\"at-feed-header-actions\">\n <button class=\"at-feed-sort-btn\" (click)=\"ToggleFeedSort()\"\n [title]=\"FeedSortOrder === 'newest' ? 'Showing newest first' : 'Showing oldest first'\">\n <i class=\"fa-solid\" [class.fa-arrow-down-short-wide]=\"FeedSortOrder === 'newest'\"\n [class.fa-arrow-up-short-wide]=\"FeedSortOrder === 'oldest'\"></i>\n {{ FeedSortOrder === 'newest' ? 'Newest' : 'Oldest' }}\n </button>\n <span class=\"at-feed-count\">{{ FilteredFeedItems.length }} items</span>\n </div>\n </div>\n <!-- Feed search bar -->\n <div class=\"at-feed-search-bar\">\n <i class=\"fa-solid fa-search at-feed-search-icon\"></i>\n <input type=\"text\"\n class=\"mj-input at-feed-search-input\"\n placeholder=\"Search items, sources, or tags...\"\n [(ngModel)]=\"FeedSearchQuery\"\n (input)=\"OnFeedSearchChange()\">\n @if (FeedSearchQuery) {\n <button class=\"at-feed-search-clear\" (click)=\"FeedSearchQuery = ''; OnFeedSearchChange()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"at-card-body at-feed-scroll-body\">\n @if (FilteredFeedItems.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n @if (FeedSearchQuery) {\n <p>No items match \"{{ FeedSearchQuery }}\"</p>\n } @else {\n <p>No processed items yet.</p>\n }\n </div>\n }\n @for (item of PaginatedFeedItems; track item.Name + item.SourceName + item.TimeAgo) {\n <div class=\"at-feed-item at-feed-item-clickable\" (click)=\"onFeedItemClick(GetFeedItemOriginalIndex(item))\">\n <div class=\"at-feed-status-dot\" [class]=\"item.Status\"></div>\n <div class=\"at-feed-item-content\">\n <span class=\"at-feed-item-name\">{{ item.Name }}</span>\n <span class=\"at-feed-item-source-label\">{{ item.SourceName }}</span>\n </div>\n <div class=\"at-feed-item-tags\">\n @for (tag of item.Tags; track tag) {\n <span class=\"at-feed-tag\">{{ tag }}</span>\n }\n </div>\n <span class=\"at-feed-item-time\">{{ item.TimeAgo }}</span>\n </div>\n }\n </div>\n <!-- Feed pagination -->\n @if (FeedTotalPages > 1) {\n <div class=\"at-feed-pagination\">\n <button class=\"at-action-btn at-secondary-btn\" [disabled]=\"FeedPage === 0\" (click)=\"FeedPrevPage()\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <span class=\"at-feed-pagination-label\">Page {{ FeedPage + 1 }} of {{ FeedTotalPages }}</span>\n <button class=\"at-action-btn at-secondary-btn\" [disabled]=\"FeedPage >= FeedTotalPages - 1\" (click)=\"FeedNextPage()\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n }\n @if (TotalItemCount > 0) {\n <div class=\"at-load-more-bar\">\n <span class=\"at-load-more-count\">Showing {{ FeedItems.length }} of {{ TotalItemCount }} items</span>\n @if (HasMoreItems) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"onLoadMoreItems()\" [disabled]=\"IsLoadingMoreItems\">\n @if (IsLoadingMoreItems) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\u2026\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Load more\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Right sidebar -->\n <div class=\"at-pipeline-right\">\n <!-- Sources Quick List -->\n <div class=\"at-card\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-database\"></i> Sources</span>\n </div>\n <div class=\"at-card-body\">\n @for (source of SourceMinis; track source.ID) {\n <div class=\"at-source-mini\">\n <div class=\"at-source-mini-icon\"><i [class]=\"source.Icon\"></i></div>\n <div class=\"at-source-mini-info\">\n <div class=\"at-source-mini-name\">{{ source.Name }}</div>\n <div class=\"at-source-mini-meta\">{{ source.Meta }}</div>\n </div>\n <div class=\"at-source-mini-status\" [class]=\"source.StatusClass\"></div>\n </div>\n }\n </div>\n </div>\n <!-- Trending Tags -->\n <div class=\"at-card at-tag-cloud-card\">\n <div class=\"at-card-title\" style=\"margin-bottom: 10px;\"><i class=\"fa-solid fa-chart-bar\"></i> Trending Tags</div>\n <div class=\"at-tag-cloud\">\n @for (tag of TrendingTags; track tag.Tag) {\n <span class=\"at-tag-pill\" [class]=\"tag.SizeClass\"\n [style.opacity]=\"0.4 + tag.AvgWeight * 0.6\"\n [title]=\"'Weight: ' + tag.AvgWeight.toFixed(2)\">{{ tag.Tag }}</span>\n }\n </div>\n </div>\n\n <!-- Pipeline Settings Widget -->\n <div class=\"at-card at-config-card\">\n <div class=\"at-card-header\" (click)=\"onToggleConfig()\" style=\"cursor:pointer\">\n <span class=\"at-card-title\"><i class=\"fa-solid fa-sliders\"></i> Pipeline Settings</span>\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!ShowPipelineConfig\" [class.fa-chevron-up]=\"ShowPipelineConfig\" style=\"font-size:0.7rem; color:var(--mj-text-muted)\"></i>\n </div>\n @if (ShowPipelineConfig) {\n <div class=\"at-card-body at-config-body\">\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Batch Size</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"10\" max=\"1000\" step=\"10\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.BatchSize\">\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Throttle (ms)</label>\n <div class=\"at-config-control\">\n <input type=\"range\" class=\"at-config-slider\" min=\"0\" max=\"5000\" step=\"100\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.DelayBetweenBatchesMs\">\n <span class=\"at-config-value\">{{ PipelineConfig.Pipeline!.DelayBetweenBatchesMs }}ms</span>\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Error Tolerance</label>\n <div class=\"at-config-control\">\n <input type=\"range\" class=\"at-config-slider\" min=\"5\" max=\"50\" step=\"5\"\n [(ngModel)]=\"PipelineConfig.Pipeline!.ErrorThresholdPercent\">\n <span class=\"at-config-value\">{{ PipelineConfig.Pipeline!.ErrorThresholdPercent }}%</span>\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Auto-resume</label>\n <div class=\"at-config-control\">\n <label class=\"at-config-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"PipelineConfig.Pipeline!.ResumeFromLastBatch\">\n <span class=\"at-toggle-track\"><span class=\"at-toggle-thumb\"></span></span>\n </label>\n </div>\n </div>\n <div class=\"at-config-divider\"></div>\n <div class=\"at-config-section-label\">LLM Rate Limits</div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Requests/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1\" max=\"500\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.LLM!.RequestsPerMinute\">\n </div>\n </div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Tokens/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1000\" max=\"5000000\" step=\"10000\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.LLM!.TokensPerMinute\">\n <span class=\"at-config-value\">{{ formatTokenCount(PipelineConfig.RateLimits!.LLM!.TokensPerMinute ?? 0) }}</span>\n </div>\n </div>\n <div class=\"at-config-section-label\">Embedding Rate Limits</div>\n <div class=\"at-config-row\">\n <label class=\"at-config-label\">Requests/min</label>\n <div class=\"at-config-control\">\n <input type=\"number\" class=\"at-config-input\" min=\"1\" max=\"1000\"\n [(ngModel)]=\"PipelineConfig.RateLimits!.Embedding!.RequestsPerMinute\">\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n</mj-page-body-interior>\n", styles: ["/*\n * Pipeline Monitor tab styles.\n *\n * The host (AutotaggingPipelineResourceComponent) uses ViewEncapsulation.None,\n * so its `.at-*` rules are global and already style this tab's markup while it\n * renders inside the host shell. Tab-specific rules would live here as the\n * shared CSS is partitioned during the host-slim step.\n */\n\n.at-analytics-section {\n margin: 12px 0 16px;\n}\n"] }]
708
763
  }], null, { KPIMetrics: [{
709
764
  type: Input
710
765
  }], PipelineStages: [{
@@ -717,6 +772,10 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
717
772
  type: Input
718
773
  }], LiveRunDetailRows: [{
719
774
  type: Input
775
+ }], TotalItemCount: [{
776
+ type: Input
777
+ }], IsLoadingMoreItems: [{
778
+ type: Input
720
779
  }], IsRunning: [{
721
780
  type: Input
722
781
  }], IsPaused: [{
@@ -747,6 +806,8 @@ export class ClassifyPipelineTabComponent extends BaseAngularComponent {
747
806
  type: Output
748
807
  }], ConfigToggled: [{
749
808
  type: Output
809
+ }], LoadMoreItemsRequested: [{
810
+ type: Output
750
811
  }] }); })();
751
812
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassifyPipelineTabComponent, { className: "ClassifyPipelineTabComponent", filePath: "src/AI/components/autotagging/tabs/pipeline-tab.component.ts", lineNumber: 34 }); })();
752
813
  //# sourceMappingURL=pipeline-tab.component.js.map