@optifye/dashboard-core 6.12.45 → 6.12.47

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.
@@ -202,6 +202,7 @@ interface WorkspaceMetrics {
202
202
  avg_recent_flow?: number | null;
203
203
  recent_flow_mode?: 'computed' | 'hold' | 'unavailable';
204
204
  recent_flow_percent?: number | null;
205
+ recent_flow_hourly?: Record<string, unknown> | null;
205
206
  recent_flow_actual_rate_pph?: number | null;
206
207
  recent_flow_healthy_rate_pph?: number | null;
207
208
  recent_flow_window_minutes?: number | null;
@@ -202,6 +202,7 @@ interface WorkspaceMetrics {
202
202
  avg_recent_flow?: number | null;
203
203
  recent_flow_mode?: 'computed' | 'hold' | 'unavailable';
204
204
  recent_flow_percent?: number | null;
205
+ recent_flow_hourly?: Record<string, unknown> | null;
205
206
  recent_flow_actual_rate_pph?: number | null;
206
207
  recent_flow_healthy_rate_pph?: number | null;
207
208
  recent_flow_window_minutes?: number | null;
@@ -1,2 +1,2 @@
1
- export { B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, e as WorkspaceVideoStream } from './automation-ZIumB5W9.mjs';
1
+ export { B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, e as WorkspaceVideoStream } from './automation-B472r1h3.mjs';
2
2
  import 'react';
@@ -1,2 +1,2 @@
1
- export { B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, e as WorkspaceVideoStream } from './automation-ZIumB5W9.js';
1
+ export { B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, W as WorkspaceMetrics, e as WorkspaceVideoStream } from './automation-B472r1h3.js';
2
2
  import 'react';
@@ -2054,6 +2054,7 @@ var VideoCard = React__default.default.memo(({
2054
2054
  displayMinuteBucket,
2055
2055
  displayName,
2056
2056
  isBlueBest = false,
2057
+ isWorstPerformance = false,
2057
2058
  lastSeenLabel,
2058
2059
  hasRecentHealthSignal = false,
2059
2060
  onMouseEnter,
@@ -2092,6 +2093,8 @@ var VideoCard = React__default.default.memo(({
2092
2093
  const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "blue" ? "bg-[#0EA5E9]/30" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
2093
2094
  const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "blue" ? "bg-[#0EA5E9]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
2094
2095
  const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "blue" ? "Best" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
2096
+ const worstMarkerClassName = compact ? "left-1.5 top-1.5 gap-1.5 px-2 py-1 text-[11px]" : "left-2 top-2 gap-2 px-3 py-1.5 text-xs";
2097
+ const statusBadgesPositionClass = isWorstPerformance ? compact ? "top-8 left-1.5 gap-1" : "top-10 left-2 gap-1.5" : compact ? "top-1.5 left-1.5 gap-1" : "top-2 left-2 gap-1.5";
2095
2098
  const trendInfo = workspace.trend !== void 0 ? getTrendArrowAndColor(workspace.trend) : null;
2096
2099
  const handleClick = React.useCallback(() => {
2097
2100
  trackCoreEvent("Workspace Card Clicked", {
@@ -2110,6 +2113,7 @@ var VideoCard = React__default.default.memo(({
2110
2113
  {
2111
2114
  className: `workspace-card relative bg-gray-950 rounded-md overflow-hidden cursor-pointer shadow-[0_1px_3px_rgba(15,23,42,0.16),0_0_0_1px_rgba(255,255,255,0.06)] transition-[box-shadow] duration-200 hover:shadow-[0_10px_24px_rgba(15,23,42,0.28),0_0_0_1px_rgba(255,255,255,0.10)] active:shadow-[0_1px_3px_rgba(15,23,42,0.16),0_0_0_1px_rgba(255,255,255,0.06)] touch-manipulation ${className}`,
2112
2115
  style: { width: "100%", height: "100%" },
2116
+ "data-worst-performance-highlight": isWorstPerformance ? "true" : void 0,
2113
2117
  onClick: handleClick,
2114
2118
  onMouseEnter,
2115
2119
  onMouseLeave,
@@ -2171,7 +2175,7 @@ var VideoCard = React__default.default.memo(({
2171
2175
  "div",
2172
2176
  {
2173
2177
  "data-testid": "video-card-status-badges",
2174
- className: `absolute ${compact ? "top-1.5 left-1.5 gap-1" : "top-2 left-2 gap-1.5"} z-30 flex items-center`,
2178
+ className: `absolute ${statusBadgesPositionClass} z-30 flex items-center`,
2175
2179
  children: statusBadges.map((badge, index) => {
2176
2180
  const presentation = getIdleReasonPresentation({
2177
2181
  label: badge.label,
@@ -2222,6 +2226,17 @@ var VideoCard = React__default.default.memo(({
2222
2226
  })
2223
2227
  }
2224
2228
  ),
2229
+ isWorstPerformance && /* @__PURE__ */ jsxRuntime.jsxs(
2230
+ "div",
2231
+ {
2232
+ "data-testid": "video-card-worst-performance-marker",
2233
+ className: `pointer-events-none absolute z-[65] inline-flex items-center rounded-md bg-[#1A0B09]/95 border border-[#E34329]/60 font-semibold tracking-wide text-white shadow-xl ${worstMarkerClassName}`,
2234
+ children: [
2235
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: `${compact ? "h-3.5 w-3.5" : "h-4 w-4"} text-[#E34329]`, "aria-hidden": "true" }),
2236
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Overall Underperformer" })
2237
+ ]
2238
+ }
2239
+ ),
2225
2240
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: `absolute bottom-0 left-0 right-0 ${compact ? "h-0.5" : "h-1"} bg-black/50 z-30`, children: /* @__PURE__ */ jsxRuntime.jsx(
2226
2241
  "div",
2227
2242
  {
@@ -2270,6 +2285,9 @@ var VideoCard = React__default.default.memo(({
2270
2285
  if (prevProps.isBlueBest !== nextProps.isBlueBest) {
2271
2286
  return false;
2272
2287
  }
2288
+ if (prevProps.isWorstPerformance !== nextProps.isWorstPerformance) {
2289
+ return false;
2290
+ }
2273
2291
  if (prevProps.lastSeenLabel !== nextProps.lastSeenLabel) {
2274
2292
  return false;
2275
2293
  }
@@ -2047,6 +2047,7 @@ var VideoCard = React.memo(({
2047
2047
  displayMinuteBucket,
2048
2048
  displayName,
2049
2049
  isBlueBest = false,
2050
+ isWorstPerformance = false,
2050
2051
  lastSeenLabel,
2051
2052
  hasRecentHealthSignal = false,
2052
2053
  onMouseEnter,
@@ -2085,6 +2086,8 @@ var VideoCard = React.memo(({
2085
2086
  const efficiencyOverlayClass = videoGridColorState === "green" ? "bg-[#00D654]/25" : videoGridColorState === "blue" ? "bg-[#0EA5E9]/30" : videoGridColorState === "yellow" ? "bg-[#FFD700]/30" : videoGridColorState === "red" ? "bg-[#FF2D0A]/30" : "bg-transparent";
2086
2087
  const efficiencyBarClass = videoGridColorState === "green" ? "bg-[#00AB45]" : videoGridColorState === "blue" ? "bg-[#0EA5E9]" : videoGridColorState === "yellow" ? "bg-[#FFB020]" : videoGridColorState === "red" ? "bg-[#E34329]" : "bg-gray-500/70";
2087
2088
  const efficiencyStatus = videoGridColorState === "green" ? "High" : videoGridColorState === "blue" ? "Best" : videoGridColorState === "yellow" ? "Medium" : videoGridColorState === "red" ? "Low" : "Neutral";
2089
+ const worstMarkerClassName = compact ? "left-1.5 top-1.5 gap-1.5 px-2 py-1 text-[11px]" : "left-2 top-2 gap-2 px-3 py-1.5 text-xs";
2090
+ const statusBadgesPositionClass = isWorstPerformance ? compact ? "top-8 left-1.5 gap-1" : "top-10 left-2 gap-1.5" : compact ? "top-1.5 left-1.5 gap-1" : "top-2 left-2 gap-1.5";
2088
2091
  const trendInfo = workspace.trend !== void 0 ? getTrendArrowAndColor(workspace.trend) : null;
2089
2092
  const handleClick = useCallback(() => {
2090
2093
  trackCoreEvent("Workspace Card Clicked", {
@@ -2103,6 +2106,7 @@ var VideoCard = React.memo(({
2103
2106
  {
2104
2107
  className: `workspace-card relative bg-gray-950 rounded-md overflow-hidden cursor-pointer shadow-[0_1px_3px_rgba(15,23,42,0.16),0_0_0_1px_rgba(255,255,255,0.06)] transition-[box-shadow] duration-200 hover:shadow-[0_10px_24px_rgba(15,23,42,0.28),0_0_0_1px_rgba(255,255,255,0.10)] active:shadow-[0_1px_3px_rgba(15,23,42,0.16),0_0_0_1px_rgba(255,255,255,0.06)] touch-manipulation ${className}`,
2105
2108
  style: { width: "100%", height: "100%" },
2109
+ "data-worst-performance-highlight": isWorstPerformance ? "true" : void 0,
2106
2110
  onClick: handleClick,
2107
2111
  onMouseEnter,
2108
2112
  onMouseLeave,
@@ -2164,7 +2168,7 @@ var VideoCard = React.memo(({
2164
2168
  "div",
2165
2169
  {
2166
2170
  "data-testid": "video-card-status-badges",
2167
- className: `absolute ${compact ? "top-1.5 left-1.5 gap-1" : "top-2 left-2 gap-1.5"} z-30 flex items-center`,
2171
+ className: `absolute ${statusBadgesPositionClass} z-30 flex items-center`,
2168
2172
  children: statusBadges.map((badge, index) => {
2169
2173
  const presentation = getIdleReasonPresentation({
2170
2174
  label: badge.label,
@@ -2215,6 +2219,17 @@ var VideoCard = React.memo(({
2215
2219
  })
2216
2220
  }
2217
2221
  ),
2222
+ isWorstPerformance && /* @__PURE__ */ jsxs(
2223
+ "div",
2224
+ {
2225
+ "data-testid": "video-card-worst-performance-marker",
2226
+ className: `pointer-events-none absolute z-[65] inline-flex items-center rounded-md bg-[#1A0B09]/95 border border-[#E34329]/60 font-semibold tracking-wide text-white shadow-xl ${worstMarkerClassName}`,
2227
+ children: [
2228
+ /* @__PURE__ */ jsx(AlertTriangle, { className: `${compact ? "h-3.5 w-3.5" : "h-4 w-4"} text-[#E34329]`, "aria-hidden": "true" }),
2229
+ /* @__PURE__ */ jsx("span", { children: "Overall Underperformer" })
2230
+ ]
2231
+ }
2232
+ ),
2218
2233
  /* @__PURE__ */ jsx("div", { className: `absolute bottom-0 left-0 right-0 ${compact ? "h-0.5" : "h-1"} bg-black/50 z-30`, children: /* @__PURE__ */ jsx(
2219
2234
  "div",
2220
2235
  {
@@ -2263,6 +2278,9 @@ var VideoCard = React.memo(({
2263
2278
  if (prevProps.isBlueBest !== nextProps.isBlueBest) {
2264
2279
  return false;
2265
2280
  }
2281
+ if (prevProps.isWorstPerformance !== nextProps.isWorstPerformance) {
2282
+ return false;
2283
+ }
2266
2284
  if (prevProps.lastSeenLabel !== nextProps.lastSeenLabel) {
2267
2285
  return false;
2268
2286
  }
package/dist/index.css CHANGED
@@ -604,6 +604,9 @@ body {
604
604
  .top-1\/4 {
605
605
  top: 25%;
606
606
  }
607
+ .top-10 {
608
+ top: 2.5rem;
609
+ }
607
610
  .top-14 {
608
611
  top: 3.5rem;
609
612
  }
@@ -673,6 +676,9 @@ body {
673
676
  .z-\[60\] {
674
677
  z-index: 60;
675
678
  }
679
+ .z-\[65\] {
680
+ z-index: 65;
681
+ }
676
682
  .z-\[70\] {
677
683
  z-index: 70;
678
684
  }
@@ -1262,6 +1268,9 @@ body {
1262
1268
  .min-h-\[220px\] {
1263
1269
  min-height: 220px;
1264
1270
  }
1271
+ .min-h-\[240px\] {
1272
+ min-height: 240px;
1273
+ }
1265
1274
  .min-h-\[250px\] {
1266
1275
  min-height: 250px;
1267
1276
  }
@@ -2390,6 +2399,9 @@ body {
2390
2399
  --tw-border-opacity: 1;
2391
2400
  border-color: rgb(227 67 41 / var(--tw-border-opacity, 1));
2392
2401
  }
2402
+ .border-\[\#E34329\]\/60 {
2403
+ border-color: rgb(227 67 41 / 0.6);
2404
+ }
2393
2405
  .border-amber-100 {
2394
2406
  --tw-border-opacity: 1;
2395
2407
  border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));
@@ -2766,6 +2778,9 @@ body {
2766
2778
  .bg-\[\#0EA5E9\]\/30 {
2767
2779
  background-color: rgb(14 165 233 / 0.3);
2768
2780
  }
2781
+ .bg-\[\#1A0B09\]\/95 {
2782
+ background-color: rgb(26 11 9 / 0.95);
2783
+ }
2769
2784
  .bg-\[\#E34329\] {
2770
2785
  --tw-bg-opacity: 1;
2771
2786
  background-color: rgb(227 67 41 / var(--tw-bg-opacity, 1));
@@ -2937,6 +2952,9 @@ body {
2937
2952
  .bg-emerald-50\/50 {
2938
2953
  background-color: rgb(236 253 245 / 0.5);
2939
2954
  }
2955
+ .bg-emerald-50\/70 {
2956
+ background-color: rgb(236 253 245 / 0.7);
2957
+ }
2940
2958
  .bg-emerald-50\/80 {
2941
2959
  background-color: rgb(236 253 245 / 0.8);
2942
2960
  }
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as LineSignal, V as VideoGridMetricMode, W as WorkspaceMetrics, a as LineInfo, b as WorkspaceDetailedMetrics, S as SkuBreakdownItem, c as SkuSegmentItem, d as LineSkuBreakdownItem, E as EfficiencyLegendUpdate, D as DashboardKPIs, P as PoorPerformingWorkspace, e as WorkspaceVideoStream, K as KpiTrend, M as MonthlyTrendSummary, f as Workspace, g as WorkspaceCameraIpInfo, h as WorkspaceActionUpdate, A as ActionThreshold, i as ShiftConfiguration, j as KpiSignal, k as LineIssueResolutionSummary } from './automation-ZIumB5W9.mjs';
2
- export { s as CountDelta, C as CurrentWorkspaceSKU, t as DurationDelta, p as KpiSignalMode, o as KpiSignalSource, l as LineDetailedMetrics, n as LineSignalSource, v as LineThreshold, r as PercentageDelta, B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, w as ShiftConfigurationRecord, q as ValueDelta, m as VideoGridStatusBadge, u as WorkspaceCropRect, y as isRecentFlowVideoGridMetricMode, z as isWipGatedVideoGridMetricMode, x as normalizeVideoGridMetricMode } from './automation-ZIumB5W9.mjs';
1
+ import { L as LineSignal, V as VideoGridMetricMode, W as WorkspaceMetrics, a as LineInfo, b as WorkspaceDetailedMetrics, S as SkuBreakdownItem, c as SkuSegmentItem, d as LineSkuBreakdownItem, E as EfficiencyLegendUpdate, D as DashboardKPIs, P as PoorPerformingWorkspace, e as WorkspaceVideoStream, K as KpiTrend, M as MonthlyTrendSummary, f as Workspace, g as WorkspaceCameraIpInfo, h as WorkspaceActionUpdate, A as ActionThreshold, i as ShiftConfiguration, j as KpiSignal, k as LineIssueResolutionSummary } from './automation-B472r1h3.mjs';
2
+ export { s as CountDelta, C as CurrentWorkspaceSKU, t as DurationDelta, p as KpiSignalMode, o as KpiSignalSource, l as LineDetailedMetrics, n as LineSignalSource, v as LineThreshold, r as PercentageDelta, B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, w as ShiftConfigurationRecord, q as ValueDelta, m as VideoGridStatusBadge, u as WorkspaceCropRect, y as isRecentFlowVideoGridMetricMode, z as isWipGatedVideoGridMetricMode, x as normalizeVideoGridMetricMode } from './automation-B472r1h3.mjs';
3
3
  import * as _supabase_supabase_js from '@supabase/supabase-js';
4
4
  import { SupabaseClient as SupabaseClient$1, Session, User, AuthError } from '@supabase/supabase-js';
5
5
  import { LucideProps, Share2, Download } from 'lucide-react';
@@ -8933,13 +8933,17 @@ declare const BottlenecksContent: React__default.FC<BottlenecksContentProps>;
8933
8933
  declare const DEFAULT_WORKSPACE_POSITIONS: WorkspacePosition[];
8934
8934
  declare const WORKSPACE_POSITIONS: WorkspacePosition[];
8935
8935
 
8936
+ type HomeDisplayMode = 'all' | 'red_only' | 'slideshow' | 'worst_workstations';
8937
+
8936
8938
  interface WorkspaceGridProps {
8937
8939
  workspaces: WorkspaceMetrics[];
8938
8940
  blueComparisonWorkspaces?: WorkspaceMetrics[];
8941
+ worstPerformanceWorkspaceIds?: string[];
8939
8942
  isPdfMode?: boolean;
8940
8943
  customWorkspacePositions?: typeof DEFAULT_WORKSPACE_POSITIONS;
8941
8944
  lineNames?: Record<string, string>;
8942
8945
  lineOrder?: string[];
8946
+ activeSlideshowLineId?: string | null;
8943
8947
  factoryView?: string;
8944
8948
  line2Uuid?: string;
8945
8949
  className?: string;
@@ -8956,6 +8960,7 @@ interface WorkspaceGridProps {
8956
8960
  onWorkspaceHover?: (workspaceId: string) => void;
8957
8961
  onWorkspaceHoverEnd?: (workspaceId: string) => void;
8958
8962
  toolbarRightContent?: React__default.ReactNode;
8963
+ displayMode?: HomeDisplayMode;
8959
8964
  }
8960
8965
  declare const WorkspaceGrid: React__default.FC<WorkspaceGridProps>;
8961
8966
 
@@ -9012,9 +9017,11 @@ declare const TargetWorkspaceGrid: React__default.FC<TargetWorkspaceGridProps>;
9012
9017
  interface VideoGridViewProps {
9013
9018
  workspaces: WorkspaceMetrics[];
9014
9019
  blueComparisonWorkspaces?: WorkspaceMetrics[];
9020
+ worstPerformanceWorkspaceIds?: string[];
9015
9021
  selectedLine?: number;
9016
9022
  lineNames?: Record<string, string>;
9017
9023
  lineOrder?: string[];
9024
+ activeSlideshowLineId?: string | null;
9018
9025
  className?: string;
9019
9026
  legend?: EfficiencyLegendUpdate;
9020
9027
  videoSources?: {
@@ -9024,6 +9031,7 @@ interface VideoGridViewProps {
9024
9031
  videoStreamsByWorkspaceId?: Record<string, WorkspaceVideoStream>;
9025
9032
  videoStreamsLoading?: boolean;
9026
9033
  displayNames?: Record<string, string>;
9034
+ displayMode?: HomeDisplayMode;
9027
9035
  onWorkspaceHover?: (workspaceId: string) => void;
9028
9036
  onWorkspaceHoverEnd?: (workspaceId: string) => void;
9029
9037
  }
@@ -9061,6 +9069,7 @@ interface VideoCardProps {
9061
9069
  displayMinuteBucket?: number;
9062
9070
  displayName?: string;
9063
9071
  isBlueBest?: boolean;
9072
+ isWorstPerformance?: boolean;
9064
9073
  lastSeenLabel?: string;
9065
9074
  hasRecentHealthSignal?: boolean;
9066
9075
  onMouseEnter?: () => void;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as LineSignal, V as VideoGridMetricMode, W as WorkspaceMetrics, a as LineInfo, b as WorkspaceDetailedMetrics, S as SkuBreakdownItem, c as SkuSegmentItem, d as LineSkuBreakdownItem, E as EfficiencyLegendUpdate, D as DashboardKPIs, P as PoorPerformingWorkspace, e as WorkspaceVideoStream, K as KpiTrend, M as MonthlyTrendSummary, f as Workspace, g as WorkspaceCameraIpInfo, h as WorkspaceActionUpdate, A as ActionThreshold, i as ShiftConfiguration, j as KpiSignal, k as LineIssueResolutionSummary } from './automation-ZIumB5W9.js';
2
- export { s as CountDelta, C as CurrentWorkspaceSKU, t as DurationDelta, p as KpiSignalMode, o as KpiSignalSource, l as LineDetailedMetrics, n as LineSignalSource, v as LineThreshold, r as PercentageDelta, B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, w as ShiftConfigurationRecord, q as ValueDelta, m as VideoGridStatusBadge, u as WorkspaceCropRect, y as isRecentFlowVideoGridMetricMode, z as isWipGatedVideoGridMetricMode, x as normalizeVideoGridMetricMode } from './automation-ZIumB5W9.js';
1
+ import { L as LineSignal, V as VideoGridMetricMode, W as WorkspaceMetrics, a as LineInfo, b as WorkspaceDetailedMetrics, S as SkuBreakdownItem, c as SkuSegmentItem, d as LineSkuBreakdownItem, E as EfficiencyLegendUpdate, D as DashboardKPIs, P as PoorPerformingWorkspace, e as WorkspaceVideoStream, K as KpiTrend, M as MonthlyTrendSummary, f as Workspace, g as WorkspaceCameraIpInfo, h as WorkspaceActionUpdate, A as ActionThreshold, i as ShiftConfiguration, j as KpiSignal, k as LineIssueResolutionSummary } from './automation-B472r1h3.js';
2
+ export { s as CountDelta, C as CurrentWorkspaceSKU, t as DurationDelta, p as KpiSignalMode, o as KpiSignalSource, l as LineDetailedMetrics, n as LineSignalSource, v as LineThreshold, r as PercentageDelta, B as RecentFlowSnapshotGrid, R as RecentFlowSnapshotGridProps, w as ShiftConfigurationRecord, q as ValueDelta, m as VideoGridStatusBadge, u as WorkspaceCropRect, y as isRecentFlowVideoGridMetricMode, z as isWipGatedVideoGridMetricMode, x as normalizeVideoGridMetricMode } from './automation-B472r1h3.js';
3
3
  import * as _supabase_supabase_js from '@supabase/supabase-js';
4
4
  import { SupabaseClient as SupabaseClient$1, Session, User, AuthError } from '@supabase/supabase-js';
5
5
  import { LucideProps, Share2, Download } from 'lucide-react';
@@ -8933,13 +8933,17 @@ declare const BottlenecksContent: React__default.FC<BottlenecksContentProps>;
8933
8933
  declare const DEFAULT_WORKSPACE_POSITIONS: WorkspacePosition[];
8934
8934
  declare const WORKSPACE_POSITIONS: WorkspacePosition[];
8935
8935
 
8936
+ type HomeDisplayMode = 'all' | 'red_only' | 'slideshow' | 'worst_workstations';
8937
+
8936
8938
  interface WorkspaceGridProps {
8937
8939
  workspaces: WorkspaceMetrics[];
8938
8940
  blueComparisonWorkspaces?: WorkspaceMetrics[];
8941
+ worstPerformanceWorkspaceIds?: string[];
8939
8942
  isPdfMode?: boolean;
8940
8943
  customWorkspacePositions?: typeof DEFAULT_WORKSPACE_POSITIONS;
8941
8944
  lineNames?: Record<string, string>;
8942
8945
  lineOrder?: string[];
8946
+ activeSlideshowLineId?: string | null;
8943
8947
  factoryView?: string;
8944
8948
  line2Uuid?: string;
8945
8949
  className?: string;
@@ -8956,6 +8960,7 @@ interface WorkspaceGridProps {
8956
8960
  onWorkspaceHover?: (workspaceId: string) => void;
8957
8961
  onWorkspaceHoverEnd?: (workspaceId: string) => void;
8958
8962
  toolbarRightContent?: React__default.ReactNode;
8963
+ displayMode?: HomeDisplayMode;
8959
8964
  }
8960
8965
  declare const WorkspaceGrid: React__default.FC<WorkspaceGridProps>;
8961
8966
 
@@ -9012,9 +9017,11 @@ declare const TargetWorkspaceGrid: React__default.FC<TargetWorkspaceGridProps>;
9012
9017
  interface VideoGridViewProps {
9013
9018
  workspaces: WorkspaceMetrics[];
9014
9019
  blueComparisonWorkspaces?: WorkspaceMetrics[];
9020
+ worstPerformanceWorkspaceIds?: string[];
9015
9021
  selectedLine?: number;
9016
9022
  lineNames?: Record<string, string>;
9017
9023
  lineOrder?: string[];
9024
+ activeSlideshowLineId?: string | null;
9018
9025
  className?: string;
9019
9026
  legend?: EfficiencyLegendUpdate;
9020
9027
  videoSources?: {
@@ -9024,6 +9031,7 @@ interface VideoGridViewProps {
9024
9031
  videoStreamsByWorkspaceId?: Record<string, WorkspaceVideoStream>;
9025
9032
  videoStreamsLoading?: boolean;
9026
9033
  displayNames?: Record<string, string>;
9034
+ displayMode?: HomeDisplayMode;
9027
9035
  onWorkspaceHover?: (workspaceId: string) => void;
9028
9036
  onWorkspaceHoverEnd?: (workspaceId: string) => void;
9029
9037
  }
@@ -9061,6 +9069,7 @@ interface VideoCardProps {
9061
9069
  displayMinuteBucket?: number;
9062
9070
  displayName?: string;
9063
9071
  isBlueBest?: boolean;
9072
+ isWorstPerformance?: boolean;
9064
9073
  lastSeenLabel?: string;
9065
9074
  hasRecentHealthSignal?: boolean;
9066
9075
  onMouseEnter?: () => void;