/**
 * @fileoverview Classify · Pipeline Monitor tab.
 *
 * Presentational sub-page: owns its header-interior (with a Refresh action) and
 * the pipeline monitor body — KPI strip, pipeline-stage visualization, live
 * progress + controls, per-source live-run detail table, the recent-processing
 * feed (with its own search/sort/pagination), the trending-tags cloud, the
 * sources mini-list, and the collapsible pipeline-config panel.
 *
 * It is a VIEW only: all pipeline RUN orchestration (start/pause/resume/cancel,
 * the GraphQL progress subscription, shared data loading, and every `build*`
 * view-model method) stays in the host because it is shared by the global
 * "Run Pipeline" header button and the Sources tab. This tab receives the
 * already-built view models + run state via `@Input()` and emits user intents
 * (refresh, pause/resume/cancel, feed-item click, config toggle) via `@Output()`.
 */
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
import { formatTokenCount } from '../shared/classify.format';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@memberjunction/ng-ui-components";
import * as i3 from "../components/classify-overview-analytics.component";
import * as i4 from "@angular/common";
const _forTrack0 = ($index, $item) => $item.Label;
const _forTrack1 = ($index, $item) => $item.Name + $item.SourceName + $item.TimeAgo;
const _forTrack2 = ($index, $item) => $item.ID;
const _forTrack3 = ($index, $item) => $item.Tag;
const _forTrack4 = ($index, $item) => $item.Name;
const _forTrack5 = ($index, $item) => $item.SourceName;
function ClassifyPipelineTabComponent_For_11_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 53);
} }
function ClassifyPipelineTabComponent_For_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 52);
    i0.ɵɵconditionalCreate(1, ClassifyPipelineTabComponent_For_11_Conditional_6_Conditional_1_Template, 1, 0, "i", 53);
    i0.ɵɵtext(2);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const kpi_r1 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵclassProp("up", kpi_r1.TrendUp);
    i0.ɵɵadvance();
    i0.ɵɵconditional(kpi_r1.TrendUp ? 1 : -1);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate1(" ", kpi_r1.Trend, " ");
} }
function ClassifyPipelineTabComponent_For_11_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 9)(1, "div", 49);
    i0.ɵɵtext(2);
    i0.ɵɵpipe(3, "number");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 50);
    i0.ɵɵtext(5);
    i0.ɵɵelementEnd();
    i0.ɵɵconditionalCreate(6, ClassifyPipelineTabComponent_For_11_Conditional_6_Template, 3, 4, "div", 51);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const kpi_r1 = ctx.$implicit;
    i0.ɵɵadvance();
    i0.ɵɵclassProp("at-kpi-error-value", kpi_r1.Label === "Errors" && kpi_r1.Value > 0);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, kpi_r1.Value));
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(kpi_r1.Label);
    i0.ɵɵadvance();
    i0.ɵɵconditional(kpi_r1.Trend ? 6 : -1);
} }
function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 56);
} }
function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 57);
} }
function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i");
} if (rf & 2) {
    const stage_r2 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵclassMap(stage_r2.Icon);
} }
function ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "div", 61);
} if (rf & 2) {
    const stage_r2 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵclassProp("connector-complete", stage_r2.Status === "complete");
} }
function ClassifyPipelineTabComponent_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 54)(1, "div", 55);
    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);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(5, "div", 59);
    i0.ɵɵtext(6);
    i0.ɵɵelementEnd()();
    i0.ɵɵconditionalCreate(7, ClassifyPipelineTabComponent_Conditional_16_For_2_Conditional_7_Template, 1, 2, "div", 60);
} if (rf & 2) {
    const stage_r2 = ctx.$implicit;
    const ɵ$index_48_r3 = ctx.$index;
    const ɵ$count_48_r4 = ctx.$count;
    i0.ɵɵclassProp("stage-idle", stage_r2.Status === "idle")("stage-active", stage_r2.Status === "active")("stage-complete", stage_r2.Status === "complete");
    i0.ɵɵadvance(2);
    i0.ɵɵconditional(stage_r2.Status === "active" ? 2 : stage_r2.Status === "complete" ? 3 : 4);
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(stage_r2.Name);
    i0.ɵɵadvance();
    i0.ɵɵconditional(!(ɵ$index_48_r3 === ɵ$count_48_r4 - 1) ? 7 : -1);
} }
function ClassifyPipelineTabComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 14);
    i0.ɵɵrepeaterCreate(1, ClassifyPipelineTabComponent_Conditional_16_For_2_Template, 8, 9, null, null, _forTrack4);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵrepeater(ctx_r4.PipelineStages);
} }
function ClassifyPipelineTabComponent_Conditional_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 67);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext(2);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(ctx_r4.RunCurrentItem);
} }
function ClassifyPipelineTabComponent_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
    const _r7 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 73);
    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()); });
    i0.ɵɵelement(1, "i", 74);
    i0.ɵɵtext(2, " Pause ");
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext(2);
    i0.ɵɵproperty("disabled", !ctx_r4.CurrentProcessRunID);
} }
function ClassifyPipelineTabComponent_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
    const _r8 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 75);
    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()); });
    i0.ɵɵelement(1, "i", 76);
    i0.ɵɵtext(2, " Resume ");
    i0.ɵɵelementEnd();
} }
function ClassifyPipelineTabComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
    const _r6 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 15)(1, "div", 62)(2, "span", 63);
    i0.ɵɵtext(3);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "span", 64);
    i0.ɵɵtext(5);
    i0.ɵɵpipe(6, "number");
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(7, "div", 65);
    i0.ɵɵelement(8, "div", 66);
    i0.ɵɵelementEnd();
    i0.ɵɵconditionalCreate(9, ClassifyPipelineTabComponent_Conditional_17_Conditional_9_Template, 2, 1, "div", 67);
    i0.ɵɵelementStart(10, "div", 68);
    i0.ɵɵconditionalCreate(11, ClassifyPipelineTabComponent_Conditional_17_Conditional_11_Template, 3, 1, "button", 69);
    i0.ɵɵconditionalCreate(12, ClassifyPipelineTabComponent_Conditional_17_Conditional_12_Template, 3, 0, "button", 70);
    i0.ɵɵelementStart(13, "button", 71);
    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()); });
    i0.ɵɵelement(14, "i", 72);
    i0.ɵɵtext(15, " Cancel ");
    i0.ɵɵelementEnd()()();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(ctx_r4.RunStage);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(6, 9, ctx_r4.RunProgress, "1.0-0"), "%");
    i0.ɵɵadvance(3);
    i0.ɵɵstyleProp("width", ctx_r4.RunProgress, "%");
    i0.ɵɵclassProp("at-progress-fill-paused", ctx_r4.IsPaused);
    i0.ɵɵadvance();
    i0.ɵɵconditional(ctx_r4.RunCurrentItem ? 9 : -1);
    i0.ɵɵadvance(2);
    i0.ɵɵconditional(ctx_r4.IsRunning && !ctx_r4.IsPaused ? 11 : -1);
    i0.ɵɵadvance();
    i0.ɵɵconditional(ctx_r4.IsPaused ? 12 : -1);
} }
function ClassifyPipelineTabComponent_Conditional_18_For_25_Conditional_5_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 83);
} }
function ClassifyPipelineTabComponent_Conditional_18_For_25_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "tr")(1, "td", 81);
    i0.ɵɵtext(2);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(3, "td")(4, "span", 82);
    i0.ɵɵconditionalCreate(5, ClassifyPipelineTabComponent_Conditional_18_For_25_Conditional_5_Template, 1, 0, "i", 83);
    i0.ɵɵtext(6);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(7, "td");
    i0.ɵɵtext(8);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(9, "td");
    i0.ɵɵtext(10);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(11, "td");
    i0.ɵɵtext(12);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(13, "td");
    i0.ɵɵtext(14);
    i0.ɵɵelementEnd()();
} if (rf & 2) {
    const row_r10 = ctx.$implicit;
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(row_r10.SourceName);
    i0.ɵɵadvance(2);
    i0.ɵɵclassMap(row_r10.StatusClass);
    i0.ɵɵadvance();
    i0.ɵɵconditional(row_r10.StatusClass === "running" ? 5 : -1);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate1(" ", row_r10.Status, " ");
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(row_r10.ItemsProcessed);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(row_r10.ItemsTagged);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(row_r10.ItemsVectorized);
    i0.ɵɵadvance();
    i0.ɵɵclassProp("run-error-text", row_r10.ErrorCount > 0);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(row_r10.ErrorCount);
} }
function ClassifyPipelineTabComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
    const _r9 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 16)(1, "div", 18)(2, "span", 19);
    i0.ɵɵelement(3, "i", 77);
    i0.ɵɵtext(4, " Per-Source Progress");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(5, "button", 78);
    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()); });
    i0.ɵɵelement(6, "i", 3);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(7, "div", 79)(8, "table", 80)(9, "thead")(10, "tr")(11, "th");
    i0.ɵɵtext(12, "Source");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(13, "th");
    i0.ɵɵtext(14, "Status");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(15, "th");
    i0.ɵɵtext(16, "Items");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(17, "th");
    i0.ɵɵtext(18, "Tagged");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(19, "th");
    i0.ɵɵtext(20, "Vectorized");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(21, "th");
    i0.ɵɵtext(22, "Errors");
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(23, "tbody");
    i0.ɵɵrepeaterCreate(24, ClassifyPipelineTabComponent_Conditional_18_For_25_Template, 15, 11, "tr", null, _forTrack5);
    i0.ɵɵelementEnd()()()();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance(24);
    i0.ɵɵrepeater(ctx_r4.LiveRunDetailRows);
} }
function ClassifyPipelineTabComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
    const _r11 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 84);
    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()); });
    i0.ɵɵelement(1, "i", 85);
    i0.ɵɵelementEnd();
} }
function ClassifyPipelineTabComponent_Conditional_35_Conditional_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "p");
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext(2);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate1("No items match \"", ctx_r4.FeedSearchQuery, "\"");
} }
function ClassifyPipelineTabComponent_Conditional_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "p");
    i0.ɵɵtext(1, "No processed items yet.");
    i0.ɵɵelementEnd();
} }
function ClassifyPipelineTabComponent_Conditional_35_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 30);
    i0.ɵɵelement(1, "i", 86);
    i0.ɵɵconditionalCreate(2, ClassifyPipelineTabComponent_Conditional_35_Conditional_2_Template, 2, 1, "p")(3, ClassifyPipelineTabComponent_Conditional_35_Conditional_3_Template, 2, 0, "p");
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance(2);
    i0.ɵɵconditional(ctx_r4.FeedSearchQuery ? 2 : 3);
} }
function ClassifyPipelineTabComponent_For_37_For_9_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span", 93);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const tag_r14 = ctx.$implicit;
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(tag_r14);
} }
function ClassifyPipelineTabComponent_For_37_Template(rf, ctx) { if (rf & 1) {
    const _r12 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 87);
    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))); });
    i0.ɵɵelement(1, "div", 88);
    i0.ɵɵelementStart(2, "div", 89)(3, "span", 90);
    i0.ɵɵtext(4);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(5, "span", 91);
    i0.ɵɵtext(6);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(7, "div", 92);
    i0.ɵɵrepeaterCreate(8, ClassifyPipelineTabComponent_For_37_For_9_Template, 2, 1, "span", 93, i0.ɵɵrepeaterTrackByIdentity);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(10, "span", 94);
    i0.ɵɵtext(11);
    i0.ɵɵelementEnd()();
} if (rf & 2) {
    const item_r13 = ctx.$implicit;
    i0.ɵɵadvance();
    i0.ɵɵclassMap(item_r13.Status);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(item_r13.Name);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(item_r13.SourceName);
    i0.ɵɵadvance(2);
    i0.ɵɵrepeater(item_r13.Tags);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(item_r13.TimeAgo);
} }
function ClassifyPipelineTabComponent_Conditional_38_Template(rf, ctx) { if (rf & 1) {
    const _r15 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 32)(1, "button", 73);
    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()); });
    i0.ɵɵelement(2, "i", 95);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(3, "span", 96);
    i0.ɵɵtext(4);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(5, "button", 73);
    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()); });
    i0.ɵɵelement(6, "i", 97);
    i0.ɵɵelementEnd()();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵproperty("disabled", ctx_r4.FeedPage === 0);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate2("Page ", ctx_r4.FeedPage + 1, " of ", ctx_r4.FeedTotalPages);
    i0.ɵɵadvance();
    i0.ɵɵproperty("disabled", ctx_r4.FeedPage >= ctx_r4.FeedTotalPages - 1);
} }
function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 56);
    i0.ɵɵtext(1, " Loading\u2026 ");
} }
function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 101);
    i0.ɵɵtext(1, " Load more ");
} }
function ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
    const _r16 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 100);
    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()); });
    i0.ɵɵconditionalCreate(1, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_1_Template, 2, 0)(2, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Conditional_2_Template, 2, 0);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext(2);
    i0.ɵɵproperty("disabled", ctx_r4.IsLoadingMoreItems);
    i0.ɵɵadvance();
    i0.ɵɵconditional(ctx_r4.IsLoadingMoreItems ? 1 : 2);
} }
function ClassifyPipelineTabComponent_Conditional_39_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 33)(1, "span", 98);
    i0.ɵɵtext(2);
    i0.ɵɵelementEnd();
    i0.ɵɵconditionalCreate(3, ClassifyPipelineTabComponent_Conditional_39_Conditional_3_Template, 3, 2, "button", 99);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate2("Showing ", ctx_r4.FeedItems.length, " of ", ctx_r4.TotalItemCount, " items");
    i0.ɵɵadvance();
    i0.ɵɵconditional(ctx_r4.HasMoreItems ? 3 : -1);
} }
function ClassifyPipelineTabComponent_For_48_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 38)(1, "div", 102);
    i0.ɵɵelement(2, "i");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(3, "div", 103)(4, "div", 104);
    i0.ɵɵtext(5);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(6, "div", 105);
    i0.ɵɵtext(7);
    i0.ɵɵelementEnd()();
    i0.ɵɵelement(8, "div", 106);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const source_r17 = ctx.$implicit;
    i0.ɵɵadvance(2);
    i0.ɵɵclassMap(source_r17.Icon);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(source_r17.Name);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(source_r17.Meta);
    i0.ɵɵadvance();
    i0.ɵɵclassMap(source_r17.StatusClass);
} }
function ClassifyPipelineTabComponent_For_55_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span", 107);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const tag_r18 = ctx.$implicit;
    i0.ɵɵclassMap(tag_r18.SizeClass);
    i0.ɵɵstyleProp("opacity", 0.4 + tag_r18.AvgWeight * 0.6);
    i0.ɵɵproperty("title", "Weight: " + tag_r18.AvgWeight.toFixed(2));
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(tag_r18.Tag);
} }
function ClassifyPipelineTabComponent_Conditional_62_Template(rf, ctx) { if (rf & 1) {
    const _r19 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 48)(1, "div", 108)(2, "label", 109);
    i0.ɵɵtext(3, "Batch Size");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 110)(5, "input", 111);
    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); });
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(6, "div", 108)(7, "label", 109);
    i0.ɵɵtext(8, "Throttle (ms)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(9, "div", 110)(10, "input", 112);
    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); });
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(11, "span", 113);
    i0.ɵɵtext(12);
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(13, "div", 108)(14, "label", 109);
    i0.ɵɵtext(15, "Error Tolerance");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(16, "div", 110)(17, "input", 114);
    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); });
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(18, "span", 113);
    i0.ɵɵtext(19);
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(20, "div", 108)(21, "label", 109);
    i0.ɵɵtext(22, "Auto-resume");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(23, "div", 110)(24, "label", 115)(25, "input", 116);
    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); });
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(26, "span", 117);
    i0.ɵɵelement(27, "span", 118);
    i0.ɵɵelementEnd()()()();
    i0.ɵɵelement(28, "div", 119);
    i0.ɵɵelementStart(29, "div", 120);
    i0.ɵɵtext(30, "LLM Rate Limits");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(31, "div", 108)(32, "label", 109);
    i0.ɵɵtext(33, "Requests/min");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(34, "div", 110)(35, "input", 121);
    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); });
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(36, "div", 108)(37, "label", 109);
    i0.ɵɵtext(38, "Tokens/min");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(39, "div", 110)(40, "input", 122);
    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); });
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(41, "span", 113);
    i0.ɵɵtext(42);
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(43, "div", 120);
    i0.ɵɵtext(44, "Embedding Rate Limits");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(45, "div", 108)(46, "label", 109);
    i0.ɵɵtext(47, "Requests/min");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(48, "div", 110)(49, "input", 123);
    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); });
    i0.ɵɵelementEnd()()()();
} if (rf & 2) {
    const ctx_r4 = i0.ɵɵnextContext();
    i0.ɵɵadvance(5);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.Pipeline.BatchSize);
    i0.ɵɵadvance(5);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate1("", ctx_r4.PipelineConfig.Pipeline.DelayBetweenBatchesMs, "ms");
    i0.ɵɵadvance(5);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate1("", ctx_r4.PipelineConfig.Pipeline.ErrorThresholdPercent, "%");
    i0.ɵɵadvance(6);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.Pipeline.ResumeFromLastBatch);
    i0.ɵɵadvance(10);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.RateLimits.LLM.RequestsPerMinute);
    i0.ɵɵadvance(5);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(ctx_r4.formatTokenCount(ctx_r4.PipelineConfig.RateLimits.LLM.TokensPerMinute ?? 0));
    i0.ɵɵadvance(7);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r4.PipelineConfig.RateLimits.Embedding.RequestsPerMinute);
} }
export class ClassifyPipelineTabComponent extends BaseAngularComponent {
    // ── Built view models (data DOWN from the host orchestrator) ──
    /** KPI strip cards. */
    KPIMetrics = [];
    /** Pipeline-stage visualization (shown only during an active/paused run). */
    PipelineStages = [];
    /** Recent-processing feed source list (host keeps it index-aligned with its raw content items). */
    FeedItems = [];
    /** Sources mini-list (right sidebar). */
    SourceMinis = [];
    /** Trending-tags cloud. */
    TrendingTags = [];
    /** Per-source live-run detail rows (shown during an active run). */
    LiveRunDetailRows = [];
    /** Total content-item count in the DB (from TotalRowCount) — drives the "Showing X of Y" line. */
    TotalItemCount = 0;
    /** True while the host is loading the next page of content items. */
    IsLoadingMoreItems = false;
    // ── Run state (data DOWN from the host) ──
    IsRunning = false;
    IsPaused = false;
    RunProgress = 0;
    RunStage = '';
    RunCurrentItem = '';
    /** Server-side process run ID — gates the Pause button. */
    CurrentProcessRunID = null;
    /**
     * The pipeline-config object the host owns. Two-way bound in-place via the
     * config panel's `[(ngModel)]` bindings — since this is a shared object
     * reference, mutations flow straight back to the host without an output.
     */
    PipelineConfig = {};
    /** Config-panel expanded state — host persists this to user prefs + reports it to the agent. */
    ShowPipelineConfig = false;
    // ── Tab-local view state (purely presentational, pipeline-only) ──
    /** Feed search text. */
    FeedSearchQuery = '';
    /** Current feed page (0-based). */
    FeedPage = 0;
    FeedPageSize = 20;
    /** Sort order for the feed: 'newest' (default) or 'oldest'. */
    FeedSortOrder = 'newest';
    /** Template-facing formatter for token-count config values. */
    formatTokenCount = formatTokenCount;
    // ── User intents (events UP to the host) ──
    /** Refresh the pipeline data → host `LoadPipelineData()`. */
    RefreshRequested = new EventEmitter();
    /** Pause the running pipeline → host `PausePipeline()`. */
    PauseRequested = new EventEmitter();
    /** Resume the paused pipeline → host `ResumePipeline()`. */
    ResumeRequested = new EventEmitter();
    /** Cancel the running/paused pipeline → host `CancelPipeline()`. */
    CancelRequested = new EventEmitter();
    /** Reload live per-source progress → host `LoadLiveRunDetails()`. */
    LoadLiveRunDetailsRequested = new EventEmitter();
    /** Open a feed item's detail slide-in (emits the item's original index into the host's FeedItems). */
    FeedItemClicked = new EventEmitter();
    /** Toggle the config panel → host `TogglePipelineConfig()` (persists + reports to agent). */
    ConfigToggled = new EventEmitter();
    /** Request the host load the next page of content items (no silent truncation). */
    LoadMoreItemsRequested = new EventEmitter();
    /** Whether more content items exist in the DB than are currently loaded into the feed. */
    get HasMoreItems() {
        return this.TotalItemCount > this.FeedItems.length;
    }
    onLoadMoreItems() {
        this.LoadMoreItemsRequested.emit();
    }
    // ════════════════════════════════════════════
    // FEED — search, sort, pagination (presentational)
    // ════════════════════════════════════════════
    /** Feed items filtered by search query and sorted. */
    get FilteredFeedItems() {
        let items = this.FeedItems;
        if (this.FeedSearchQuery.trim()) {
            const q = this.FeedSearchQuery.toLowerCase();
            items = items.filter(item => item.Name.toLowerCase().includes(q) ||
                item.SourceName.toLowerCase().includes(q) ||
                item.Tags.some(t => t.toLowerCase().includes(q)));
        }
        if (this.FeedSortOrder === 'oldest') {
            return [...items].reverse();
        }
        return items;
    }
    /** Paginated feed items for the current page. */
    get PaginatedFeedItems() {
        const items = this.FilteredFeedItems;
        const start = this.FeedPage * this.FeedPageSize;
        return items.slice(start, start + this.FeedPageSize);
    }
    /** Total pages for the feed. */
    get FeedTotalPages() {
        return Math.max(1, Math.ceil(this.FilteredFeedItems.length / this.FeedPageSize));
    }
    /** Toggle feed sort order. */
    ToggleFeedSort() {
        this.FeedSortOrder = this.FeedSortOrder === 'newest' ? 'oldest' : 'newest';
        this.FeedPage = 0;
    }
    /** Handle feed search input change. */
    OnFeedSearchChange() {
        this.FeedPage = 0;
    }
    /** Navigate to the previous feed page. */
    FeedPrevPage() {
        if (this.FeedPage > 0) {
            this.FeedPage--;
        }
    }
    /** Navigate to the next feed page. */
    FeedNextPage() {
        if (this.FeedPage < this.FeedTotalPages - 1) {
            this.FeedPage++;
        }
    }
    /** Get the index in the host's original FeedItems array for a paginated item. */
    GetFeedItemOriginalIndex(item) {
        return this.FeedItems.indexOf(item);
    }
    // ── Intent emitters ──
    onRefresh() {
        this.RefreshRequested.emit();
    }
    onPause() {
        this.PauseRequested.emit();
    }
    onResume() {
        this.ResumeRequested.emit();
    }
    onCancel() {
        this.CancelRequested.emit();
    }
    onLoadLiveRunDetails() {
        this.LoadLiveRunDetailsRequested.emit();
    }
    onFeedItemClick(originalIndex) {
        this.FeedItemClicked.emit(originalIndex);
    }
    onToggleConfig() {
        this.ConfigToggled.emit();
    }
    static ɵfac = /*@__PURE__*/ (() => { let ɵClassifyPipelineTabComponent_BaseFactory; return function ClassifyPipelineTabComponent_Factory(__ngFactoryType__) { return (ɵClassifyPipelineTabComponent_BaseFactory || (ɵClassifyPipelineTabComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ClassifyPipelineTabComponent)))(__ngFactoryType__ || ClassifyPipelineTabComponent); }; })();
    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) {
            i0.ɵɵelementStart(0, "mj-page-header-interior", 0)(1, "div", 1)(2, "button", 2);
            i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_button_click_2_listener() { return ctx.onRefresh(); });
            i0.ɵɵelement(3, "i", 3);
            i0.ɵɵelementStart(4, "span", 4);
            i0.ɵɵtext(5, "Refresh");
            i0.ɵɵelementEnd()()()();
            i0.ɵɵelementStart(6, "mj-page-body-interior", 5)(7, "div", 6)(8, "div", 7)(9, "div", 8);
            i0.ɵɵrepeaterCreate(10, ClassifyPipelineTabComponent_For_11_Template, 7, 7, "div", 9, _forTrack0);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(12, "div", 10);
            i0.ɵɵelement(13, "classify-overview-analytics", 11);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(14, "div", 12)(15, "div", 13);
            i0.ɵɵconditionalCreate(16, ClassifyPipelineTabComponent_Conditional_16_Template, 3, 0, "div", 14);
            i0.ɵɵconditionalCreate(17, ClassifyPipelineTabComponent_Conditional_17_Template, 16, 12, "div", 15);
            i0.ɵɵconditionalCreate(18, ClassifyPipelineTabComponent_Conditional_18_Template, 26, 0, "div", 16);
            i0.ɵɵelementStart(19, "div", 17)(20, "div", 18)(21, "span", 19);
            i0.ɵɵelement(22, "i", 20);
            i0.ɵɵtext(23, " Recent Processing");
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(24, "div", 21)(25, "button", 22);
            i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_button_click_25_listener() { return ctx.ToggleFeedSort(); });
            i0.ɵɵelement(26, "i", 23);
            i0.ɵɵtext(27);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(28, "span", 24);
            i0.ɵɵtext(29);
            i0.ɵɵelementEnd()()();
            i0.ɵɵelementStart(30, "div", 25);
            i0.ɵɵelement(31, "i", 26);
            i0.ɵɵelementStart(32, "input", 27);
            i0.ɵɵtwoWayListener("ngModelChange", function ClassifyPipelineTabComponent_Template_input_ngModelChange_32_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.FeedSearchQuery, $event) || (ctx.FeedSearchQuery = $event); return $event; });
            i0.ɵɵlistener("input", function ClassifyPipelineTabComponent_Template_input_input_32_listener() { return ctx.OnFeedSearchChange(); });
            i0.ɵɵelementEnd();
            i0.ɵɵconditionalCreate(33, ClassifyPipelineTabComponent_Conditional_33_Template, 2, 0, "button", 28);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(34, "div", 29);
            i0.ɵɵconditionalCreate(35, ClassifyPipelineTabComponent_Conditional_35_Template, 4, 1, "div", 30);
            i0.ɵɵrepeaterCreate(36, ClassifyPipelineTabComponent_For_37_Template, 12, 5, "div", 31, _forTrack1);
            i0.ɵɵelementEnd();
            i0.ɵɵconditionalCreate(38, ClassifyPipelineTabComponent_Conditional_38_Template, 7, 4, "div", 32);
            i0.ɵɵconditionalCreate(39, ClassifyPipelineTabComponent_Conditional_39_Template, 4, 3, "div", 33);
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(40, "div", 34)(41, "div", 35)(42, "div", 18)(43, "span", 19);
            i0.ɵɵelement(44, "i", 36);
            i0.ɵɵtext(45, " Sources");
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(46, "div", 37);
            i0.ɵɵrepeaterCreate(47, ClassifyPipelineTabComponent_For_48_Template, 9, 6, "div", 38, _forTrack2);
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(49, "div", 39)(50, "div", 40);
            i0.ɵɵelement(51, "i", 41);
            i0.ɵɵtext(52, " Trending Tags");
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(53, "div", 42);
            i0.ɵɵrepeaterCreate(54, ClassifyPipelineTabComponent_For_55_Template, 2, 6, "span", 43, _forTrack3);
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(56, "div", 44)(57, "div", 45);
            i0.ɵɵlistener("click", function ClassifyPipelineTabComponent_Template_div_click_57_listener() { return ctx.onToggleConfig(); });
            i0.ɵɵelementStart(58, "span", 19);
            i0.ɵɵelement(59, "i", 46);
            i0.ɵɵtext(60, " Pipeline Settings");
            i0.ɵɵelementEnd();
            i0.ɵɵelement(61, "i", 47);
            i0.ɵɵelementEnd();
            i0.ɵɵconditionalCreate(62, ClassifyPipelineTabComponent_Conditional_62_Template, 50, 10, "div", 48);
            i0.ɵɵelementEnd()()()()()();
        } if (rf & 2) {
            i0.ɵɵadvance(6);
            i0.ɵɵproperty("Padding", false)("Flex", true);
            i0.ɵɵadvance(4);
            i0.ɵɵrepeater(ctx.KPIMetrics);
            i0.ɵɵadvance(3);
            i0.ɵɵproperty("Provider", ctx.Provider);
            i0.ɵɵadvance(3);
            i0.ɵɵconditional(ctx.PipelineStages.length > 0 && (ctx.IsRunning || ctx.IsPaused) ? 16 : -1);
            i0.ɵɵadvance();
            i0.ɵɵconditional(ctx.IsRunning || ctx.IsPaused ? 17 : -1);
            i0.ɵɵadvance();
            i0.ɵɵconditional(ctx.IsRunning && ctx.LiveRunDetailRows.length > 0 ? 18 : -1);
            i0.ɵɵadvance(7);
            i0.ɵɵproperty("title", ctx.FeedSortOrder === "newest" ? "Showing newest first" : "Showing oldest first");
            i0.ɵɵadvance();
            i0.ɵɵclassProp("fa-arrow-down-short-wide", ctx.FeedSortOrder === "newest")("fa-arrow-up-short-wide", ctx.FeedSortOrder === "oldest");
            i0.ɵɵadvance();
            i0.ɵɵtextInterpolate1(" ", ctx.FeedSortOrder === "newest" ? "Newest" : "Oldest", " ");
            i0.ɵɵadvance(2);
            i0.ɵɵtextInterpolate1("", ctx.FilteredFeedItems.length, " items");
            i0.ɵɵadvance(3);
            i0.ɵɵtwoWayProperty("ngModel", ctx.FeedSearchQuery);
            i0.ɵɵadvance();
            i0.ɵɵconditional(ctx.FeedSearchQuery ? 33 : -1);
            i0.ɵɵadvance(2);
            i0.ɵɵconditional(ctx.FilteredFeedItems.length === 0 ? 35 : -1);
            i0.ɵɵadvance();
            i0.ɵɵrepeater(ctx.PaginatedFeedItems);
            i0.ɵɵadvance(2);
            i0.ɵɵconditional(ctx.FeedTotalPages > 1 ? 38 : -1);
            i0.ɵɵadvance();
            i0.ɵɵconditional(ctx.TotalItemCount > 0 ? 39 : -1);
            i0.ɵɵadvance(8);
            i0.ɵɵrepeater(ctx.SourceMinis);
            i0.ɵɵadvance(7);
            i0.ɵɵrepeater(ctx.TrendingTags);
            i0.ɵɵadvance(7);
            i0.ɵɵclassProp("fa-chevron-down", !ctx.ShowPipelineConfig)("fa-chevron-up", ctx.ShowPipelineConfig);
            i0.ɵɵadvance();
            i0.ɵɵconditional(ctx.ShowPipelineConfig ? 62 : -1);
        } }, 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}"] });
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassifyPipelineTabComponent, [{
        type: Component,
        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"] }]
    }], null, { KPIMetrics: [{
            type: Input
        }], PipelineStages: [{
            type: Input
        }], FeedItems: [{
            type: Input
        }], SourceMinis: [{
            type: Input
        }], TrendingTags: [{
            type: Input
        }], LiveRunDetailRows: [{
            type: Input
        }], TotalItemCount: [{
            type: Input
        }], IsLoadingMoreItems: [{
            type: Input
        }], IsRunning: [{
            type: Input
        }], IsPaused: [{
            type: Input
        }], RunProgress: [{
            type: Input
        }], RunStage: [{
            type: Input
        }], RunCurrentItem: [{
            type: Input
        }], CurrentProcessRunID: [{
            type: Input
        }], PipelineConfig: [{
            type: Input
        }], ShowPipelineConfig: [{
            type: Input
        }], RefreshRequested: [{
            type: Output
        }], PauseRequested: [{
            type: Output
        }], ResumeRequested: [{
            type: Output
        }], CancelRequested: [{
            type: Output
        }], LoadLiveRunDetailsRequested: [{
            type: Output
        }], FeedItemClicked: [{
            type: Output
        }], ConfigToggled: [{
            type: Output
        }], LoadMoreItemsRequested: [{
            type: Output
        }] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassifyPipelineTabComponent, { className: "ClassifyPipelineTabComponent", filePath: "src/AI/components/autotagging/tabs/pipeline-tab.component.ts", lineNumber: 34 }); })();
//# sourceMappingURL=pipeline-tab.component.js.map