From e33e63696affe22f7558aa834c6cb42a26bb1cb0 Mon Sep 17 00:00:00 2001 From: maziggy Date: Mon, 13 Apr 2026 14:25:54 +0200 Subject: [PATCH] Hide SD card and door badges from printer card if printer is offline --- frontend/src/pages/PrintersPage.tsx | 4 ++-- static/assets/{index-BFeV6ocI.js => index-BopeIWC_.js} | 2 +- static/index.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename static/assets/{index-BFeV6ocI.js => index-BopeIWC_.js} (99%) diff --git a/frontend/src/pages/PrintersPage.tsx b/frontend/src/pages/PrintersPage.tsx index 42c314211..fa18d7eff 100644 --- a/frontend/src/pages/PrintersPage.tsx +++ b/frontend/src/pages/PrintersPage.tsx @@ -2462,7 +2462,7 @@ function PrinterCard({ ) : null} {/* SD Card Badge */} - {status && ( + {status?.connected && ( i&&f(H.target.value),onKeyDown:H=>H.key==="Enter"&&k(),onFocus:()=>N(!0),onBlur:()=>{N(!1),A.current&&clearTimeout(A.current),A.current=setTimeout(()=>d(!1),200)},placeholder:i?l("printers.amsPopup.friendlyNamePlaceholder"):r?.[t.id]||"—",disabled:!i,title:i?void 0:l("printers.amsPopup.noEditPermission"),className:"w-full bg-bambu-dark border border-bambu-dark-tertiary rounded px-2 py-1 text-xs text-white placeholder-bambu-gray/60 focus:outline-none focus:border-bambu-green disabled:opacity-50 disabled:cursor-not-allowed",maxLength:100}),i&&a.jsxs("div",{className:"space-y-1",children:[g&&a.jsx("p",{className:"text-[10px] text-red-400 break-words",children:g}),a.jsxs("div",{className:"flex gap-1 justify-end",children:[a.jsx("button",{onClick:k,disabled:x,className:"px-2 py-0.5 text-[10px] bg-bambu-green text-white rounded hover:bg-bambu-green/80 disabled:opacity-50",children:l("printers.amsPopup.save")}),r?.[t.id]&&a.jsx("button",{onClick:D,disabled:x,className:"px-2 py-0.5 text-[10px] bg-bambu-dark-tertiary text-bambu-gray rounded hover:bg-bambu-dark-tertiary/70 disabled:opacity-50",children:l("printers.amsPopup.clear")})]})]})]})]})})]})}const oL={PLA:{n3f:45,n3s:45,n3f_hours:12,n3s_hours:12},PETG:{n3f:65,n3s:65,n3f_hours:12,n3s_hours:12},TPU:{n3f:65,n3s:75,n3f_hours:12,n3s_hours:18},ABS:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},ASA:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},PA:{n3f:65,n3s:85,n3f_hours:12,n3s_hours:12},PC:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},PVA:{n3f:65,n3s:85,n3f_hours:12,n3s_hours:18}};function nK({printer:t,hideIfDisconnected:e,maintenanceInfo:n,viewMode:r="expanded",cardSize:i=2,amsThresholds:s,spoolmanEnabled:o=!1,linkedSpools:l,spoolmanUrl:c,spoolmanSyncMode:d,onGetAssignment:u,onUnassignSpool:m,timeFormat:p="system",cameraViewMode:f="window",onOpenEmbeddedCamera:x,checkPrinterFirmware:v=!0,dryingPresets:g=oL,requirePlateClear:b=!0,selectionMode:_=!1,isSelected:N=!1,onToggleSelect:T}){const{t:C}=Rt(),A=sn(),P=Eo(),{showToast:F}=xn(),{hasPermission:k}=vr(),[D,H]=w.useState(!1),[z,X]=w.useState(!1),[L,ne]=w.useState(!0),[ie,ee]=w.useState(!1),[ue,le]=w.useState(!1),[oe,W]=w.useState(!1),[re,ce]=w.useState(!1),[xe,Ne]=w.useState(!1),[$,Y]=w.useState(!1),[E,j]=w.useState(!1),[O,K]=w.useState(!1),[B,he]=w.useState(null),[I,V]=w.useState(null),[Q,G]=w.useState(!1),[J,se]=w.useState(!1),[fe,pe]=w.useState(!1),[de,U]=w.useState(!1),R=w.useCallback(()=>U(!1),[]),[ae,_e]=w.useState(null),[Se,ye]=w.useState(null),[Ae,ve]=w.useState("n3f"),[je,Re]=w.useState("PLA"),[Ee,Te]=w.useState(50),[Me,Be]=w.useState(4),[Ke,tt]=w.useState(!1),[te,Ie]=w.useState(null),[be,$e]=w.useState(!1),[He,ge]=w.useState(!1),Pe=w.useRef(0),[qe,Ze]=w.useState(null),[dt,vt]=w.useState(null),[wt,$t]=w.useState(null),[Qt,en]=w.useState(null),[Xt,tn]=w.useState(!1),[Ge,Ft]=w.useState(null),[Yt,Pt]=w.useState(!1),[pt,Wt]=w.useState(!1),[Ut,ze]=w.useState(null),[st,ht]=w.useState(!1),[rt,Le]=w.useState(!1),{data:Oe}=Qe({queryKey:["printerStatus",t.id],queryFn:()=>me.getPrinterStatus(t.id),refetchInterval:3e4}),{data:Ce}=Qe({queryKey:["firmwareUpdate",t.id],queryFn:()=>Sk.checkPrinterUpdate(t.id),staleTime:300*1e3,refetchInterval:300*1e3,enabled:v&&k("firmware:read")}),We=w.useMemo(()=>{const mt=new Set;if(Oe?.ams)for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])Jt.tray_info_idx&&mt.add(Jt.tray_info_idx);for(const Ht of Oe?.vt_tray??[])Ht.tray_info_idx&&mt.add(Ht.tray_info_idx);if(Oe?.nozzle_rack)for(const Ht of Oe.nozzle_rack)Ht.filament_id&&mt.add(Ht.filament_id);return Array.from(mt)},[Oe?.ams,Oe?.vt_tray,Oe?.nozzle_rack]),Je=w.useMemo(()=>{const mt=new Set;if(Oe?.ams)for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])Jt.tray_type&&mt.add(Jt.tray_type.toUpperCase());for(const Ht of Oe?.vt_tray??[])Ht.tray_type&&mt.add(Ht.tray_type.toUpperCase());return mt},[Oe?.ams,Oe?.vt_tray]),Xe=w.useMemo(()=>{const mt=new Set;if(Oe?.ams){for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])if(Jt.tray_type&&Jt.tray_color){const ot=Jt.tray_color.replace("#","").toLowerCase().slice(0,6);mt.add(`${Jt.tray_type.toUpperCase()}:${ot}`)}}for(const Ht of Oe?.vt_tray??[])if(Ht.tray_type&&Ht.tray_color){const Jt=Ht.tray_color.replace("#","").toLowerCase().slice(0,6);mt.add(`${Ht.tray_type.toUpperCase()}:${Jt}`)}return mt},[Oe?.ams,Oe?.vt_tray]),{data:Ye}=Qe({queryKey:["filamentInfo",We],queryFn:()=>me.getFilamentInfo(We),enabled:We.length>0,staleTime:300*1e3}),{data:St}=Qe({queryKey:["slotPresets",t.id],queryFn:()=>me.getSlotPresets(t.id),staleTime:120*1e3}),{data:et,refetch:jt}=Qe({queryKey:["amsLabels",t.id],queryFn:()=>me.getAmsLabels(t.id),staleTime:300*1e3}),[bt,Ve]=w.useState(null);w.useEffect(()=>{Oe?.wifi_signal!=null&&Ve(Oe.wifi_signal)},[Oe?.wifi_signal]);const gt=Oe?.wifi_signal??bt,Et=w.useRef(void 0);w.useEffect(()=>{Oe?.connected!==void 0&&(Et.current=Oe.connected)},[Oe?.connected]);const Gt=Oe?.connected??Et.current,on=w.useRef({});w.useEffect(()=>{Oe?.ams_extruder_map&&Object.keys(Oe.ams_extruder_map).length>0&&(on.current=Oe.ams_extruder_map)},[Oe?.ams_extruder_map]);const fn=Oe?.ams_extruder_map&&Object.keys(Oe.ams_extruder_map).length>0?Oe.ams_extruder_map:on.current,Rn=w.useRef([]);w.useEffect(()=>{Oe?.ams&&Oe.ams.length>0&&(Rn.current=Oe.ams)},[Oe?.ams]);const yn=Oe?.ams&&Oe.ams.length>0?Oe.ams:Rn.current,hn=w.useRef(void 0),bn=Oe?.tray_now;bn!==void 0&&bn!==255?hn.current=bn:bn===255&&(hn.current=void 0);const Nn=bn!==void 0&&bn!==255?bn:hn.current,{data:Pn}=Qe({queryKey:["smartPlugByPrinter",t.id],queryFn:()=>me.getSmartPlugByPrinter(t.id)}),{data:kr}=Qe({queryKey:["scriptPlugsByPrinter",t.id],queryFn:()=>me.getScriptPlugsByPrinter(t.id)}),{data:Sn}=Qe({queryKey:["smartPlugStatus",Pn?.id],queryFn:()=>Pn?me.getSmartPlugStatus(Pn.id):null,enabled:!!Pn,refetchInterval:1e4}),{data:Ca}=Qe({queryKey:["queue",t.id,"pending"],queryFn:()=>me.getQueue(t.id,"pending")}),Ln=w.useMemo(()=>Ca?.length?SJ(Ca,Je,Xe).length:0,[Ca,Je,Xe]),{data:xa}=Qe({queryKey:["queue",t.id,"printing"],queryFn:()=>me.getQueue(t.id,"printing"),enabled:Oe?.state==="RUNNING"}),{data:ca}=Qe({queryKey:["currentPrintUser",t.id],queryFn:()=>me.getCurrentPrintUser(t.id),enabled:Oe?.state==="RUNNING"}),Yr=xa?.[0]?.created_by_username||ca?.username,{data:ia}=Qe({queryKey:["archives",t.id,"last"],queryFn:()=>me.getArchives(t.id,1,0),enabled:Oe?.connected&&Oe?.state!=="RUNNING"}),Pa=ia?.[0],Gi=e&&Gt===!1,Sm=it({mutationFn:mt=>me.deletePrinter(t.id,mt.deleteArchives),onSuccess:()=>{A.invalidateQueries({queryKey:["printers"]}),A.invalidateQueries({queryKey:["archives"]}),A.invalidateQueries({queryKey:["maintenanceOverview"]})},onError:mt=>F(mt.message||C("printers.toast.failedToDelete"),"error")}),qd=it({mutationFn:()=>me.connectPrinter(t.id),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]})}}),pl=it({mutationFn:()=>me.refreshPrinterStatus(t.id),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]}),F(C("printers.forceRefreshSuccess"),"success")},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),xt=it({mutationFn:mt=>me.unlinkSpool(mt),onSuccess:mt=>{F(C("spoolman.unlinkSuccess")||mt?.message,"success"),A.invalidateQueries({queryKey:["linked-spools"]}),A.invalidateQueries({queryKey:["unlinked-spools"]})},onError:mt=>{F(mt.message||C("spoolman.unlinkFailed"),"error")}}),Wn=it({mutationFn:({amsId:mt,temp:Ht,duration:Jt,filament:ot,rotateTray:zn})=>me.startDrying(t.id,mt,Ht,Jt,ot,zn),onSuccess:()=>{ye(null),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),Qn=it({mutationFn:mt=>me.stopDrying(t.id,mt),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),qt=it({mutationFn:mt=>Pn?me.controlSmartPlug(Pn.id,mt):Promise.reject("No plug"),onSuccess:()=>{A.invalidateQueries({queryKey:["smartPlugStatus",Pn?.id]})}}),Wc=it({mutationFn:mt=>Pn?me.updateSmartPlug(Pn.id,{auto_off:mt}):Promise.reject("No plug"),onSuccess:()=>{A.invalidateQueries({queryKey:["smartPlugByPrinter",t.id]}),A.invalidateQueries({queryKey:["smart-plugs"]})}}),Wi=it({mutationFn:({id:mt,action:Ht})=>me.controlSmartPlug(mt,Ht),onSuccess:()=>{F(C("printers.toast.scriptTriggered"))},onError:mt=>F(mt.message||C("printers.toast.failedToRunScript"),"error")}),fl=it({mutationFn:()=>me.stopPrint(t.id),onSuccess:()=>{F(C("printers.toast.printStopped")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToStopPrint"),"error")}),pc=it({mutationFn:()=>me.pausePrint(t.id),onSuccess:()=>{F(C("printers.toast.printPaused")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToPausePrint"),"error")}),Ya=it({mutationFn:()=>me.resumePrint(t.id),onSuccess:()=>{F(C("printers.toast.printResumed")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToResumePrint"),"error")}),_m=it({mutationFn:mt=>me.setChamberLight(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,chamber_light:mt})),{previousStatus:Ht}},onSuccess:(mt,Ht)=>{F(`Chamber light ${Ht?"on":"off"}`)},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToControlChamberLight"),"error")}}),Np=it({mutationFn:mt=>me.setPrintSpeed(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,speed_level:mt})),{previousStatus:Ht}},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToSetSpeed"),"error")}}),$d=it({mutationFn:mt=>me.setAirductMode(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,airduct_mode:mt==="cooling"?0:1})),{previousStatus:Ht}},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToSendCommand"),"error")}}),Ki=it({mutationFn:mt=>me.updatePrinter(t.id,{plate_detection_enabled:mt}),onSuccess:()=>{A.invalidateQueries({queryKey:["printers"]}),F(Ki.variables?C("printers.toast.plateCheckEnabled"):C("printers.toast.plateCheckDisabled"))},onError:mt=>F(mt.message||C("printers.toast.failedToUpdateSetting"),"error")}),km=(Oe?.state==="RUNNING"||Oe?.state==="PAUSE")&&(Oe?.printable_objects_count??0)>=2,{data:ys}=Qe({queryKey:["printableObjects",t.id],queryFn:()=>me.getPrintableObjects(t.id),enabled:J||km,refetchInterval:J?5e3:km?3e4:!1}),[Xi,Is]=w.useState(null),gl=w.useRef(!1),Qa=w.useRef(null),bl=w.useRef(!1),Vd=it({mutationFn:({amsId:mt,slotId:Ht})=>me.refreshAmsSlot(t.id,mt,Ht),onMutate:({amsId:mt,slotId:Ht})=>{Qa.current&&clearTimeout(Qa.current),gl.current=!1,bl.current=!1,Is({amsId:mt,slotId:Ht}),setTimeout(()=>{bl.current=!0},2e3),Qa.current=setTimeout(()=>{Is(null)},3e4)},onSuccess:mt=>{F(mt.message||C("printers.toast.rfidRereadInitiated"))},onError:mt=>{F(mt.message||C("printers.toast.failedToRereadRfid"),"error"),Qa.current&&clearTimeout(Qa.current),Is(null)}}),[xl,bi]=w.useState(null),[zs,fc]=w.useState(null),Lo=async()=>{try{const mt=await me.getPlateReferences(t.id);bi(mt)}catch{}},Cp=()=>{Ki.mutate(!t.plate_detection_enabled)},yl=async()=>{Pt(!0),Ft(null);const mt=Oe?.chamber_light===!1;Le(mt),mt&&(await me.setChamberLight(t.id,!0),await new Promise(Ht=>setTimeout(Ht,2500)));try{const Ht=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Ht),Lo()}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.failedToCheckPlate"),"error"),mt&&(await me.setChamberLight(t.id,!1),Le(!1))}finally{Pt(!1)}},lo=w.useCallback(async()=>{Ft(null),rt&&(await me.setChamberLight(t.id,!1),Le(!1))},[rt,t.id]),vl=async mt=>{Wt(!0);try{const Ht=await me.calibratePlateDetection(t.id,{label:mt});if(Ht.success){F(Ht.message||C("printers.toast.calibrationSaved"),"success"),Lo();const Jt=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Jt)}else F(Ht.message||C("printers.toast.calibrationFailed"),"error")}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.calibrationFailed"),"error")}finally{Wt(!1)}},Oo=async(mt,Ht)=>{try{await me.updatePlateReferenceLabel(t.id,mt,Ht),fc(null),Lo()}catch(Jt){F(Jt instanceof Error?Jt.message:C("printers.toast.failedToUpdateLabel"),"error")}},Kc=async mt=>{try{await me.deletePlateReference(t.id,mt),F(C("printers.toast.referenceDeleted"),"success"),Lo();const Ht=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Ht)}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.failedToDeleteReference"),"error")}},Nm=async()=>{if(Ut){ht(!0);try{await me.updatePrinter(t.id,{plate_detection_roi:Ut}),F(C("printers.toast.detectionAreaSaved"),"success"),ze(null);const mt=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(mt)}catch(mt){F(mt instanceof Error?mt.message:C("printers.toast.failedToSaveDetectionArea"),"error")}finally{ht(!1)}}};w.useEffect(()=>{const mt=Ht=>{Ht.key==="Escape"&&Ge&&lo()};return window.addEventListener("keydown",mt),()=>window.removeEventListener("keydown",mt)},[Ge,lo]);const co=w.useRef(null);w.useEffect(()=>{if(!Xi)return;const mt=Oe?.ams_status_main??0;return mt!==0&&(gl.current=!0,co.current&&(clearTimeout(co.current),co.current=null)),gl.current&&mt===0&&(bl.current?(Qa.current&&clearTimeout(Qa.current),Is(null)):co.current||(co.current=setTimeout(()=>{Qa.current&&clearTimeout(Qa.current),Is(null)},2e3))),()=>{co.current&&clearTimeout(co.current)}},[Oe?.ams_status_main,Xi]);const[uo,Io]=w.useState(null);if(Gi)return null;const Pg=()=>{switch(i){case 1:return"w-10 h-10";case 2:return"w-14 h-14";case 3:return"w-16 h-16";case 4:return"w-20 h-20";default:return"w-14 h-14"}},_n=()=>{switch(i){case 1:return"text-base truncate";case 2:return"text-lg";case 3:return"text-xl";case 4:return"text-2xl";default:return"text-lg"}},Ty=()=>{switch(i){case 1:return"mb-2";case 2:return"mb-4";case 3:return"mb-5";case 4:return"mb-6";default:return"mb-4"}},Xc=Gt&&Oe?.state!=="RUNNING"&&Oe?.state!=="PAUSE"&&k("printers:control"),Tg=mt=>{mt.preventDefault(),Pe.current++,Pe.current===1&&$e(!0)},Cm=mt=>{mt.preventDefault(),mt.dataTransfer.dropEffect=Xc?"copy":"none"},Ag=mt=>{mt.preventDefault(),Pe.current--,Pe.current===0&&$e(!1)},Ay=async mt=>{if(mt.preventDefault(),Pe.current=0,$e(!1),!Xc)return;const Jt=Array.from(mt.dataTransfer.files)[0];if(!Jt)return;const ot=Jt.name.toLowerCase();if(!ot.endsWith(".gcode")&&!ot.includes(".gcode.")){F(C("printers.dropNotPrintable","Only .gcode and .gcode.3mf files can be printed"),"error");return}ge(!0);try{const zn=await me.uploadLibraryFile(Jt,null),we=zn.metadata?.sliced_for_model,_t=x0(t.model);if(we&&_t&&we.toLowerCase()!==_t.toLowerCase()){await me.deleteLibraryFile(zn.id).catch(()=>{}),F(C("printers.incompatibleFile","This file was sliced for {{slicedFor}}, but this printer is a {{printerModel}}",{slicedFor:we,printerModel:_t}),"error");return}_e({id:zn.id,filename:zn.filename})}catch{F(C("common.uploadFailed","Upload failed"),"error")}finally{ge(!1)}};return a.jsxs(At,{className:`relative ${N?"ring-2 ring-bambu-green":""} ${_?"cursor-pointer":""}`,onDragEnter:Tg,onDragOver:Cm,onDragLeave:Ag,onDrop:Ay,children:[_&&a.jsx("div",{className:"absolute inset-0 z-20 flex items-start p-2",onClick:mt=>{mt.stopPropagation(),T?.(t.id)},children:N?a.jsx(bs,{className:"w-5 h-5 text-bambu-green"}):a.jsx(eo,{className:"w-5 h-5 text-bambu-gray"})}),(be||He)&&a.jsx("div",{className:`absolute inset-0 z-10 rounded-xl border-2 border-dashed flex items-center justify-center transition-colors ${He?"bg-bambu-green/10 border-bambu-green/50":Xc?"bg-bambu-green/10 border-bambu-green":"bg-red-500/10 border-red-500/50"}`,children:a.jsx("div",{className:"text-center",children:He?a.jsxs(a.Fragment,{children:[a.jsx(ut,{className:"w-8 h-8 mx-auto mb-2 text-bambu-green animate-spin"}),a.jsx("p",{className:"text-sm font-medium text-bambu-green",children:C("common.uploading","Uploading...")})]}):Xc?a.jsxs(a.Fragment,{children:[a.jsx(Tr,{className:"w-8 h-8 mx-auto mb-2 text-bambu-green"}),a.jsx("p",{className:"text-sm font-medium text-bambu-green",children:C("printers.dropToPrint","Drop to print")})]}):a.jsxs(a.Fragment,{children:[a.jsx(Bt,{className:"w-8 h-8 mx-auto mb-2 text-red-400"}),a.jsx("p",{className:"text-sm font-medium text-red-400",children:C("printers.cannotPrint","Printer busy")})]})})}),a.jsxs(Mt,{className:i>=3?"p-5":"",children:[a.jsxs("div",{className:Ty(),children:[a.jsxs("div",{className:"flex items-start justify-between gap-2",children:[a.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[a.jsx("img",{src:vJ(t.model),alt:t.model||C("common.printer"),className:`object-contain rounded-lg bg-bambu-dark flex-shrink-0 ${Pg()}`}),a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("h3",{className:`font-semibold text-white ${_n()}`,children:t.name}),r==="compact"&&(()=>{const mt=Oe?.connected&&Oe.hms_errors?Iu(Oe.hms_errors):[],Ht=mt.some(we=>we.severity<=2),Jt=mt.length>0,ot=Oe?.connected?Ht?"bg-status-error":Jt?"bg-status-warning":"bg-status-ok":"bg-status-error",zn=Oe?.connected?Jt?`${mt.length} HMS ${mt.length===1?"error":"errors"}`:C("printers.connection.connected"):C("printers.connection.offline");return a.jsx("div",{className:`w-2 h-2 rounded-full flex-shrink-0 ${ot}`,title:zn})})()]}),a.jsxs("p",{className:"text-sm text-bambu-gray",children:[t.model||"Unknown Model",r==="expanded"&&Oe?.nozzles&&Oe.nozzles[0]?.nozzle_diameter&&a.jsxs("span",{className:"ml-1.5 text-bambu-gray",title:Oe.nozzles[0].nozzle_type||"Nozzle",children:["• ",Oe.nozzles[0].nozzle_diameter,"mm"]}),r==="expanded"&&n&&n.total_print_hours>0&&a.jsxs("span",{className:"ml-2 text-bambu-gray",children:[a.jsx(Yn,{className:"w-3 h-3 inline-block mr-1"}),Math.round(n.total_print_hours),"h"]})]})]})]}),a.jsxs("div",{className:"relative flex-shrink-0",children:[a.jsx(Fe,{variant:"ghost",size:"sm",onClick:()=>H(!D),children:a.jsx(Uh,{className:"w-4 h-4"})}),D&&a.jsxs("div",{className:"absolute right-0 mt-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-20",children:[a.jsxs("button",{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${k("printers:update")?"hover:bg-bambu-dark-tertiary":"opacity-50 cursor-not-allowed"}`,onClick:()=>{k("printers:update")&&(ee(!0),H(!1))},title:k("printers:update")?void 0:C("printers.permission.noEdit"),children:[a.jsx(ri,{className:"w-4 h-4"}),C("common.edit")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{U(!0),H(!1)},children:[a.jsx(ps,{className:"w-4 h-4"}),C("printers.printerInformation")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{qd.mutate(),H(!1)},children:[a.jsx(dr,{className:"w-4 h-4"}),C("printers.reconnect")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2 disabled:opacity-50",disabled:pl.isPending,onClick:()=>{pl.mutate(),H(!1)},children:[a.jsx(cN,{className:`w-4 h-4 ${pl.isPending?"animate-spin":""}`}),C("printers.forceRefresh")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{W(!0),H(!1)},children:[a.jsx(OQ,{className:"w-4 h-4"}),C("printers.mqttDebug")]}),a.jsxs("button",{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${k("printers:delete")?"text-red-400 hover:bg-bambu-dark-tertiary":"text-red-400/50 cursor-not-allowed"}`,onClick:()=>{k("printers:delete")&&(X(!0),H(!1))},title:k("printers:delete")?void 0:C("printers.permission.noDelete"),children:[a.jsx(rn,{className:"w-4 h-4"}),C("common.delete")]})]})]})]}),r==="expanded"&&a.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[a.jsxs("span",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${Oe?.connected?"bg-status-ok/20 text-status-ok":"bg-status-error/20 text-status-error"}`,children:[Oe?.connected?a.jsx(oy,{className:"w-3 h-3"}):a.jsx(rp,{className:"w-3 h-3"}),Oe?.connected?C("printers.connection.connected"):C("printers.connection.offline")]}),Oe?.connected&&Oe?.wired_network&&a.jsxs("span",{className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-status-ok/20 text-status-ok",title:C("printers.connection.ethernet","Ethernet"),children:[a.jsx(fO,{className:"w-3 h-3"}),C("printers.connection.ethernet","Ethernet")]}),Oe?.connected&&!Oe?.wired_network&>!=null&&a.jsxs("span",{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${gt>=-50||gt>=-60?"bg-status-ok/20 text-status-ok":gt>=-70?"bg-status-warning/20 text-status-warning":gt>=-80?"bg-orange-500/20 text-orange-600":"bg-status-error/20 text-status-error"}`,title:`WiFi: ${gt} dBm - ${C(wJ(gt).labelKey)}`,children:[a.jsx(FQ,{className:"w-3 h-3"}),gt,"dBm"]}),Oe?.connected&&(()=>{const mt=Oe.hms_errors?Iu(Oe.hms_errors):[];return a.jsxs("button",{onClick:()=>Y(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${mt.length>0?mt.some(Ht=>Ht.severity<=2)?"bg-status-error/20 text-status-error":"bg-status-warning/20 text-status-warning":"bg-status-ok/20 text-status-ok"}`,title:C("printers.clickToViewHmsErrors"),children:[a.jsx(Fn,{className:"w-3 h-3"}),mt.length>0?mt.length:"OK"]})})(),n&&a.jsxs("button",{onClick:()=>P("/maintenance"),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${n.due_count>0?"bg-status-error/20 text-status-error":n.warning_count>0?"bg-status-warning/20 text-status-warning":"bg-status-ok/20 text-status-ok"}`,title:n.due_count>0||n.warning_count>0?`${n.due_count>0?`${n.due_count} maintenance due`:""}${n.due_count>0&&n.warning_count>0?", ":""}${n.warning_count>0?`${n.warning_count} due soon`:""} - Click to view`:C("printers.maintenanceUpToDate"),children:[a.jsx(Xf,{className:"w-3 h-3"}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:"OK"]}),Ln>0&&a.jsxs("button",{onClick:()=>P("/queue"),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-purple-500/20 text-purple-400 hover:opacity-80 transition-opacity",title:C("printers.queue.inQueue",{count:Ln}),children:[a.jsx(na,{className:"w-3 h-3"}),Ln]}),v&&Ce?.current_version&&Ce?.latest_version?a.jsxs("button",{onClick:()=>tn(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs hover:opacity-80 transition-opacity ${Ce.update_available?"bg-orange-500/20 text-orange-400":"bg-status-ok/20 text-status-ok"}`,title:Ce.update_available?C("printers.firmwareUpdateAvailable",{current:Ce.current_version,latest:Ce.latest_version}):C("printers.firmwareUpToDate",{version:Ce.current_version}),children:[Ce.update_available?a.jsx(ba,{className:"w-3 h-3"}):a.jsx(br,{className:"w-3 h-3"}),Ce.current_version]}):Oe?.firmware_version?a.jsx("span",{className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-bambu-dark-tertiary/50 text-bambu-gray",children:Oe.firmware_version}):null,Oe&&a.jsx("span",{className:`flex items-center px-2 py-1 rounded-full text-xs ${Oe.sdcard?"bg-status-ok/20 text-status-ok":"bg-red-500/20 text-red-400"}`,title:`${C("printers.sdCard")}: ${Oe.sdcard?C("printers.inserted"):C("printers.notInserted")}`,children:a.jsx(np,{className:"w-3 h-3"})}),Oe&&["X1C","X1","X1E","P1S","P1P","P2S","H2D","H2D Pro","H2C","H2S"].includes(t.model??"")&&a.jsx("span",{className:`flex items-center px-2 py-1 rounded-full text-xs ${Oe.door_open?"bg-yellow-500/20 text-yellow-400":"bg-status-ok/20 text-status-ok"}`,title:Oe.door_open?C("printers.door.open"):C("printers.door.closed"),children:Oe.door_open?a.jsx(Lfe,{className:"w-3 h-3"}):a.jsx(Ffe,{className:"w-3 h-3"})})]})]}),z&&a.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:a.jsx(At,{className:"w-full max-w-md mx-4",children:a.jsxs(Mt,{children:[a.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[a.jsx("div",{className:"p-2 rounded-full bg-red-500/20",children:a.jsx(Fn,{className:"w-5 h-5 text-red-400"})}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-lg font-semibold text-white",children:C("printers.confirm.deleteTitle")}),a.jsx("p",{className:"text-sm text-bambu-gray mt-1",children:C("printers.confirm.deleteMessage",{name:t.name})})]})]}),a.jsx("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:a.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",children:[a.jsx("input",{type:"checkbox",checked:L,onChange:mt=>ne(mt.target.checked),className:"mt-0.5 w-4 h-4 rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0"}),a.jsxs("div",{children:[a.jsx("span",{className:"text-sm text-white",children:C("printers.deleteArchives")}),a.jsx("p",{className:"text-xs text-bambu-gray mt-0.5",children:C(L?"printers.confirm.deleteArchivesNote":"printers.confirm.keepArchivesNote")})]})]})}),a.jsxs("div",{className:"flex justify-end gap-2",children:[a.jsx(Fe,{variant:"secondary",onClick:()=>{X(!1),ne(!0)},children:C("common.cancel")}),a.jsx(Fe,{variant:"danger",onClick:()=>{Sm.mutate({deleteArchives:L}),X(!1),ne(!0)},children:"Delete"})]})]})})}),Oe?.connected&&a.jsxs(a.Fragment,{children:[r==="compact"?a.jsx("div",{className:"mt-2",children:Oe.state==="RUNNING"||Oe.state==="PAUSE"?a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-1.5",children:a.jsx("div",{className:`${Oe.state==="PAUSE"?"bg-status-warning":"bg-bambu-green"} h-1.5 rounded-full transition-all`,style:{width:`${Oe.progress||0}%`}})}),a.jsxs("span",{className:"text-xs text-white",children:[Math.round(Oe.progress||0),"%"]})]}):a.jsx("p",{className:"text-xs text-bambu-gray",children:ND(Oe.state,Oe.stg_cur_name)})}):a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"mb-4 p-3 bg-bambu-dark rounded-lg relative",children:[a.jsxs("button",{onClick:()=>se(!0),disabled:!(Oe.state==="RUNNING"||Oe.state==="PAUSE")||(Oe.printable_objects_count??0)<2||!k("printers:control"),className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${(Oe.state==="RUNNING"||Oe.state==="PAUSE")&&(Oe.printable_objects_count??0)>=2&&k("printers:control")?"text-bambu-gray hover:text-white hover:bg-white/10":"text-bambu-gray/30 cursor-not-allowed"}`,title:k("printers:control")?Oe.state==="RUNNING"||Oe.state==="PAUSE"?(Oe.printable_objects_count??0)>=2?C("printers.skipObjects.tooltip"):C("printers.skipObjects.requiresMultiple"):C("printers.skipObjects.onlyWhilePrinting"):C("printers.permission.noControl"),children:[a.jsx($P,{className:"w-4 h-4"}),ys&&ys.skipped_count>0&&a.jsx("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-bold bg-red-500 text-white rounded-full",children:ys.skipped_count})]}),a.jsxs("div",{className:"flex gap-3",children:[a.jsx(N7e,{url:Oe.state==="RUNNING"||Oe.state==="PAUSE"?Oe.cover_url:null,printName:(Oe.state==="RUNNING"||Oe.state==="PAUSE")&&YW(Oe.subtask_name||Oe.current_print||null,Oe.gcode_file,C)||void 0}),a.jsx("div",{className:"flex-1 min-w-0",children:Oe.current_print&&(Oe.state==="RUNNING"||Oe.state==="PAUSE")?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:ND(Oe.state,Oe.stg_cur_name)}),a.jsx("p",{className:"text-white text-sm mb-2 truncate",children:YW(Oe.subtask_name||Oe.current_print||null,Oe.gcode_file,C)}),a.jsxs("div",{className:"flex items-center justify-between text-sm",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:a.jsx("div",{className:`${Oe.state==="PAUSE"?"bg-status-warning":"bg-bambu-green"} h-2 rounded-full transition-all`,style:{width:`${Oe.progress||0}%`}})}),a.jsxs("span",{className:"text-white",children:[Math.round(Oe.progress||0),"%"]})]}),a.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-bambu-gray",children:[Oe.remaining_time!=null&&Oe.remaining_time>0&&a.jsxs(a.Fragment,{children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(Yn,{className:"w-3 h-3"}),hs(Oe.remaining_time*60)]}),a.jsxs("span",{className:"text-bambu-green font-medium",title:C("printers.estimatedCompletion"),children:["ETA ",TO(Oe.remaining_time,p,C)]})]}),Oe.layer_num!=null&&Oe.total_layers!=null&&Oe.total_layers>0&&a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(na,{className:"w-3 h-3"}),Oe.layer_num,"/",Oe.total_layers]}),Yr&&a.jsxs("span",{className:"flex items-center gap-1",title:`Started by ${Yr}`,children:[a.jsx(am,{className:"w-3 h-3"}),Yr]})]})]}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:C("printers.sort.status")}),a.jsx("p",{className:"text-white text-sm mb-2",children:ND(Oe.state,Oe.stg_cur_name)}),a.jsxs("div",{className:"flex items-center justify-between text-sm",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:a.jsx("div",{className:"bg-bambu-dark-tertiary h-2 rounded-full"})}),a.jsx("span",{className:"text-bambu-gray",children:"—"})]}),Pa?a.jsxs("p",{className:"text-xs text-bambu-gray mt-2 truncate",title:Pa.print_name||Pa.filename,children:["Last: ",Pa.print_name||Pa.filename,Pa.completed_at&&a.jsxs("span",{className:"ml-1 text-bambu-gray/60",children:["• ",Yf(Pa.completed_at,{month:"short",day:"numeric"})]})]}):a.jsx("p",{className:"text-xs text-bambu-gray mt-2",children:C("printers.readyToPrint")})]})})]})]}),a.jsx(UMe,{printerId:t.id,printerModel:t.model,printerState:Oe.state,awaitingPlateClear:Oe.awaiting_plate_clear,requirePlateClear:b,loadedFilamentTypes:Je,loadedFilaments:Xe})]}),Oe.temperatures&&r==="expanded"&&(()=>{const mt=Oe.temperatures.nozzle_heating||Oe.temperatures.nozzle_2_heating||!1,Ht=Oe.temperatures.bed_heating||!1,Jt=Oe.temperatures.chamber_heating||!1,ot=t.nozzle_count===2||Oe.temperatures.nozzle_2!==void 0,zn=Oe.active_extruder===1?"L":"R",we=Oe.nozzle_rack?.find(mn=>mn.id===1),_t=Oe.nozzle_rack?.find(mn=>mn.id===0),ln=_t||we;return a.jsxs("div",{className:"flex items-stretch gap-1.5 flex-wrap",children:[a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-orange-400",isHeating:mt}),Oe.temperatures.nozzle_2!==void 0?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:"L / R"}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"° / ",Math.round(Oe.temperatures.nozzle_2||0),"°"]})]}):ln?a.jsx(Gae,{slot:ln,index:0,activeStatus:!0,filamentName:ln.filament_id?Ye?.[ln.filament_id]?.name:void 0,children:a.jsxs("div",{className:"cursor-default",children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"°C"]})]})}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"°C"]})]})]}),a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-blue-400",isHeating:Ht}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.bed")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.bed||0),"°C"]})]}),Oe.temperatures.chamber!==void 0&&a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-green-400",isHeating:Jt}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.chamber")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.chamber||0),"°C"]})]}),ot&&a.jsx(x7e,{leftSlot:we,rightSlot:_t,activeNozzle:zn,filamentInfo:Ye,children:a.jsxs("div",{className:"text-center px-3 py-1.5 bg-bambu-dark rounded-lg h-full flex flex-col justify-center items-center cursor-default",title:C("printers.activeNozzle",{nozzle:C(zn==="L"?"common.left":"common.right")}),children:[a.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[a.jsxs("span",{className:`text-[11px] font-bold ${zn==="L"?"text-amber-400":"text-gray-500"}`,children:["L",we?.nozzle_diameter?` ${we.nozzle_diameter}`:""]}),a.jsx("span",{className:"text-[9px] text-bambu-gray/40",children:"·"}),a.jsxs("span",{className:`text-[11px] font-bold ${zn==="R"?"text-amber-400":"text-gray-500"}`,children:["R",_t?.nozzle_diameter?` ${_t.nozzle_diameter}`:""]})]}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")})]})}),Oe.nozzle_rack&&Oe.nozzle_rack.some(mn=>mn.id>=2)&&a.jsx(y7e,{slots:Oe.nozzle_rack,filamentInfo:Ye})]})})(),r==="expanded"&&(()=>{const mt=Oe.state==="RUNNING",Ht=Oe.state==="PAUSE",Jt=mt||Ht,ot=fl.isPending||pc.isPending||Ya.isPending,zn=Oe.cooling_fan_speed,we=Oe.big_fan1_speed,_t=Oe.big_fan2_speed;return a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx("span",{className:"text-[10px] uppercase tracking-wider text-bambu-gray font-medium",children:C("printers.controls")}),a.jsx("div",{className:"flex-1 h-px bg-bambu-dark-tertiary/30"})]}),a.jsxs("div",{className:"flex items-center justify-between gap-2 max-[550px]:items-start",children:[a.jsxs("div",{className:"flex items-center gap-2 min-w-0 max-[550px]:flex-wrap max-[550px]:items-start max-[550px]:gap-1.5",children:[a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${zn&&zn>0?"bg-cyan-500/10":"bg-bambu-dark"}`,title:C("printers.fans.partCooling"),children:[a.jsx(kQ,{className:`w-3.5 h-3.5 ${zn&&zn>0?"text-cyan-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${zn&&zn>0?"text-cyan-400":"text-bambu-gray/50"}`,children:[zn??0,"%"]})]}),a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${we&&we>0?"bg-blue-500/10":"bg-bambu-dark"}`,title:C("printers.fans.auxiliary"),children:[a.jsx(UQ,{className:`w-3.5 h-3.5 ${we&&we>0?"text-blue-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${we&&we>0?"text-blue-400":"text-bambu-gray/50"}`,children:[we??0,"%"]})]}),a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${_t&&_t>0?"bg-green-500/10":"bg-bambu-dark"}`,title:C("printers.fans.chamber"),children:[a.jsx(ape,{className:`w-3.5 h-3.5 ${_t&&_t>0?"text-green-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${_t&&_t>0?"text-green-400":"text-bambu-gray/50"}`,children:[_t??0,"%"]})]}),a.jsx("div",{className:"w-px h-5 bg-bambu-gray/30"}),["P2S","H2D","H2C","H2S"].includes(t.model??"")&&(()=>{const ln=Oe.airduct_mode===1,mn=ln?Pu:vH,zt=ln?"text-orange-400":"text-sky-400",dn=ln?"bg-orange-500/10 hover:bg-orange-500/20":"bg-sky-500/10 hover:bg-sky-500/20";return a.jsxs("div",{className:"relative",children:[a.jsxs("button",{onClick:()=>V(I===t.id?null:t.id),disabled:!k("printers:control"),className:`flex items-center gap-1 px-1.5 py-1 rounded transition-colors ${dn} disabled:opacity-50 disabled:cursor-not-allowed`,title:C("printers.airduct.title"),children:[a.jsx(mn,{className:`w-3.5 h-3.5 ${zt}`}),a.jsx("span",{className:`text-[10px] ${zt}`,children:C(ln?"printers.airduct.heating":"printers.airduct.cooling")})]}),I===t.id&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>V(null)}),a.jsx("div",{className:"absolute bottom-full left-0 mb-1 z-50 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg py-1 min-w-[130px]",children:[{mode:"cooling",label:C("printers.airduct.cooling"),modeId:0},{mode:"heating",label:C("printers.airduct.heating"),modeId:1}].map(({mode:ur,label:$n,modeId:xi})=>a.jsxs("button",{onClick:()=>{$d.mutate(ur),V(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors flex items-center gap-2 ${Oe.airduct_mode===xi?"text-bambu-green bg-bambu-green/10":"text-white hover:bg-bambu-dark-tertiary"}`,children:[ur==="heating"?a.jsx(Pu,{className:"w-3 h-3"}):a.jsx(vH,{className:"w-3 h-3"}),$n]},ur))})]})]})})(),(()=>{const mn={1:"50%",2:"100%",3:"124%",4:"166%"}[Oe.speed_level]||"100%";return a.jsxs("div",{className:"relative",children:[a.jsxs("button",{onClick:()=>he(B===t.id?null:t.id),disabled:!Jt||!k("printers:control"),className:`flex items-center gap-1 px-1.5 py-1 rounded transition-colors ${Jt?"bg-amber-500/10 hover:bg-amber-500/20":"bg-bambu-dark cursor-not-allowed"}`,title:Jt?C("printers.speed.title"):void 0,children:[a.jsx(Ew,{className:`w-3.5 h-3.5 ${Jt?"text-amber-400":"text-bambu-gray/50"}`}),a.jsx("span",{className:`text-[10px] ${Jt?"text-amber-400":"text-bambu-gray/50"}`,children:mn})]}),B===t.id&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>he(null)}),a.jsx("div",{className:"absolute bottom-full left-0 mb-1 z-50 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg py-1 min-w-[130px]",children:[{mode:1,label:C("printers.speed.silent")},{mode:2,label:C("printers.speed.standard")},{mode:3,label:C("printers.speed.sport")},{mode:4,label:C("printers.speed.ludicrous")}].map(({mode:zt,label:dn})=>a.jsx("button",{onClick:()=>{Np.mutate(zt),he(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors ${Oe.speed_level===zt?"text-bambu-green bg-bambu-green/10":"text-white hover:bg-bambu-dark-tertiary"}`,children:dn},zt))})]})]})})()]}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0 max-[550px]:self-start",children:[a.jsxs("button",{onClick:()=>j(!0),disabled:!Jt||ot||!k("printers:control"),className:` + `,style:{maxWidth:"calc(100vw - 24px)"},onMouseEnter:P,onMouseLeave:F,children:a.jsxs("div",{className:"w-52 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-xl overflow-hidden backdrop-blur-sm p-2.5 space-y-2",children:[a.jsx("div",{className:"text-[10px] uppercase tracking-wider text-bambu-gray font-medium",children:n}),a.jsxs("div",{className:"flex items-center justify-between gap-2",children:[a.jsx("span",{className:"text-[10px] tracking-wide text-bambu-gray font-medium shrink-0",children:l("printers.amsPopup.serialNumber")}),a.jsx("span",{className:"text-[10px] text-white font-mono truncate",children:t.serial_number||"—"})]}),a.jsxs("div",{className:"flex items-center justify-between gap-2",children:[a.jsx("span",{className:"text-[10px] tracking-wide text-bambu-gray font-medium shrink-0",children:l("printers.amsPopup.firmwareVersion")}),a.jsx("span",{className:"text-[10px] text-white font-mono truncate",children:t.sw_ver||"—"})]}),a.jsx("div",{className:"h-px bg-bambu-dark-tertiary/50"}),a.jsxs("div",{className:"space-y-1",children:[a.jsx("span",{className:"text-[10px] text-bambu-gray font-medium block",children:l("printers.amsPopup.friendlyName")}),a.jsx("input",{type:"text",value:p,onChange:H=>i&&f(H.target.value),onKeyDown:H=>H.key==="Enter"&&k(),onFocus:()=>N(!0),onBlur:()=>{N(!1),A.current&&clearTimeout(A.current),A.current=setTimeout(()=>d(!1),200)},placeholder:i?l("printers.amsPopup.friendlyNamePlaceholder"):r?.[t.id]||"—",disabled:!i,title:i?void 0:l("printers.amsPopup.noEditPermission"),className:"w-full bg-bambu-dark border border-bambu-dark-tertiary rounded px-2 py-1 text-xs text-white placeholder-bambu-gray/60 focus:outline-none focus:border-bambu-green disabled:opacity-50 disabled:cursor-not-allowed",maxLength:100}),i&&a.jsxs("div",{className:"space-y-1",children:[g&&a.jsx("p",{className:"text-[10px] text-red-400 break-words",children:g}),a.jsxs("div",{className:"flex gap-1 justify-end",children:[a.jsx("button",{onClick:k,disabled:x,className:"px-2 py-0.5 text-[10px] bg-bambu-green text-white rounded hover:bg-bambu-green/80 disabled:opacity-50",children:l("printers.amsPopup.save")}),r?.[t.id]&&a.jsx("button",{onClick:D,disabled:x,className:"px-2 py-0.5 text-[10px] bg-bambu-dark-tertiary text-bambu-gray rounded hover:bg-bambu-dark-tertiary/70 disabled:opacity-50",children:l("printers.amsPopup.clear")})]})]})]})]})})]})}const oL={PLA:{n3f:45,n3s:45,n3f_hours:12,n3s_hours:12},PETG:{n3f:65,n3s:65,n3f_hours:12,n3s_hours:12},TPU:{n3f:65,n3s:75,n3f_hours:12,n3s_hours:18},ABS:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},ASA:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},PA:{n3f:65,n3s:85,n3f_hours:12,n3s_hours:12},PC:{n3f:65,n3s:80,n3f_hours:12,n3s_hours:8},PVA:{n3f:65,n3s:85,n3f_hours:12,n3s_hours:18}};function nK({printer:t,hideIfDisconnected:e,maintenanceInfo:n,viewMode:r="expanded",cardSize:i=2,amsThresholds:s,spoolmanEnabled:o=!1,linkedSpools:l,spoolmanUrl:c,spoolmanSyncMode:d,onGetAssignment:u,onUnassignSpool:m,timeFormat:p="system",cameraViewMode:f="window",onOpenEmbeddedCamera:x,checkPrinterFirmware:v=!0,dryingPresets:g=oL,requirePlateClear:b=!0,selectionMode:_=!1,isSelected:N=!1,onToggleSelect:T}){const{t:C}=Rt(),A=sn(),P=Eo(),{showToast:F}=xn(),{hasPermission:k}=vr(),[D,H]=w.useState(!1),[z,X]=w.useState(!1),[L,ne]=w.useState(!0),[ie,ee]=w.useState(!1),[ue,le]=w.useState(!1),[oe,W]=w.useState(!1),[re,ce]=w.useState(!1),[xe,Ne]=w.useState(!1),[$,Y]=w.useState(!1),[E,j]=w.useState(!1),[O,K]=w.useState(!1),[B,he]=w.useState(null),[I,V]=w.useState(null),[Q,G]=w.useState(!1),[J,se]=w.useState(!1),[fe,pe]=w.useState(!1),[de,U]=w.useState(!1),R=w.useCallback(()=>U(!1),[]),[ae,_e]=w.useState(null),[Se,ye]=w.useState(null),[Ae,ve]=w.useState("n3f"),[je,Re]=w.useState("PLA"),[Ee,Te]=w.useState(50),[Me,Be]=w.useState(4),[Ke,tt]=w.useState(!1),[te,Ie]=w.useState(null),[be,$e]=w.useState(!1),[He,ge]=w.useState(!1),Pe=w.useRef(0),[qe,Ze]=w.useState(null),[dt,vt]=w.useState(null),[wt,$t]=w.useState(null),[Qt,en]=w.useState(null),[Xt,tn]=w.useState(!1),[Ge,Ft]=w.useState(null),[Yt,Pt]=w.useState(!1),[pt,Wt]=w.useState(!1),[Ut,ze]=w.useState(null),[st,ht]=w.useState(!1),[rt,Le]=w.useState(!1),{data:Oe}=Qe({queryKey:["printerStatus",t.id],queryFn:()=>me.getPrinterStatus(t.id),refetchInterval:3e4}),{data:Ce}=Qe({queryKey:["firmwareUpdate",t.id],queryFn:()=>Sk.checkPrinterUpdate(t.id),staleTime:300*1e3,refetchInterval:300*1e3,enabled:v&&k("firmware:read")}),We=w.useMemo(()=>{const mt=new Set;if(Oe?.ams)for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])Jt.tray_info_idx&&mt.add(Jt.tray_info_idx);for(const Ht of Oe?.vt_tray??[])Ht.tray_info_idx&&mt.add(Ht.tray_info_idx);if(Oe?.nozzle_rack)for(const Ht of Oe.nozzle_rack)Ht.filament_id&&mt.add(Ht.filament_id);return Array.from(mt)},[Oe?.ams,Oe?.vt_tray,Oe?.nozzle_rack]),Je=w.useMemo(()=>{const mt=new Set;if(Oe?.ams)for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])Jt.tray_type&&mt.add(Jt.tray_type.toUpperCase());for(const Ht of Oe?.vt_tray??[])Ht.tray_type&&mt.add(Ht.tray_type.toUpperCase());return mt},[Oe?.ams,Oe?.vt_tray]),Xe=w.useMemo(()=>{const mt=new Set;if(Oe?.ams){for(const Ht of Oe.ams)for(const Jt of Ht.tray||[])if(Jt.tray_type&&Jt.tray_color){const ot=Jt.tray_color.replace("#","").toLowerCase().slice(0,6);mt.add(`${Jt.tray_type.toUpperCase()}:${ot}`)}}for(const Ht of Oe?.vt_tray??[])if(Ht.tray_type&&Ht.tray_color){const Jt=Ht.tray_color.replace("#","").toLowerCase().slice(0,6);mt.add(`${Ht.tray_type.toUpperCase()}:${Jt}`)}return mt},[Oe?.ams,Oe?.vt_tray]),{data:Ye}=Qe({queryKey:["filamentInfo",We],queryFn:()=>me.getFilamentInfo(We),enabled:We.length>0,staleTime:300*1e3}),{data:St}=Qe({queryKey:["slotPresets",t.id],queryFn:()=>me.getSlotPresets(t.id),staleTime:120*1e3}),{data:et,refetch:jt}=Qe({queryKey:["amsLabels",t.id],queryFn:()=>me.getAmsLabels(t.id),staleTime:300*1e3}),[bt,Ve]=w.useState(null);w.useEffect(()=>{Oe?.wifi_signal!=null&&Ve(Oe.wifi_signal)},[Oe?.wifi_signal]);const gt=Oe?.wifi_signal??bt,Et=w.useRef(void 0);w.useEffect(()=>{Oe?.connected!==void 0&&(Et.current=Oe.connected)},[Oe?.connected]);const Gt=Oe?.connected??Et.current,on=w.useRef({});w.useEffect(()=>{Oe?.ams_extruder_map&&Object.keys(Oe.ams_extruder_map).length>0&&(on.current=Oe.ams_extruder_map)},[Oe?.ams_extruder_map]);const fn=Oe?.ams_extruder_map&&Object.keys(Oe.ams_extruder_map).length>0?Oe.ams_extruder_map:on.current,Rn=w.useRef([]);w.useEffect(()=>{Oe?.ams&&Oe.ams.length>0&&(Rn.current=Oe.ams)},[Oe?.ams]);const yn=Oe?.ams&&Oe.ams.length>0?Oe.ams:Rn.current,hn=w.useRef(void 0),bn=Oe?.tray_now;bn!==void 0&&bn!==255?hn.current=bn:bn===255&&(hn.current=void 0);const Nn=bn!==void 0&&bn!==255?bn:hn.current,{data:Pn}=Qe({queryKey:["smartPlugByPrinter",t.id],queryFn:()=>me.getSmartPlugByPrinter(t.id)}),{data:kr}=Qe({queryKey:["scriptPlugsByPrinter",t.id],queryFn:()=>me.getScriptPlugsByPrinter(t.id)}),{data:Sn}=Qe({queryKey:["smartPlugStatus",Pn?.id],queryFn:()=>Pn?me.getSmartPlugStatus(Pn.id):null,enabled:!!Pn,refetchInterval:1e4}),{data:Ca}=Qe({queryKey:["queue",t.id,"pending"],queryFn:()=>me.getQueue(t.id,"pending")}),Ln=w.useMemo(()=>Ca?.length?SJ(Ca,Je,Xe).length:0,[Ca,Je,Xe]),{data:xa}=Qe({queryKey:["queue",t.id,"printing"],queryFn:()=>me.getQueue(t.id,"printing"),enabled:Oe?.state==="RUNNING"}),{data:ca}=Qe({queryKey:["currentPrintUser",t.id],queryFn:()=>me.getCurrentPrintUser(t.id),enabled:Oe?.state==="RUNNING"}),Yr=xa?.[0]?.created_by_username||ca?.username,{data:ia}=Qe({queryKey:["archives",t.id,"last"],queryFn:()=>me.getArchives(t.id,1,0),enabled:Oe?.connected&&Oe?.state!=="RUNNING"}),Pa=ia?.[0],Gi=e&&Gt===!1,Sm=it({mutationFn:mt=>me.deletePrinter(t.id,mt.deleteArchives),onSuccess:()=>{A.invalidateQueries({queryKey:["printers"]}),A.invalidateQueries({queryKey:["archives"]}),A.invalidateQueries({queryKey:["maintenanceOverview"]})},onError:mt=>F(mt.message||C("printers.toast.failedToDelete"),"error")}),qd=it({mutationFn:()=>me.connectPrinter(t.id),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]})}}),pl=it({mutationFn:()=>me.refreshPrinterStatus(t.id),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]}),F(C("printers.forceRefreshSuccess"),"success")},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),xt=it({mutationFn:mt=>me.unlinkSpool(mt),onSuccess:mt=>{F(C("spoolman.unlinkSuccess")||mt?.message,"success"),A.invalidateQueries({queryKey:["linked-spools"]}),A.invalidateQueries({queryKey:["unlinked-spools"]})},onError:mt=>{F(mt.message||C("spoolman.unlinkFailed"),"error")}}),Wn=it({mutationFn:({amsId:mt,temp:Ht,duration:Jt,filament:ot,rotateTray:zn})=>me.startDrying(t.id,mt,Ht,Jt,ot,zn),onSuccess:()=>{ye(null),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),Qn=it({mutationFn:mt=>me.stopDrying(t.id,mt),onSuccess:()=>{A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToSendCommand"),"error")}),qt=it({mutationFn:mt=>Pn?me.controlSmartPlug(Pn.id,mt):Promise.reject("No plug"),onSuccess:()=>{A.invalidateQueries({queryKey:["smartPlugStatus",Pn?.id]})}}),Wc=it({mutationFn:mt=>Pn?me.updateSmartPlug(Pn.id,{auto_off:mt}):Promise.reject("No plug"),onSuccess:()=>{A.invalidateQueries({queryKey:["smartPlugByPrinter",t.id]}),A.invalidateQueries({queryKey:["smart-plugs"]})}}),Wi=it({mutationFn:({id:mt,action:Ht})=>me.controlSmartPlug(mt,Ht),onSuccess:()=>{F(C("printers.toast.scriptTriggered"))},onError:mt=>F(mt.message||C("printers.toast.failedToRunScript"),"error")}),fl=it({mutationFn:()=>me.stopPrint(t.id),onSuccess:()=>{F(C("printers.toast.printStopped")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToStopPrint"),"error")}),pc=it({mutationFn:()=>me.pausePrint(t.id),onSuccess:()=>{F(C("printers.toast.printPaused")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToPausePrint"),"error")}),Ya=it({mutationFn:()=>me.resumePrint(t.id),onSuccess:()=>{F(C("printers.toast.printResumed")),A.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:mt=>F(mt.message||C("printers.toast.failedToResumePrint"),"error")}),_m=it({mutationFn:mt=>me.setChamberLight(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,chamber_light:mt})),{previousStatus:Ht}},onSuccess:(mt,Ht)=>{F(`Chamber light ${Ht?"on":"off"}`)},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToControlChamberLight"),"error")}}),Np=it({mutationFn:mt=>me.setPrintSpeed(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,speed_level:mt})),{previousStatus:Ht}},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToSetSpeed"),"error")}}),$d=it({mutationFn:mt=>me.setAirductMode(t.id,mt),onMutate:async mt=>{await A.cancelQueries({queryKey:["printerStatus",t.id]});const Ht=A.getQueryData(["printerStatus",t.id]);return A.setQueryData(["printerStatus",t.id],Jt=>({...Jt,airduct_mode:mt==="cooling"?0:1})),{previousStatus:Ht}},onError:(mt,Ht,Jt)=>{Jt?.previousStatus&&A.setQueryData(["printerStatus",t.id],Jt.previousStatus),F(mt.message||C("printers.toast.failedToSendCommand"),"error")}}),Ki=it({mutationFn:mt=>me.updatePrinter(t.id,{plate_detection_enabled:mt}),onSuccess:()=>{A.invalidateQueries({queryKey:["printers"]}),F(Ki.variables?C("printers.toast.plateCheckEnabled"):C("printers.toast.plateCheckDisabled"))},onError:mt=>F(mt.message||C("printers.toast.failedToUpdateSetting"),"error")}),km=(Oe?.state==="RUNNING"||Oe?.state==="PAUSE")&&(Oe?.printable_objects_count??0)>=2,{data:ys}=Qe({queryKey:["printableObjects",t.id],queryFn:()=>me.getPrintableObjects(t.id),enabled:J||km,refetchInterval:J?5e3:km?3e4:!1}),[Xi,Is]=w.useState(null),gl=w.useRef(!1),Qa=w.useRef(null),bl=w.useRef(!1),Vd=it({mutationFn:({amsId:mt,slotId:Ht})=>me.refreshAmsSlot(t.id,mt,Ht),onMutate:({amsId:mt,slotId:Ht})=>{Qa.current&&clearTimeout(Qa.current),gl.current=!1,bl.current=!1,Is({amsId:mt,slotId:Ht}),setTimeout(()=>{bl.current=!0},2e3),Qa.current=setTimeout(()=>{Is(null)},3e4)},onSuccess:mt=>{F(mt.message||C("printers.toast.rfidRereadInitiated"))},onError:mt=>{F(mt.message||C("printers.toast.failedToRereadRfid"),"error"),Qa.current&&clearTimeout(Qa.current),Is(null)}}),[xl,bi]=w.useState(null),[zs,fc]=w.useState(null),Lo=async()=>{try{const mt=await me.getPlateReferences(t.id);bi(mt)}catch{}},Cp=()=>{Ki.mutate(!t.plate_detection_enabled)},yl=async()=>{Pt(!0),Ft(null);const mt=Oe?.chamber_light===!1;Le(mt),mt&&(await me.setChamberLight(t.id,!0),await new Promise(Ht=>setTimeout(Ht,2500)));try{const Ht=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Ht),Lo()}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.failedToCheckPlate"),"error"),mt&&(await me.setChamberLight(t.id,!1),Le(!1))}finally{Pt(!1)}},lo=w.useCallback(async()=>{Ft(null),rt&&(await me.setChamberLight(t.id,!1),Le(!1))},[rt,t.id]),vl=async mt=>{Wt(!0);try{const Ht=await me.calibratePlateDetection(t.id,{label:mt});if(Ht.success){F(Ht.message||C("printers.toast.calibrationSaved"),"success"),Lo();const Jt=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Jt)}else F(Ht.message||C("printers.toast.calibrationFailed"),"error")}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.calibrationFailed"),"error")}finally{Wt(!1)}},Oo=async(mt,Ht)=>{try{await me.updatePlateReferenceLabel(t.id,mt,Ht),fc(null),Lo()}catch(Jt){F(Jt instanceof Error?Jt.message:C("printers.toast.failedToUpdateLabel"),"error")}},Kc=async mt=>{try{await me.deletePlateReference(t.id,mt),F(C("printers.toast.referenceDeleted"),"success"),Lo();const Ht=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(Ht)}catch(Ht){F(Ht instanceof Error?Ht.message:C("printers.toast.failedToDeleteReference"),"error")}},Nm=async()=>{if(Ut){ht(!0);try{await me.updatePrinter(t.id,{plate_detection_roi:Ut}),F(C("printers.toast.detectionAreaSaved"),"success"),ze(null);const mt=await me.checkPlateEmpty(t.id,{includeDebugImage:!0});Ft(mt)}catch(mt){F(mt instanceof Error?mt.message:C("printers.toast.failedToSaveDetectionArea"),"error")}finally{ht(!1)}}};w.useEffect(()=>{const mt=Ht=>{Ht.key==="Escape"&&Ge&&lo()};return window.addEventListener("keydown",mt),()=>window.removeEventListener("keydown",mt)},[Ge,lo]);const co=w.useRef(null);w.useEffect(()=>{if(!Xi)return;const mt=Oe?.ams_status_main??0;return mt!==0&&(gl.current=!0,co.current&&(clearTimeout(co.current),co.current=null)),gl.current&&mt===0&&(bl.current?(Qa.current&&clearTimeout(Qa.current),Is(null)):co.current||(co.current=setTimeout(()=>{Qa.current&&clearTimeout(Qa.current),Is(null)},2e3))),()=>{co.current&&clearTimeout(co.current)}},[Oe?.ams_status_main,Xi]);const[uo,Io]=w.useState(null);if(Gi)return null;const Pg=()=>{switch(i){case 1:return"w-10 h-10";case 2:return"w-14 h-14";case 3:return"w-16 h-16";case 4:return"w-20 h-20";default:return"w-14 h-14"}},_n=()=>{switch(i){case 1:return"text-base truncate";case 2:return"text-lg";case 3:return"text-xl";case 4:return"text-2xl";default:return"text-lg"}},Ty=()=>{switch(i){case 1:return"mb-2";case 2:return"mb-4";case 3:return"mb-5";case 4:return"mb-6";default:return"mb-4"}},Xc=Gt&&Oe?.state!=="RUNNING"&&Oe?.state!=="PAUSE"&&k("printers:control"),Tg=mt=>{mt.preventDefault(),Pe.current++,Pe.current===1&&$e(!0)},Cm=mt=>{mt.preventDefault(),mt.dataTransfer.dropEffect=Xc?"copy":"none"},Ag=mt=>{mt.preventDefault(),Pe.current--,Pe.current===0&&$e(!1)},Ay=async mt=>{if(mt.preventDefault(),Pe.current=0,$e(!1),!Xc)return;const Jt=Array.from(mt.dataTransfer.files)[0];if(!Jt)return;const ot=Jt.name.toLowerCase();if(!ot.endsWith(".gcode")&&!ot.includes(".gcode.")){F(C("printers.dropNotPrintable","Only .gcode and .gcode.3mf files can be printed"),"error");return}ge(!0);try{const zn=await me.uploadLibraryFile(Jt,null),we=zn.metadata?.sliced_for_model,_t=x0(t.model);if(we&&_t&&we.toLowerCase()!==_t.toLowerCase()){await me.deleteLibraryFile(zn.id).catch(()=>{}),F(C("printers.incompatibleFile","This file was sliced for {{slicedFor}}, but this printer is a {{printerModel}}",{slicedFor:we,printerModel:_t}),"error");return}_e({id:zn.id,filename:zn.filename})}catch{F(C("common.uploadFailed","Upload failed"),"error")}finally{ge(!1)}};return a.jsxs(At,{className:`relative ${N?"ring-2 ring-bambu-green":""} ${_?"cursor-pointer":""}`,onDragEnter:Tg,onDragOver:Cm,onDragLeave:Ag,onDrop:Ay,children:[_&&a.jsx("div",{className:"absolute inset-0 z-20 flex items-start p-2",onClick:mt=>{mt.stopPropagation(),T?.(t.id)},children:N?a.jsx(bs,{className:"w-5 h-5 text-bambu-green"}):a.jsx(eo,{className:"w-5 h-5 text-bambu-gray"})}),(be||He)&&a.jsx("div",{className:`absolute inset-0 z-10 rounded-xl border-2 border-dashed flex items-center justify-center transition-colors ${He?"bg-bambu-green/10 border-bambu-green/50":Xc?"bg-bambu-green/10 border-bambu-green":"bg-red-500/10 border-red-500/50"}`,children:a.jsx("div",{className:"text-center",children:He?a.jsxs(a.Fragment,{children:[a.jsx(ut,{className:"w-8 h-8 mx-auto mb-2 text-bambu-green animate-spin"}),a.jsx("p",{className:"text-sm font-medium text-bambu-green",children:C("common.uploading","Uploading...")})]}):Xc?a.jsxs(a.Fragment,{children:[a.jsx(Tr,{className:"w-8 h-8 mx-auto mb-2 text-bambu-green"}),a.jsx("p",{className:"text-sm font-medium text-bambu-green",children:C("printers.dropToPrint","Drop to print")})]}):a.jsxs(a.Fragment,{children:[a.jsx(Bt,{className:"w-8 h-8 mx-auto mb-2 text-red-400"}),a.jsx("p",{className:"text-sm font-medium text-red-400",children:C("printers.cannotPrint","Printer busy")})]})})}),a.jsxs(Mt,{className:i>=3?"p-5":"",children:[a.jsxs("div",{className:Ty(),children:[a.jsxs("div",{className:"flex items-start justify-between gap-2",children:[a.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[a.jsx("img",{src:vJ(t.model),alt:t.model||C("common.printer"),className:`object-contain rounded-lg bg-bambu-dark flex-shrink-0 ${Pg()}`}),a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("h3",{className:`font-semibold text-white ${_n()}`,children:t.name}),r==="compact"&&(()=>{const mt=Oe?.connected&&Oe.hms_errors?Iu(Oe.hms_errors):[],Ht=mt.some(we=>we.severity<=2),Jt=mt.length>0,ot=Oe?.connected?Ht?"bg-status-error":Jt?"bg-status-warning":"bg-status-ok":"bg-status-error",zn=Oe?.connected?Jt?`${mt.length} HMS ${mt.length===1?"error":"errors"}`:C("printers.connection.connected"):C("printers.connection.offline");return a.jsx("div",{className:`w-2 h-2 rounded-full flex-shrink-0 ${ot}`,title:zn})})()]}),a.jsxs("p",{className:"text-sm text-bambu-gray",children:[t.model||"Unknown Model",r==="expanded"&&Oe?.nozzles&&Oe.nozzles[0]?.nozzle_diameter&&a.jsxs("span",{className:"ml-1.5 text-bambu-gray",title:Oe.nozzles[0].nozzle_type||"Nozzle",children:["• ",Oe.nozzles[0].nozzle_diameter,"mm"]}),r==="expanded"&&n&&n.total_print_hours>0&&a.jsxs("span",{className:"ml-2 text-bambu-gray",children:[a.jsx(Yn,{className:"w-3 h-3 inline-block mr-1"}),Math.round(n.total_print_hours),"h"]})]})]})]}),a.jsxs("div",{className:"relative flex-shrink-0",children:[a.jsx(Fe,{variant:"ghost",size:"sm",onClick:()=>H(!D),children:a.jsx(Uh,{className:"w-4 h-4"})}),D&&a.jsxs("div",{className:"absolute right-0 mt-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-20",children:[a.jsxs("button",{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${k("printers:update")?"hover:bg-bambu-dark-tertiary":"opacity-50 cursor-not-allowed"}`,onClick:()=>{k("printers:update")&&(ee(!0),H(!1))},title:k("printers:update")?void 0:C("printers.permission.noEdit"),children:[a.jsx(ri,{className:"w-4 h-4"}),C("common.edit")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{U(!0),H(!1)},children:[a.jsx(ps,{className:"w-4 h-4"}),C("printers.printerInformation")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{qd.mutate(),H(!1)},children:[a.jsx(dr,{className:"w-4 h-4"}),C("printers.reconnect")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2 disabled:opacity-50",disabled:pl.isPending,onClick:()=>{pl.mutate(),H(!1)},children:[a.jsx(cN,{className:`w-4 h-4 ${pl.isPending?"animate-spin":""}`}),C("printers.forceRefresh")]}),a.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{W(!0),H(!1)},children:[a.jsx(OQ,{className:"w-4 h-4"}),C("printers.mqttDebug")]}),a.jsxs("button",{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${k("printers:delete")?"text-red-400 hover:bg-bambu-dark-tertiary":"text-red-400/50 cursor-not-allowed"}`,onClick:()=>{k("printers:delete")&&(X(!0),H(!1))},title:k("printers:delete")?void 0:C("printers.permission.noDelete"),children:[a.jsx(rn,{className:"w-4 h-4"}),C("common.delete")]})]})]})]}),r==="expanded"&&a.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[a.jsxs("span",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${Oe?.connected?"bg-status-ok/20 text-status-ok":"bg-status-error/20 text-status-error"}`,children:[Oe?.connected?a.jsx(oy,{className:"w-3 h-3"}):a.jsx(rp,{className:"w-3 h-3"}),Oe?.connected?C("printers.connection.connected"):C("printers.connection.offline")]}),Oe?.connected&&Oe?.wired_network&&a.jsxs("span",{className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-status-ok/20 text-status-ok",title:C("printers.connection.ethernet","Ethernet"),children:[a.jsx(fO,{className:"w-3 h-3"}),C("printers.connection.ethernet","Ethernet")]}),Oe?.connected&&!Oe?.wired_network&>!=null&&a.jsxs("span",{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${gt>=-50||gt>=-60?"bg-status-ok/20 text-status-ok":gt>=-70?"bg-status-warning/20 text-status-warning":gt>=-80?"bg-orange-500/20 text-orange-600":"bg-status-error/20 text-status-error"}`,title:`WiFi: ${gt} dBm - ${C(wJ(gt).labelKey)}`,children:[a.jsx(FQ,{className:"w-3 h-3"}),gt,"dBm"]}),Oe?.connected&&(()=>{const mt=Oe.hms_errors?Iu(Oe.hms_errors):[];return a.jsxs("button",{onClick:()=>Y(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${mt.length>0?mt.some(Ht=>Ht.severity<=2)?"bg-status-error/20 text-status-error":"bg-status-warning/20 text-status-warning":"bg-status-ok/20 text-status-ok"}`,title:C("printers.clickToViewHmsErrors"),children:[a.jsx(Fn,{className:"w-3 h-3"}),mt.length>0?mt.length:"OK"]})})(),n&&a.jsxs("button",{onClick:()=>P("/maintenance"),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${n.due_count>0?"bg-status-error/20 text-status-error":n.warning_count>0?"bg-status-warning/20 text-status-warning":"bg-status-ok/20 text-status-ok"}`,title:n.due_count>0||n.warning_count>0?`${n.due_count>0?`${n.due_count} maintenance due`:""}${n.due_count>0&&n.warning_count>0?", ":""}${n.warning_count>0?`${n.warning_count} due soon`:""} - Click to view`:C("printers.maintenanceUpToDate"),children:[a.jsx(Xf,{className:"w-3 h-3"}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:"OK"]}),Ln>0&&a.jsxs("button",{onClick:()=>P("/queue"),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-purple-500/20 text-purple-400 hover:opacity-80 transition-opacity",title:C("printers.queue.inQueue",{count:Ln}),children:[a.jsx(na,{className:"w-3 h-3"}),Ln]}),v&&Ce?.current_version&&Ce?.latest_version?a.jsxs("button",{onClick:()=>tn(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs hover:opacity-80 transition-opacity ${Ce.update_available?"bg-orange-500/20 text-orange-400":"bg-status-ok/20 text-status-ok"}`,title:Ce.update_available?C("printers.firmwareUpdateAvailable",{current:Ce.current_version,latest:Ce.latest_version}):C("printers.firmwareUpToDate",{version:Ce.current_version}),children:[Ce.update_available?a.jsx(ba,{className:"w-3 h-3"}):a.jsx(br,{className:"w-3 h-3"}),Ce.current_version]}):Oe?.firmware_version?a.jsx("span",{className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-bambu-dark-tertiary/50 text-bambu-gray",children:Oe.firmware_version}):null,Oe?.connected&&a.jsx("span",{className:`flex items-center px-2 py-1 rounded-full text-xs ${Oe.sdcard?"bg-status-ok/20 text-status-ok":"bg-red-500/20 text-red-400"}`,title:`${C("printers.sdCard")}: ${Oe.sdcard?C("printers.inserted"):C("printers.notInserted")}`,children:a.jsx(np,{className:"w-3 h-3"})}),Oe?.connected&&["X1C","X1","X1E","P1S","P1P","P2S","H2D","H2D Pro","H2C","H2S"].includes(t.model??"")&&a.jsx("span",{className:`flex items-center px-2 py-1 rounded-full text-xs ${Oe.door_open?"bg-yellow-500/20 text-yellow-400":"bg-status-ok/20 text-status-ok"}`,title:Oe.door_open?C("printers.door.open"):C("printers.door.closed"),children:Oe.door_open?a.jsx(Lfe,{className:"w-3 h-3"}):a.jsx(Ffe,{className:"w-3 h-3"})})]})]}),z&&a.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:a.jsx(At,{className:"w-full max-w-md mx-4",children:a.jsxs(Mt,{children:[a.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[a.jsx("div",{className:"p-2 rounded-full bg-red-500/20",children:a.jsx(Fn,{className:"w-5 h-5 text-red-400"})}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-lg font-semibold text-white",children:C("printers.confirm.deleteTitle")}),a.jsx("p",{className:"text-sm text-bambu-gray mt-1",children:C("printers.confirm.deleteMessage",{name:t.name})})]})]}),a.jsx("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:a.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",children:[a.jsx("input",{type:"checkbox",checked:L,onChange:mt=>ne(mt.target.checked),className:"mt-0.5 w-4 h-4 rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0"}),a.jsxs("div",{children:[a.jsx("span",{className:"text-sm text-white",children:C("printers.deleteArchives")}),a.jsx("p",{className:"text-xs text-bambu-gray mt-0.5",children:C(L?"printers.confirm.deleteArchivesNote":"printers.confirm.keepArchivesNote")})]})]})}),a.jsxs("div",{className:"flex justify-end gap-2",children:[a.jsx(Fe,{variant:"secondary",onClick:()=>{X(!1),ne(!0)},children:C("common.cancel")}),a.jsx(Fe,{variant:"danger",onClick:()=>{Sm.mutate({deleteArchives:L}),X(!1),ne(!0)},children:"Delete"})]})]})})}),Oe?.connected&&a.jsxs(a.Fragment,{children:[r==="compact"?a.jsx("div",{className:"mt-2",children:Oe.state==="RUNNING"||Oe.state==="PAUSE"?a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-1.5",children:a.jsx("div",{className:`${Oe.state==="PAUSE"?"bg-status-warning":"bg-bambu-green"} h-1.5 rounded-full transition-all`,style:{width:`${Oe.progress||0}%`}})}),a.jsxs("span",{className:"text-xs text-white",children:[Math.round(Oe.progress||0),"%"]})]}):a.jsx("p",{className:"text-xs text-bambu-gray",children:ND(Oe.state,Oe.stg_cur_name)})}):a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"mb-4 p-3 bg-bambu-dark rounded-lg relative",children:[a.jsxs("button",{onClick:()=>se(!0),disabled:!(Oe.state==="RUNNING"||Oe.state==="PAUSE")||(Oe.printable_objects_count??0)<2||!k("printers:control"),className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${(Oe.state==="RUNNING"||Oe.state==="PAUSE")&&(Oe.printable_objects_count??0)>=2&&k("printers:control")?"text-bambu-gray hover:text-white hover:bg-white/10":"text-bambu-gray/30 cursor-not-allowed"}`,title:k("printers:control")?Oe.state==="RUNNING"||Oe.state==="PAUSE"?(Oe.printable_objects_count??0)>=2?C("printers.skipObjects.tooltip"):C("printers.skipObjects.requiresMultiple"):C("printers.skipObjects.onlyWhilePrinting"):C("printers.permission.noControl"),children:[a.jsx($P,{className:"w-4 h-4"}),ys&&ys.skipped_count>0&&a.jsx("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-bold bg-red-500 text-white rounded-full",children:ys.skipped_count})]}),a.jsxs("div",{className:"flex gap-3",children:[a.jsx(N7e,{url:Oe.state==="RUNNING"||Oe.state==="PAUSE"?Oe.cover_url:null,printName:(Oe.state==="RUNNING"||Oe.state==="PAUSE")&&YW(Oe.subtask_name||Oe.current_print||null,Oe.gcode_file,C)||void 0}),a.jsx("div",{className:"flex-1 min-w-0",children:Oe.current_print&&(Oe.state==="RUNNING"||Oe.state==="PAUSE")?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:ND(Oe.state,Oe.stg_cur_name)}),a.jsx("p",{className:"text-white text-sm mb-2 truncate",children:YW(Oe.subtask_name||Oe.current_print||null,Oe.gcode_file,C)}),a.jsxs("div",{className:"flex items-center justify-between text-sm",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:a.jsx("div",{className:`${Oe.state==="PAUSE"?"bg-status-warning":"bg-bambu-green"} h-2 rounded-full transition-all`,style:{width:`${Oe.progress||0}%`}})}),a.jsxs("span",{className:"text-white",children:[Math.round(Oe.progress||0),"%"]})]}),a.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-bambu-gray",children:[Oe.remaining_time!=null&&Oe.remaining_time>0&&a.jsxs(a.Fragment,{children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(Yn,{className:"w-3 h-3"}),hs(Oe.remaining_time*60)]}),a.jsxs("span",{className:"text-bambu-green font-medium",title:C("printers.estimatedCompletion"),children:["ETA ",TO(Oe.remaining_time,p,C)]})]}),Oe.layer_num!=null&&Oe.total_layers!=null&&Oe.total_layers>0&&a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(na,{className:"w-3 h-3"}),Oe.layer_num,"/",Oe.total_layers]}),Yr&&a.jsxs("span",{className:"flex items-center gap-1",title:`Started by ${Yr}`,children:[a.jsx(am,{className:"w-3 h-3"}),Yr]})]})]}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:C("printers.sort.status")}),a.jsx("p",{className:"text-white text-sm mb-2",children:ND(Oe.state,Oe.stg_cur_name)}),a.jsxs("div",{className:"flex items-center justify-between text-sm",children:[a.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:a.jsx("div",{className:"bg-bambu-dark-tertiary h-2 rounded-full"})}),a.jsx("span",{className:"text-bambu-gray",children:"—"})]}),Pa?a.jsxs("p",{className:"text-xs text-bambu-gray mt-2 truncate",title:Pa.print_name||Pa.filename,children:["Last: ",Pa.print_name||Pa.filename,Pa.completed_at&&a.jsxs("span",{className:"ml-1 text-bambu-gray/60",children:["• ",Yf(Pa.completed_at,{month:"short",day:"numeric"})]})]}):a.jsx("p",{className:"text-xs text-bambu-gray mt-2",children:C("printers.readyToPrint")})]})})]})]}),a.jsx(UMe,{printerId:t.id,printerModel:t.model,printerState:Oe.state,awaitingPlateClear:Oe.awaiting_plate_clear,requirePlateClear:b,loadedFilamentTypes:Je,loadedFilaments:Xe})]}),Oe.temperatures&&r==="expanded"&&(()=>{const mt=Oe.temperatures.nozzle_heating||Oe.temperatures.nozzle_2_heating||!1,Ht=Oe.temperatures.bed_heating||!1,Jt=Oe.temperatures.chamber_heating||!1,ot=t.nozzle_count===2||Oe.temperatures.nozzle_2!==void 0,zn=Oe.active_extruder===1?"L":"R",we=Oe.nozzle_rack?.find(mn=>mn.id===1),_t=Oe.nozzle_rack?.find(mn=>mn.id===0),ln=_t||we;return a.jsxs("div",{className:"flex items-stretch gap-1.5 flex-wrap",children:[a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-orange-400",isHeating:mt}),Oe.temperatures.nozzle_2!==void 0?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:"L / R"}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"° / ",Math.round(Oe.temperatures.nozzle_2||0),"°"]})]}):ln?a.jsx(Gae,{slot:ln,index:0,activeStatus:!0,filamentName:ln.filament_id?Ye?.[ln.filament_id]?.name:void 0,children:a.jsxs("div",{className:"cursor-default",children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"°C"]})]})}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.nozzle||0),"°C"]})]})]}),a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-blue-400",isHeating:Ht}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.bed")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.bed||0),"°C"]})]}),Oe.temperatures.chamber!==void 0&&a.jsxs("div",{className:"text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center",children:[a.jsx(_D,{className:"w-3.5 h-3.5 mb-0.5",color:"text-green-400",isHeating:Jt}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.chamber")}),a.jsxs("p",{className:"text-[11px] text-white",children:[Math.round(Oe.temperatures.chamber||0),"°C"]})]}),ot&&a.jsx(x7e,{leftSlot:we,rightSlot:_t,activeNozzle:zn,filamentInfo:Ye,children:a.jsxs("div",{className:"text-center px-3 py-1.5 bg-bambu-dark rounded-lg h-full flex flex-col justify-center items-center cursor-default",title:C("printers.activeNozzle",{nozzle:C(zn==="L"?"common.left":"common.right")}),children:[a.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[a.jsxs("span",{className:`text-[11px] font-bold ${zn==="L"?"text-amber-400":"text-gray-500"}`,children:["L",we?.nozzle_diameter?` ${we.nozzle_diameter}`:""]}),a.jsx("span",{className:"text-[9px] text-bambu-gray/40",children:"·"}),a.jsxs("span",{className:`text-[11px] font-bold ${zn==="R"?"text-amber-400":"text-gray-500"}`,children:["R",_t?.nozzle_diameter?` ${_t.nozzle_diameter}`:""]})]}),a.jsx("p",{className:"text-[9px] text-bambu-gray",children:C("printers.temperatures.nozzle")})]})}),Oe.nozzle_rack&&Oe.nozzle_rack.some(mn=>mn.id>=2)&&a.jsx(y7e,{slots:Oe.nozzle_rack,filamentInfo:Ye})]})})(),r==="expanded"&&(()=>{const mt=Oe.state==="RUNNING",Ht=Oe.state==="PAUSE",Jt=mt||Ht,ot=fl.isPending||pc.isPending||Ya.isPending,zn=Oe.cooling_fan_speed,we=Oe.big_fan1_speed,_t=Oe.big_fan2_speed;return a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx("span",{className:"text-[10px] uppercase tracking-wider text-bambu-gray font-medium",children:C("printers.controls")}),a.jsx("div",{className:"flex-1 h-px bg-bambu-dark-tertiary/30"})]}),a.jsxs("div",{className:"flex items-center justify-between gap-2 max-[550px]:items-start",children:[a.jsxs("div",{className:"flex items-center gap-2 min-w-0 max-[550px]:flex-wrap max-[550px]:items-start max-[550px]:gap-1.5",children:[a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${zn&&zn>0?"bg-cyan-500/10":"bg-bambu-dark"}`,title:C("printers.fans.partCooling"),children:[a.jsx(kQ,{className:`w-3.5 h-3.5 ${zn&&zn>0?"text-cyan-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${zn&&zn>0?"text-cyan-400":"text-bambu-gray/50"}`,children:[zn??0,"%"]})]}),a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${we&&we>0?"bg-blue-500/10":"bg-bambu-dark"}`,title:C("printers.fans.auxiliary"),children:[a.jsx(UQ,{className:`w-3.5 h-3.5 ${we&&we>0?"text-blue-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${we&&we>0?"text-blue-400":"text-bambu-gray/50"}`,children:[we??0,"%"]})]}),a.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${_t&&_t>0?"bg-green-500/10":"bg-bambu-dark"}`,title:C("printers.fans.chamber"),children:[a.jsx(ape,{className:`w-3.5 h-3.5 ${_t&&_t>0?"text-green-400":"text-bambu-gray/50"}`}),a.jsxs("span",{className:`text-[10px] ${_t&&_t>0?"text-green-400":"text-bambu-gray/50"}`,children:[_t??0,"%"]})]}),a.jsx("div",{className:"w-px h-5 bg-bambu-gray/30"}),["P2S","H2D","H2C","H2S"].includes(t.model??"")&&(()=>{const ln=Oe.airduct_mode===1,mn=ln?Pu:vH,zt=ln?"text-orange-400":"text-sky-400",dn=ln?"bg-orange-500/10 hover:bg-orange-500/20":"bg-sky-500/10 hover:bg-sky-500/20";return a.jsxs("div",{className:"relative",children:[a.jsxs("button",{onClick:()=>V(I===t.id?null:t.id),disabled:!k("printers:control"),className:`flex items-center gap-1 px-1.5 py-1 rounded transition-colors ${dn} disabled:opacity-50 disabled:cursor-not-allowed`,title:C("printers.airduct.title"),children:[a.jsx(mn,{className:`w-3.5 h-3.5 ${zt}`}),a.jsx("span",{className:`text-[10px] ${zt}`,children:C(ln?"printers.airduct.heating":"printers.airduct.cooling")})]}),I===t.id&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>V(null)}),a.jsx("div",{className:"absolute bottom-full left-0 mb-1 z-50 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg py-1 min-w-[130px]",children:[{mode:"cooling",label:C("printers.airduct.cooling"),modeId:0},{mode:"heating",label:C("printers.airduct.heating"),modeId:1}].map(({mode:ur,label:$n,modeId:xi})=>a.jsxs("button",{onClick:()=>{$d.mutate(ur),V(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors flex items-center gap-2 ${Oe.airduct_mode===xi?"text-bambu-green bg-bambu-green/10":"text-white hover:bg-bambu-dark-tertiary"}`,children:[ur==="heating"?a.jsx(Pu,{className:"w-3 h-3"}):a.jsx(vH,{className:"w-3 h-3"}),$n]},ur))})]})]})})(),(()=>{const mn={1:"50%",2:"100%",3:"124%",4:"166%"}[Oe.speed_level]||"100%";return a.jsxs("div",{className:"relative",children:[a.jsxs("button",{onClick:()=>he(B===t.id?null:t.id),disabled:!Jt||!k("printers:control"),className:`flex items-center gap-1 px-1.5 py-1 rounded transition-colors ${Jt?"bg-amber-500/10 hover:bg-amber-500/20":"bg-bambu-dark cursor-not-allowed"}`,title:Jt?C("printers.speed.title"):void 0,children:[a.jsx(Ew,{className:`w-3.5 h-3.5 ${Jt?"text-amber-400":"text-bambu-gray/50"}`}),a.jsx("span",{className:`text-[10px] ${Jt?"text-amber-400":"text-bambu-gray/50"}`,children:mn})]}),B===t.id&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>he(null)}),a.jsx("div",{className:"absolute bottom-full left-0 mb-1 z-50 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg py-1 min-w-[130px]",children:[{mode:1,label:C("printers.speed.silent")},{mode:2,label:C("printers.speed.standard")},{mode:3,label:C("printers.speed.sport")},{mode:4,label:C("printers.speed.ludicrous")}].map(({mode:zt,label:dn})=>a.jsx("button",{onClick:()=>{Np.mutate(zt),he(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors ${Oe.speed_level===zt?"text-bambu-green bg-bambu-green/10":"text-white hover:bg-bambu-dark-tertiary"}`,children:dn},zt))})]})]})})()]}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0 max-[550px]:self-start",children:[a.jsxs("button",{onClick:()=>j(!0),disabled:!Jt||ot||!k("printers:control"),className:` flex items-center justify-center gap-1 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors ${Jt&&k("printers:control")?"bg-red-500/20 text-red-400 hover:bg-red-500/30":"bg-bambu-dark text-bambu-gray/50 cursor-not-allowed"} diff --git a/static/index.html b/static/index.html index 4dfc94483..f07bad87f 100644 --- a/static/index.html +++ b/static/index.html @@ -26,7 +26,7 @@ - +