@optifye/dashboard-core 6.11.37 → 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.d.mts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +376 -158
- package/dist/index.mjs +376 -159
- package/package.json +1 -1
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
|
-
}, [
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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.
|
|
47927
|
-
|
|
47928
|
-
|
|
47929
|
-
|
|
47930
|
-
|
|
47931
|
-
|
|
47932
|
-
|
|
47933
|
-
|
|
47934
|
-
|
|
47935
|
-
|
|
47936
|
-
|
|
47937
|
-
|
|
47938
|
-
|
|
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
|
-
|
|
48109
|
-
|
|
48110
|
-
|
|
48111
|
-
|
|
48112
|
-
|
|
48113
|
-
|
|
48114
|
-
|
|
48115
|
-
|
|
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,
|
|
48120
|
-
doc.text("Date", 25,
|
|
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,
|
|
48153
|
+
doc.text("Utilization", 95, headerTextY);
|
|
48123
48154
|
} else {
|
|
48124
|
-
doc.text("Actual", 60,
|
|
48125
|
-
doc.text("Standard", 95,
|
|
48126
|
-
doc.text("Efficiency", 135,
|
|
48127
|
-
doc.text("Status", 170,
|
|
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,
|
|
48162
|
+
doc.line(20, headerTextY + 3, 190, headerTextY + 3);
|
|
48132
48163
|
doc.setFont("helvetica", "normal");
|
|
48133
|
-
let yPos =
|
|
48134
|
-
|
|
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 +=
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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)}
|
|
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)}
|
|
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)}
|
|
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__ */
|
|
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
|
|
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
|
|
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
|
|
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
|
|
51186
|
-
|
|
51187
|
-
|
|
51188
|
-
|
|
51189
|
-
|
|
51190
|
-
|
|
51191
|
-
|
|
51192
|
-
|
|
51193
|
-
|
|
51194
|
-
|
|
51195
|
-
|
|
51196
|
-
|
|
51197
|
-
|
|
51198
|
-
|
|
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(
|
|
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
|
-
|
|
51362
|
-
|
|
51363
|
-
|
|
51364
|
-
|
|
51365
|
-
|
|
51366
|
-
|
|
51367
|
-
|
|
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 =
|
|
51384
|
-
|
|
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 +=
|
|
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
|
-
|
|
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,
|
|
@@ -78880,6 +78980,12 @@ var buildDeltaBadge = (delta, options) => {
|
|
|
78880
78980
|
text: `${options.formatter(delta)} vs ${options.comparisonLabel}`
|
|
78881
78981
|
};
|
|
78882
78982
|
};
|
|
78983
|
+
var parseSpecificShiftId = (shiftMode) => {
|
|
78984
|
+
const rawMode = String(shiftMode || "").trim().toLowerCase();
|
|
78985
|
+
if (!rawMode.startsWith("shift:")) return null;
|
|
78986
|
+
const parsed = Number(rawMode.split(":", 2)[1]);
|
|
78987
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
78988
|
+
};
|
|
78883
78989
|
var normalizeShiftLabel = (shiftName, shiftMode) => {
|
|
78884
78990
|
if (shiftMode === "all") {
|
|
78885
78991
|
return "All Shifts";
|
|
@@ -78891,6 +78997,10 @@ var normalizeShiftLabel = (shiftName, shiftMode) => {
|
|
|
78891
78997
|
if (normalizedName === "night") return "Night Shift";
|
|
78892
78998
|
return /shift/i.test(trimmedName) ? trimmedName : `${trimmedName} Shift`;
|
|
78893
78999
|
}
|
|
79000
|
+
const specificShiftId = parseSpecificShiftId(shiftMode);
|
|
79001
|
+
if (specificShiftId !== null) {
|
|
79002
|
+
return `Shift ${specificShiftId}`;
|
|
79003
|
+
}
|
|
78894
79004
|
if (shiftMode === "night") return "Night Shift";
|
|
78895
79005
|
return "Day Shift";
|
|
78896
79006
|
};
|
|
@@ -78963,6 +79073,7 @@ var OperationsOverviewHeader = React143__default.memo(({
|
|
|
78963
79073
|
dateRange,
|
|
78964
79074
|
displayDateRange,
|
|
78965
79075
|
trendMode,
|
|
79076
|
+
shiftFilterOptions,
|
|
78966
79077
|
isLiveScope,
|
|
78967
79078
|
liveShiftName,
|
|
78968
79079
|
lineOptions,
|
|
@@ -79216,7 +79327,7 @@ var OperationsOverviewHeader = React143__default.memo(({
|
|
|
79216
79327
|
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
79217
79328
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
79218
79329
|
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide ml-1", children: "Shift" }),
|
|
79219
|
-
/* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */
|
|
79330
|
+
/* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx(
|
|
79220
79331
|
"select",
|
|
79221
79332
|
{
|
|
79222
79333
|
value: trendMode,
|
|
@@ -79228,11 +79339,7 @@ var OperationsOverviewHeader = React143__default.memo(({
|
|
|
79228
79339
|
backgroundRepeat: "no-repeat",
|
|
79229
79340
|
backgroundSize: "1.2em 1.2em"
|
|
79230
79341
|
},
|
|
79231
|
-
children:
|
|
79232
|
-
/* @__PURE__ */ jsx("option", { value: "all", children: "All Shifts" }),
|
|
79233
|
-
/* @__PURE__ */ jsx("option", { value: "day", children: "Day Shift" }),
|
|
79234
|
-
/* @__PURE__ */ jsx("option", { value: "night", children: "Night Shift" })
|
|
79235
|
-
]
|
|
79342
|
+
children: shiftFilterOptions.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.value))
|
|
79236
79343
|
}
|
|
79237
79344
|
) })
|
|
79238
79345
|
] }),
|
|
@@ -80302,6 +80409,24 @@ var normalizeShiftId = (value) => {
|
|
|
80302
80409
|
}
|
|
80303
80410
|
return null;
|
|
80304
80411
|
};
|
|
80412
|
+
var buildSpecificShiftMode = (value) => {
|
|
80413
|
+
const normalizedShiftId = normalizeShiftId(value);
|
|
80414
|
+
return normalizedShiftId === null ? null : `shift:${normalizedShiftId}`;
|
|
80415
|
+
};
|
|
80416
|
+
var parseSpecificShiftMode = (value) => {
|
|
80417
|
+
const rawValue = String(value || "").trim().toLowerCase();
|
|
80418
|
+
if (!rawValue.startsWith("shift:")) return null;
|
|
80419
|
+
const parsed = Number(rawValue.split(":", 2)[1]);
|
|
80420
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
80421
|
+
};
|
|
80422
|
+
var formatShiftOptionLabel = (shiftName, shiftId) => {
|
|
80423
|
+
const trimmedName = shiftName?.trim();
|
|
80424
|
+
if (trimmedName) {
|
|
80425
|
+
return /shift/i.test(trimmedName) ? trimmedName : `${trimmedName} Shift`;
|
|
80426
|
+
}
|
|
80427
|
+
const normalizedShiftId = normalizeShiftId(shiftId);
|
|
80428
|
+
return normalizedShiftId === null ? "Unknown Shift" : `Shift ${normalizedShiftId}`;
|
|
80429
|
+
};
|
|
80305
80430
|
var classifyShiftBucket = ({
|
|
80306
80431
|
shiftName,
|
|
80307
80432
|
shiftId,
|
|
@@ -80388,6 +80513,26 @@ var normalizeShiftWindowMinutes = (startTime, endTime) => {
|
|
|
80388
80513
|
}
|
|
80389
80514
|
return { startMinutes, endMinutes };
|
|
80390
80515
|
};
|
|
80516
|
+
var getOperationalSortStartMinutes = (startTime, endTime) => {
|
|
80517
|
+
const normalizedWindow = normalizeShiftWindowMinutes(startTime, endTime);
|
|
80518
|
+
if (!normalizedWindow) return null;
|
|
80519
|
+
return normalizedWindow.startMinutes < 6 * 60 ? normalizedWindow.startMinutes + 24 * 60 : normalizedWindow.startMinutes;
|
|
80520
|
+
};
|
|
80521
|
+
var doesShiftMatchTrendMode = ({
|
|
80522
|
+
trendMode,
|
|
80523
|
+
shiftName,
|
|
80524
|
+
shiftId,
|
|
80525
|
+
startTime,
|
|
80526
|
+
endTime
|
|
80527
|
+
}) => {
|
|
80528
|
+
if (trendMode === "all") return true;
|
|
80529
|
+
const specificShiftId = parseSpecificShiftMode(trendMode);
|
|
80530
|
+
if (specificShiftId !== null) {
|
|
80531
|
+
return normalizeShiftId(shiftId) === specificShiftId;
|
|
80532
|
+
}
|
|
80533
|
+
const bucket = classifyShiftBucket({ shiftName, shiftId, startTime, endTime });
|
|
80534
|
+
return bucket === trendMode;
|
|
80535
|
+
};
|
|
80391
80536
|
var PlantHeadView = () => {
|
|
80392
80537
|
const supabase = useSupabase();
|
|
80393
80538
|
const entityConfig = useEntityConfig();
|
|
@@ -80518,6 +80663,45 @@ var PlantHeadView = () => {
|
|
|
80518
80663
|
shiftConfigMap,
|
|
80519
80664
|
isLoading: isShiftConfigLoading
|
|
80520
80665
|
} = useMultiLineShiftConfigs(scopedLineIds, staticShiftConfig);
|
|
80666
|
+
const shiftFilterOptions = React143__default.useMemo(() => {
|
|
80667
|
+
const optionsById = /* @__PURE__ */ new Map();
|
|
80668
|
+
scopedLineIds.forEach((lineId) => {
|
|
80669
|
+
const shiftConfig = shiftConfigMap.get(lineId) || staticShiftConfig;
|
|
80670
|
+
getShiftWindowsForConfig(shiftConfig).forEach((shift) => {
|
|
80671
|
+
const shiftId = normalizeShiftId(shift.shiftId);
|
|
80672
|
+
if (shiftId === null) return;
|
|
80673
|
+
const sortKey = getOperationalSortStartMinutes(shift.startTime, shift.endTime) ?? 24 * 60 + shiftId;
|
|
80674
|
+
const existing = optionsById.get(shiftId);
|
|
80675
|
+
const label = formatShiftOptionLabel(shift.shiftName, shiftId);
|
|
80676
|
+
if (!existing) {
|
|
80677
|
+
optionsById.set(shiftId, {
|
|
80678
|
+
value: buildSpecificShiftMode(shiftId),
|
|
80679
|
+
label,
|
|
80680
|
+
shiftId,
|
|
80681
|
+
shiftName: shift.shiftName || null,
|
|
80682
|
+
startTime: shift.startTime || null,
|
|
80683
|
+
endTime: shift.endTime || null,
|
|
80684
|
+
sortKey
|
|
80685
|
+
});
|
|
80686
|
+
return;
|
|
80687
|
+
}
|
|
80688
|
+
if ((!existing.shiftName || existing.shiftName === `Shift ${shiftId}`) && shift.shiftName) {
|
|
80689
|
+
existing.shiftName = shift.shiftName;
|
|
80690
|
+
existing.label = label;
|
|
80691
|
+
}
|
|
80692
|
+
if (sortKey < existing.sortKey) {
|
|
80693
|
+
existing.sortKey = sortKey;
|
|
80694
|
+
existing.startTime = shift.startTime || null;
|
|
80695
|
+
existing.endTime = shift.endTime || null;
|
|
80696
|
+
}
|
|
80697
|
+
});
|
|
80698
|
+
});
|
|
80699
|
+
const dynamicOptions = Array.from(optionsById.values()).sort((a, b) => a.sortKey - b.sortKey || (a.shiftId || 0) - (b.shiftId || 0)).map(({ sortKey, ...option }) => option);
|
|
80700
|
+
return [
|
|
80701
|
+
{ value: "all", label: "All Shifts" },
|
|
80702
|
+
...dynamicOptions
|
|
80703
|
+
];
|
|
80704
|
+
}, [appTimezone, scopedLineIds, shiftConfigMap, staticShiftConfig]);
|
|
80521
80705
|
React143__default.useEffect(() => {
|
|
80522
80706
|
if (scopedLineIds.length === 0 || isShiftConfigLoading) {
|
|
80523
80707
|
return;
|
|
@@ -80580,18 +80764,20 @@ var PlantHeadView = () => {
|
|
|
80580
80764
|
if (!activeShift) {
|
|
80581
80765
|
return [];
|
|
80582
80766
|
}
|
|
80583
|
-
const
|
|
80767
|
+
const bucketTrendMode = classifyShiftBucket({
|
|
80584
80768
|
shiftName: activeShift.shiftName,
|
|
80585
80769
|
shiftId: activeShift.shiftId,
|
|
80586
80770
|
startTime: activeShift.startTime,
|
|
80587
80771
|
endTime: activeShift.endTime
|
|
80588
80772
|
});
|
|
80589
|
-
|
|
80773
|
+
const exactTrendMode = buildSpecificShiftMode(activeShift.shiftId);
|
|
80774
|
+
if (!bucketTrendMode && !exactTrendMode) {
|
|
80590
80775
|
return [];
|
|
80591
80776
|
}
|
|
80592
80777
|
return [{
|
|
80593
80778
|
lineId,
|
|
80594
|
-
|
|
80779
|
+
exactTrendMode,
|
|
80780
|
+
bucketTrendMode,
|
|
80595
80781
|
shiftId: activeShift.shiftId,
|
|
80596
80782
|
shiftName: activeShift.shiftName || null,
|
|
80597
80783
|
startTime: activeShift.startTime || null,
|
|
@@ -80600,14 +80786,12 @@ var PlantHeadView = () => {
|
|
|
80600
80786
|
}];
|
|
80601
80787
|
});
|
|
80602
80788
|
}, [appTimezone, scopedLineIds, shiftConfigMap, shiftResolutionNow, staticShiftConfig]);
|
|
80603
|
-
const
|
|
80604
|
-
|
|
80605
|
-
|
|
80606
|
-
|
|
80607
|
-
|
|
80608
|
-
|
|
80609
|
-
[activeLineShiftStates, resolvedOperationalToday]
|
|
80610
|
-
);
|
|
80789
|
+
const uniformActiveTrendMode = React143__default.useMemo(() => {
|
|
80790
|
+
const activeModes = Array.from(new Set(
|
|
80791
|
+
activeLineShiftStates.filter((shift) => shift.date === resolvedOperationalToday).map((shift) => shift.exactTrendMode).filter((mode) => !!mode)
|
|
80792
|
+
));
|
|
80793
|
+
return activeModes.length === 1 ? activeModes[0] : null;
|
|
80794
|
+
}, [activeLineShiftStates, resolvedOperationalToday]);
|
|
80611
80795
|
const resolvedTrendMode = isInitialScopeReady ? trendMode : "all";
|
|
80612
80796
|
const hourlyWindowStartTime = React143__default.useMemo(() => {
|
|
80613
80797
|
if (scopedLineIds.length === 0) {
|
|
@@ -80618,13 +80802,19 @@ var PlantHeadView = () => {
|
|
|
80618
80802
|
scopedLineIds.forEach((lineId) => {
|
|
80619
80803
|
const shiftConfig = shiftConfigMap.get(lineId) || staticShiftConfig;
|
|
80620
80804
|
getShiftWindowsForConfig(shiftConfig).forEach((shift) => {
|
|
80621
|
-
|
|
80805
|
+
classifyShiftBucket({
|
|
80622
80806
|
shiftName: shift.shiftName,
|
|
80623
80807
|
shiftId: shift.shiftId,
|
|
80624
80808
|
startTime: shift.startTime,
|
|
80625
80809
|
endTime: shift.endTime
|
|
80626
80810
|
});
|
|
80627
|
-
if (
|
|
80811
|
+
if (!doesShiftMatchTrendMode({
|
|
80812
|
+
trendMode: resolvedTrendMode,
|
|
80813
|
+
shiftName: shift.shiftName,
|
|
80814
|
+
shiftId: shift.shiftId,
|
|
80815
|
+
startTime: shift.startTime,
|
|
80816
|
+
endTime: shift.endTime
|
|
80817
|
+
})) {
|
|
80628
80818
|
return;
|
|
80629
80819
|
}
|
|
80630
80820
|
const normalizedWindow = normalizeShiftWindowMinutes(shift.startTime, shift.endTime);
|
|
@@ -80698,11 +80888,11 @@ var PlantHeadView = () => {
|
|
|
80698
80888
|
endKey: nextStartKey
|
|
80699
80889
|
};
|
|
80700
80890
|
});
|
|
80701
|
-
setTrendMode("all");
|
|
80891
|
+
setTrendMode(uniformActiveTrendMode || "all");
|
|
80702
80892
|
setUsesThisWeekComparison(false);
|
|
80703
80893
|
hasAutoInitializedScopeRef.current = true;
|
|
80704
80894
|
setIsInitialScopeReady(true);
|
|
80705
|
-
}, [fallbackOperationalDate, isShiftScopeResolved, resolvedOperationalToday, scopedLineIds.length]);
|
|
80895
|
+
}, [fallbackOperationalDate, isShiftScopeResolved, resolvedOperationalToday, scopedLineIds.length, uniformActiveTrendMode]);
|
|
80706
80896
|
const handleDateRangeChange = React143__default.useCallback((range, meta) => {
|
|
80707
80897
|
hasUserAdjustedScopeRef.current = true;
|
|
80708
80898
|
setIsInitialScopeReady(true);
|
|
@@ -80789,6 +80979,33 @@ var PlantHeadView = () => {
|
|
|
80789
80979
|
() => resolvedTrendMode,
|
|
80790
80980
|
[resolvedTrendMode]
|
|
80791
80981
|
);
|
|
80982
|
+
const hasActiveSelectedShiftLine = React143__default.useMemo(
|
|
80983
|
+
() => activeLineShiftStates.some((shift) => {
|
|
80984
|
+
if (shift.date !== resolvedOperationalToday) return false;
|
|
80985
|
+
if (effectiveTrendMode === "all") return true;
|
|
80986
|
+
const specificShiftId = parseSpecificShiftMode(effectiveTrendMode);
|
|
80987
|
+
if (specificShiftId !== null) {
|
|
80988
|
+
return shift.exactTrendMode === effectiveTrendMode;
|
|
80989
|
+
}
|
|
80990
|
+
return shift.bucketTrendMode === effectiveTrendMode;
|
|
80991
|
+
}),
|
|
80992
|
+
[activeLineShiftStates, effectiveTrendMode, resolvedOperationalToday]
|
|
80993
|
+
);
|
|
80994
|
+
const activeLiveShiftName = React143__default.useMemo(
|
|
80995
|
+
() => {
|
|
80996
|
+
if (effectiveTrendMode === "all") return null;
|
|
80997
|
+
const matchingShift = activeLineShiftStates.find((shift) => {
|
|
80998
|
+
if (shift.date !== resolvedOperationalToday) return false;
|
|
80999
|
+
const specificShiftId = parseSpecificShiftMode(effectiveTrendMode);
|
|
81000
|
+
if (specificShiftId !== null) {
|
|
81001
|
+
return shift.exactTrendMode === effectiveTrendMode;
|
|
81002
|
+
}
|
|
81003
|
+
return shift.bucketTrendMode === effectiveTrendMode;
|
|
81004
|
+
});
|
|
81005
|
+
return matchingShift?.shiftName || null;
|
|
81006
|
+
},
|
|
81007
|
+
[activeLineShiftStates, effectiveTrendMode, resolvedOperationalToday]
|
|
81008
|
+
);
|
|
80792
81009
|
const hourlyLabelStartTime = React143__default.useMemo(() => {
|
|
80793
81010
|
if (scopedLineIds.length === 0) {
|
|
80794
81011
|
return null;
|
|
@@ -80800,12 +81017,11 @@ var PlantHeadView = () => {
|
|
|
80800
81017
|
[effectiveDateRange.endKey, effectiveDateRange.startKey]
|
|
80801
81018
|
);
|
|
80802
81019
|
const isLiveScope = React143__default.useMemo(
|
|
80803
|
-
() => isSingleDayScope && effectiveDateRange.startKey === resolvedOperationalToday &&
|
|
81020
|
+
() => isSingleDayScope && effectiveDateRange.startKey === resolvedOperationalToday && hasActiveSelectedShiftLine,
|
|
80804
81021
|
[
|
|
80805
81022
|
effectiveDateRange.startKey,
|
|
80806
81023
|
effectiveTrendMode,
|
|
80807
|
-
|
|
80808
|
-
hasActiveNightShiftLine,
|
|
81024
|
+
hasActiveSelectedShiftLine,
|
|
80809
81025
|
isSingleDayScope,
|
|
80810
81026
|
resolvedOperationalToday
|
|
80811
81027
|
]
|
|
@@ -80842,8 +81058,9 @@ var PlantHeadView = () => {
|
|
|
80842
81058
|
dateRange,
|
|
80843
81059
|
displayDateRange: headerDateRange,
|
|
80844
81060
|
trendMode,
|
|
81061
|
+
shiftFilterOptions,
|
|
80845
81062
|
isLiveScope,
|
|
80846
|
-
liveShiftName: isLiveScope && trendMode !== "all" ?
|
|
81063
|
+
liveShiftName: isLiveScope && trendMode !== "all" ? activeLiveShiftName : null,
|
|
80847
81064
|
lineOptions,
|
|
80848
81065
|
supervisorOptions,
|
|
80849
81066
|
selectedSupervisorId,
|
|
@@ -81378,4 +81595,4 @@ var streamProxyConfig = {
|
|
|
81378
81595
|
}
|
|
81379
81596
|
};
|
|
81380
81597
|
|
|
81381
|
-
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 };
|