@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.d.mts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +234 -133
- package/dist/index.mjs +234 -134
- 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,
|
|
@@ -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 };
|