@optifye/dashboard-core 6.11.38 → 6.11.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -3394,6 +3394,12 @@ var isFullMonthRange = (range, year, monthIndex) => {
3394
3394
  const bounds = getMonthKeyBounds(year, monthIndex);
3395
3395
  return range.startKey === bounds.startKey && range.endKey === bounds.endKey;
3396
3396
  };
3397
+ var getMonthlyTrendComparisonLabel = (range, year, monthIndex) => {
3398
+ if (isFullMonthRange(range, year, monthIndex)) {
3399
+ return "last month";
3400
+ }
3401
+ return range.startKey === range.endKey ? "previous day" : "previous range";
3402
+ };
3397
3403
  var getMonthWeekRanges = (year, monthIndex, timezone, maxKey) => {
3398
3404
  const totalDays = new Date(year, monthIndex + 1, 0).getDate();
3399
3405
  const ranges = [];
@@ -12261,6 +12267,7 @@ var toWorkspaceDetailedMetrics = ({
12261
12267
  return {
12262
12268
  workspace_id: data.workspace_id,
12263
12269
  workspace_name: data.workspace_name,
12270
+ workspace_display_name: typeof data.workspace_display_name === "string" ? data.workspace_display_name : typeof data.display_name === "string" ? data.display_name : null,
12264
12271
  line_id: data.line_id,
12265
12272
  line_name: data.line_name || "",
12266
12273
  line_assembly_enabled: data.line_assembly_enabled === true || data.assembly_enabled === true,
@@ -18409,13 +18416,27 @@ var useMonthlyTrend = (params) => {
18409
18416
  if (typeof params.shiftId === "number") {
18410
18417
  searchParams.append("shift_id", params.shiftId.toString());
18411
18418
  }
18419
+ if (params.startDate && params.endDate) {
18420
+ searchParams.append("start_date", params.startDate);
18421
+ searchParams.append("end_date", params.endDate);
18422
+ }
18412
18423
  if (params.entityType === "line") {
18413
18424
  searchParams.append("line_id", params.entityId);
18414
18425
  } else {
18415
18426
  searchParams.append("workspace_id", params.entityId);
18416
18427
  }
18417
18428
  return searchParams.toString();
18418
- }, [params.entityId, params.entityType, params.month, params.year, params.shiftId, entityConfig?.companyId]);
18429
+ }, [
18430
+ params.companyId,
18431
+ params.endDate,
18432
+ params.entityId,
18433
+ params.entityType,
18434
+ params.month,
18435
+ params.shiftId,
18436
+ params.startDate,
18437
+ params.year,
18438
+ entityConfig?.companyId
18439
+ ]);
18419
18440
  useEffect(() => {
18420
18441
  let isMounted = true;
18421
18442
  if (!queryString || !supabase) {
@@ -47261,6 +47282,10 @@ var LineMonthlyHistory = ({
47261
47282
  const efficiencyImproved = efficiencyDelta >= 0;
47262
47283
  const EfficiencyTrendIcon = efficiencyImproved ? ArrowUp : ArrowDown;
47263
47284
  const efficiencyTrendText = `${Math.abs(efficiencyDelta).toFixed(1)}%`;
47285
+ const trendComparisonLabel = useMemo(
47286
+ () => getMonthlyTrendComparisonLabel(normalizedRange, year, month),
47287
+ [month, normalizedRange, year]
47288
+ );
47264
47289
  const outputDelta = trendSummary?.avg_daily_output?.delta_pp ?? 0;
47265
47290
  const outputImproved = outputDelta >= 0;
47266
47291
  const OutputTrendIcon = outputImproved ? ArrowUp : ArrowDown;
@@ -47511,10 +47536,7 @@ var LineMonthlyHistory = ({
47511
47536
  /* @__PURE__ */ jsx("div", { className: "text-base font-bold text-gray-900 whitespace-nowrap", children: uptimeSummary?.avgDailyStoppages ?? 0 }),
47512
47537
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${stoppagesImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
47513
47538
  /* @__PURE__ */ jsx(StoppagesTrendIcon, { className: "w-3 h-3" }),
47514
- /* @__PURE__ */ jsxs("span", { children: [
47515
- stoppagesTrendText,
47516
- " vs last month"
47517
- ] })
47539
+ /* @__PURE__ */ jsx("span", { children: `${stoppagesTrendText} vs ${trendComparisonLabel}` })
47518
47540
  ] })
47519
47541
  ] })
47520
47542
  ] }),
@@ -47524,10 +47546,7 @@ var LineMonthlyHistory = ({
47524
47546
  /* @__PURE__ */ jsx("div", { className: "text-base font-bold text-gray-900 whitespace-nowrap", children: formatIdleTime(uptimeSummary?.avgIdleTime ?? 0) }),
47525
47547
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${idleImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
47526
47548
  /* @__PURE__ */ jsx(IdleTrendIcon, { className: "w-3 h-3" }),
47527
- /* @__PURE__ */ jsxs("span", { children: [
47528
- idleTrendText,
47529
- " vs last month"
47530
- ] })
47549
+ /* @__PURE__ */ jsx("span", { children: `${idleTrendText} vs ${trendComparisonLabel}` })
47531
47550
  ] })
47532
47551
  ] })
47533
47552
  ] })
@@ -47541,10 +47560,7 @@ var LineMonthlyHistory = ({
47541
47560
  ] }),
47542
47561
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${efficiencyImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
47543
47562
  /* @__PURE__ */ jsx(EfficiencyTrendIcon, { className: "w-3 h-3" }),
47544
- /* @__PURE__ */ jsxs("span", { children: [
47545
- efficiencyTrendText,
47546
- " vs last month"
47547
- ] })
47563
+ /* @__PURE__ */ jsx("span", { children: `${efficiencyTrendText} vs ${trendComparisonLabel}` })
47548
47564
  ] })
47549
47565
  ] })
47550
47566
  ] }),
@@ -47554,10 +47570,7 @@ var LineMonthlyHistory = ({
47554
47570
  /* @__PURE__ */ jsx("div", { className: "text-xl font-bold text-gray-900", children: Math.round(avgOutput).toLocaleString() }),
47555
47571
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${outputImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
47556
47572
  /* @__PURE__ */ jsx(OutputTrendIcon, { className: "w-3 h-3" }),
47557
- /* @__PURE__ */ jsxs("span", { children: [
47558
- outputTrendText,
47559
- " vs last month"
47560
- ] })
47573
+ /* @__PURE__ */ jsx("span", { children: `${outputTrendText} vs ${trendComparisonLabel}` })
47561
47574
  ] })
47562
47575
  ] })
47563
47576
  ] })
@@ -47568,10 +47581,7 @@ var LineMonthlyHistory = ({
47568
47581
  /* @__PURE__ */ jsx("h3", { className: "text-xs sm:text-sm font-bold text-gray-700 text-left", children: "Utilization" }),
47569
47582
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${utilizationImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-1.5 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
47570
47583
  /* @__PURE__ */ jsx(UtilizationTrendIcon, { className: "w-3 h-3" }),
47571
- /* @__PURE__ */ jsxs("span", { children: [
47572
- utilizationTrendText,
47573
- " vs last month"
47574
- ] })
47584
+ /* @__PURE__ */ jsx("span", { children: `${utilizationTrendText} vs ${trendComparisonLabel}` })
47575
47585
  ] })
47576
47586
  ] }),
47577
47587
  pieChartData.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "w-full h-[140px] sm:h-[160px] flex items-center overflow-hidden", children: [
@@ -47923,19 +47933,33 @@ var LineMonthlyPdfGenerator = ({
47923
47933
  is_full_month: fullRange
47924
47934
  });
47925
47935
  const doc = new jsPDF$1();
47926
- doc.setFontSize(14);
47927
- doc.setFont("helvetica", "bold");
47928
- doc.setTextColor(50, 50, 50);
47929
- doc.text("OPTIFYE.AI", 20, 15);
47930
- doc.setFontSize(11);
47931
- doc.setFont("helvetica", "normal");
47932
- doc.setTextColor(80, 80, 80);
47933
- const reportText = isUptimeMode ? "MONTHLY UTILIZATION REPORT" : "MONTHLY PERFORMANCE REPORT";
47934
- const reportTextWidth = doc.getStringUnitWidth(reportText) * 11 / doc.internal.scaleFactor;
47935
- doc.text(reportText, doc.internal.pageSize.width - 20 - reportTextWidth, 15);
47936
- doc.setDrawColor(200, 200, 200);
47937
- doc.setLineWidth(0.5);
47938
- doc.line(20, 20, 190, 20);
47936
+ const pageHeight = typeof doc.internal.pageSize.height === "number" ? Number(doc.internal.pageSize.height) : 297;
47937
+ const footerY = pageHeight - 17;
47938
+ const maxContentY = footerY - 10;
47939
+ const generatedText = `Generated on ${(/* @__PURE__ */ new Date()).toLocaleString("en-IN", { timeZone: "Asia/Kolkata" })}`;
47940
+ const dailySectionTitle = isUptimeMode ? "Daily Utilization Summary" : "Daily Performance Summary";
47941
+ const drawPageChrome = () => {
47942
+ doc.setFontSize(14);
47943
+ doc.setFont("helvetica", "bold");
47944
+ doc.setTextColor(50, 50, 50);
47945
+ doc.text("OPTIFYE.AI", 20, 15);
47946
+ doc.setFontSize(11);
47947
+ doc.setFont("helvetica", "normal");
47948
+ doc.setTextColor(80, 80, 80);
47949
+ const reportText = isUptimeMode ? "MONTHLY UTILIZATION REPORT" : "MONTHLY PERFORMANCE REPORT";
47950
+ const reportTextWidth = doc.getStringUnitWidth(reportText) * 11 / doc.internal.scaleFactor;
47951
+ doc.text(reportText, doc.internal.pageSize.width - 20 - reportTextWidth, 15);
47952
+ doc.setDrawColor(200, 200, 200);
47953
+ doc.setLineWidth(0.5);
47954
+ doc.line(20, 20, 190, 20);
47955
+ };
47956
+ const drawFooter = () => {
47957
+ doc.setFontSize(9);
47958
+ doc.setTextColor(130, 130, 130);
47959
+ doc.text(generatedText, 20, footerY);
47960
+ doc.setTextColor(0, 0, 0);
47961
+ };
47962
+ drawPageChrome();
47939
47963
  doc.setFillColor(250, 250, 250);
47940
47964
  doc.roundedRect(15, 25, 180, 55, 3, 3, "F");
47941
47965
  doc.setFontSize(32);
@@ -47970,6 +47994,10 @@ var LineMonthlyPdfGenerator = ({
47970
47994
  if (shift.hasData !== void 0) return shift.hasData;
47971
47995
  return shift.total_workspaces > 0 || shift.avg_efficiency > 0 || shift.underperforming_workspaces > 0 || (shift.available_time_seconds ?? 0) > 0 || (shift.idle_time_seconds ?? 0) > 0 || (shift.output ?? 0) > 0;
47972
47996
  };
47997
+ const dailyEntries = validDays.map((dayData) => {
47998
+ const shift = getLineShiftData2(dayData, selectedShiftId);
47999
+ return { dayData, shift };
48000
+ }).filter(({ shift }) => hasShiftData(shift)).sort((left, right) => new Date(right.dayData.date).getTime() - new Date(left.dayData.date).getTime());
47973
48001
  const getUptimeTotals2 = (shift, hasData) => {
47974
48002
  if (!hasData || !shift) {
47975
48003
  return { availableSeconds: 0, productiveSeconds: 0, idleSeconds: 0 };
@@ -48096,46 +48124,45 @@ var LineMonthlyPdfGenerator = ({
48096
48124
  }
48097
48125
  const dailySeparatorY = isUptimeMode ? 180 : 165;
48098
48126
  const dailySectionStartY = isUptimeMode ? 185 : 170;
48099
- const dailyTitleY = isUptimeMode ? 195 : 180;
48100
- const dailyHeaderY = isUptimeMode ? 200 : 185;
48101
- const dailyHeaderTextY = isUptimeMode ? 205 : 190;
48102
- const dailyHeaderLineY = isUptimeMode ? 208 : 193;
48103
48127
  const dailyContentStartY = isUptimeMode ? 215 : 200;
48104
- const dailyMaxY = isUptimeMode ? 260 : 245;
48105
48128
  doc.setDrawColor(180, 180, 180);
48106
48129
  doc.setLineWidth(0.8);
48107
48130
  doc.line(20, dailySeparatorY, 190, dailySeparatorY);
48108
- doc.setFillColor(245, 245, 245);
48109
- doc.roundedRect(15, dailySectionStartY, 180, 85, 3, 3, "F");
48110
- doc.setFontSize(18);
48111
- doc.setFont("helvetica", "bold");
48112
- doc.setTextColor(40, 40, 40);
48113
- doc.text(isUptimeMode ? "Daily Utilization Summary" : "Daily Performance Summary", 20, dailyTitleY);
48114
- doc.setTextColor(0, 0, 0);
48115
- if (validDays.length > 0) {
48131
+ const renderDailyTablePage = (startIndex, sectionY, title) => {
48132
+ const rowHeight = 8;
48133
+ const tableHeaderY = sectionY + 15;
48134
+ const headerTextY = tableHeaderY + 5;
48135
+ const firstRowY = headerTextY + 10;
48136
+ const rowsPerPage = Math.max(1, Math.floor((maxContentY - firstRowY) / rowHeight));
48137
+ const pageEntries = dailyEntries.slice(startIndex, startIndex + rowsPerPage);
48138
+ const endY = firstRowY + pageEntries.length * rowHeight;
48139
+ const sectionHeight = Math.max(40, endY - sectionY + 5);
48140
+ doc.setFillColor(245, 245, 245);
48141
+ doc.roundedRect(15, sectionY, 180, sectionHeight, 3, 3, "F");
48142
+ doc.setFontSize(18);
48143
+ doc.setFont("helvetica", "bold");
48144
+ doc.setTextColor(40, 40, 40);
48145
+ doc.text(title, 20, sectionY + 10);
48146
+ doc.setTextColor(0, 0, 0);
48116
48147
  doc.setFontSize(10);
48117
48148
  doc.setFont("helvetica", "bold");
48118
48149
  doc.setFillColor(240, 240, 240);
48119
- doc.roundedRect(20, dailyHeaderY, 170, 7, 1, 1, "F");
48120
- doc.text("Date", 25, dailyHeaderTextY);
48150
+ doc.roundedRect(20, tableHeaderY, 170, 7, 1, 1, "F");
48151
+ doc.text("Date", 25, headerTextY);
48121
48152
  if (isUptimeMode) {
48122
- doc.text("Utilization", 95, dailyHeaderTextY);
48153
+ doc.text("Utilization", 95, headerTextY);
48123
48154
  } else {
48124
- doc.text("Actual", 60, dailyHeaderTextY);
48125
- doc.text("Standard", 95, dailyHeaderTextY);
48126
- doc.text("Efficiency", 135, dailyHeaderTextY);
48127
- doc.text("Status", 170, dailyHeaderTextY);
48155
+ doc.text("Actual", 60, headerTextY);
48156
+ doc.text("Standard", 95, headerTextY);
48157
+ doc.text("Efficiency", 135, headerTextY);
48158
+ doc.text("Status", 170, headerTextY);
48128
48159
  }
48129
48160
  doc.setLineWidth(0.2);
48130
48161
  doc.setDrawColor(220, 220, 220);
48131
- doc.line(20, dailyHeaderLineY, 190, dailyHeaderLineY);
48162
+ doc.line(20, headerTextY + 3, 190, headerTextY + 3);
48132
48163
  doc.setFont("helvetica", "normal");
48133
- let yPos = dailyContentStartY;
48134
- const recentDays = validDays.slice(-10).reverse();
48135
- recentDays.forEach((dayData, index) => {
48136
- if (yPos > dailyMaxY) return;
48137
- const shift = getLineShiftData2(dayData, selectedShiftId);
48138
- if (!hasShiftData(shift)) return;
48164
+ let yPos = firstRowY;
48165
+ pageEntries.forEach(({ dayData, shift }, index) => {
48139
48166
  if (isUptimeMode) {
48140
48167
  doc.setDrawColor(200, 200, 200);
48141
48168
  doc.setLineWidth(0.1);
@@ -48176,12 +48203,34 @@ var LineMonthlyPdfGenerator = ({
48176
48203
  }
48177
48204
  doc.setTextColor(0, 0, 0);
48178
48205
  }
48179
- yPos += 8;
48206
+ yPos += rowHeight;
48180
48207
  });
48181
48208
  if (!isUptimeMode) {
48182
48209
  doc.setLineWidth(0.2);
48183
48210
  doc.setDrawColor(220, 220, 220);
48184
- doc.roundedRect(20, dailyHeaderY, 170, yPos - dailyHeaderY - 3, 1, 1, "S");
48211
+ doc.roundedRect(20, tableHeaderY, 170, yPos - tableHeaderY - 3, 1, 1, "S");
48212
+ }
48213
+ return startIndex + pageEntries.length;
48214
+ };
48215
+ if (dailyEntries.length > 0) {
48216
+ let renderedEntries = renderDailyTablePage(0, dailySectionStartY, dailySectionTitle);
48217
+ while (renderedEntries < dailyEntries.length) {
48218
+ drawFooter();
48219
+ doc.addPage();
48220
+ drawPageChrome();
48221
+ doc.setFontSize(12);
48222
+ doc.setFont("helvetica", "bold");
48223
+ doc.setTextColor(40, 40, 40);
48224
+ doc.text(lineName || "Line", 20, 32);
48225
+ doc.setFont("helvetica", "normal");
48226
+ doc.setTextColor(90, 90, 90);
48227
+ doc.text(`${monthName} \u2022 ${shiftType} \u2022 ${reportStartStr} - ${reportEndStr}`, 20, 40);
48228
+ doc.setTextColor(0, 0, 0);
48229
+ renderedEntries = renderDailyTablePage(
48230
+ renderedEntries,
48231
+ 48,
48232
+ `${dailySectionTitle} (cont.)`
48233
+ );
48185
48234
  }
48186
48235
  } else {
48187
48236
  doc.setFontSize(12);
@@ -48194,20 +48243,9 @@ var LineMonthlyPdfGenerator = ({
48194
48243
  const isCycleTimeWorkspace = (workspace) => workspace.metric_mode === "cycle_time" || lineAssembly && (workspace.avg_cycle_time !== void 0 || workspace.ideal_cycle_time !== void 0 || workspace.cycle_ratio !== void 0);
48195
48244
  const showCycleTimePoorestPerformers = !isUptimeMode && poorestWorkspaces.some(isCycleTimeWorkspace);
48196
48245
  if (poorestWorkspaces && poorestWorkspaces.length > 0) {
48246
+ drawFooter();
48197
48247
  doc.addPage();
48198
- doc.setFontSize(14);
48199
- doc.setFont("helvetica", "bold");
48200
- doc.setTextColor(50, 50, 50);
48201
- doc.text("OPTIFYE.AI", 20, 15);
48202
- doc.setFontSize(11);
48203
- doc.setFont("helvetica", "normal");
48204
- doc.setTextColor(80, 80, 80);
48205
- const reportText2 = isUptimeMode ? "MONTHLY UTILIZATION REPORT" : "MONTHLY PERFORMANCE REPORT";
48206
- const reportTextWidth2 = doc.getStringUnitWidth(reportText2) * 11 / doc.internal.scaleFactor;
48207
- doc.text(reportText2, doc.internal.pageSize.width - 20 - reportTextWidth2, 15);
48208
- doc.setDrawColor(200, 200, 200);
48209
- doc.setLineWidth(0.5);
48210
- doc.line(20, 20, 190, 20);
48248
+ drawPageChrome();
48211
48249
  doc.setFontSize(18);
48212
48250
  doc.setFont("helvetica", "bold");
48213
48251
  doc.setTextColor(40, 40, 40);
@@ -48273,10 +48311,7 @@ var LineMonthlyPdfGenerator = ({
48273
48311
  doc.setDrawColor(220, 220, 220);
48274
48312
  doc.roundedRect(20, 45, 170, yPos2 - 45 - 5, 1, 1, "S");
48275
48313
  }
48276
- doc.setFontSize(9);
48277
- doc.setTextColor(130, 130, 130);
48278
- const generatedText = `Generated on ${(/* @__PURE__ */ new Date()).toLocaleString("en-IN", { timeZone: "Asia/Kolkata" })}`;
48279
- doc.text(generatedText, 20, 280);
48314
+ drawFooter();
48280
48315
  const fileName = `${lineName || "Line"}_${monthName.replace(" ", "_")}_${shiftType.replace(" ", "_")}.pdf`;
48281
48316
  doc.save(fileName);
48282
48317
  } catch (error) {
@@ -49846,6 +49881,10 @@ var formatHours = (value) => {
49846
49881
  if (Math.abs(rounded) < 0.05) return "0h";
49847
49882
  return Number.isInteger(rounded) ? `${rounded}h` : `${rounded.toFixed(1)}h`;
49848
49883
  };
49884
+ var formatCycleSeconds = (value) => {
49885
+ if (!Number.isFinite(value)) return "0.0s";
49886
+ return `${value.toFixed(1)}s`;
49887
+ };
49849
49888
  var CustomTooltip3 = ({ active, payload, label, isUptimeMode }) => {
49850
49889
  if (!active || !payload || payload.length === 0) return null;
49851
49890
  if (isUptimeMode) {
@@ -50156,6 +50195,10 @@ var WorkspaceMonthlyHistory = ({
50156
50195
  avgIdleTime: Math.round(totalIdleTime / filteredShifts.length)
50157
50196
  };
50158
50197
  }, [analysisMonthlyData, selectedShiftId, isUptimeMode, shiftWorkSeconds]);
50198
+ const trendComparisonLabel = useMemo(
50199
+ () => getMonthlyTrendComparisonLabel(normalizedRange, year, month),
50200
+ [month, normalizedRange, year]
50201
+ );
50159
50202
  const efficiencyDelta = trendSummary?.avg_efficiency?.delta_pp ?? 0;
50160
50203
  const efficiencyImproved = efficiencyDelta >= 0;
50161
50204
  const assemblyRangeCycleTime = useMemo(() => {
@@ -50171,17 +50214,17 @@ var WorkspaceMonthlyHistory = ({
50171
50214
  const cycleWorsened = cycleDelta > 0;
50172
50215
  const utilizationDelta = efficiencyDelta;
50173
50216
  const utilizationImproved = utilizationDelta >= 0;
50174
- const utilizationTrendText = `${Math.abs(utilizationDelta).toFixed(1)}% vs last month`;
50217
+ const utilizationTrendText = `${Math.abs(utilizationDelta).toFixed(1)}%`;
50175
50218
  const idleDeltaRaw = trendSummary?.avg_idle_time?.delta_seconds ?? 0;
50176
50219
  const idlePrev = trendSummary?.avg_idle_time?.previous ?? 0;
50177
50220
  const idleDelta = idlePrev ? idleDeltaRaw / idlePrev * 100 : 0;
50178
50221
  const idleImproved = idleDelta <= 0;
50179
- const idleTrendText = `${Math.abs(idleDelta).toFixed(1)}% vs last month`;
50222
+ const idleTrendText = `${Math.abs(idleDelta).toFixed(1)}%`;
50180
50223
  const stoppagesDeltaRaw = trendSummary?.avg_daily_stoppages?.delta_count ?? 0;
50181
50224
  const stoppagesPrev = trendSummary?.avg_daily_stoppages?.previous ?? 0;
50182
50225
  const stoppagesDelta = stoppagesPrev ? stoppagesDeltaRaw / stoppagesPrev * 100 : 0;
50183
50226
  const stoppagesImproved = stoppagesDelta <= 0;
50184
- const stoppagesTrendText = `${Math.abs(stoppagesDelta).toFixed(1)}% vs last month`;
50227
+ const stoppagesTrendText = `${Math.abs(stoppagesDelta).toFixed(1)}%`;
50185
50228
  const calendarData = useMemo(() => {
50186
50229
  const startOfMonth2 = new Date(year, month, 1);
50187
50230
  const endOfMonth2 = new Date(year, month + 1, 0);
@@ -50342,20 +50385,17 @@ var WorkspaceMonthlyHistory = ({
50342
50385
  /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold text-gray-900", children: formatIdleTime(metrics2?.avgIdleTime ?? 0) }),
50343
50386
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${idleImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50344
50387
  idleImproved ? /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }),
50345
- /* @__PURE__ */ jsx("span", { children: idleTrendText })
50388
+ /* @__PURE__ */ jsx("span", { children: `${idleTrendText} vs ${trendComparisonLabel}` })
50346
50389
  ] })
50347
50390
  ] })
50348
50391
  ] }),
50349
50392
  /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-lg shadow-sm border border-gray-100 p-4 flex flex-col justify-between", children: [
50350
50393
  /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-gray-600 mb-1", children: "Avg Cycle Time" }),
50351
50394
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-nowrap", children: [
50352
- /* @__PURE__ */ jsxs("div", { className: "text-2xl font-bold text-gray-900", children: [
50353
- assemblyRangeCycleTime,
50354
- "s"
50355
- ] }),
50395
+ /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold text-gray-900", children: formatCycleSeconds(assemblyRangeCycleTime) }),
50356
50396
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${cycleWorsened ? "bg-red-50 text-red-600" : "bg-emerald-50 text-emerald-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50357
50397
  cycleWorsened ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }),
50358
- /* @__PURE__ */ jsx("span", { children: `${Math.abs(cycleDelta).toFixed(1)}% vs last month` })
50398
+ /* @__PURE__ */ jsx("span", { children: `${Math.abs(cycleDelta).toFixed(1)}% vs ${trendComparisonLabel}` })
50359
50399
  ] })
50360
50400
  ] })
50361
50401
  ] })
@@ -50366,10 +50406,10 @@ var WorkspaceMonthlyHistory = ({
50366
50406
  /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold text-gray-900", children: isUptimeMode ? `${metrics2?.avgUtilization ?? 0}%` : `${metrics2?.avgEfficiency ?? 0}%` }),
50367
50407
  isUptimeMode ? /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${utilizationImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50368
50408
  utilizationImproved ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }),
50369
- /* @__PURE__ */ jsx("span", { children: utilizationTrendText })
50409
+ /* @__PURE__ */ jsx("span", { children: `${utilizationTrendText} vs ${trendComparisonLabel}` })
50370
50410
  ] }) : /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${efficiencyImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50371
50411
  efficiencyImproved ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }),
50372
- /* @__PURE__ */ jsx("span", { children: `${Math.abs(efficiencyDelta).toFixed(1)}% vs last month` })
50412
+ /* @__PURE__ */ jsx("span", { children: `${Math.abs(efficiencyDelta).toFixed(1)}% vs ${trendComparisonLabel}` })
50373
50413
  ] })
50374
50414
  ] })
50375
50415
  ] }),
@@ -50379,7 +50419,7 @@ var WorkspaceMonthlyHistory = ({
50379
50419
  /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold text-gray-900", children: formatIdleTime(metrics2?.avgIdleTime ?? 0) }),
50380
50420
  /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${idleImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50381
50421
  idleImproved ? /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }),
50382
- /* @__PURE__ */ jsx("span", { children: idleTrendText })
50422
+ /* @__PURE__ */ jsx("span", { children: `${idleTrendText} vs ${trendComparisonLabel}` })
50383
50423
  ] })
50384
50424
  ] })
50385
50425
  ] }),
@@ -50392,10 +50432,10 @@ var WorkspaceMonthlyHistory = ({
50392
50432
  ] }),
50393
50433
  isUptimeMode ? /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${stoppagesImproved ? "bg-emerald-50 text-emerald-600" : "bg-red-50 text-red-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50394
50434
  stoppagesImproved ? /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }),
50395
- /* @__PURE__ */ jsx("span", { children: stoppagesTrendText })
50435
+ /* @__PURE__ */ jsx("span", { children: `${stoppagesTrendText} vs ${trendComparisonLabel}` })
50396
50436
  ] }) : /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-1 ${cycleWorsened ? "bg-red-50 text-red-600" : "bg-emerald-50 text-emerald-600"} px-2 py-0.5 rounded-full text-[10px] font-medium whitespace-nowrap flex-shrink-0`, children: [
50397
50437
  cycleWorsened ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }),
50398
- /* @__PURE__ */ jsx("span", { children: `${Math.abs(cycleDelta).toFixed(1)}% vs last month` })
50438
+ /* @__PURE__ */ jsx("span", { children: `${Math.abs(cycleDelta).toFixed(1)}% vs ${trendComparisonLabel}` })
50399
50439
  ] })
50400
50440
  ] })
50401
50441
  ] })
@@ -51107,6 +51147,7 @@ var getShiftDisplayName2 = (shiftId, availableShifts) => {
51107
51147
  var WorkspaceMonthlyPdfGenerator = ({
51108
51148
  workspaceId,
51109
51149
  workspaceName,
51150
+ lineName,
51110
51151
  monthlyData,
51111
51152
  analysisData,
51112
51153
  selectedMonth,
@@ -51172,9 +51213,17 @@ var WorkspaceMonthlyPdfGenerator = ({
51172
51213
  year: "numeric",
51173
51214
  timeZone: "Asia/Kolkata"
51174
51215
  });
51216
+ const doc = new jsPDF$1();
51217
+ const pageHeight = typeof doc.internal.pageSize.height === "number" ? Number(doc.internal.pageSize.height) : 297;
51218
+ const footerY = pageHeight - 17;
51219
+ const maxContentY = footerY - 10;
51220
+ const generatedText = `Generated on ${(/* @__PURE__ */ new Date()).toLocaleString("en-IN", { timeZone: "Asia/Kolkata" })}`;
51221
+ const resolvedLineName = lineName?.trim() || "Line";
51222
+ const dailySectionTitle = isUptimeMode ? "Daily Utilization Summary" : "Daily Performance Summary";
51175
51223
  trackCoreEvent("Workspace Monthly PDF Export Clicked", {
51176
51224
  workspace_id: workspaceId,
51177
51225
  workspace_name: workspaceName,
51226
+ line_name: resolvedLineName,
51178
51227
  month: selectedMonth,
51179
51228
  year: selectedYear,
51180
51229
  shift_id: selectedShiftId,
@@ -51182,26 +51231,34 @@ var WorkspaceMonthlyPdfGenerator = ({
51182
51231
  range_end: normalizedRange.endKey,
51183
51232
  is_full_month: fullRange
51184
51233
  });
51185
- const doc = new jsPDF$1();
51186
- doc.setFontSize(14);
51187
- doc.setFont("helvetica", "bold");
51188
- doc.setTextColor(50, 50, 50);
51189
- doc.text("OPTIFYE.AI", 20, 15);
51190
- doc.setFontSize(11);
51191
- doc.setFont("helvetica", "normal");
51192
- doc.setTextColor(80, 80, 80);
51193
- const reportText = isUptimeMode ? "MONTHLY UTILIZATION REPORT" : "MONTHLY PERFORMANCE REPORT";
51194
- const reportTextWidth = doc.getStringUnitWidth(reportText) * 11 / doc.internal.scaleFactor;
51195
- doc.text(reportText, doc.internal.pageSize.width - 20 - reportTextWidth, 15);
51196
- doc.setDrawColor(200, 200, 200);
51197
- doc.setLineWidth(0.5);
51198
- doc.line(20, 20, 190, 20);
51234
+ const drawPageChrome = () => {
51235
+ doc.setFontSize(14);
51236
+ doc.setFont("helvetica", "bold");
51237
+ doc.setTextColor(50, 50, 50);
51238
+ doc.text("OPTIFYE.AI", 20, 15);
51239
+ doc.setFontSize(11);
51240
+ doc.setFont("helvetica", "normal");
51241
+ doc.setTextColor(80, 80, 80);
51242
+ const reportText = isUptimeMode ? "MONTHLY UTILIZATION REPORT" : "MONTHLY PERFORMANCE REPORT";
51243
+ const reportTextWidth = doc.getStringUnitWidth(reportText) * 11 / doc.internal.scaleFactor;
51244
+ doc.text(reportText, doc.internal.pageSize.width - 20 - reportTextWidth, 15);
51245
+ doc.setDrawColor(200, 200, 200);
51246
+ doc.setLineWidth(0.5);
51247
+ doc.line(20, 20, 190, 20);
51248
+ };
51249
+ const drawFooter = () => {
51250
+ doc.setFontSize(9);
51251
+ doc.setTextColor(130, 130, 130);
51252
+ doc.text(generatedText, 20, footerY);
51253
+ doc.setTextColor(0, 0, 0);
51254
+ };
51255
+ drawPageChrome();
51199
51256
  doc.setFillColor(250, 250, 250);
51200
51257
  doc.roundedRect(15, 25, 180, 55, 3, 3, "F");
51201
51258
  doc.setFontSize(32);
51202
51259
  doc.setFont("helvetica", "bold");
51203
51260
  doc.setTextColor(0, 0, 0);
51204
- doc.text("Line 1", 20, 40);
51261
+ doc.text(resolvedLineName, 20, 40);
51205
51262
  doc.setFontSize(22);
51206
51263
  doc.setFont("helvetica", "normal");
51207
51264
  doc.setTextColor(40, 40, 40);
@@ -51230,6 +51287,10 @@ var WorkspaceMonthlyPdfGenerator = ({
51230
51287
  return date.getMonth() === selectedMonth && date.getFullYear() === selectedYear;
51231
51288
  });
51232
51289
  const validShifts = validDays.map((day) => getShiftData(day, selectedShiftId)).filter(hasShiftData);
51290
+ const dailyEntries = validDays.map((dayData) => {
51291
+ const shift = getShiftData(dayData, selectedShiftId);
51292
+ return { dayData, shift };
51293
+ }).filter(({ shift }) => hasShiftData(shift)).sort((left, right) => new Date(right.dayData.date).getTime() - new Date(left.dayData.date).getTime());
51233
51294
  const filteredShifts = isUptimeMode ? validShifts : validShifts.filter((shift) => (shift.efficiency ?? 0) >= 5);
51234
51295
  const monthlyMetrics = filteredShifts.length > 0 ? isUptimeMode ? (() => {
51235
51296
  const totalIdleTime = filteredShifts.reduce((sum, shift) => sum + shift.idleTime, 0);
@@ -51356,21 +51417,27 @@ var WorkspaceMonthlyPdfGenerator = ({
51356
51417
  doc.setLineWidth(0.8);
51357
51418
  const separatorY = isAssemblyWorkspaceAndNotUptime ? 150 : 180;
51358
51419
  doc.line(20, separatorY, 190, separatorY);
51359
- doc.setFillColor(245, 245, 245);
51360
51420
  const dailySectionY = isAssemblyWorkspaceAndNotUptime ? 155 : 185;
51361
- doc.roundedRect(15, dailySectionY, 180, 85, 3, 3, "F");
51362
- doc.setFontSize(18);
51363
- doc.setFont("helvetica", "bold");
51364
- doc.setTextColor(40, 40, 40);
51365
- doc.text(isUptimeMode ? "Daily Utilization Summary" : "Daily Performance Summary", 20, dailySectionY + 10);
51366
- doc.setTextColor(0, 0, 0);
51367
- if (validDays.length > 0) {
51421
+ const renderDailyTablePage = (startIndex, sectionY, title) => {
51422
+ const rowHeight = 8;
51423
+ const tableHeaderY = sectionY + 15;
51424
+ const textY = tableHeaderY + 5;
51425
+ const firstRowY = textY + 10;
51426
+ const rowsPerPage = Math.max(1, Math.floor((maxContentY - firstRowY) / rowHeight));
51427
+ const pageEntries = dailyEntries.slice(startIndex, startIndex + rowsPerPage);
51428
+ const endY = firstRowY + pageEntries.length * rowHeight;
51429
+ const sectionHeight = Math.max(40, endY - sectionY + 5);
51430
+ doc.setFillColor(245, 245, 245);
51431
+ doc.roundedRect(15, sectionY, 180, sectionHeight, 3, 3, "F");
51432
+ doc.setFontSize(18);
51433
+ doc.setFont("helvetica", "bold");
51434
+ doc.setTextColor(40, 40, 40);
51435
+ doc.text(title, 20, sectionY + 10);
51436
+ doc.setTextColor(0, 0, 0);
51368
51437
  doc.setFontSize(10);
51369
51438
  doc.setFont("helvetica", "bold");
51370
51439
  doc.setFillColor(240, 240, 240);
51371
- const tableHeaderY = dailySectionY + 15;
51372
51440
  doc.roundedRect(20, tableHeaderY, 170, 7, 1, 1, "F");
51373
- const textY = tableHeaderY + 5;
51374
51441
  doc.text("Date", 25, textY);
51375
51442
  doc.text(isUptimeMode ? "Productive" : isAssemblyWorkspace ? "Actual Cycle Time" : "Actual", 60, textY);
51376
51443
  doc.text(isUptimeMode ? "Idle" : isAssemblyWorkspace ? "Standard Cycle Time" : "Standard", 95, textY);
@@ -51380,12 +51447,8 @@ var WorkspaceMonthlyPdfGenerator = ({
51380
51447
  doc.setDrawColor(220, 220, 220);
51381
51448
  doc.line(20, textY + 3, 190, textY + 3);
51382
51449
  doc.setFont("helvetica", "normal");
51383
- let yPos = textY + 10;
51384
- const recentDays = validDays.slice(-10).reverse();
51385
- recentDays.forEach((dayData, index) => {
51386
- if (yPos > 260) return;
51387
- const shift = getShiftData(dayData, selectedShiftId);
51388
- if (!hasShiftData(shift)) return;
51450
+ let yPos = firstRowY;
51451
+ pageEntries.forEach(({ dayData, shift }, index) => {
51389
51452
  if (index % 2 === 0) {
51390
51453
  doc.setFillColor(252, 252, 252);
51391
51454
  doc.roundedRect(20, yPos - 4, 170, 7, 1, 1, "F");
@@ -51418,11 +51481,35 @@ var WorkspaceMonthlyPdfGenerator = ({
51418
51481
  doc.text(`${shift.efficiency.toFixed(1)}%`, 135, yPos);
51419
51482
  drawStatusMark(doc, 171, yPos - 0.3, shift.efficiency >= effectiveLegend.green_min);
51420
51483
  }
51421
- yPos += 8;
51484
+ yPos += rowHeight;
51422
51485
  });
51423
51486
  doc.setLineWidth(0.2);
51424
51487
  doc.setDrawColor(220, 220, 220);
51425
51488
  doc.roundedRect(20, tableHeaderY, 170, yPos - tableHeaderY - 3, 1, 1, "S");
51489
+ return startIndex + pageEntries.length;
51490
+ };
51491
+ if (dailyEntries.length > 0) {
51492
+ let renderedEntries = renderDailyTablePage(0, dailySectionY, dailySectionTitle);
51493
+ while (renderedEntries < dailyEntries.length) {
51494
+ drawFooter();
51495
+ doc.addPage();
51496
+ drawPageChrome();
51497
+ doc.setFontSize(12);
51498
+ doc.setFont("helvetica", "bold");
51499
+ doc.setTextColor(40, 40, 40);
51500
+ doc.text(resolvedLineName, 20, 32);
51501
+ doc.setFont("helvetica", "normal");
51502
+ doc.text(getWorkspaceDisplayName(workspaceName), 20, 40);
51503
+ doc.setFontSize(10);
51504
+ doc.setTextColor(90, 90, 90);
51505
+ doc.text(`${monthName} \u2022 ${shiftType} \u2022 ${reportStartStr} - ${reportEndStr}`, 20, 48);
51506
+ doc.setTextColor(0, 0, 0);
51507
+ renderedEntries = renderDailyTablePage(
51508
+ renderedEntries,
51509
+ 56,
51510
+ `${dailySectionTitle} (cont.)`
51511
+ );
51512
+ }
51426
51513
  } else {
51427
51514
  doc.setFontSize(12);
51428
51515
  doc.setFont("helvetica", "normal");
@@ -51430,10 +51517,7 @@ var WorkspaceMonthlyPdfGenerator = ({
51430
51517
  doc.text("No daily data available for this month", 25, dailySectionY + 30);
51431
51518
  doc.setTextColor(0, 0, 0);
51432
51519
  }
51433
- doc.setFontSize(9);
51434
- doc.setTextColor(130, 130, 130);
51435
- const generatedText = `Generated on ${(/* @__PURE__ */ new Date()).toLocaleString("en-IN", { timeZone: "Asia/Kolkata" })}`;
51436
- doc.text(generatedText, 20, 280);
51520
+ drawFooter();
51437
51521
  const fileName = `${getWorkspaceDisplayName(workspaceName)}_${monthName.replace(" ", "_")}_${shiftType.replace(" ", "_")}.pdf`;
51438
51522
  doc.save(fileName);
51439
51523
  } catch (error) {
@@ -63582,7 +63666,9 @@ var KPIDetailView = ({
63582
63666
  month: currentMonth,
63583
63667
  year: currentYear,
63584
63668
  shiftId: selectedShiftId,
63585
- companyId: resolvedCompanyId
63669
+ companyId: resolvedCompanyId,
63670
+ startDate: isFullRange ? void 0 : rangeStart,
63671
+ endDate: isFullRange ? void 0 : rangeEnd
63586
63672
  });
63587
63673
  const configuredTimezone = timezone || dashboardConfig.dateTimeConfig?.defaultTimezone || "UTC";
63588
63674
  useMemo(() => getCurrentTimeInZone(configuredTimezone), [configuredTimezone]);
@@ -71065,7 +71151,9 @@ var WorkspaceDetailView = ({
71065
71151
  month: selectedMonth,
71066
71152
  year: selectedYear,
71067
71153
  shiftId: selectedShift,
71068
- companyId: dashboardConfig?.entityConfig?.companyId
71154
+ companyId: dashboardConfig?.entityConfig?.companyId,
71155
+ startDate: isFullRange ? void 0 : rangeStart,
71156
+ endDate: isFullRange ? void 0 : rangeEnd
71069
71157
  });
71070
71158
  const {
71071
71159
  isFastSlowClipFiltersEnabled,
@@ -71332,6 +71420,7 @@ var WorkspaceDetailView = ({
71332
71420
  line_name: "",
71333
71421
  line_assembly_enabled: cachedOverviewMetrics.assembly_enabled === true,
71334
71422
  workspace_name: cachedOverviewMetrics.workspace_name,
71423
+ workspace_display_name: cachedOverviewMetrics.displayName ?? null,
71335
71424
  workspace_id: cachedOverviewMetrics.workspace_uuid || "",
71336
71425
  company_id: cachedOverviewMetrics.company_id,
71337
71426
  company_name: "",
@@ -71646,7 +71735,17 @@ var WorkspaceDetailView = ({
71646
71735
  const analysisMonthlyData = useMemo(() => {
71647
71736
  return filterDataByDateKeyRange(monthlyData, range);
71648
71737
  }, [monthlyData, range]);
71649
- const formattedWorkspaceName = displayName || formatWorkspaceName3(workspace?.workspace_name || "", resolvedLineId);
71738
+ const formattedWorkspaceName = displayName || workspace?.workspace_display_name || formatWorkspaceName3(workspace?.workspace_name || "", resolvedLineId);
71739
+ const resolvedLineName = useMemo(() => {
71740
+ const workspaceLineName = workspace?.line_name?.trim();
71741
+ if (workspaceLineName) {
71742
+ return workspaceLineName;
71743
+ }
71744
+ if (resolvedLineId && dashboardConfig?.entityConfig) {
71745
+ return getLineDisplayName(dashboardConfig.entityConfig, resolvedLineId);
71746
+ }
71747
+ return "Line";
71748
+ }, [dashboardConfig?.entityConfig, resolvedLineId, workspace?.line_name]);
71650
71749
  const workspaceCycleTimeEligibility = workspace ? {
71651
71750
  line_assembly_enabled: workspace.line_assembly_enabled,
71652
71751
  action_family: workspace.action_family,
@@ -72191,6 +72290,7 @@ var WorkspaceDetailView = ({
72191
72290
  {
72192
72291
  workspaceId,
72193
72292
  workspaceName: formattedWorkspaceName,
72293
+ lineName: resolvedLineName,
72194
72294
  monthlyData,
72195
72295
  analysisData: analysisMonthlyData,
72196
72296
  selectedMonth,
@@ -81495,4 +81595,4 @@ var streamProxyConfig = {
81495
81595
  }
81496
81596
  };
81497
81597
 
81498
- export { ACTION_FAMILIES, ACTION_NAMES, AIAgentView_default as AIAgentView, AcceptInvite, AcceptInviteView_default as AcceptInviteView, AdvancedFilterDialog, AdvancedFilterPanel, AudioService, AuthCallback, AuthCallbackView_default as AuthCallbackView, AuthProvider, AuthService, AuthenticatedBottleneckClipsView, AuthenticatedFactoryView, AuthenticatedHelpView, AuthenticatedHomeView, AuthenticatedShiftsView, AuthenticatedTargetsView, AuthenticatedTicketsView, AuthenticatedWorkspaceHealthView, AvatarUpload, AxelNotificationPopup, AxelOrb, BackButton, BackButtonMinimal, BarChart, BaseHistoryCalendar, BottleneckClipsModal, BottleneckClipsView_default as BottleneckClipsView, BottlenecksContent, BreakNotificationPopup, CachePrefetchStatus, Card2 as Card, CardContent2 as CardContent, CardDescription2 as CardDescription, CardFooter2 as CardFooter, CardHeader2 as CardHeader, CardTitle2 as CardTitle, ChangeRoleDialog, ClipFilterProvider, ClipsCostView_default as ClipsCostView, CompactWorkspaceHealthCard, ConfirmRemoveUserDialog, CongratulationsOverlay, CroppedHlsVideoPlayer, CroppedVideoPlayer, CycleTimeChart, CycleTimeOverTimeChart, DEFAULT_ANALYTICS_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CONFIG, DEFAULT_DATABASE_CONFIG, DEFAULT_DATE_TIME_CONFIG, DEFAULT_ENDPOINTS_CONFIG, DEFAULT_ENTITY_CONFIG, DEFAULT_HOME_VIEW_CONFIG, DEFAULT_MAP_VIEW_CONFIG, DEFAULT_SHIFT_CONFIG, DEFAULT_SHIFT_DATA, DEFAULT_THEME_CONFIG, DEFAULT_VIDEO_CONFIG, DEFAULT_WORKSPACE_CONFIG, DEFAULT_WORKSPACE_POSITIONS, DashboardHeader, DashboardLayout, DashboardOverridesProvider, DashboardProvider, DateDisplay_default as DateDisplay, DateTimeDisplay, DebugAuth, DebugAuthView_default as DebugAuthView, DetailedHealthStatus, DiagnosisVideoModal, EFFICIENCY_ON_TRACK_THRESHOLD, EmptyStateMessage, EncouragementOverlay, FactoryAssignmentDropdown, FactoryView_default as FactoryView, FileManagerFilters, FilterDialogTrigger, FirstTimeLoginDebug, FirstTimeLoginHandler, FittingTitle, GaugeChart, GridComponentsPlaceholder, HamburgerButton, Header, HealthDateShiftSelector, HealthStatusGrid, HealthStatusIndicator, HelpView_default as HelpView, HlsVideoPlayer, HomeView_default as HomeView, HourlyOutputChart2 as HourlyOutputChart, HourlyUptimeChart, ISTTimer_default as ISTTimer, IdleTimeVlmConfigProvider, ImprovementCenterView_default as ImprovementCenterView, InlineEditableText, InteractiveOnboardingTour, InvitationService, InvitationsTable, InviteUserDialog, KPICard, KPIDetailView_default as KPIDetailView, KPIGrid, KPIHeader, KPISection, KPIsOverviewView_default as KPIsOverviewView, LINE_1_UUID, LINE_2_UUID, LargeOutputProgressChart, LeaderboardDetailView_default as LeaderboardDetailView, Legend5 as Legend, LineAssignmentDropdown, LineChart, LineHistoryCalendar, LineMonthlyHistory, LineMonthlyPdfGenerator, LinePdfExportButton, LinePdfGenerator, LineWhatsAppShareButton, LinesService, LiveTimer, LoadingInline, LoadingOverlay_default as LoadingOverlay, LoadingPage_default as LoadingPage, LoadingSkeleton, LoadingState, LoginPage, LoginView_default as LoginView, Logo, MainLayout, MapGridView, MetricCard_default as MetricCard, MinimalOnboardingPopup, MobileMenuProvider, NewClipsNotification, NoWorkspaceData, OnboardingDemo, OnboardingTour, OptifyeAgentClient, OptifyeLogoLoader_default as OptifyeLogoLoader, OutputProgressChart, PageHeader, PieChart4 as PieChart, PlantHeadView_default as PlantHeadView, PlayPauseIndicator, PrefetchConfigurationError, PrefetchError, PrefetchEvents, PrefetchStatus, PrefetchTimeoutError, ProfileView_default as ProfileView, ROOT_DASHBOARD_EVENT_NAMES, RegistryProvider, RoleBadge, S3ClipsSupabaseService as S3ClipsService, S3Service, SKUManagementView, SOPComplianceChart, SSEChatClient, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SessionTracker, SessionTrackingContext, SessionTrackingProvider, SettingsPopup, ShiftDisplay_default as ShiftDisplay, ShiftsView_default as ShiftsView, SideNavBar, SignupWithInvitation, SilentErrorBoundary, SimpleOnboardingPopup, SingleVideoStream_default as SingleVideoStream, Skeleton, SubscriptionManager, SubscriptionManagerProvider, SupabaseProvider, SupervisorDropdown_default as SupervisorDropdown, SupervisorManagementView_default as SupervisorManagementView, SupervisorService, TargetWorkspaceGrid, TargetsView_default as TargetsView, TeamManagementView_default as TeamManagementView, ThreadSidebar, TicketHistory_default as TicketHistory, TicketHistoryService, TicketsView_default as TicketsView, TimeDisplay_default as TimeDisplay, TimePickerDropdown, Timer_default as Timer, TimezoneProvider, TimezoneService, UptimeDonutChart, UptimeLineChart, UptimeMetricCards, UserAvatar, UserManagementService, UserManagementTable, UserService, UserUsageDetailModal, UserUsageStats, VideoCard, VideoGridView, VideoPlayer, VideoPreloader, WORKSPACE_POSITIONS, WhatsAppShareButton, WorkspaceCard, WorkspaceCycleTimeMetricCards, WorkspaceDetailView_default as WorkspaceDetailView, WorkspaceDisplayNameExample, WorkspaceGrid, WorkspaceGridItem, WorkspaceHealthCard, WorkspaceHealthView_default as WorkspaceHealthView, WorkspaceHistoryCalendar, WorkspaceMetricCards, WorkspaceMetricCardsImpl, WorkspaceMonthlyDataFetcher, WorkspaceMonthlyHistory, WorkspaceMonthlyPdfGenerator, WorkspacePdfExportButton, WorkspacePdfGenerator, WorkspaceWhatsAppShareButton, actionService, aggregateKPIsFromLineMetricsRows, alertsService, apiUtils, areAllLinesOnSameShift, authCoreService, authOTPService, authRateLimitService, awardsService, buildDateKey, buildKPIsFromLineMetricsRow, buildShiftGroupsKey, canRoleAccessDashboardPath, canRoleAccessTeamManagement, canRoleAssignFactories, canRoleAssignLines, canRoleChangeRole, canRoleInviteRole, canRoleManageCompany, canRoleManageTargets, canRoleManageUsers, canRoleRemoveUser, canRoleViewClipsCost, canRoleViewUsageStats, captureHandledFrontendException, captureSentryException, captureSentryMessage, checkRateLimit2 as checkRateLimit, clearAllRateLimits2 as clearAllRateLimits, clearRateLimit2 as clearRateLimit, clearS3VideoCache, clearS3VideoFromCache, clearSentryContext, clearWorkspaceDisplayNamesCache, cn, createDefaultKPIs, createInvitationService, createLinesService, createSessionTracker, createStorageService, createStreamProxyHandler, createSupabaseClient, createSupervisorService, createThrottledReload, createUserManagementService, createUserService, dashboardService, deleteThread, fetchIdleTimeReasons, filterDataByDateKeyRange, forceRefreshWorkspaceDisplayNames, formatAwardMonth, formatDateInZone, formatDateKeyForDisplay, formatDateTimeInZone, formatDuration2 as formatDuration, formatISTDate, formatIdleTime, formatRangeLabel, formatReasonLabel, formatRelativeTime, formatTimeInZone, fromUrlFriendlyName, getActionDisplayName, getActiveShift, getAllLineDisplayNames, getAllThreadMessages, getAllWorkspaceDisplayNamesAsync, getAllWorkspaceDisplayNamesSnapshot, getAnonClient, getAssignableRoles, getAssignmentColumnLabel, getAvailableShiftIds, getAwardBadgeType, getAwardDescription, getAwardTitle, getBrowserName, getCameraNumber, getCompanyMetricsTableName, getConfigurableShortWorkspaceDisplayName, getConfigurableWorkspaceDisplayName, getConfiguredLineIds, getCoreSessionRecordingProperties, getCoreSessionReplayUrl, getCurrentShift, getCurrentShiftForLine, getCurrentTimeInZone, getCurrentWeekFullRange, getCurrentWeekToDateRange, getDashboardHeaderTimeInZone, getDateKeyFromDate, getDaysDifferenceInZone, getDefaultCameraStreamUrl, getDefaultLineId, getDefaultTabForWorkspace, getInitials, getLineDisplayName, getManufacturingInsights, getMetricsTablePrefix, getMonthKeyBounds, getMonthWeekRanges, getNextUpdateInterval, getOperationalDate, getRoleAssignmentKind, getRoleDescription, getRoleLabel, getRoleMetadata, getRoleNavPaths, getS3SignedUrl, getS3VideoSrc, getShiftData, getShiftNameById, getShiftWorkDurationSeconds, getShortShiftName, getShortWorkspaceDisplayName, getShortWorkspaceDisplayNameAsync, getStoredWorkspaceMappings, getSubscriptionManager, getThreadMessages, getUniformShiftGroup, getUserThreads, getUserThreadsPaginated, getVisibleRolesForCurrentUser, getWorkspaceDisplayName, getWorkspaceDisplayNameAsync, getWorkspaceDisplayNamesMap, getWorkspaceFromUrl, getWorkspaceNavigationParams, groupLinesByShift, hasAnyShiftData, identifyCoreUser, initializeCoreMixpanel, isEfficiencyOnTrack, isFactoryScopedRole, isFullMonthRange, isIgnorableFrontendError, isLegacyConfiguration, isLoopbackHostname, isPrefetchError, isRecentFlowVideoGridMetricMode, isSafari, isSupervisorRole, isTransitionPeriod, isUrlPermanentlyFailed, isValidFactoryViewConfiguration, isValidLineInfoPayload, isValidPrefetchParams, isValidPrefetchStatus, isValidWorkspaceDetailedMetricsPayload, isValidWorkspaceMetricsPayload, isWipGatedVideoGridMetricMode, isWorkspaceDisplayNamesLoaded, isWorkspaceDisplayNamesLoading, lineLeaderboardService, linesService, mergeWithDefaultConfig, migrateLegacyConfiguration, normalizeActionFamily, normalizeDateKeyRange, normalizeRoleLevel, normalizeVideoGridMetricMode, optifyeAgentClient, parseDateKeyToDate, parseS3Uri, preInitializeWorkspaceDisplayNames, preloadS3Video, preloadS3VideoUrl, preloadS3VideosUrl, preloadVideoUrl, preloadVideosUrl, qualityService, realtimeService, refreshWorkspaceDisplayNames, resetCoreMixpanel, resetFailedUrl, resetSubscriptionManager, s3VideoPreloader, setSentryUserContext, setSentryWorkspaceContext, shouldEnableLocalDevTestLogin, shuffleArray, simulateApiDelay, skuService, startCoreSessionRecording, stopCoreSessionRecording, storeWorkspaceMapping, streamProxyConfig, subscribeWorkspaceDisplayNames, throttledReloadDashboard, toUrlFriendlyName, trackCoreEvent, trackCorePageView, transformToChartData, updateThreadTitle, upsertWorkspaceDisplayNameInCache, useAccessControl, useActiveBreaks, useActiveLineId, useAllWorkspaceMetrics, useAnalyticsConfig, useAppTimezone, useAudioService, useAuth, useAuthConfig, useAxelNotifications, useCanSaveTargets, useClipFilter, useClipTypes, useClipTypesWithCounts, useClipsInit, useCompanyClipsCost, useCompanyFastSlowClipFiltersEnabled, useCompanyHasVlmEnabledLine, useCompanyUsersUsage, useComponentOverride, useCustomConfig, useDashboardConfig, useDashboardMetrics, useDatabaseConfig, useDateFormatter, useDateTimeConfig, useDynamicShiftConfig, useEndpointsConfig, useEntityConfig, useFactoryOverviewMetrics, useFeatureFlags, useFormatNumber, useHasLineAccess, useHideMobileHeader, useHistoricWorkspaceMetrics, useHlsStream, useHlsStreamWithCropping, useHookOverride, useHourEndTimer, useHourlyTargetAchievements, useHourlyTargetMisses, useIdleTimeClipClassifications, useIdleTimeReasons, useIdleTimeVlmConfig, useKpiTrends, useLeaderboardMetrics, useLineDetailedMetrics, useLineKPIs, useLineMetrics, useLineShiftConfig, useLineSupervisor, useLineWorkspaceMetrics, useLines, useMessages, useMetrics, useMobileMenu, useMonthlyTrend, useMultiLineShiftConfigs, useNavigation, useOperationalShiftKey, useOptionalSupabase, useOverrides, usePageOverride, usePrefetchClipCounts, useRealtimeLineMetrics, useRegistry, useSKUs, useSessionKeepAlive, useSessionTracking, useSessionTrackingContext, useShiftConfig, useShiftGroups, useShifts, useSubscriptionManager, useSubscriptionManagerSafe, useSupabase, useSupabaseClient, useSupervisorsByLineIds, useTargets, useTeamManagementPermissions, useTheme, useThemeConfig, useThreads, useTicketHistory, useTimezoneContext, useUserLineAccess, useUserUsage, useVideoConfig, useWorkspaceConfig, useWorkspaceDetailedMetrics, useWorkspaceDisplayName, useWorkspaceDisplayNames, useWorkspaceDisplayNamesMap, useWorkspaceHealthById, useWorkspaceHealthLastSeen, useWorkspaceHealthStatus, useWorkspaceMetrics, useWorkspaceNavigation, useWorkspaceOperators, useWorkspaceUptimeTimeline, useWorkspaceVideoStreams, userService, videoPrefetchManager, videoPreloader, weeklyTopPerformerService, whatsappService, withAccessControl, withAuth, withRegistry, withTimezone, workspaceHealthService, workspaceService };
81598
+ export { ACTION_FAMILIES, ACTION_NAMES, AIAgentView_default as AIAgentView, AcceptInvite, AcceptInviteView_default as AcceptInviteView, AdvancedFilterDialog, AdvancedFilterPanel, AudioService, AuthCallback, AuthCallbackView_default as AuthCallbackView, AuthProvider, AuthService, AuthenticatedBottleneckClipsView, AuthenticatedFactoryView, AuthenticatedHelpView, AuthenticatedHomeView, AuthenticatedShiftsView, AuthenticatedTargetsView, AuthenticatedTicketsView, AuthenticatedWorkspaceHealthView, AvatarUpload, AxelNotificationPopup, AxelOrb, BackButton, BackButtonMinimal, BarChart, BaseHistoryCalendar, BottleneckClipsModal, BottleneckClipsView_default as BottleneckClipsView, BottlenecksContent, BreakNotificationPopup, CachePrefetchStatus, Card2 as Card, CardContent2 as CardContent, CardDescription2 as CardDescription, CardFooter2 as CardFooter, CardHeader2 as CardHeader, CardTitle2 as CardTitle, ChangeRoleDialog, ClipFilterProvider, ClipsCostView_default as ClipsCostView, CompactWorkspaceHealthCard, ConfirmRemoveUserDialog, CongratulationsOverlay, CroppedHlsVideoPlayer, CroppedVideoPlayer, CycleTimeChart, CycleTimeOverTimeChart, DEFAULT_ANALYTICS_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CONFIG, DEFAULT_DATABASE_CONFIG, DEFAULT_DATE_TIME_CONFIG, DEFAULT_ENDPOINTS_CONFIG, DEFAULT_ENTITY_CONFIG, DEFAULT_HOME_VIEW_CONFIG, DEFAULT_MAP_VIEW_CONFIG, DEFAULT_SHIFT_CONFIG, DEFAULT_SHIFT_DATA, DEFAULT_THEME_CONFIG, DEFAULT_VIDEO_CONFIG, DEFAULT_WORKSPACE_CONFIG, DEFAULT_WORKSPACE_POSITIONS, DashboardHeader, DashboardLayout, DashboardOverridesProvider, DashboardProvider, DateDisplay_default as DateDisplay, DateTimeDisplay, DebugAuth, DebugAuthView_default as DebugAuthView, DetailedHealthStatus, DiagnosisVideoModal, EFFICIENCY_ON_TRACK_THRESHOLD, EmptyStateMessage, EncouragementOverlay, FactoryAssignmentDropdown, FactoryView_default as FactoryView, FileManagerFilters, FilterDialogTrigger, FirstTimeLoginDebug, FirstTimeLoginHandler, FittingTitle, GaugeChart, GridComponentsPlaceholder, HamburgerButton, Header, HealthDateShiftSelector, HealthStatusGrid, HealthStatusIndicator, HelpView_default as HelpView, HlsVideoPlayer, HomeView_default as HomeView, HourlyOutputChart2 as HourlyOutputChart, HourlyUptimeChart, ISTTimer_default as ISTTimer, IdleTimeVlmConfigProvider, ImprovementCenterView_default as ImprovementCenterView, InlineEditableText, InteractiveOnboardingTour, InvitationService, InvitationsTable, InviteUserDialog, KPICard, KPIDetailView_default as KPIDetailView, KPIGrid, KPIHeader, KPISection, KPIsOverviewView_default as KPIsOverviewView, LINE_1_UUID, LINE_2_UUID, LargeOutputProgressChart, LeaderboardDetailView_default as LeaderboardDetailView, Legend5 as Legend, LineAssignmentDropdown, LineChart, LineHistoryCalendar, LineMonthlyHistory, LineMonthlyPdfGenerator, LinePdfExportButton, LinePdfGenerator, LineWhatsAppShareButton, LinesService, LiveTimer, LoadingInline, LoadingOverlay_default as LoadingOverlay, LoadingPage_default as LoadingPage, LoadingSkeleton, LoadingState, LoginPage, LoginView_default as LoginView, Logo, MainLayout, MapGridView, MetricCard_default as MetricCard, MinimalOnboardingPopup, MobileMenuProvider, NewClipsNotification, NoWorkspaceData, OnboardingDemo, OnboardingTour, OptifyeAgentClient, OptifyeLogoLoader_default as OptifyeLogoLoader, OutputProgressChart, PageHeader, PieChart4 as PieChart, PlantHeadView_default as PlantHeadView, PlayPauseIndicator, PrefetchConfigurationError, PrefetchError, PrefetchEvents, PrefetchStatus, PrefetchTimeoutError, ProfileView_default as ProfileView, ROOT_DASHBOARD_EVENT_NAMES, RegistryProvider, RoleBadge, S3ClipsSupabaseService as S3ClipsService, S3Service, SKUManagementView, SOPComplianceChart, SSEChatClient, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SessionTracker, SessionTrackingContext, SessionTrackingProvider, SettingsPopup, ShiftDisplay_default as ShiftDisplay, ShiftsView_default as ShiftsView, SideNavBar, SignupWithInvitation, SilentErrorBoundary, SimpleOnboardingPopup, SingleVideoStream_default as SingleVideoStream, Skeleton, SubscriptionManager, SubscriptionManagerProvider, SupabaseProvider, SupervisorDropdown_default as SupervisorDropdown, SupervisorManagementView_default as SupervisorManagementView, SupervisorService, TargetWorkspaceGrid, TargetsView_default as TargetsView, TeamManagementView_default as TeamManagementView, ThreadSidebar, TicketHistory_default as TicketHistory, TicketHistoryService, TicketsView_default as TicketsView, TimeDisplay_default as TimeDisplay, TimePickerDropdown, Timer_default as Timer, TimezoneProvider, TimezoneService, UptimeDonutChart, UptimeLineChart, UptimeMetricCards, UserAvatar, UserManagementService, UserManagementTable, UserService, UserUsageDetailModal, UserUsageStats, VideoCard, VideoGridView, VideoPlayer, VideoPreloader, WORKSPACE_POSITIONS, WhatsAppShareButton, WorkspaceCard, WorkspaceCycleTimeMetricCards, WorkspaceDetailView_default as WorkspaceDetailView, WorkspaceDisplayNameExample, WorkspaceGrid, WorkspaceGridItem, WorkspaceHealthCard, WorkspaceHealthView_default as WorkspaceHealthView, WorkspaceHistoryCalendar, WorkspaceMetricCards, WorkspaceMetricCardsImpl, WorkspaceMonthlyDataFetcher, WorkspaceMonthlyHistory, WorkspaceMonthlyPdfGenerator, WorkspacePdfExportButton, WorkspacePdfGenerator, WorkspaceWhatsAppShareButton, actionService, aggregateKPIsFromLineMetricsRows, alertsService, apiUtils, areAllLinesOnSameShift, authCoreService, authOTPService, authRateLimitService, awardsService, buildDateKey, buildKPIsFromLineMetricsRow, buildShiftGroupsKey, canRoleAccessDashboardPath, canRoleAccessTeamManagement, canRoleAssignFactories, canRoleAssignLines, canRoleChangeRole, canRoleInviteRole, canRoleManageCompany, canRoleManageTargets, canRoleManageUsers, canRoleRemoveUser, canRoleViewClipsCost, canRoleViewUsageStats, captureHandledFrontendException, captureSentryException, captureSentryMessage, checkRateLimit2 as checkRateLimit, clearAllRateLimits2 as clearAllRateLimits, clearRateLimit2 as clearRateLimit, clearS3VideoCache, clearS3VideoFromCache, clearSentryContext, clearWorkspaceDisplayNamesCache, cn, createDefaultKPIs, createInvitationService, createLinesService, createSessionTracker, createStorageService, createStreamProxyHandler, createSupabaseClient, createSupervisorService, createThrottledReload, createUserManagementService, createUserService, dashboardService, deleteThread, fetchIdleTimeReasons, filterDataByDateKeyRange, forceRefreshWorkspaceDisplayNames, formatAwardMonth, formatDateInZone, formatDateKeyForDisplay, formatDateTimeInZone, formatDuration2 as formatDuration, formatISTDate, formatIdleTime, formatRangeLabel, formatReasonLabel, formatRelativeTime, formatTimeInZone, fromUrlFriendlyName, getActionDisplayName, getActiveShift, getAllLineDisplayNames, getAllThreadMessages, getAllWorkspaceDisplayNamesAsync, getAllWorkspaceDisplayNamesSnapshot, getAnonClient, getAssignableRoles, getAssignmentColumnLabel, getAvailableShiftIds, getAwardBadgeType, getAwardDescription, getAwardTitle, getBrowserName, getCameraNumber, getCompanyMetricsTableName, getConfigurableShortWorkspaceDisplayName, getConfigurableWorkspaceDisplayName, getConfiguredLineIds, getCoreSessionRecordingProperties, getCoreSessionReplayUrl, getCurrentShift, getCurrentShiftForLine, getCurrentTimeInZone, getCurrentWeekFullRange, getCurrentWeekToDateRange, getDashboardHeaderTimeInZone, getDateKeyFromDate, getDaysDifferenceInZone, getDefaultCameraStreamUrl, getDefaultLineId, getDefaultTabForWorkspace, getInitials, getLineDisplayName, getManufacturingInsights, getMetricsTablePrefix, getMonthKeyBounds, getMonthWeekRanges, getMonthlyTrendComparisonLabel, getNextUpdateInterval, getOperationalDate, getRoleAssignmentKind, getRoleDescription, getRoleLabel, getRoleMetadata, getRoleNavPaths, getS3SignedUrl, getS3VideoSrc, getShiftData, getShiftNameById, getShiftWorkDurationSeconds, getShortShiftName, getShortWorkspaceDisplayName, getShortWorkspaceDisplayNameAsync, getStoredWorkspaceMappings, getSubscriptionManager, getThreadMessages, getUniformShiftGroup, getUserThreads, getUserThreadsPaginated, getVisibleRolesForCurrentUser, getWorkspaceDisplayName, getWorkspaceDisplayNameAsync, getWorkspaceDisplayNamesMap, getWorkspaceFromUrl, getWorkspaceNavigationParams, groupLinesByShift, hasAnyShiftData, identifyCoreUser, initializeCoreMixpanel, isEfficiencyOnTrack, isFactoryScopedRole, isFullMonthRange, isIgnorableFrontendError, isLegacyConfiguration, isLoopbackHostname, isPrefetchError, isRecentFlowVideoGridMetricMode, isSafari, isSupervisorRole, isTransitionPeriod, isUrlPermanentlyFailed, isValidFactoryViewConfiguration, isValidLineInfoPayload, isValidPrefetchParams, isValidPrefetchStatus, isValidWorkspaceDetailedMetricsPayload, isValidWorkspaceMetricsPayload, isWipGatedVideoGridMetricMode, isWorkspaceDisplayNamesLoaded, isWorkspaceDisplayNamesLoading, lineLeaderboardService, linesService, mergeWithDefaultConfig, migrateLegacyConfiguration, normalizeActionFamily, normalizeDateKeyRange, normalizeRoleLevel, normalizeVideoGridMetricMode, optifyeAgentClient, parseDateKeyToDate, parseS3Uri, preInitializeWorkspaceDisplayNames, preloadS3Video, preloadS3VideoUrl, preloadS3VideosUrl, preloadVideoUrl, preloadVideosUrl, qualityService, realtimeService, refreshWorkspaceDisplayNames, resetCoreMixpanel, resetFailedUrl, resetSubscriptionManager, s3VideoPreloader, setSentryUserContext, setSentryWorkspaceContext, shouldEnableLocalDevTestLogin, shuffleArray, simulateApiDelay, skuService, startCoreSessionRecording, stopCoreSessionRecording, storeWorkspaceMapping, streamProxyConfig, subscribeWorkspaceDisplayNames, throttledReloadDashboard, toUrlFriendlyName, trackCoreEvent, trackCorePageView, transformToChartData, updateThreadTitle, upsertWorkspaceDisplayNameInCache, useAccessControl, useActiveBreaks, useActiveLineId, useAllWorkspaceMetrics, useAnalyticsConfig, useAppTimezone, useAudioService, useAuth, useAuthConfig, useAxelNotifications, useCanSaveTargets, useClipFilter, useClipTypes, useClipTypesWithCounts, useClipsInit, useCompanyClipsCost, useCompanyFastSlowClipFiltersEnabled, useCompanyHasVlmEnabledLine, useCompanyUsersUsage, useComponentOverride, useCustomConfig, useDashboardConfig, useDashboardMetrics, useDatabaseConfig, useDateFormatter, useDateTimeConfig, useDynamicShiftConfig, useEndpointsConfig, useEntityConfig, useFactoryOverviewMetrics, useFeatureFlags, useFormatNumber, useHasLineAccess, useHideMobileHeader, useHistoricWorkspaceMetrics, useHlsStream, useHlsStreamWithCropping, useHookOverride, useHourEndTimer, useHourlyTargetAchievements, useHourlyTargetMisses, useIdleTimeClipClassifications, useIdleTimeReasons, useIdleTimeVlmConfig, useKpiTrends, useLeaderboardMetrics, useLineDetailedMetrics, useLineKPIs, useLineMetrics, useLineShiftConfig, useLineSupervisor, useLineWorkspaceMetrics, useLines, useMessages, useMetrics, useMobileMenu, useMonthlyTrend, useMultiLineShiftConfigs, useNavigation, useOperationalShiftKey, useOptionalSupabase, useOverrides, usePageOverride, usePrefetchClipCounts, useRealtimeLineMetrics, useRegistry, useSKUs, useSessionKeepAlive, useSessionTracking, useSessionTrackingContext, useShiftConfig, useShiftGroups, useShifts, useSubscriptionManager, useSubscriptionManagerSafe, useSupabase, useSupabaseClient, useSupervisorsByLineIds, useTargets, useTeamManagementPermissions, useTheme, useThemeConfig, useThreads, useTicketHistory, useTimezoneContext, useUserLineAccess, useUserUsage, useVideoConfig, useWorkspaceConfig, useWorkspaceDetailedMetrics, useWorkspaceDisplayName, useWorkspaceDisplayNames, useWorkspaceDisplayNamesMap, useWorkspaceHealthById, useWorkspaceHealthLastSeen, useWorkspaceHealthStatus, useWorkspaceMetrics, useWorkspaceNavigation, useWorkspaceOperators, useWorkspaceUptimeTimeline, useWorkspaceVideoStreams, userService, videoPrefetchManager, videoPreloader, weeklyTopPerformerService, whatsappService, withAccessControl, withAuth, withRegistry, withTimezone, workspaceHealthService, workspaceService };